Commit 8fbef47093e93cfdaffd62449a18b57679b610f5

Authored by m-holger
1 parent 5473c095

Use QPDFObjGen::set in QPDF::getAllPages

include/qpdf/QPDF.hh
... ... @@ -1252,8 +1252,8 @@ class QPDF
1252 1252  
1253 1253 void getAllPagesInternal(
1254 1254 QPDFObjectHandle cur_pages,
1255   - std::set<QPDFObjGen>& visited,
1256   - std::set<QPDFObjGen>& seen);
  1255 + QPDFObjGen::set& visited,
  1256 + QPDFObjGen::set& seen);
1257 1257 void insertPage(QPDFObjectHandle newpage, int pos);
1258 1258 void flattenPagesTree();
1259 1259 void insertPageobjToPage(
... ...
libqpdf/QPDF_pages.cc
... ... @@ -55,13 +55,13 @@ QPDF::getAllPages()
55 55 // initialize this->m->all_pages.
56 56 if (this->m->all_pages.empty()) {
57 57 this->m->ever_called_get_all_pages = true;
58   - std::set<QPDFObjGen> visited;
59   - std::set<QPDFObjGen> seen;
  58 + QPDFObjGen::set visited;
  59 + QPDFObjGen::set seen;
60 60 QPDFObjectHandle pages = getRoot().getKey("/Pages");
61 61 bool warned = false;
62 62 bool changed_pages = false;
63 63 while (pages.isDictionary() && pages.hasKey("/Parent")) {
64   - if (seen.count(pages.getObjGen())) {
  64 + if (!seen.add(pages)) {
65 65 // loop -- will be detected again and reported later
66 66 break;
67 67 }
... ... @@ -74,7 +74,6 @@ QPDF::getAllPages()
74 74 " to the root of the page tree; attempting to correct");
75 75 warned = true;
76 76 }
77   - seen.insert(pages.getObjGen());
78 77 changed_pages = true;
79 78 pages = pages.getKey("/Parent");
80 79 }
... ... @@ -92,12 +91,9 @@ QPDF::getAllPages()
92 91  
93 92 void
94 93 QPDF::getAllPagesInternal(
95   - QPDFObjectHandle cur_node,
96   - std::set<QPDFObjGen>& visited,
97   - std::set<QPDFObjGen>& seen)
  94 + QPDFObjectHandle cur_node, QPDFObjGen::set& visited, QPDFObjGen::set& seen)
98 95 {
99   - QPDFObjGen cur_node_og = cur_node.getObjGen();
100   - if (visited.count(cur_node_og) > 0) {
  96 + if (!visited.add(cur_node)) {
101 97 throw QPDFExc(
102 98 qpdf_e_pages,
103 99 this->m->file->getName(),
... ... @@ -105,7 +101,6 @@ QPDF::getAllPagesInternal(
105 101 0,
106 102 "Loop detected in /Pages structure (getAllPages)");
107 103 }
108   - visited.insert(cur_node_og);
109 104 if (!cur_node.isDictionaryOfType("/Pages")) {
110 105 cur_node.warnIfPossible(
111 106 "/Type key should be /Pages but is not; overriding");
... ... @@ -125,7 +120,7 @@ QPDF::getAllPagesInternal(
125 120 " (from 0) is direct; converting to indirect");
126 121 kid = makeIndirectObject(kid);
127 122 kids.setArrayItem(i, kid);
128   - } else if (seen.count(kid.getObjGen())) {
  123 + } else if (!seen.add(kid)) {
129 124 // Make a copy of the page. This does the same as
130 125 // shallowCopyPage in QPDFPageObjectHelper.
131 126 QTC::TC("qpdf", "QPDF resolve duplicated page object");
... ... @@ -134,6 +129,7 @@ QPDF::getAllPagesInternal(
134 129 " (from 0) appears more than once in the pages tree;"
135 130 " creating a new page object as a copy");
136 131 kid = makeIndirectObject(QPDFObjectHandle(kid).shallowCopy());
  132 + seen.add(kid);
137 133 kids.setArrayItem(i, kid);
138 134 }
139 135 if (!kid.isDictionaryOfType("/Page")) {
... ... @@ -141,7 +137,6 @@ QPDF::getAllPagesInternal(
141 137 "/Type key should be /Page but is not; overriding");
142 138 kid.replaceKey("/Type", "/Page"_qpdf);
143 139 }
144   - seen.insert(kid.getObjGen());
145 140 m->all_pages.push_back(kid);
146 141 }
147 142 }
... ...