Commit 55abecc42dc44d1b93337afe9628fea029a85696
1 parent
0e81ffa7
Use QPDFObjGen::set in QPDFOutlineDocumentHelper
Showing
2 changed files
with
7 additions
and
22 deletions
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& qpdf) : | @@ -15,13 +15,8 @@ QPDFOutlineDocumentHelper::QPDFOutlineDocumentHelper(QPDF& 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 | -} |