Commit c5f61fcbd33cc41a7741ccb300a7da28f19eab59

Authored by Jay Berkenbilt
1 parent 31b2cfbb

Improve efficiency of ResolveRecorder

Removing an element from a set with iterator is constant time, and
std::set specifies that other operations on the set do not invalidate
existing iterators.
Showing 1 changed file with 3 additions and 4 deletions
include/qpdf/QPDF.hh
@@ -1063,18 +1063,17 @@ class QPDF @@ -1063,18 +1063,17 @@ class QPDF
1063 public: 1063 public:
1064 ResolveRecorder(QPDF* qpdf, QPDFObjGen const& og) : 1064 ResolveRecorder(QPDF* qpdf, QPDFObjGen const& og) :
1065 qpdf(qpdf), 1065 qpdf(qpdf),
1066 - og(og) 1066 + iter(qpdf->m->resolving.insert(og).first)
1067 { 1067 {
1068 - qpdf->m->resolving.insert(og);  
1069 } 1068 }
1070 virtual ~ResolveRecorder() 1069 virtual ~ResolveRecorder()
1071 { 1070 {
1072 - this->qpdf->m->resolving.erase(og); 1071 + this->qpdf->m->resolving.erase(iter);
1073 } 1072 }
1074 1073
1075 private: 1074 private:
1076 QPDF* qpdf; 1075 QPDF* qpdf;
1077 - QPDFObjGen og; 1076 + std::set<QPDFObjGen>::const_iterator iter;
1078 }; 1077 };
1079 friend class ResolveRecorder; 1078 friend class ResolveRecorder;
1080 1079