Commit 55abecc42dc44d1b93337afe9628fea029a85696

Authored by m-holger
1 parent 0e81ffa7

Use QPDFObjGen::set in QPDFOutlineDocumentHelper

include/qpdf/QPDFOutlineDocumentHelper.hh
@@ -22,13 +22,13 @@ @@ -22,13 +22,13 @@
22 #ifndef QPDFOUTLINEDOCUMENTHELPER_HH 22 #ifndef QPDFOUTLINEDOCUMENTHELPER_HH
23 #define QPDFOUTLINEDOCUMENTHELPER_HH 23 #define QPDFOUTLINEDOCUMENTHELPER_HH
24 24
  25 +#include <qpdf/QPDF.hh>
25 #include <qpdf/QPDFDocumentHelper.hh> 26 #include <qpdf/QPDFDocumentHelper.hh>
26 #include <qpdf/QPDFNameTreeObjectHelper.hh> 27 #include <qpdf/QPDFNameTreeObjectHelper.hh>
  28 +#include <qpdf/QPDFObjGen.hh>
27 #include <qpdf/QPDFOutlineObjectHelper.hh> 29 #include <qpdf/QPDFOutlineObjectHelper.hh>
28 30
29 -#include <qpdf/QPDF.hh>  
30 #include <map> 31 #include <map>
31 -#include <set>  
32 #include <vector> 32 #include <vector>
33 33
34 #include <qpdf/DLL.h> 34 #include <qpdf/DLL.h>
@@ -69,16 +69,16 @@ class QPDFOutlineDocumentHelper: public QPDFDocumentHelper @@ -69,16 +69,16 @@ class QPDFOutlineDocumentHelper: public QPDFDocumentHelper
69 { 69 {
70 friend class QPDFOutlineObjectHelper; 70 friend class QPDFOutlineObjectHelper;
71 71
  72 + // ABI: remove QPDF_DLL and pass og by value.
72 QPDF_DLL 73 QPDF_DLL
73 static bool 74 static bool
74 checkSeen(QPDFOutlineDocumentHelper& dh, QPDFObjGen const& og) 75 checkSeen(QPDFOutlineDocumentHelper& dh, QPDFObjGen const& og)
75 { 76 {
76 - return dh.checkSeen(og); 77 + return !dh.m->seen.add(og);
77 } 78 }
78 }; 79 };
79 80
80 private: 81 private:
81 - bool checkSeen(QPDFObjGen const& og);  
82 void initializeByPage(); 82 void initializeByPage();
83 83
84 class Members 84 class Members
@@ -94,7 +94,7 @@ class QPDFOutlineDocumentHelper: public QPDFDocumentHelper @@ -94,7 +94,7 @@ class QPDFOutlineDocumentHelper: public QPDFDocumentHelper
94 Members(Members const&) = delete; 94 Members(Members const&) = delete;
95 95
96 std::vector<QPDFOutlineObjectHelper> outlines; 96 std::vector<QPDFOutlineObjectHelper> outlines;
97 - std::set<QPDFObjGen> seen; 97 + QPDFObjGen::set seen;
98 QPDFObjectHandle dest_dict; 98 QPDFObjectHandle dest_dict;
99 std::shared_ptr<QPDFNameTreeObjectHelper> names_dest; 99 std::shared_ptr<QPDFNameTreeObjectHelper> names_dest;
100 std::map<QPDFObjGen, std::vector<QPDFOutlineObjectHelper>> by_page; 100 std::map<QPDFObjGen, std::vector<QPDFOutlineObjectHelper>> by_page;
libqpdf/QPDFOutlineDocumentHelper.cc
@@ -15,13 +15,8 @@ QPDFOutlineDocumentHelper::QPDFOutlineDocumentHelper(QPDF&amp; qpdf) : @@ -15,13 +15,8 @@ QPDFOutlineDocumentHelper::QPDFOutlineDocumentHelper(QPDF&amp; qpdf) :
15 return; 15 return;
16 } 16 }
17 QPDFObjectHandle cur = outlines.getKey("/First"); 17 QPDFObjectHandle cur = outlines.getKey("/First");
18 - std::set<QPDFObjGen> seen;  
19 - while (!cur.isNull()) {  
20 - auto og = cur.getObjGen();  
21 - if (seen.count(og)) {  
22 - break;  
23 - }  
24 - seen.insert(og); 18 + QPDFObjGen::set seen;
  19 + while (!cur.isNull() && seen.add(cur)) {
25 this->m->outlines.push_back( 20 this->m->outlines.push_back(
26 QPDFOutlineObjectHelper::Accessor::create(cur, *this, 1)); 21 QPDFOutlineObjectHelper::Accessor::create(cur, *this, 1));
27 cur = cur.getKey("/Next"); 22 cur = cur.getKey("/Next");
@@ -104,13 +99,3 @@ QPDFOutlineDocumentHelper::resolveNamedDest(QPDFObjectHandle name) @@ -104,13 +99,3 @@ QPDFOutlineDocumentHelper::resolveNamedDest(QPDFObjectHandle name)
104 } 99 }
105 return result; 100 return result;
106 } 101 }
107 -  
108 -bool  
109 -QPDFOutlineDocumentHelper::checkSeen(QPDFObjGen const& og)  
110 -{  
111 - if (this->m->seen.count(og) > 0) {  
112 - return true;  
113 - }  
114 - this->m->seen.insert(og);  
115 - return false;  
116 -}