diff options
author | m-holger <m-holger@kubitscheck.org> | 2022-11-16 19:50:13 +0100 |
---|---|---|
committer | m-holger <m-holger@kubitscheck.org> | 2023-04-01 13:25:06 +0200 |
commit | e6db8ddeba560cd472f34be2e20e31ea2f4bfee3 (patch) | |
tree | a40edd1dfcca0e9e46140d7f93a6341d0cf9db1d /libqpdf/SparseOHArray.cc | |
parent | ea5164938e77cb968003fe06f98b87f648319bbf (diff) | |
download | qpdf-e6db8ddeba560cd472f34be2e20e31ea2f4bfee3.tar.zst |
Change SparseOHArray index type to int and elements type to map
There are no reasons other than historical to use size_t.
On balance, using map is more efficient. Hold shared pointers to
QPDFObjects rather than QPDFObjectHandles for consistencey with
QPDF_Array.
Diffstat (limited to 'libqpdf/SparseOHArray.cc')
-rw-r--r-- | libqpdf/SparseOHArray.cc | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/libqpdf/SparseOHArray.cc b/libqpdf/SparseOHArray.cc index 5f64f50b..7adba00f 100644 --- a/libqpdf/SparseOHArray.cc +++ b/libqpdf/SparseOHArray.cc @@ -1,16 +1,8 @@ #include <qpdf/SparseOHArray.hh> -#include <qpdf/QPDFObjectHandle.hh> -#include <qpdf/QPDFObject_private.hh> - #include <stdexcept> -SparseOHArray::SparseOHArray() : - n_elements(0) -{ -} - -size_t +int SparseOHArray::size() const { return this->n_elements; @@ -20,7 +12,7 @@ void SparseOHArray::append(QPDFObjectHandle oh) { if (!oh.isDirectNull()) { - this->elements[this->n_elements] = oh; + this->elements[this->n_elements] = oh.getObj(); } ++this->n_elements; } @@ -35,9 +27,9 @@ SparseOHArray::append(std::shared_ptr<QPDFObject>&& obj) } QPDFObjectHandle -SparseOHArray::at(size_t idx) const +SparseOHArray::at(int idx) const { - if (idx >= this->n_elements) { + if (idx < 0 || idx >= this->n_elements) { throw std::logic_error( "INTERNAL ERROR: bounds error accessing SparseOHArray element"); } @@ -69,7 +61,7 @@ SparseOHArray::disconnect() } void -SparseOHArray::setAt(size_t idx, QPDFObjectHandle oh) +SparseOHArray::setAt(int idx, QPDFObjectHandle oh) { if (idx >= this->n_elements) { throw std::logic_error("bounds error setting item in SparseOHArray"); @@ -77,12 +69,12 @@ SparseOHArray::setAt(size_t idx, QPDFObjectHandle oh) if (oh.isDirectNull()) { this->elements.erase(idx); } else { - this->elements[idx] = oh; + this->elements[idx] = oh.getObj(); } } void -SparseOHArray::erase(size_t idx) +SparseOHArray::erase(int idx) { if (idx >= this->n_elements) { throw std::logic_error("bounds error erasing item from SparseOHArray"); @@ -100,7 +92,7 @@ SparseOHArray::erase(size_t idx) } void -SparseOHArray::insert(size_t idx, QPDFObjectHandle oh) +SparseOHArray::insert(int idx, QPDFObjectHandle oh) { if (idx > this->n_elements) { throw std::logic_error("bounds error inserting item to SparseOHArray"); @@ -117,7 +109,7 @@ SparseOHArray::insert(size_t idx, QPDFObjectHandle oh) } } this->elements = dest; - this->elements[idx] = oh; + this->elements[idx] = oh.getObj(); ++this->n_elements; } } @@ -130,7 +122,7 @@ SparseOHArray::copy() for (auto const& element: this->elements) { auto value = element.second; result.elements[element.first] = - value.isIndirect() ? value : value.shallowCopy(); + value->getObjGen().isIndirect() ? value : value->copy(); } return result; } |