| 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 |