10#include "PdfElement.h"
18class PODOFO_API PdfNameTreeBase :
public PdfDictionaryElement
20 template <
typename TElement>
21 friend class PdfNameTree;
24 PdfNameTreeBase(PdfDocument& doc);
25 PdfNameTreeBase(PdfObject& obj);
28 bool HasKey(
const std::string_view& key)
const;
31 void AddValue(
const PdfString& key, std::shared_ptr<PdfElement>&& value);
33 PdfElement* GetValue(
const std::string_view& key)
const;
35 void ToDictionary(PdfStringMap<std::shared_ptr<PdfElement>>& dict,
bool skipClear);
37 virtual PdfKnownNameTree GetType()
const = 0;
40 std::unique_ptr<PdfElement> createElement(PdfObject& obj)
const;
43 PdfStringHashMap<std::shared_ptr<PdfElement>> m_cache;
46template <
typename TElement>
47class PdfNameTree final :
public PdfNameTreeBase
49 friend class PdfNameTrees;
52 PdfNameTree(PdfDocument& doc)
53 : PdfNameTreeBase(doc) { }
55 PdfNameTree(PdfObject& obj)
56 : PdfNameTreeBase(obj) { }
59 using Map = PdfStringMap<std::shared_ptr<TElement>>;
62 void AddValue(
const PdfString& key, std::shared_ptr<TElement> value)
64 PdfNameTreeBase::AddValue(key, std::move(
reinterpret_cast<std::shared_ptr<PdfElement>&
>(value)));
67 TElement* GetValue(
const std::string_view& key)
69 return static_cast<TElement*
>(PdfNameTreeBase::GetValue(key));
72 const TElement* GetValue(
const std::string_view& key)
const
74 return static_cast<const TElement*
>(PdfNameTreeBase::GetValue(key));
77 void ToDictionary(Map& dict,
bool skipClear =
false)
79 PdfNameTreeBase::ToDictionary(
reinterpret_cast<PdfStringMap<std::shared_ptr<PdfElement>
>&>(dict), skipClear);
83 PdfKnownNameTree GetType()
const override
89 static constexpr PdfKnownNameTree getType()
91 if (std::is_same_v<TElement, PdfFileSpec>)
92 return PdfKnownNameTree::EmbeddedFiles;
93 else if (std::is_same_v<TElement, PdfDestination>)
94 return PdfKnownNameTree::Dests;
96 return PdfKnownNameTree::Unknown;
101using PdfDestinations = PdfNameTree<PdfDestination>;
102using PdfEmbeddedFiles = PdfNameTree<PdfFileSpec>;
SPDX-FileCopyrightText: (C) 2022 Francesco Pretto ceztko@gmail.com SPDX-License-Identifier: LGPL-2....
Definition basetypes.h:16