diff --git a/libqpdf/NNTree.cc b/libqpdf/NNTree.cc index ee5ba25..1ee7f16 100644 --- a/libqpdf/NNTree.cc +++ b/libqpdf/NNTree.cc @@ -64,7 +64,7 @@ NNTreeIterator::updateIValue(bool allow_invalid) return; } - if (item_number < 0 || !node.isDictionary()) { + if (item_number < 0 || !node) { if (!allow_invalid) { throw std::logic_error( "attempt made to dereference an invalid name/number tree iterator"); @@ -74,12 +74,6 @@ NNTreeIterator::updateIValue(bool allow_invalid) impl.error(node, "update ivalue: items array is too short"); } -NNTreeIterator::PathElement::PathElement(QPDFObjectHandle const& node, int kid_number) : - node(node), - kid_number(kid_number) -{ -} - Dictionary NNTreeIterator::getNextKid(PathElement& pe, bool backward) { @@ -349,7 +343,7 @@ NNTreeIterator::insertAfter(QPDFObjectHandle const& key, QPDFObjectHandle const& return; } - Array items = node.getKey(impl.itemsKey()); + Array items = node[impl.itemsKey()]; if (!items) { impl.error(node, "node contains no items array"); } @@ -451,7 +445,7 @@ NNTreeIterator::remove() if (parent == path.end()) { // We erased the very last item. Convert the root to an empty items array. - element->node.removeKey("/Kids"); + element->node.erase("/Kids"); element->node.replaceKey(impl.itemsKey(), Array::empty()); path.clear(); setItemNumber(impl.tree_root, -1); diff --git a/libqpdf/qpdf/NNTree.hh b/libqpdf/qpdf/NNTree.hh index afc45ee..084e6da 100644 --- a/libqpdf/qpdf/NNTree.hh +++ b/libqpdf/qpdf/NNTree.hh @@ -81,9 +81,13 @@ class NNTreeIterator final class PathElement { public: - PathElement(QPDFObjectHandle const& node, int kid_number); + PathElement(qpdf::Dictionary const& node, int kid_number) : + node(node), + kid_number(kid_number) + { + } - QPDFObjectHandle node; + qpdf::Dictionary node; int kid_number; }; @@ -114,7 +118,7 @@ class NNTreeIterator final NNTreeImpl& impl; std::list path; - QPDFObjectHandle node; + qpdf::Dictionary node; int item_number{-1}; value_type ivalue; };