diff options
author | m-holger <m-holger@kubitscheck.org> | 2022-12-12 14:29:52 +0100 |
---|---|---|
committer | m-holger <m-holger@kubitscheck.org> | 2023-04-01 14:56:16 +0200 |
commit | 4d37389befc705b671d8fa7a1da2b7117b50f454 (patch) | |
tree | 0fd25b3c7d60a75d5873b430fe801ac26e0f4a58 /libqpdf/SparseOHArray.cc | |
parent | 1bb23d0545dfe2d651cb22b6135d99c1c9ef85d5 (diff) | |
download | qpdf-4d37389befc705b671d8fa7a1da2b7117b50f454.tar.zst |
Refactor QPDF_Array::eraseItem and rename to erase
Diffstat (limited to 'libqpdf/SparseOHArray.cc')
-rw-r--r-- | libqpdf/SparseOHArray.cc | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/libqpdf/SparseOHArray.cc b/libqpdf/SparseOHArray.cc index 8f6c02d7..773d7309 100644 --- a/libqpdf/SparseOHArray.cc +++ b/libqpdf/SparseOHArray.cc @@ -44,21 +44,22 @@ SparseOHArray::setAt(int idx, QPDFObjectHandle oh) } void -SparseOHArray::erase(int idx) +SparseOHArray::erase(int at) { - if (idx >= this->n_elements) { - throw std::logic_error("bounds error erasing item from SparseOHArray"); - } - decltype(this->elements) dest; - for (auto const& iter: this->elements) { - if (iter.first < idx) { - dest.insert(iter); - } else if (iter.first > idx) { - dest[iter.first - 1] = iter.second; + auto end = elements.end(); + if (auto iter = elements.lower_bound(at); iter != end) { + if (iter->first == at) { + iter++; + elements.erase(at); + } + + while (iter != end) { + auto nh = elements.extract(iter++); + --nh.key(); + elements.insert(std::move(nh)); } } - this->elements = dest; - --this->n_elements; + --n_elements; } void |