From 1bb23d0545dfe2d651cb22b6135d99c1c9ef85d5 Mon Sep 17 00:00:00 2001 From: m-holger Date: Sat, 10 Dec 2022 19:48:07 +0000 Subject: Refactor QPDF_Array::insertItem and rename to insert --- libqpdf/SparseOHArray.cc | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'libqpdf/SparseOHArray.cc') diff --git a/libqpdf/SparseOHArray.cc b/libqpdf/SparseOHArray.cc index 48716deb..8f6c02d7 100644 --- a/libqpdf/SparseOHArray.cc +++ b/libqpdf/SparseOHArray.cc @@ -64,23 +64,23 @@ SparseOHArray::erase(int idx) void SparseOHArray::insert(int idx, QPDFObjectHandle oh) { - if (idx > this->n_elements) { - throw std::logic_error("bounds error inserting item to SparseOHArray"); - } else if (idx == this->n_elements) { + if (idx == n_elements) { // Allow inserting to the last position append(oh); } else { - decltype(this->elements) dest; - for (auto const& iter: this->elements) { - if (iter.first < idx) { - dest.insert(iter); + auto iter = elements.crbegin(); + while (iter != elements.crend()) { + auto key = (iter++)->first; + if (key >= idx) { + auto nh = elements.extract(key); + ++nh.key(); + elements.insert(std::move(nh)); } else { - dest[iter.first + 1] = iter.second; + break; } } - this->elements = dest; - this->elements[idx] = oh.getObj(); - ++this->n_elements; + elements[idx] = oh.getObj(); + ++n_elements; } } -- cgit v1.2.3-70-g09d2