| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 PDFium Authors. All rights reserved. | |
| 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_FPDF_PARSER_CPDF_OBJECT_H_ | |
| 8 #define CORE_FPDFAPI_FPDF_PARSER_CPDF_OBJECT_H_ | |
| 9 | |
| 10 #include <memory> | |
| 11 #include <set> | |
| 12 | |
| 13 #include "core/fxcrt/fx_string.h" | |
| 14 #include "core/fxcrt/fx_system.h" | |
| 15 | |
| 16 class CPDF_Array; | |
| 17 class CPDF_Boolean; | |
| 18 class CPDF_Dictionary; | |
| 19 class CPDF_Name; | |
| 20 class CPDF_Null; | |
| 21 class CPDF_Number; | |
| 22 class CPDF_Reference; | |
| 23 class CPDF_Stream; | |
| 24 class CPDF_String; | |
| 25 | |
| 26 class CPDF_Object { | |
| 27 public: | |
| 28 static const uint32_t kInvalidObjNum = static_cast<uint32_t>(-1); | |
| 29 enum Type { | |
| 30 BOOLEAN = 1, | |
| 31 NUMBER, | |
| 32 STRING, | |
| 33 NAME, | |
| 34 ARRAY, | |
| 35 DICTIONARY, | |
| 36 STREAM, | |
| 37 NULLOBJ, | |
| 38 REFERENCE | |
| 39 }; | |
| 40 | |
| 41 virtual Type GetType() const = 0; | |
| 42 uint32_t GetObjNum() const { return m_ObjNum; } | |
| 43 uint32_t GetGenNum() const { return m_GenNum; } | |
| 44 | |
| 45 // Create a deep copy of the object. | |
| 46 virtual CPDF_Object* Clone() const = 0; | |
| 47 // Create a deep copy of the object except any reference object be | |
| 48 // copied to the object it points to directly. | |
| 49 virtual CPDF_Object* CloneDirectObject() const; | |
| 50 virtual CPDF_Object* GetDirect() const; | |
| 51 | |
| 52 void Release(); | |
| 53 | |
| 54 virtual CFX_ByteString GetString() const; | |
| 55 virtual CFX_WideString GetUnicodeText() const; | |
| 56 virtual FX_FLOAT GetNumber() const; | |
| 57 virtual int GetInteger() const; | |
| 58 virtual CPDF_Dictionary* GetDict() const; | |
| 59 | |
| 60 virtual void SetString(const CFX_ByteString& str); | |
| 61 | |
| 62 virtual bool IsArray() const; | |
| 63 virtual bool IsBoolean() const; | |
| 64 virtual bool IsDictionary() const; | |
| 65 virtual bool IsName() const; | |
| 66 virtual bool IsNumber() const; | |
| 67 virtual bool IsReference() const; | |
| 68 virtual bool IsStream() const; | |
| 69 virtual bool IsString() const; | |
| 70 | |
| 71 virtual CPDF_Array* AsArray(); | |
| 72 virtual const CPDF_Array* AsArray() const; | |
| 73 virtual CPDF_Boolean* AsBoolean(); | |
| 74 virtual const CPDF_Boolean* AsBoolean() const; | |
| 75 virtual CPDF_Dictionary* AsDictionary(); | |
| 76 virtual const CPDF_Dictionary* AsDictionary() const; | |
| 77 virtual CPDF_Name* AsName(); | |
| 78 virtual const CPDF_Name* AsName() const; | |
| 79 virtual CPDF_Number* AsNumber(); | |
| 80 virtual const CPDF_Number* AsNumber() const; | |
| 81 virtual CPDF_Reference* AsReference(); | |
| 82 virtual const CPDF_Reference* AsReference() const; | |
| 83 virtual CPDF_Stream* AsStream(); | |
| 84 virtual const CPDF_Stream* AsStream() const; | |
| 85 virtual CPDF_String* AsString(); | |
| 86 virtual const CPDF_String* AsString() const; | |
| 87 | |
| 88 protected: | |
| 89 friend class CPDF_Array; | |
| 90 friend class CPDF_Dictionary; | |
| 91 friend class CPDF_Document; | |
| 92 friend class CPDF_IndirectObjectHolder; | |
| 93 friend class CPDF_Parser; | |
| 94 friend class CPDF_Reference; | |
| 95 friend class CPDF_Stream; | |
| 96 friend struct std::default_delete<CPDF_Object>; | |
| 97 | |
| 98 CPDF_Object() : m_ObjNum(0), m_GenNum(0) {} | |
| 99 virtual ~CPDF_Object(); | |
| 100 | |
| 101 CPDF_Object* CloneObjectNonCyclic(bool bDirect) const; | |
| 102 | |
| 103 // Create a deep copy of the object with the option to either | |
| 104 // copy a reference object or directly copy the object it refers to | |
| 105 // when |bDirect| is true. | |
| 106 // Also check cyclic reference against |pVisited|, no copy if it is found. | |
| 107 // Complex objects should implement their own CloneNonCyclic() | |
| 108 // function to properly check for possible loop. | |
| 109 virtual CPDF_Object* CloneNonCyclic( | |
| 110 bool bDirect, | |
| 111 std::set<const CPDF_Object*>* pVisited) const; | |
| 112 | |
| 113 uint32_t m_ObjNum; | |
| 114 uint32_t m_GenNum; | |
| 115 | |
| 116 private: | |
| 117 CPDF_Object(const CPDF_Object& src) {} | |
| 118 }; | |
| 119 | |
| 120 inline CPDF_Boolean* ToBoolean(CPDF_Object* obj) { | |
| 121 return obj ? obj->AsBoolean() : nullptr; | |
| 122 } | |
| 123 | |
| 124 inline const CPDF_Boolean* ToBoolean(const CPDF_Object* obj) { | |
| 125 return obj ? obj->AsBoolean() : nullptr; | |
| 126 } | |
| 127 | |
| 128 inline CPDF_Number* ToNumber(CPDF_Object* obj) { | |
| 129 return obj ? obj->AsNumber() : nullptr; | |
| 130 } | |
| 131 | |
| 132 inline const CPDF_Number* ToNumber(const CPDF_Object* obj) { | |
| 133 return obj ? obj->AsNumber() : nullptr; | |
| 134 } | |
| 135 | |
| 136 inline CPDF_String* ToString(CPDF_Object* obj) { | |
| 137 return obj ? obj->AsString() : nullptr; | |
| 138 } | |
| 139 | |
| 140 inline const CPDF_String* ToString(const CPDF_Object* obj) { | |
| 141 return obj ? obj->AsString() : nullptr; | |
| 142 } | |
| 143 | |
| 144 inline CPDF_Name* ToName(CPDF_Object* obj) { | |
| 145 return obj ? obj->AsName() : nullptr; | |
| 146 } | |
| 147 | |
| 148 inline const CPDF_Name* ToName(const CPDF_Object* obj) { | |
| 149 return obj ? obj->AsName() : nullptr; | |
| 150 } | |
| 151 | |
| 152 inline CPDF_Array* ToArray(CPDF_Object* obj) { | |
| 153 return obj ? obj->AsArray() : nullptr; | |
| 154 } | |
| 155 | |
| 156 inline const CPDF_Array* ToArray(const CPDF_Object* obj) { | |
| 157 return obj ? obj->AsArray() : nullptr; | |
| 158 } | |
| 159 | |
| 160 inline CPDF_Dictionary* ToDictionary(CPDF_Object* obj) { | |
| 161 return obj ? obj->AsDictionary() : nullptr; | |
| 162 } | |
| 163 | |
| 164 inline const CPDF_Dictionary* ToDictionary(const CPDF_Object* obj) { | |
| 165 return obj ? obj->AsDictionary() : nullptr; | |
| 166 } | |
| 167 inline CPDF_Reference* ToReference(CPDF_Object* obj) { | |
| 168 return obj ? obj->AsReference() : nullptr; | |
| 169 } | |
| 170 | |
| 171 inline const CPDF_Reference* ToReference(const CPDF_Object* obj) { | |
| 172 return obj ? obj->AsReference() : nullptr; | |
| 173 } | |
| 174 | |
| 175 inline CPDF_Stream* ToStream(CPDF_Object* obj) { | |
| 176 return obj ? obj->AsStream() : nullptr; | |
| 177 } | |
| 178 | |
| 179 inline const CPDF_Stream* ToStream(const CPDF_Object* obj) { | |
| 180 return obj ? obj->AsStream() : nullptr; | |
| 181 } | |
| 182 | |
| 183 #endif // CORE_FPDFAPI_FPDF_PARSER_CPDF_OBJECT_H_ | |
| OLD | NEW |