From 61954995983f2881c07c8ea993819c60ff1e6e63 Mon Sep 17 00:00:00 2001 From: m-holger Date: Thu, 4 Jan 2024 12:20:15 +0000 Subject: Tune QPDF::getCompressibleObjGens Swap front and back, and change queue from list to vector --- libqpdf/QPDF.cc | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'libqpdf') 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 queue; - queue.push_front(m->trailer); + std::vector queue; + queue.reserve(512); + queue.push_back(m->trailer); std::vector 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 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)); } } } -- cgit v1.2.3-54-g00ecf