aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/SparseOHArray.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-12-10 20:48:07 +0100
committerm-holger <m-holger@kubitscheck.org>2023-04-01 14:56:10 +0200
commit1bb23d0545dfe2d651cb22b6135d99c1c9ef85d5 (patch)
tree8d9a96312225de8fa70d768bf5f6249e779fbe22 /libqpdf/SparseOHArray.cc
parentcedb37caa153abfd92a91b2e39a6f32601be826c (diff)
downloadqpdf-1bb23d0545dfe2d651cb22b6135d99c1c9ef85d5.tar.zst
Refactor QPDF_Array::insertItem and rename to insert
Diffstat (limited to 'libqpdf/SparseOHArray.cc')
-rw-r--r--libqpdf/SparseOHArray.cc22
1 files changed, 11 insertions, 11 deletions
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;
}
}