aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFNumberTreeObjectHelper.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2021-01-16 18:11:17 +0100
committerJay Berkenbilt <ejb@ql.org>2021-01-24 09:22:59 +0100
commit5f0708418a0a9cbacc033f52efc11c759120fd09 (patch)
tree272e5d97b37b6c6d65653ad04d8dc768ef18041d /libqpdf/QPDFNumberTreeObjectHelper.cc
parent4a1cce0a470e6deed6dbeb6093e4e5c16f53439d (diff)
downloadqpdf-5f0708418a0a9cbacc033f52efc11c759120fd09.tar.zst
Add iterators to name/number tree helpers
Diffstat (limited to 'libqpdf/QPDFNumberTreeObjectHelper.cc')
-rw-r--r--libqpdf/QPDFNumberTreeObjectHelper.cc99
1 files changed, 80 insertions, 19 deletions
diff --git a/libqpdf/QPDFNumberTreeObjectHelper.cc b/libqpdf/QPDFNumberTreeObjectHelper.cc
index fa9a0c71..6371287f 100644
--- a/libqpdf/QPDFNumberTreeObjectHelper.cc
+++ b/libqpdf/QPDFNumberTreeObjectHelper.cc
@@ -44,41 +44,107 @@ QPDFNumberTreeObjectHelper::QPDFNumberTreeObjectHelper(QPDFObjectHandle oh) :
{
}
+QPDFNumberTreeObjectHelper::iterator::iterator(
+ std::shared_ptr<NNTreeIterator> const& i) :
+ impl(i)
+{
+}
+
+bool
+QPDFNumberTreeObjectHelper::iterator::valid() const
+{
+ return impl->valid();
+}
+
+QPDFNumberTreeObjectHelper::iterator&
+QPDFNumberTreeObjectHelper::iterator::operator++()
+{
+ ++(*impl);
+ return *this;
+}
+
+QPDFNumberTreeObjectHelper::iterator&
+QPDFNumberTreeObjectHelper::iterator::operator--()
+{
+ --(*impl);
+ return *this;
+}
+
+QPDFNumberTreeObjectHelper::iterator::reference
+QPDFNumberTreeObjectHelper::iterator::operator*()
+{
+ auto p = **impl;
+ return std::make_pair(p.first.getIntValue(), p.second);
+}
+
+bool
+QPDFNumberTreeObjectHelper::iterator::operator==(iterator const& other) const
+{
+ return *(impl) == *(other.impl);
+}
+
+QPDFNumberTreeObjectHelper::iterator
+QPDFNumberTreeObjectHelper::begin() const
+{
+ return iterator(std::make_shared<NNTreeIterator>(this->m->impl->begin()));
+}
+
+QPDFNumberTreeObjectHelper::iterator
+QPDFNumberTreeObjectHelper::end() const
+{
+ return iterator(std::make_shared<NNTreeIterator>(this->m->impl->end()));
+}
+
+QPDFNumberTreeObjectHelper::iterator
+QPDFNumberTreeObjectHelper::last() const
+{
+ return iterator(std::make_shared<NNTreeIterator>(this->m->impl->last()));
+}
+
+QPDFNumberTreeObjectHelper::iterator
+QPDFNumberTreeObjectHelper::find(numtree_number key,
+ bool return_prev_if_not_found)
+{
+ auto i = this->m->impl->find(QPDFObjectHandle::newInteger(key),
+ return_prev_if_not_found);
+ return iterator(std::make_shared<NNTreeIterator>(i));
+}
+
QPDFNumberTreeObjectHelper::numtree_number
QPDFNumberTreeObjectHelper::getMin()
{
- auto i = this->m->impl->begin();
- if (i == this->m->impl->end())
+ auto i = begin();
+ if (i == end())
{
return 0;
}
- return (*i).first.getIntValue();
+ return (*i).first;
}
QPDFNumberTreeObjectHelper::numtree_number
QPDFNumberTreeObjectHelper::getMax()
{
- auto i = this->m->impl->last();
- if (i == this->m->impl->end())
+ auto i = last();
+ if (i == end())
{
return 0;
}
- return (*i).first.getIntValue();
+ return (*i).first;
}
bool
QPDFNumberTreeObjectHelper::hasIndex(numtree_number idx)
{
- auto i = this->m->impl->find(QPDFObjectHandle::newInteger(idx));
- return (i != this->m->impl->end());
+ auto i = find(idx);
+ return (i != this->end());
}
bool
QPDFNumberTreeObjectHelper::findObject(
numtree_number idx, QPDFObjectHandle& oh)
{
- auto i = this->m->impl->find(QPDFObjectHandle::newInteger(idx));
- if (i == this->m->impl->end())
+ auto i = find(idx);
+ if (i == end())
{
return false;
}
@@ -91,13 +157,13 @@ QPDFNumberTreeObjectHelper::findObjectAtOrBelow(
numtree_number idx, QPDFObjectHandle& oh,
numtree_number& offset)
{
- auto i = this->m->impl->find(QPDFObjectHandle::newInteger(idx), true);
- if (i == this->m->impl->end())
+ auto i = find(idx, true);
+ if (i == end())
{
return false;
}
oh = (*i).second;
- offset = idx - (*i).first.getIntValue();
+ offset = idx - (*i).first;
return true;
}
@@ -105,11 +171,6 @@ std::map<QPDFNumberTreeObjectHelper::numtree_number, QPDFObjectHandle>
QPDFNumberTreeObjectHelper::getAsMap() const
{
std::map<numtree_number, QPDFObjectHandle> result;
- for (auto i: *(this->m->impl))
- {
- result.insert(
- std::make_pair(i.first.getIntValue(),
- i.second));
- }
+ result.insert(begin(), end());
return result;
}