kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 1 | // Copyright 2016 The PDFium Authors |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | |
| 7 | #ifndef CORE_FPDFAPI_PARSER_CPDF_REFERENCE_H_ |
| 8 | #define CORE_FPDFAPI_PARSER_CPDF_REFERENCE_H_ |
| 9 | |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 10 | #include <set> |
| 11 | |
| 12 | #include "core/fpdfapi/parser/cpdf_object.h" |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 13 | #include "core/fxcrt/retain_ptr.h" |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 14 | #include "core/fxcrt/unowned_ptr.h" |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 15 | |
| 16 | class CPDF_IndirectObjectHolder; |
| 17 | |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 18 | class CPDF_Reference final : public CPDF_Object { |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 19 | public: |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 20 | CONSTRUCT_VIA_MAKE_RETAIN; |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 21 | |
| 22 | // CPDF_Object: |
| 23 | Type GetType() const override; |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 24 | RetainPtr<CPDF_Object> Clone() const override; |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 25 | ByteString GetString() const override; |
| 26 | float GetNumber() const override; |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 27 | int GetInteger() const override; |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 28 | CPDF_Reference* AsMutableReference() override; |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 29 | bool WriteTo(IFX_ArchiveStream* archive, |
| 30 | const CPDF_Encryptor* encryptor) const override; |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 31 | RetainPtr<CPDF_Reference> MakeReference( |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 32 | CPDF_IndirectObjectHolder* holder) const override; |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 33 | |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 34 | uint32_t GetRefObjNum() const { return m_RefObjNum; } |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 35 | bool HasIndirectObjectHolder() const { return !!m_pObjList; } |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 36 | void SetRef(CPDF_IndirectObjectHolder* pDoc, uint32_t objnum); |
| 37 | |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 38 | private: |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 39 | friend class CPDF_Dictionary; |
| 40 | |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 41 | CPDF_Reference(CPDF_IndirectObjectHolder* pDoc, uint32_t objnum); |
| 42 | ~CPDF_Reference() override; |
| 43 | |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 44 | const CPDF_Object* GetDirectInternal() const override; |
| 45 | const CPDF_Dictionary* GetDictInternal() const override; |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 46 | RetainPtr<CPDF_Object> CloneNonCyclic( |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 47 | bool bDirect, |
| 48 | std::set<const CPDF_Object*>* pVisited) const override; |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 49 | |
| 50 | const CPDF_Object* FastGetDirect() const; |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 51 | |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 52 | UnownedPtr<CPDF_IndirectObjectHolder> m_pObjList; |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 53 | uint32_t m_RefObjNum; |
| 54 | }; |
| 55 | |
| 56 | inline CPDF_Reference* ToReference(CPDF_Object* obj) { |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 57 | return obj ? obj->AsMutableReference() : nullptr; |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 58 | } |
| 59 | |
| 60 | inline const CPDF_Reference* ToReference(const CPDF_Object* obj) { |
| 61 | return obj ? obj->AsReference() : nullptr; |
| 62 | } |
| 63 | |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 64 | inline RetainPtr<CPDF_Reference> ToReference(RetainPtr<CPDF_Object> obj) { |
| 65 | return RetainPtr<CPDF_Reference>(ToReference(obj.Get())); |
| 66 | } |
| 67 | |
| 68 | inline RetainPtr<const CPDF_Reference> ToReference( |
| 69 | RetainPtr<const CPDF_Object> obj) { |
| 70 | return RetainPtr<const CPDF_Reference>(ToReference(obj.Get())); |
| 71 | } |
| 72 | |
Philip P. Moltmann | 4d3acf4 | 2017-03-20 11:05:52 -0700 | [diff] [blame] | 73 | #endif // CORE_FPDFAPI_PARSER_CPDF_REFERENCE_H_ |