Commit bfda94151950c9dfd930e1d780d6f16b2dfd4501

Authored by Jay Berkenbilt
1 parent ee271fd2

Use an unordered map for SparseOHArray for efficiency

This was added in C++11.
libqpdf/SparseOHArray.cc
... ... @@ -30,8 +30,7 @@ SparseOHArray::at(size_t idx) const
30 30 throw std::logic_error(
31 31 "INTERNAL ERROR: bounds error accessing SparseOHArray element");
32 32 }
33   - std::map<size_t, QPDFObjectHandle>::const_iterator iter =
34   - this->elements.find(idx);
  33 + auto iter = this->elements.find(idx);
35 34 if (iter == this->elements.end())
36 35 {
37 36 return QPDFObjectHandle::newNull();
... ... @@ -58,8 +57,7 @@ SparseOHArray::remove_last()
58 57 void
59 58 SparseOHArray::releaseResolved()
60 59 {
61   - for (std::map<size_t, QPDFObjectHandle>::iterator iter =
62   - this->elements.begin();
  60 + for (auto iter = this->elements.begin();
63 61 iter != this->elements.end(); ++iter)
64 62 {
65 63 QPDFObjectHandle::ReleaseResolver::releaseResolved((*iter).second);
... ... @@ -90,9 +88,8 @@ SparseOHArray::erase(size_t idx)
90 88 {
91 89 throw std::logic_error("bounds error erasing item from SparseOHArray");
92 90 }
93   - std::map<size_t, QPDFObjectHandle> dest;
94   - for (std::map<size_t, QPDFObjectHandle>::iterator iter =
95   - this->elements.begin();
  91 + decltype(this->elements) dest;
  92 + for (auto iter = this->elements.begin();
96 93 iter != this->elements.end(); ++iter)
97 94 {
98 95 if ((*iter).first < idx)
... ... @@ -122,9 +119,8 @@ SparseOHArray::insert(size_t idx, QPDFObjectHandle oh)
122 119 }
123 120 else
124 121 {
125   - std::map<size_t, QPDFObjectHandle> dest;
126   - for (std::map<size_t, QPDFObjectHandle>::iterator iter =
127   - this->elements.begin();
  122 + decltype(this->elements) dest;
  123 + for (auto iter = this->elements.begin();
128 124 iter != this->elements.end(); ++iter)
129 125 {
130 126 if ((*iter).first < idx)
... ...
libqpdf/qpdf/SparseOHArray.hh
... ... @@ -2,7 +2,7 @@
2 2 #define QPDF_SPARSEOHARRAY_HH
3 3  
4 4 #include <qpdf/QPDFObjectHandle.hh>
5   -#include <map>
  5 +#include <unordered_map>
6 6  
7 7 class SparseOHArray
8 8 {
... ... @@ -26,14 +26,14 @@ class SparseOHArray
26 26 QPDF_DLL
27 27 void insert(size_t idx, QPDFObjectHandle oh);
28 28  
29   - typedef std::map<size_t, QPDFObjectHandle>::const_iterator const_iterator;
  29 + typedef std::unordered_map<size_t, QPDFObjectHandle>::const_iterator const_iterator;
30 30 QPDF_DLL
31 31 const_iterator begin() const;
32 32 QPDF_DLL
33 33 const_iterator end() const;
34 34  
35 35 private:
36   - std::map<size_t, QPDFObjectHandle> elements;
  36 + std::unordered_map<size_t, QPDFObjectHandle> elements;
37 37 size_t n_elements;
38 38 };
39 39  
... ...