Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: core/include/fpdfapi/fpdf_objects.h

Issue 1576113003: Use std::map in CPDF_IndirectObjects (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Remove cbegin() and cend(). Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | core/include/fpdfapi/fpdf_parser.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <map> 10 #include <map>
11 #include <set> 11 #include <set>
12 12
13 #include "core/include/fxcrt/fx_coordinates.h" 13 #include "core/include/fxcrt/fx_coordinates.h"
14 #include "core/include/fxcrt/fx_system.h" 14 #include "core/include/fxcrt/fx_system.h"
15 15
16 class CPDF_Array; 16 class CPDF_Array;
17 class CPDF_Boolean; 17 class CPDF_Boolean;
18 class CPDF_CryptoHandler; 18 class CPDF_CryptoHandler;
19 class CPDF_Dictionary; 19 class CPDF_Dictionary;
20 class CPDF_Document; 20 class CPDF_Document;
21 class CPDF_IndirectObjects; 21 class CPDF_IndirectObjectHolder;
22 class CPDF_Name; 22 class CPDF_Name;
23 class CPDF_Null; 23 class CPDF_Null;
24 class CPDF_Number; 24 class CPDF_Number;
25 class CPDF_Parser; 25 class CPDF_Parser;
26 class CPDF_Reference; 26 class CPDF_Reference;
27 class CPDF_Stream; 27 class CPDF_Stream;
28 class CPDF_StreamAcc; 28 class CPDF_StreamAcc;
29 class CPDF_StreamFilter; 29 class CPDF_StreamFilter;
30 class CPDF_String; 30 class CPDF_String;
31 class IFX_FileRead; 31 class IFX_FileRead;
(...skipping 15 matching lines...) Expand all
47 int GetType() const { return m_Type; } 47 int GetType() const { return m_Type; }
48 48
49 FX_DWORD GetObjNum() const { return m_ObjNum; } 49 FX_DWORD GetObjNum() const { return m_ObjNum; }
50 50
51 FX_DWORD GetGenNum() const { return m_GenNum; } 51 FX_DWORD GetGenNum() const { return m_GenNum; }
52 52
53 FX_BOOL IsIdentical(CPDF_Object* pObj) const; 53 FX_BOOL IsIdentical(CPDF_Object* pObj) const;
54 54
55 CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const; 55 CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const;
56 56
57 CPDF_Object* CloneRef(CPDF_IndirectObjects* pObjs) const; 57 CPDF_Object* CloneRef(CPDF_IndirectObjectHolder* pObjs) const;
58 58
59 CPDF_Object* GetDirect() const; 59 CPDF_Object* GetDirect() const;
60 60
61 void Release(); 61 void Release();
62 62
63 CFX_ByteString GetString() const; 63 CFX_ByteString GetString() const;
64 64
65 CFX_ByteStringC GetConstString() const; 65 CFX_ByteStringC GetConstString() const;
66 66
67 CFX_WideString GetUnicodeText(CFX_CharMap* pCharMap = NULL) const; 67 CFX_WideString GetUnicodeText(CFX_CharMap* pCharMap = NULL) const;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 : m_Type(type), m_ObjNum(0), m_GenNum(0) {} 121 : m_Type(type), m_ObjNum(0), m_GenNum(0) {}
122 ~CPDF_Object() {} 122 ~CPDF_Object() {}
123 void Destroy(); 123 void Destroy();
124 124
125 static const int kObjectRefMaxDepth = 128; 125 static const int kObjectRefMaxDepth = 128;
126 static int s_nCurRefDepth; 126 static int s_nCurRefDepth;
127 FX_DWORD m_Type; 127 FX_DWORD m_Type;
128 FX_DWORD m_ObjNum; 128 FX_DWORD m_ObjNum;
129 FX_DWORD m_GenNum; 129 FX_DWORD m_GenNum;
130 130
131 friend class CPDF_IndirectObjects; 131 friend class CPDF_IndirectObjectHolder;
132 friend class CPDF_Parser; 132 friend class CPDF_Parser;
133 friend class CPDF_SyntaxParser; 133 friend class CPDF_SyntaxParser;
134 134
135 private: 135 private:
136 CPDF_Object(const CPDF_Object& src) {} 136 CPDF_Object(const CPDF_Object& src) {}
137 CPDF_Object* CloneInternal(FX_BOOL bDirect, 137 CPDF_Object* CloneInternal(FX_BOOL bDirect,
138 std::set<FX_DWORD>* visited) const; 138 std::set<FX_DWORD>* visited) const;
139 }; 139 };
140 class CPDF_Boolean : public CPDF_Object { 140 class CPDF_Boolean : public CPDF_Object {
141 public: 141 public:
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 CPDF_Dictionary* GetDict(FX_DWORD index) const; 288 CPDF_Dictionary* GetDict(FX_DWORD index) const;
289 289
290 CPDF_Stream* GetStream(FX_DWORD index) const; 290 CPDF_Stream* GetStream(FX_DWORD index) const;
291 291
292 CPDF_Array* GetArray(FX_DWORD index) const; 292 CPDF_Array* GetArray(FX_DWORD index) const;
293 293
294 FX_FLOAT GetFloat(FX_DWORD index) const { return GetNumber(index); } 294 FX_FLOAT GetFloat(FX_DWORD index) const { return GetNumber(index); }
295 295
296 void SetAt(FX_DWORD index, 296 void SetAt(FX_DWORD index,
297 CPDF_Object* pObj, 297 CPDF_Object* pObj,
298 CPDF_IndirectObjects* pObjs = NULL); 298 CPDF_IndirectObjectHolder* pObjs = NULL);
299 299
300 void InsertAt(FX_DWORD index, 300 void InsertAt(FX_DWORD index,
301 CPDF_Object* pObj, 301 CPDF_Object* pObj,
302 CPDF_IndirectObjects* pObjs = NULL); 302 CPDF_IndirectObjectHolder* pObjs = NULL);
303 303
304 void RemoveAt(FX_DWORD index, int nCount = 1); 304 void RemoveAt(FX_DWORD index, int nCount = 1);
305 305
306 void Add(CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL); 306 void Add(CPDF_Object* pObj, CPDF_IndirectObjectHolder* pObjs = NULL);
307 307
308 void AddNumber(FX_FLOAT f); 308 void AddNumber(FX_FLOAT f);
309 309
310 void AddInteger(int i); 310 void AddInteger(int i);
311 311
312 void AddString(const CFX_ByteString& str); 312 void AddString(const CFX_ByteString& str);
313 313
314 void AddName(const CFX_ByteString& str); 314 void AddName(const CFX_ByteString& str);
315 315
316 void AddReference(CPDF_IndirectObjects* pDoc, FX_DWORD objnum); 316 void AddReference(CPDF_IndirectObjectHolder* pDoc, FX_DWORD objnum);
317 317
318 void AddReference(CPDF_IndirectObjects* pDoc, CPDF_Object* obj) { 318 void AddReference(CPDF_IndirectObjectHolder* pDoc, CPDF_Object* obj) {
319 AddReference(pDoc, obj->GetObjNum()); 319 AddReference(pDoc, obj->GetObjNum());
320 } 320 }
321 321
322 FX_FLOAT GetNumber16(FX_DWORD index) const { return GetNumber(index); } 322 FX_FLOAT GetNumber16(FX_DWORD index) const { return GetNumber(index); }
323 323
324 void AddNumber16(FX_FLOAT value) { AddNumber(value); } 324 void AddNumber16(FX_FLOAT value) { AddNumber(value); }
325 325
326 FX_BOOL Identical(CPDF_Array* pOther) const; 326 FX_BOOL Identical(CPDF_Array* pOther) const;
327 327
328 protected: 328 protected:
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 389
390 void SetAtName(const CFX_ByteStringC& key, const CFX_ByteString& name); 390 void SetAtName(const CFX_ByteStringC& key, const CFX_ByteString& name);
391 391
392 void SetAtString(const CFX_ByteStringC& key, const CFX_ByteString& string); 392 void SetAtString(const CFX_ByteStringC& key, const CFX_ByteString& string);
393 393
394 void SetAtInteger(const CFX_ByteStringC& key, int i); 394 void SetAtInteger(const CFX_ByteStringC& key, int i);
395 395
396 void SetAtNumber(const CFX_ByteStringC& key, FX_FLOAT f); 396 void SetAtNumber(const CFX_ByteStringC& key, FX_FLOAT f);
397 397
398 void SetAtReference(const CFX_ByteStringC& key, 398 void SetAtReference(const CFX_ByteStringC& key,
399 CPDF_IndirectObjects* pDoc, 399 CPDF_IndirectObjectHolder* pDoc,
400 FX_DWORD objnum); 400 FX_DWORD objnum);
401 401
402 void SetAtReference(const CFX_ByteStringC& key, 402 void SetAtReference(const CFX_ByteStringC& key,
403 CPDF_IndirectObjects* pDoc, 403 CPDF_IndirectObjectHolder* pDoc,
404 CPDF_Object* obj) { 404 CPDF_Object* obj) {
405 SetAtReference(key, pDoc, obj->GetObjNum()); 405 SetAtReference(key, pDoc, obj->GetObjNum());
406 } 406 }
407 407
408 void AddReference(const CFX_ByteStringC& key, 408 void AddReference(const CFX_ByteStringC& key,
409 CPDF_IndirectObjects* pDoc, 409 CPDF_IndirectObjectHolder* pDoc,
410 FX_DWORD objnum); 410 FX_DWORD objnum);
411 411
412 void SetAtRect(const CFX_ByteStringC& key, const CFX_FloatRect& rect); 412 void SetAtRect(const CFX_ByteStringC& key, const CFX_FloatRect& rect);
413 413
414 void SetAtMatrix(const CFX_ByteStringC& key, const CFX_Matrix& matrix); 414 void SetAtMatrix(const CFX_ByteStringC& key, const CFX_Matrix& matrix);
415 415
416 void SetAtBoolean(const CFX_ByteStringC& key, FX_BOOL bValue); 416 void SetAtBoolean(const CFX_ByteStringC& key, FX_BOOL bValue);
417 417
418 void RemoveAt(const CFX_ByteStringC& key); 418 void RemoveAt(const CFX_ByteStringC& key);
419 419
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 uint8_t* m_pSrcData; 541 uint8_t* m_pSrcData;
542 }; 542 };
543 543
544 class CPDF_Null : public CPDF_Object { 544 class CPDF_Null : public CPDF_Object {
545 public: 545 public:
546 CPDF_Null() : CPDF_Object(PDFOBJ_NULL) {} 546 CPDF_Null() : CPDF_Object(PDFOBJ_NULL) {}
547 }; 547 };
548 548
549 class CPDF_Reference : public CPDF_Object { 549 class CPDF_Reference : public CPDF_Object {
550 public: 550 public:
551 CPDF_Reference(CPDF_IndirectObjects* pDoc, int objnum) 551 CPDF_Reference(CPDF_IndirectObjectHolder* pDoc, int objnum)
552 : CPDF_Object(PDFOBJ_REFERENCE), m_pObjList(pDoc), m_RefObjNum(objnum) {} 552 : CPDF_Object(PDFOBJ_REFERENCE), m_pObjList(pDoc), m_RefObjNum(objnum) {}
553 553
554 CPDF_IndirectObjects* GetObjList() const { return m_pObjList; } 554 CPDF_IndirectObjectHolder* GetObjList() const { return m_pObjList; }
555 555
556 FX_DWORD GetRefObjNum() const { return m_RefObjNum; } 556 FX_DWORD GetRefObjNum() const { return m_RefObjNum; }
557 557
558 void SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum); 558 void SetRef(CPDF_IndirectObjectHolder* pDoc, FX_DWORD objnum);
559 559
560 FX_BOOL Identical(CPDF_Reference* pOther) const { 560 FX_BOOL Identical(CPDF_Reference* pOther) const {
561 return m_RefObjNum == pOther->m_RefObjNum; 561 return m_RefObjNum == pOther->m_RefObjNum;
562 } 562 }
563 563
564 protected: 564 protected:
565 CPDF_IndirectObjects* m_pObjList; 565 CPDF_IndirectObjectHolder* m_pObjList;
566 566
567 FX_DWORD m_RefObjNum; 567 FX_DWORD m_RefObjNum;
568 friend class CPDF_Object; 568 friend class CPDF_Object;
569 }; 569 };
570 inline CPDF_Reference* ToReference(CPDF_Object* obj) { 570 inline CPDF_Reference* ToReference(CPDF_Object* obj) {
571 return obj ? obj->AsReference() : nullptr; 571 return obj ? obj->AsReference() : nullptr;
572 } 572 }
573 inline const CPDF_Reference* ToReference(const CPDF_Object* obj) { 573 inline const CPDF_Reference* ToReference(const CPDF_Object* obj) {
574 return obj ? obj->AsReference() : nullptr; 574 return obj ? obj->AsReference() : nullptr;
575 } 575 }
576 576
577 class CPDF_IndirectObjects { 577 class CPDF_IndirectObjectHolder {
578 public: 578 public:
579 explicit CPDF_IndirectObjects(CPDF_Parser* pParser); 579 using iterator = std::map<FX_DWORD, CPDF_Object*>::iterator;
580 using const_iterator = std::map<FX_DWORD, CPDF_Object*>::const_iterator;
580 581
581 ~CPDF_IndirectObjects(); 582 explicit CPDF_IndirectObjectHolder(CPDF_Parser* pParser);
582 583 ~CPDF_IndirectObjectHolder();
583 CPDF_Object* GetIndirectObject(FX_DWORD objnum, PARSE_CONTEXT* pContext);
584 584
585 int GetIndirectType(FX_DWORD objnum); 585 int GetIndirectType(FX_DWORD objnum);
586 CPDF_Object* GetIndirectObject(FX_DWORD objnum, PARSE_CONTEXT* pContext);
587 FX_DWORD AddIndirectObject(CPDF_Object* pObj);
588 void ReleaseIndirectObject(FX_DWORD objnum);
586 589
587 FX_DWORD AddIndirectObject(CPDF_Object* pObj);
588
589 void ReleaseIndirectObject(FX_DWORD objnum);
590 // Takes ownership of |pObj|. 590 // Takes ownership of |pObj|.
591 FX_BOOL InsertIndirectObject(FX_DWORD objnum, CPDF_Object* pObj); 591 FX_BOOL InsertIndirectObject(FX_DWORD objnum, CPDF_Object* pObj);
592 592
593 FX_DWORD GetLastObjNum() const; 593 FX_DWORD GetLastObjNum() const { return m_LastObjNum; }
594 594 iterator begin() { return m_IndirectObjs.begin(); }
595 FX_POSITION GetStartPosition() const { 595 const_iterator begin() const { return m_IndirectObjs.cbegin(); }
596 return m_IndirectObjs.GetStartPosition(); 596 iterator end() { return m_IndirectObjs.end(); }
597 } 597 const_iterator end() const { return m_IndirectObjs.end(); }
598
599 void GetNextAssoc(FX_POSITION& rPos,
600 FX_DWORD& objnum,
601 CPDF_Object*& pObject) const {
602 m_IndirectObjs.GetNextAssoc(rPos, (void*&)objnum, (void*&)pObject);
603 }
604 598
605 protected: 599 protected:
606 CFX_MapPtrToPtr m_IndirectObjs;
607
608 CPDF_Parser* m_pParser; 600 CPDF_Parser* m_pParser;
609
610 FX_DWORD m_LastObjNum; 601 FX_DWORD m_LastObjNum;
602 std::map<FX_DWORD, CPDF_Object*> m_IndirectObjs;
611 }; 603 };
612 604
613 #endif // CORE_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_ 605 #endif // CORE_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_
OLDNEW
« no previous file with comments | « no previous file | core/include/fpdfapi/fpdf_parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698