From 5816fb44b8ce24e8bb58cb30792e1c763d6cb163 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sun, 24 Jan 2021 04:16:48 -0500 Subject: name/number trees: insertAfter --- libqpdf/NNTree.cc | 10 +++++++++- libqpdf/QPDFNameTreeObjectHelper.cc | 7 +++++++ libqpdf/QPDFNumberTreeObjectHelper.cc | 7 +++++++ 3 files changed, 23 insertions(+), 1 deletion(-) (limited to 'libqpdf') diff --git a/libqpdf/NNTree.cc b/libqpdf/NNTree.cc index 05398602..02237939 100644 --- a/libqpdf/NNTree.cc +++ b/libqpdf/NNTree.cc @@ -444,6 +444,14 @@ NNTreeIterator::lastPathElement() void NNTreeIterator::insertAfter(QPDFObjectHandle key, QPDFObjectHandle value) { + if (! valid()) + { + QTC::TC("qpdf", "NNTree insertAfter inserts first"); + impl.insertFirst(key, value); + deepen(impl.oh, true, false); + return; + } + auto items = this->node.getKey(impl.details.itemsKey()); if (! items.isArray()) { @@ -457,6 +465,7 @@ NNTreeIterator::insertAfter(QPDFObjectHandle key, QPDFObjectHandle value) items.insertItem(this->item_number + 3, value); resetLimits(this->node, lastPathElement()); split(this->node, lastPathElement()); + increment(false); } NNTreeIterator& @@ -968,7 +977,6 @@ NNTreeImpl::insert(QPDFObjectHandle key, QPDFObjectHandle value) { QTC::TC("qpdf", "NNTree insert inserts after"); iter.insertAfter(key, value); - ++iter; } return iter; } diff --git a/libqpdf/QPDFNameTreeObjectHelper.cc b/libqpdf/QPDFNameTreeObjectHelper.cc index ffcf95a3..c43281bd 100644 --- a/libqpdf/QPDFNameTreeObjectHelper.cc +++ b/libqpdf/QPDFNameTreeObjectHelper.cc @@ -102,6 +102,13 @@ QPDFNameTreeObjectHelper::iterator::operator==(iterator const& other) const return *(impl) == *(other.impl); } +void +QPDFNameTreeObjectHelper::iterator::insertAfter( + std::string const& key, QPDFObjectHandle value) +{ + impl->insertAfter(QPDFObjectHandle::newUnicodeString(key), value); +} + QPDFNameTreeObjectHelper::iterator QPDFNameTreeObjectHelper::begin() const { diff --git a/libqpdf/QPDFNumberTreeObjectHelper.cc b/libqpdf/QPDFNumberTreeObjectHelper.cc index 053fa421..ceda9482 100644 --- a/libqpdf/QPDFNumberTreeObjectHelper.cc +++ b/libqpdf/QPDFNumberTreeObjectHelper.cc @@ -98,6 +98,13 @@ QPDFNumberTreeObjectHelper::iterator::operator==(iterator const& other) const return *(impl) == *(other.impl); } +void +QPDFNumberTreeObjectHelper::iterator::insertAfter( + numtree_number key, QPDFObjectHandle value) +{ + impl->insertAfter(QPDFObjectHandle::newInteger(key), value); +} + QPDFNumberTreeObjectHelper::iterator QPDFNumberTreeObjectHelper::begin() const { -- cgit v1.2.3-70-g09d2