OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_ | 7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_ |
8 #define CORE_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_ | 8 #define CORE_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_ |
9 | 9 |
10 #include <set> | 10 #include <set> |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 CPDF_Reference* AsReference(); | 108 CPDF_Reference* AsReference(); |
109 const CPDF_Reference* AsReference() const; | 109 const CPDF_Reference* AsReference() const; |
110 | 110 |
111 CPDF_Stream* AsStream(); | 111 CPDF_Stream* AsStream(); |
112 const CPDF_Stream* AsStream() const; | 112 const CPDF_Stream* AsStream() const; |
113 | 113 |
114 CPDF_String* AsString(); | 114 CPDF_String* AsString(); |
115 const CPDF_String* AsString() const; | 115 const CPDF_String* AsString() const; |
116 | 116 |
117 protected: | 117 protected: |
118 CPDF_Object(FX_DWORD type) : m_Type(type), m_ObjNum(0), m_GenNum(0) {} | 118 explicit CPDF_Object(FX_DWORD type) |
| 119 : m_Type(type), m_ObjNum(0), m_GenNum(0) {} |
119 ~CPDF_Object() {} | 120 ~CPDF_Object() {} |
120 void Destroy(); | 121 void Destroy(); |
121 | 122 |
122 static const int OBJECT_REF_MAX_DEPTH = 128; | 123 static const int OBJECT_REF_MAX_DEPTH = 128; |
123 static int s_nCurRefDepth; | 124 static int s_nCurRefDepth; |
124 FX_DWORD m_Type; | 125 FX_DWORD m_Type; |
125 FX_DWORD m_ObjNum; | 126 FX_DWORD m_ObjNum; |
126 FX_DWORD m_GenNum; | 127 FX_DWORD m_GenNum; |
127 | 128 |
128 friend class CPDF_IndirectObjects; | 129 friend class CPDF_IndirectObjects; |
129 friend class CPDF_Parser; | 130 friend class CPDF_Parser; |
130 friend class CPDF_SyntaxParser; | 131 friend class CPDF_SyntaxParser; |
131 | 132 |
132 private: | 133 private: |
133 CPDF_Object(const CPDF_Object& src) {} | 134 CPDF_Object(const CPDF_Object& src) {} |
134 CPDF_Object* CloneInternal(FX_BOOL bDirect, | 135 CPDF_Object* CloneInternal(FX_BOOL bDirect, |
135 std::set<FX_DWORD>* visited) const; | 136 std::set<FX_DWORD>* visited) const; |
136 }; | 137 }; |
137 class CPDF_Boolean : public CPDF_Object { | 138 class CPDF_Boolean : public CPDF_Object { |
138 public: | 139 public: |
139 static CPDF_Boolean* Create(FX_BOOL value) { return new CPDF_Boolean(value); } | |
140 | |
141 CPDF_Boolean() : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(false) {} | 140 CPDF_Boolean() : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(false) {} |
142 CPDF_Boolean(FX_BOOL value) : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(value) {} | 141 explicit CPDF_Boolean(FX_BOOL value) |
| 142 : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(value) {} |
143 | 143 |
144 FX_BOOL Identical(CPDF_Boolean* pOther) const { | 144 FX_BOOL Identical(CPDF_Boolean* pOther) const { |
145 return m_bValue == pOther->m_bValue; | 145 return m_bValue == pOther->m_bValue; |
146 } | 146 } |
147 | 147 |
148 protected: | 148 protected: |
149 FX_BOOL m_bValue; | 149 FX_BOOL m_bValue; |
150 friend class CPDF_Object; | 150 friend class CPDF_Object; |
151 }; | 151 }; |
152 inline CPDF_Boolean* ToBoolean(CPDF_Object* obj) { | 152 inline CPDF_Boolean* ToBoolean(CPDF_Object* obj) { |
153 return obj ? obj->AsBoolean() : nullptr; | 153 return obj ? obj->AsBoolean() : nullptr; |
154 } | 154 } |
155 inline const CPDF_Boolean* ToBoolean(const CPDF_Object* obj) { | 155 inline const CPDF_Boolean* ToBoolean(const CPDF_Object* obj) { |
156 return obj ? obj->AsBoolean() : nullptr; | 156 return obj ? obj->AsBoolean() : nullptr; |
157 } | 157 } |
158 | 158 |
159 class CPDF_Number : public CPDF_Object { | 159 class CPDF_Number : public CPDF_Object { |
160 public: | 160 public: |
161 static CPDF_Number* Create(int value) { return new CPDF_Number(value); } | |
162 | |
163 static CPDF_Number* Create(FX_FLOAT value) { return new CPDF_Number(value); } | |
164 | |
165 static CPDF_Number* Create(const CFX_ByteStringC& str) { | |
166 return new CPDF_Number(str); | |
167 } | |
168 | |
169 CPDF_Number() : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(TRUE), m_Integer(0) {} | 161 CPDF_Number() : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(TRUE), m_Integer(0) {} |
170 | 162 |
171 CPDF_Number(int value); | 163 explicit CPDF_Number(int value); |
172 | 164 |
173 CPDF_Number(FX_FLOAT value); | 165 explicit CPDF_Number(FX_FLOAT value); |
174 | 166 |
175 CPDF_Number(const CFX_ByteStringC& str); | 167 explicit CPDF_Number(const CFX_ByteStringC& str); |
176 | 168 |
177 FX_BOOL Identical(CPDF_Number* pOther) const; | 169 FX_BOOL Identical(CPDF_Number* pOther) const; |
178 | 170 |
179 CFX_ByteString GetString() const; | 171 CFX_ByteString GetString() const; |
180 | 172 |
181 void SetString(const CFX_ByteStringC& str); | 173 void SetString(const CFX_ByteStringC& str); |
182 | 174 |
183 FX_BOOL IsInteger() const { return m_bInteger; } | 175 FX_BOOL IsInteger() const { return m_bInteger; } |
184 | 176 |
185 int GetInteger() const { return m_bInteger ? m_Integer : (int)m_Float; } | 177 int GetInteger() const { return m_bInteger ? m_Integer : (int)m_Float; } |
(...skipping 22 matching lines...) Expand all Loading... |
208 }; | 200 }; |
209 inline CPDF_Number* ToNumber(CPDF_Object* obj) { | 201 inline CPDF_Number* ToNumber(CPDF_Object* obj) { |
210 return obj ? obj->AsNumber() : nullptr; | 202 return obj ? obj->AsNumber() : nullptr; |
211 } | 203 } |
212 inline const CPDF_Number* ToNumber(const CPDF_Object* obj) { | 204 inline const CPDF_Number* ToNumber(const CPDF_Object* obj) { |
213 return obj ? obj->AsNumber() : nullptr; | 205 return obj ? obj->AsNumber() : nullptr; |
214 } | 206 } |
215 | 207 |
216 class CPDF_String : public CPDF_Object { | 208 class CPDF_String : public CPDF_Object { |
217 public: | 209 public: |
218 static CPDF_String* Create(const CFX_ByteString& str, FX_BOOL bHex = FALSE) { | |
219 return new CPDF_String(str, bHex); | |
220 } | |
221 | |
222 static CPDF_String* Create(const CFX_WideString& str) { | |
223 return new CPDF_String(str); | |
224 } | |
225 | |
226 CPDF_String() : CPDF_Object(PDFOBJ_STRING), m_bHex(FALSE) {} | 210 CPDF_String() : CPDF_Object(PDFOBJ_STRING), m_bHex(FALSE) {} |
227 | 211 |
228 CPDF_String(const CFX_ByteString& str, FX_BOOL bHex = FALSE) | 212 CPDF_String(const CFX_ByteString& str, FX_BOOL bHex) |
229 : CPDF_Object(PDFOBJ_STRING), m_String(str), m_bHex(bHex) {} | 213 : CPDF_Object(PDFOBJ_STRING), m_String(str), m_bHex(bHex) {} |
230 | 214 |
231 CPDF_String(const CFX_WideString& str); | 215 explicit CPDF_String(const CFX_WideString& str); |
232 | 216 |
233 CFX_ByteString& GetString() { return m_String; } | 217 CFX_ByteString& GetString() { return m_String; } |
234 | 218 |
235 FX_BOOL Identical(CPDF_String* pOther) const { | 219 FX_BOOL Identical(CPDF_String* pOther) const { |
236 return m_String == pOther->m_String; | 220 return m_String == pOther->m_String; |
237 } | 221 } |
238 | 222 |
239 FX_BOOL IsHex() const { return m_bHex; } | 223 FX_BOOL IsHex() const { return m_bHex; } |
240 | 224 |
241 protected: | 225 protected: |
242 CFX_ByteString m_String; | 226 CFX_ByteString m_String; |
243 | 227 |
244 FX_BOOL m_bHex; | 228 FX_BOOL m_bHex; |
245 friend class CPDF_Object; | 229 friend class CPDF_Object; |
246 }; | 230 }; |
247 inline CPDF_String* ToString(CPDF_Object* obj) { | 231 inline CPDF_String* ToString(CPDF_Object* obj) { |
248 return obj ? obj->AsString() : nullptr; | 232 return obj ? obj->AsString() : nullptr; |
249 } | 233 } |
250 inline const CPDF_String* ToString(const CPDF_Object* obj) { | 234 inline const CPDF_String* ToString(const CPDF_Object* obj) { |
251 return obj ? obj->AsString() : nullptr; | 235 return obj ? obj->AsString() : nullptr; |
252 } | 236 } |
253 | 237 |
254 class CPDF_Name : public CPDF_Object { | 238 class CPDF_Name : public CPDF_Object { |
255 public: | 239 public: |
256 static CPDF_Name* Create(const CFX_ByteString& str) { | 240 explicit CPDF_Name(const CFX_ByteString& str) |
257 return new CPDF_Name(str); | |
258 } | |
259 | |
260 static CPDF_Name* Create(const CFX_ByteStringC& str) { | |
261 return new CPDF_Name(str); | |
262 } | |
263 | |
264 static CPDF_Name* Create(const FX_CHAR* str) { return new CPDF_Name(str); } | |
265 | |
266 CPDF_Name(const CFX_ByteString& str) | |
267 : CPDF_Object(PDFOBJ_NAME), m_Name(str) {} | 241 : CPDF_Object(PDFOBJ_NAME), m_Name(str) {} |
268 CPDF_Name(const CFX_ByteStringC& str) | 242 explicit CPDF_Name(const CFX_ByteStringC& str) |
269 : CPDF_Object(PDFOBJ_NAME), m_Name(str) {} | 243 : CPDF_Object(PDFOBJ_NAME), m_Name(str) {} |
270 CPDF_Name(const FX_CHAR* str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) {} | 244 explicit CPDF_Name(const FX_CHAR* str) |
| 245 : CPDF_Object(PDFOBJ_NAME), m_Name(str) {} |
271 | 246 |
272 CFX_ByteString& GetString() { return m_Name; } | 247 CFX_ByteString& GetString() { return m_Name; } |
273 | 248 |
274 FX_BOOL Identical(CPDF_Name* pOther) const { | 249 FX_BOOL Identical(CPDF_Name* pOther) const { |
275 return m_Name == pOther->m_Name; | 250 return m_Name == pOther->m_Name; |
276 } | 251 } |
277 | 252 |
278 protected: | 253 protected: |
279 CFX_ByteString m_Name; | 254 CFX_ByteString m_Name; |
280 friend class CPDF_Object; | 255 friend class CPDF_Object; |
281 }; | 256 }; |
282 inline CPDF_Name* ToName(CPDF_Object* obj) { | 257 inline CPDF_Name* ToName(CPDF_Object* obj) { |
283 return obj ? obj->AsName() : nullptr; | 258 return obj ? obj->AsName() : nullptr; |
284 } | 259 } |
285 inline const CPDF_Name* ToName(const CPDF_Object* obj) { | 260 inline const CPDF_Name* ToName(const CPDF_Object* obj) { |
286 return obj ? obj->AsName() : nullptr; | 261 return obj ? obj->AsName() : nullptr; |
287 } | 262 } |
288 | 263 |
289 class CPDF_Array : public CPDF_Object { | 264 class CPDF_Array : public CPDF_Object { |
290 public: | 265 public: |
291 static CPDF_Array* Create() { return new CPDF_Array(); } | |
292 | |
293 CPDF_Array() : CPDF_Object(PDFOBJ_ARRAY) {} | 266 CPDF_Array() : CPDF_Object(PDFOBJ_ARRAY) {} |
294 | 267 |
295 FX_DWORD GetCount() const { return m_Objects.GetSize(); } | 268 FX_DWORD GetCount() const { return m_Objects.GetSize(); } |
296 | 269 |
297 CPDF_Object* GetElement(FX_DWORD index) const; | 270 CPDF_Object* GetElement(FX_DWORD index) const; |
298 | 271 |
299 CPDF_Object* GetElementValue(FX_DWORD index) const; | 272 CPDF_Object* GetElementValue(FX_DWORD index) const; |
300 | 273 |
301 CFX_Matrix GetMatrix(); | 274 CFX_Matrix GetMatrix(); |
302 | 275 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 }; | 331 }; |
359 inline CPDF_Array* ToArray(CPDF_Object* obj) { | 332 inline CPDF_Array* ToArray(CPDF_Object* obj) { |
360 return obj ? obj->AsArray() : nullptr; | 333 return obj ? obj->AsArray() : nullptr; |
361 } | 334 } |
362 inline const CPDF_Array* ToArray(const CPDF_Object* obj) { | 335 inline const CPDF_Array* ToArray(const CPDF_Object* obj) { |
363 return obj ? obj->AsArray() : nullptr; | 336 return obj ? obj->AsArray() : nullptr; |
364 } | 337 } |
365 | 338 |
366 class CPDF_Dictionary : public CPDF_Object { | 339 class CPDF_Dictionary : public CPDF_Object { |
367 public: | 340 public: |
368 static CPDF_Dictionary* Create() { return new CPDF_Dictionary(); } | |
369 | |
370 CPDF_Dictionary() : CPDF_Object(PDFOBJ_DICTIONARY) {} | 341 CPDF_Dictionary() : CPDF_Object(PDFOBJ_DICTIONARY) {} |
371 | 342 |
372 CPDF_Object* GetElement(const CFX_ByteStringC& key) const; | 343 CPDF_Object* GetElement(const CFX_ByteStringC& key) const; |
373 | 344 |
374 CPDF_Object* GetElementValue(const CFX_ByteStringC& key) const; | 345 CPDF_Object* GetElementValue(const CFX_ByteStringC& key) const; |
375 | 346 |
376 CFX_ByteString GetString(const CFX_ByteStringC& key) const; | 347 CFX_ByteString GetString(const CFX_ByteStringC& key) const; |
377 | 348 |
378 CFX_ByteStringC GetConstString(const CFX_ByteStringC& key) const; | 349 CFX_ByteStringC GetConstString(const CFX_ByteStringC& key) const; |
379 | 350 |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
558 | 529 |
559 CPDF_Dictionary* m_pImageParam; | 530 CPDF_Dictionary* m_pImageParam; |
560 | 531 |
561 const CPDF_Stream* m_pStream; | 532 const CPDF_Stream* m_pStream; |
562 | 533 |
563 uint8_t* m_pSrcData; | 534 uint8_t* m_pSrcData; |
564 }; | 535 }; |
565 | 536 |
566 class CPDF_Null : public CPDF_Object { | 537 class CPDF_Null : public CPDF_Object { |
567 public: | 538 public: |
568 static CPDF_Null* Create() { return new CPDF_Null(); } | |
569 | |
570 CPDF_Null() : CPDF_Object(PDFOBJ_NULL) {} | 539 CPDF_Null() : CPDF_Object(PDFOBJ_NULL) {} |
571 }; | 540 }; |
| 541 |
572 class CPDF_Reference : public CPDF_Object { | 542 class CPDF_Reference : public CPDF_Object { |
573 public: | 543 public: |
574 CPDF_Reference(CPDF_IndirectObjects* pDoc, int objnum) | 544 CPDF_Reference(CPDF_IndirectObjects* pDoc, int objnum) |
575 : CPDF_Object(PDFOBJ_REFERENCE), m_pObjList(pDoc), m_RefObjNum(objnum) {} | 545 : CPDF_Object(PDFOBJ_REFERENCE), m_pObjList(pDoc), m_RefObjNum(objnum) {} |
576 | 546 |
577 CPDF_IndirectObjects* GetObjList() const { return m_pObjList; } | 547 CPDF_IndirectObjects* GetObjList() const { return m_pObjList; } |
578 | 548 |
579 FX_DWORD GetRefObjNum() const { return m_RefObjNum; } | 549 FX_DWORD GetRefObjNum() const { return m_RefObjNum; } |
580 | 550 |
581 void SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum); | 551 void SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum); |
(...skipping 10 matching lines...) Expand all Loading... |
592 }; | 562 }; |
593 inline CPDF_Reference* ToReference(CPDF_Object* obj) { | 563 inline CPDF_Reference* ToReference(CPDF_Object* obj) { |
594 return obj ? obj->AsReference() : nullptr; | 564 return obj ? obj->AsReference() : nullptr; |
595 } | 565 } |
596 inline const CPDF_Reference* ToReference(const CPDF_Object* obj) { | 566 inline const CPDF_Reference* ToReference(const CPDF_Object* obj) { |
597 return obj ? obj->AsReference() : nullptr; | 567 return obj ? obj->AsReference() : nullptr; |
598 } | 568 } |
599 | 569 |
600 class CPDF_IndirectObjects { | 570 class CPDF_IndirectObjects { |
601 public: | 571 public: |
602 CPDF_IndirectObjects(CPDF_Parser* pParser); | 572 explicit CPDF_IndirectObjects(CPDF_Parser* pParser); |
603 | 573 |
604 ~CPDF_IndirectObjects(); | 574 ~CPDF_IndirectObjects(); |
605 | 575 |
606 CPDF_Object* GetIndirectObject(FX_DWORD objnum, | 576 CPDF_Object* GetIndirectObject(FX_DWORD objnum, |
607 struct PARSE_CONTEXT* pContext = NULL); | 577 struct PARSE_CONTEXT* pContext = NULL); |
608 | 578 |
609 int GetIndirectType(FX_DWORD objnum); | 579 int GetIndirectType(FX_DWORD objnum); |
610 | 580 |
611 FX_DWORD AddIndirectObject(CPDF_Object* pObj); | 581 FX_DWORD AddIndirectObject(CPDF_Object* pObj); |
612 | 582 |
(...skipping 15 matching lines...) Expand all Loading... |
628 | 598 |
629 protected: | 599 protected: |
630 CFX_MapPtrToPtr m_IndirectObjs; | 600 CFX_MapPtrToPtr m_IndirectObjs; |
631 | 601 |
632 CPDF_Parser* m_pParser; | 602 CPDF_Parser* m_pParser; |
633 | 603 |
634 FX_DWORD m_LastObjNum; | 604 FX_DWORD m_LastObjNum; |
635 }; | 605 }; |
636 | 606 |
637 #endif // CORE_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_ | 607 #endif // CORE_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_ |
OLD | NEW |