// Copyright 2016 The PDFium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef CORE_FPDFDOC_CPDF_NAMETREE_H_ #define CORE_FPDFDOC_CPDF_NAMETREE_H_ #include #include #include "core/fxcrt/fx_string.h" #include "core/fxcrt/retain_ptr.h" class CPDF_Array; class CPDF_Dictionary; class CPDF_Document; class CPDF_Object; class CPDF_NameTree { public: CPDF_NameTree(const CPDF_NameTree&) = delete; CPDF_NameTree& operator=(const CPDF_NameTree&) = delete; ~CPDF_NameTree(); static std::unique_ptr Create(CPDF_Document* pDoc, const ByteString& category); // If necessary, create missing Names dictionary in |pDoc|, and/or missing // Names array in the dictionary that corresponds to |category|, if necessary. // Returns nullptr on failure. static std::unique_ptr CreateWithRootNameArray( CPDF_Document* pDoc, const ByteString& category); static std::unique_ptr CreateForTesting( CPDF_Dictionary* pRoot); static RetainPtr LookupNamedDest(CPDF_Document* doc, const ByteString& name); bool AddValueAndName(RetainPtr pObj, const WideString& name); bool DeleteValueAndName(size_t nIndex); RetainPtr LookupValueAndName(size_t nIndex, WideString* csName) const; RetainPtr LookupValue(const WideString& csName) const; size_t GetCount() const; CPDF_Dictionary* GetRootForTesting() const { return m_pRoot.Get(); } private: explicit CPDF_NameTree(RetainPtr pRoot); RetainPtr LookupNewStyleNamedDest(const ByteString& name); RetainPtr const m_pRoot; }; #endif // CORE_FPDFDOC_CPDF_NAMETREE_H_