diff options
author | Jay Berkenbilt <ejb@ql.org> | 2021-01-16 18:11:17 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2021-01-24 09:22:59 +0100 |
commit | 5f0708418a0a9cbacc033f52efc11c759120fd09 (patch) | |
tree | 272e5d97b37b6c6d65653ad04d8dc768ef18041d /libqpdf | |
parent | 4a1cce0a470e6deed6dbeb6093e4e5c16f53439d (diff) | |
download | qpdf-5f0708418a0a9cbacc033f52efc11c759120fd09.tar.zst |
Add iterators to name/number tree helpers
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDFNameTreeObjectHelper.cc | 81 | ||||
-rw-r--r-- | libqpdf/QPDFNumberTreeObjectHelper.cc | 99 |
2 files changed, 151 insertions, 29 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; } 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; } |