summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2021-01-25 14:05:43 +0100
committerJay Berkenbilt <ejb@ql.org>2021-01-26 15:12:23 +0100
commit8ed3e8c79b5cbccfeccee865e555b68025ee2c1f (patch)
tree159063cdb1773605254e0436365d4eeb137282ff /include
parente7e20772ed29f3eb9756b31fe0bd9bc29a445891 (diff)
downloadqpdf-8ed3e8c79b5cbccfeccee865e555b68025ee2c1f.tar.zst
NNTree: rework iterators to be more memory efficient
Keep a std::pair internal to the iterators so that operator* can return a reference and operator-> can work, and each can work without copying pairs of objects around.
Diffstat (limited to 'include')
-rw-r--r--include/qpdf/QPDFNameTreeObjectHelper.hh8
-rw-r--r--include/qpdf/QPDFNumberTreeObjectHelper.hh8
2 files changed, 10 insertions, 6 deletions
diff --git a/include/qpdf/QPDFNameTreeObjectHelper.hh b/include/qpdf/QPDFNameTreeObjectHelper.hh
index aa1955ed..18156768 100644
--- a/include/qpdf/QPDFNameTreeObjectHelper.hh
+++ b/include/qpdf/QPDFNameTreeObjectHelper.hh
@@ -75,9 +75,6 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper
class iterator: public std::iterator<
std::bidirectional_iterator_tag,
- std::pair<std::string, QPDFObjectHandle>,
- void,
- std::pair<std::string, QPDFObjectHandle>*,
std::pair<std::string, QPDFObjectHandle>>
{
friend class QPDFNameTreeObjectHelper;
@@ -105,6 +102,8 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper
QPDF_DLL
reference operator*();
QPDF_DLL
+ pointer operator->();
+ QPDF_DLL
bool operator==(iterator const& other) const;
QPDF_DLL
bool operator!=(iterator const& other) const
@@ -131,8 +130,11 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper
void remove();
private:
+ void updateIValue();
+
iterator(std::shared_ptr<NNTreeIterator> const&);
std::shared_ptr<NNTreeIterator> impl;
+ value_type ivalue;
};
// The iterator looks like map iterator, so i.first is a string
diff --git a/include/qpdf/QPDFNumberTreeObjectHelper.hh b/include/qpdf/QPDFNumberTreeObjectHelper.hh
index 70695327..7343978b 100644
--- a/include/qpdf/QPDFNumberTreeObjectHelper.hh
+++ b/include/qpdf/QPDFNumberTreeObjectHelper.hh
@@ -94,9 +94,6 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper
class iterator: public std::iterator<
std::bidirectional_iterator_tag,
- std::pair<numtree_number, QPDFObjectHandle>,
- void,
- std::pair<numtree_number, QPDFObjectHandle>*,
std::pair<numtree_number, QPDFObjectHandle>>
{
friend class QPDFNumberTreeObjectHelper;
@@ -124,6 +121,8 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper
QPDF_DLL
reference operator*();
QPDF_DLL
+ pointer operator->();
+ QPDF_DLL
bool operator==(iterator const& other) const;
QPDF_DLL
bool operator!=(iterator const& other) const
@@ -150,8 +149,11 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper
void remove();
private:
+ void updateIValue();
+
iterator(std::shared_ptr<NNTreeIterator> const&);
std::shared_ptr<NNTreeIterator> impl;
+ value_type ivalue;
};
// The iterator looks like map iterator, so i.first is a string