From bfda94151950c9dfd930e1d780d6f16b2dfd4501 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Thu, 2 Apr 2020 20:10:31 -0400 Subject: Use an unordered map for SparseOHArray for efficiency This was added in C++11. --- libqpdf/SparseOHArray.cc | 16 ++++++---------- libqpdf/qpdf/SparseOHArray.hh | 6 +++--- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/libqpdf/SparseOHArray.cc b/libqpdf/SparseOHArray.cc index 05b44ee0..48ddce0f 100644 --- a/libqpdf/SparseOHArray.cc +++ b/libqpdf/SparseOHArray.cc @@ -30,8 +30,7 @@ SparseOHArray::at(size_t idx) const throw std::logic_error( "INTERNAL ERROR: bounds error accessing SparseOHArray element"); } - std::map::const_iterator iter = - this->elements.find(idx); + auto iter = this->elements.find(idx); if (iter == this->elements.end()) { return QPDFObjectHandle::newNull(); @@ -58,8 +57,7 @@ SparseOHArray::remove_last() void SparseOHArray::releaseResolved() { - for (std::map::iterator iter = - this->elements.begin(); + for (auto iter = this->elements.begin(); iter != this->elements.end(); ++iter) { QPDFObjectHandle::ReleaseResolver::releaseResolved((*iter).second); @@ -90,9 +88,8 @@ SparseOHArray::erase(size_t idx) { throw std::logic_error("bounds error erasing item from SparseOHArray"); } - std::map dest; - for (std::map::iterator iter = - this->elements.begin(); + decltype(this->elements) dest; + for (auto iter = this->elements.begin(); iter != this->elements.end(); ++iter) { if ((*iter).first < idx) @@ -122,9 +119,8 @@ SparseOHArray::insert(size_t idx, QPDFObjectHandle oh) } else { - std::map dest; - for (std::map::iterator iter = - this->elements.begin(); + decltype(this->elements) dest; + for (auto iter = this->elements.begin(); iter != this->elements.end(); ++iter) { if ((*iter).first < idx) diff --git a/libqpdf/qpdf/SparseOHArray.hh b/libqpdf/qpdf/SparseOHArray.hh index 6cd30ece..f23a871b 100644 --- a/libqpdf/qpdf/SparseOHArray.hh +++ b/libqpdf/qpdf/SparseOHArray.hh @@ -2,7 +2,7 @@ #define QPDF_SPARSEOHARRAY_HH #include -#include +#include class SparseOHArray { @@ -26,14 +26,14 @@ class SparseOHArray QPDF_DLL void insert(size_t idx, QPDFObjectHandle oh); - typedef std::map::const_iterator const_iterator; + typedef std::unordered_map::const_iterator const_iterator; QPDF_DLL const_iterator begin() const; QPDF_DLL const_iterator end() const; private: - std::map elements; + std::unordered_map elements; size_t n_elements; }; -- cgit v1.2.3-54-g00ecf