diff options
author | m-holger <m-holger@kubitscheck.org> | 2024-01-04 13:20:15 +0100 |
---|---|---|
committer | m-holger <m-holger@kubitscheck.org> | 2024-01-07 17:39:03 +0100 |
commit | 61954995983f2881c07c8ea993819c60ff1e6e63 (patch) | |
tree | 9f13c7e7fde49bcd83a732d1a106be5111134588 /libqpdf/QPDF.cc | |
parent | 162716807c475498dfbecc89fd222fb6c45d70c9 (diff) | |
download | qpdf-61954995983f2881c07c8ea993819c60ff1e6e63.tar.zst |
Tune QPDF::getCompressibleObjGens
Swap front and back, and change queue from list to vector
Diffstat (limited to 'libqpdf/QPDF.cc')
-rw-r--r-- | libqpdf/QPDF.cc | 15 |
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)); } } } |