diff options
-rw-r--r-- | include/qpdf/QPDFOutlineDocumentHelper.hh | 10 | ||||
-rw-r--r-- | libqpdf/QPDFOutlineDocumentHelper.cc | 19 |
2 files changed, 7 insertions, 22 deletions
diff --git a/include/qpdf/QPDFOutlineDocumentHelper.hh b/include/qpdf/QPDFOutlineDocumentHelper.hh index cd11884d..38310302 100644 --- a/include/qpdf/QPDFOutlineDocumentHelper.hh +++ b/include/qpdf/QPDFOutlineDocumentHelper.hh @@ -22,13 +22,13 @@ #ifndef QPDFOUTLINEDOCUMENTHELPER_HH #define QPDFOUTLINEDOCUMENTHELPER_HH +#include <qpdf/QPDF.hh> #include <qpdf/QPDFDocumentHelper.hh> #include <qpdf/QPDFNameTreeObjectHelper.hh> +#include <qpdf/QPDFObjGen.hh> #include <qpdf/QPDFOutlineObjectHelper.hh> -#include <qpdf/QPDF.hh> #include <map> -#include <set> #include <vector> #include <qpdf/DLL.h> @@ -69,16 +69,16 @@ class QPDFOutlineDocumentHelper: public QPDFDocumentHelper { friend class QPDFOutlineObjectHelper; + // ABI: remove QPDF_DLL and pass og by value. QPDF_DLL static bool checkSeen(QPDFOutlineDocumentHelper& dh, QPDFObjGen const& og) { - return dh.checkSeen(og); + return !dh.m->seen.add(og); } }; private: - bool checkSeen(QPDFObjGen const& og); void initializeByPage(); class Members @@ -94,7 +94,7 @@ class QPDFOutlineDocumentHelper: public QPDFDocumentHelper Members(Members const&) = delete; std::vector<QPDFOutlineObjectHelper> outlines; - std::set<QPDFObjGen> seen; + QPDFObjGen::set seen; QPDFObjectHandle dest_dict; std::shared_ptr<QPDFNameTreeObjectHelper> names_dest; std::map<QPDFObjGen, std::vector<QPDFOutlineObjectHelper>> by_page; diff --git a/libqpdf/QPDFOutlineDocumentHelper.cc b/libqpdf/QPDFOutlineDocumentHelper.cc index 5b2f71f6..e3485bfd 100644 --- a/libqpdf/QPDFOutlineDocumentHelper.cc +++ b/libqpdf/QPDFOutlineDocumentHelper.cc @@ -15,13 +15,8 @@ QPDFOutlineDocumentHelper::QPDFOutlineDocumentHelper(QPDF& qpdf) : return; } QPDFObjectHandle cur = outlines.getKey("/First"); - std::set<QPDFObjGen> seen; - while (!cur.isNull()) { - auto og = cur.getObjGen(); - if (seen.count(og)) { - break; - } - seen.insert(og); + QPDFObjGen::set seen; + while (!cur.isNull() && seen.add(cur)) { this->m->outlines.push_back( QPDFOutlineObjectHelper::Accessor::create(cur, *this, 1)); cur = cur.getKey("/Next"); @@ -104,13 +99,3 @@ QPDFOutlineDocumentHelper::resolveNamedDest(QPDFObjectHandle name) } return result; } - -bool -QPDFOutlineDocumentHelper::checkSeen(QPDFObjGen const& og) -{ - if (this->m->seen.count(og) > 0) { - return true; - } - this->m->seen.insert(og); - return false; -} |