aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2020-04-03 02:10:31 +0200
committerJay Berkenbilt <ejb@ql.org>2020-04-03 18:16:24 +0200
commitbfda94151950c9dfd930e1d780d6f16b2dfd4501 (patch)
tree191007f650b1d7edd97a14d44ee7170484fb7d63 /libqpdf
parentee271fd2f21714d6ef8cb3ebbc158de9dac24c9f (diff)
downloadqpdf-bfda94151950c9dfd930e1d780d6f16b2dfd4501.tar.zst
Use an unordered map for SparseOHArray for efficiency
This was added in C++11.
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/SparseOHArray.cc16
-rw-r--r--libqpdf/qpdf/SparseOHArray.hh6
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<size_t, QPDFObjectHandle>::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<size_t, QPDFObjectHandle>::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<size_t, QPDFObjectHandle> dest;
- for (std::map<size_t, QPDFObjectHandle>::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<size_t, QPDFObjectHandle> dest;
- for (std::map<size_t, QPDFObjectHandle>::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 <qpdf/QPDFObjectHandle.hh>
-#include <map>
+#include <unordered_map>
class SparseOHArray
{
@@ -26,14 +26,14 @@ class SparseOHArray
QPDF_DLL
void insert(size_t idx, QPDFObjectHandle oh);
- typedef std::map<size_t, QPDFObjectHandle>::const_iterator const_iterator;
+ typedef std::unordered_map<size_t, QPDFObjectHandle>::const_iterator const_iterator;
QPDF_DLL
const_iterator begin() const;
QPDF_DLL
const_iterator end() const;
private:
- std::map<size_t, QPDFObjectHandle> elements;
+ std::unordered_map<size_t, QPDFObjectHandle> elements;
size_t n_elements;
};