aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFNameTreeObjectHelper.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/QPDFNameTreeObjectHelper.cc
parent4a1cce0a470e6deed6dbeb6093e4e5c16f53439d (diff)
downloadqpdf-5f0708418a0a9cbacc033f52efc11c759120fd09.tar.zst
Add iterators to name/number tree helpers
Diffstat (limited to 'libqpdf/QPDFNameTreeObjectHelper.cc')
-rw-r--r--libqpdf/QPDFNameTreeObjectHelper.cc81
1 files changed, 71 insertions, 10 deletions
diff --git a/libqpdf/QPDFNameTreeObjectHelper.cc b/libqpdf/QPDFNameTreeObjectHelper.cc
index 07a8ad02..f7576e94 100644
--- a/libqpdf/QPDFNameTreeObjectHelper.cc
+++ b/libqpdf/QPDFNameTreeObjectHelper.cc
@@ -48,19 +48,85 @@ QPDFNameTreeObjectHelper::~QPDFNameTreeObjectHelper()
{
}
+QPDFNameTreeObjectHelper::iterator::iterator(
+ std::shared_ptr<NNTreeIterator> const& i) :
+ impl(i)
+{
+}
+
+bool
+QPDFNameTreeObjectHelper::iterator::valid() const
+{
+ return impl->valid();
+}
+
+QPDFNameTreeObjectHelper::iterator&
+QPDFNameTreeObjectHelper::iterator::operator++()
+{
+ ++(*impl);
+ return *this;
+}
+
+QPDFNameTreeObjectHelper::iterator&
+QPDFNameTreeObjectHelper::iterator::operator--()
+{
+ --(*impl);
+ return *this;
+}
+
+QPDFNameTreeObjectHelper::iterator::reference
+QPDFNameTreeObjectHelper::iterator::operator*()
+{
+ auto p = **impl;
+ return std::make_pair(p.first.getUTF8Value(), p.second);
+}
+
+bool
+QPDFNameTreeObjectHelper::iterator::operator==(iterator const& other) const
+{
+ return *(impl) == *(other.impl);
+}
+
+QPDFNameTreeObjectHelper::iterator
+QPDFNameTreeObjectHelper::begin() const
+{
+ return iterator(std::make_shared<NNTreeIterator>(this->m->impl->begin()));
+}
+
+QPDFNameTreeObjectHelper::iterator
+QPDFNameTreeObjectHelper::end() const
+{
+ return iterator(std::make_shared<NNTreeIterator>(this->m->impl->end()));
+}
+
+QPDFNameTreeObjectHelper::iterator
+QPDFNameTreeObjectHelper::last() const
+{
+ return iterator(std::make_shared<NNTreeIterator>(this->m->impl->last()));
+}
+
+QPDFNameTreeObjectHelper::iterator
+QPDFNameTreeObjectHelper::find(std::string const& key,
+ bool return_prev_if_not_found)
+{
+ auto i = this->m->impl->find(QPDFObjectHandle::newUnicodeString(key),
+ return_prev_if_not_found);
+ return iterator(std::make_shared<NNTreeIterator>(i));
+}
+
bool
QPDFNameTreeObjectHelper::hasName(std::string const& name)
{
- auto i = this->m->impl->find(QPDFObjectHandle::newUnicodeString(name));
- return (i != this->m->impl->end());
+ auto i = find(name);
+ return (i != end());
}
bool
QPDFNameTreeObjectHelper::findObject(
std::string const& name, QPDFObjectHandle& oh)
{
- auto i = this->m->impl->find(QPDFObjectHandle::newUnicodeString(name));
- if (i == this->m->impl->end())
+ auto i = find(name);
+ if (i == end())
{
return false;
}
@@ -72,11 +138,6 @@ std::map<std::string, QPDFObjectHandle>
QPDFNameTreeObjectHelper::getAsMap() const
{
std::map<std::string, QPDFObjectHandle> result;
- for (auto i: *(this->m->impl))
- {
- result.insert(
- std::make_pair(i.first.getUTF8Value(),
- i.second));
- }
+ result.insert(begin(), end());
return result;
}