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