aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2024-01-04 13:20:15 +0100
committerm-holger <m-holger@kubitscheck.org>2024-01-07 17:39:03 +0100
commit61954995983f2881c07c8ea993819c60ff1e6e63 (patch)
tree9f13c7e7fde49bcd83a732d1a106be5111134588 /libqpdf
parent162716807c475498dfbecc89fd222fb6c45d70c9 (diff)
downloadqpdf-61954995983f2881c07c8ea993819c60ff1e6e63.tar.zst
Tune QPDF::getCompressibleObjGens
Swap front and back, and change queue from list to vector
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDF.cc15
1 files changed, 8 insertions, 7 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index c3643c72..2b1ca4fe 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -2377,12 +2377,13 @@ QPDF::getCompressibleObjGens()
QPDFObjGen encryption_dict_og = encryption_dict.getObjGen();
QPDFObjGen::set visited;
- std::list<QPDFObjectHandle> queue;
- queue.push_front(m->trailer);
+ std::vector<QPDFObjectHandle> queue;
+ queue.reserve(512);
+ queue.push_back(m->trailer);
std::vector<QPDFObjGen> result;
while (!queue.empty()) {
- QPDFObjectHandle obj = queue.front();
- queue.pop_front();
+ QPDFObjectHandle obj = queue.back();
+ queue.pop_back();
if (obj.isIndirect()) {
QPDFObjGen og = obj.getObjGen();
if (!visited.add(og)) {
@@ -2409,18 +2410,18 @@ QPDF::getCompressibleObjGens()
QTC::TC("qpdf", "QPDF exclude indirect length");
}
} else {
- queue.push_front(value);
+ queue.push_back(value);
}
}
} else if (obj.isDictionary()) {
std::set<std::string> keys = obj.getKeys();
for (auto iter = keys.rbegin(); iter != keys.rend(); ++iter) {
- queue.push_front(obj.getKey(*iter));
+ queue.push_back(obj.getKey(*iter));
}
} else if (obj.isArray()) {
int n = obj.getArrayNItems();
for (int i = 1; i <= n; ++i) {
- queue.push_front(obj.getArrayItem(n - i));
+ queue.push_back(obj.getArrayItem(n - i));
}
}
}