2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-06-21 19:32:20 +00:00

Use QPDFObjGen::set in QPDFOutlineDocumentHelper

This commit is contained in:
m-holger 2023-01-05 12:20:37 +00:00
parent 0e81ffa7b6
commit 55abecc42d
2 changed files with 7 additions and 22 deletions

View File

@ -22,13 +22,13 @@
#ifndef QPDFOUTLINEDOCUMENTHELPER_HH #ifndef QPDFOUTLINEDOCUMENTHELPER_HH
#define QPDFOUTLINEDOCUMENTHELPER_HH #define QPDFOUTLINEDOCUMENTHELPER_HH
#include <qpdf/QPDF.hh>
#include <qpdf/QPDFDocumentHelper.hh> #include <qpdf/QPDFDocumentHelper.hh>
#include <qpdf/QPDFNameTreeObjectHelper.hh> #include <qpdf/QPDFNameTreeObjectHelper.hh>
#include <qpdf/QPDFObjGen.hh>
#include <qpdf/QPDFOutlineObjectHelper.hh> #include <qpdf/QPDFOutlineObjectHelper.hh>
#include <qpdf/QPDF.hh>
#include <map> #include <map>
#include <set>
#include <vector> #include <vector>
#include <qpdf/DLL.h> #include <qpdf/DLL.h>
@ -69,16 +69,16 @@ class QPDFOutlineDocumentHelper: public QPDFDocumentHelper
{ {
friend class QPDFOutlineObjectHelper; friend class QPDFOutlineObjectHelper;
// ABI: remove QPDF_DLL and pass og by value.
QPDF_DLL QPDF_DLL
static bool static bool
checkSeen(QPDFOutlineDocumentHelper& dh, QPDFObjGen const& og) checkSeen(QPDFOutlineDocumentHelper& dh, QPDFObjGen const& og)
{ {
return dh.checkSeen(og); return !dh.m->seen.add(og);
} }
}; };
private: private:
bool checkSeen(QPDFObjGen const& og);
void initializeByPage(); void initializeByPage();
class Members class Members
@ -94,7 +94,7 @@ class QPDFOutlineDocumentHelper: public QPDFDocumentHelper
Members(Members const&) = delete; Members(Members const&) = delete;
std::vector<QPDFOutlineObjectHelper> outlines; std::vector<QPDFOutlineObjectHelper> outlines;
std::set<QPDFObjGen> seen; QPDFObjGen::set seen;
QPDFObjectHandle dest_dict; QPDFObjectHandle dest_dict;
std::shared_ptr<QPDFNameTreeObjectHelper> names_dest; std::shared_ptr<QPDFNameTreeObjectHelper> names_dest;
std::map<QPDFObjGen, std::vector<QPDFOutlineObjectHelper>> by_page; std::map<QPDFObjGen, std::vector<QPDFOutlineObjectHelper>> by_page;

View File

@ -15,13 +15,8 @@ QPDFOutlineDocumentHelper::QPDFOutlineDocumentHelper(QPDF& qpdf) :
return; return;
} }
QPDFObjectHandle cur = outlines.getKey("/First"); QPDFObjectHandle cur = outlines.getKey("/First");
std::set<QPDFObjGen> seen; QPDFObjGen::set seen;
while (!cur.isNull()) { while (!cur.isNull() && seen.add(cur)) {
auto og = cur.getObjGen();
if (seen.count(og)) {
break;
}
seen.insert(og);
this->m->outlines.push_back( this->m->outlines.push_back(
QPDFOutlineObjectHelper::Accessor::create(cur, *this, 1)); QPDFOutlineObjectHelper::Accessor::create(cur, *this, 1));
cur = cur.getKey("/Next"); cur = cur.getKey("/Next");
@ -104,13 +99,3 @@ QPDFOutlineDocumentHelper::resolveNamedDest(QPDFObjectHandle name)
} }
return result; return result;
} }
bool
QPDFOutlineDocumentHelper::checkSeen(QPDFObjGen const& og)
{
if (this->m->seen.count(og) > 0) {
return true;
}
this->m->seen.insert(og);
return false;
}