Commit 61954995983f2881c07c8ea993819c60ff1e6e63

Authored by m-holger
1 parent 16271680

Tune QPDF::getCompressibleObjGens

Swap front and back, and change queue from list to vector
Showing 1 changed file with 8 additions and 7 deletions
libqpdf/QPDF.cc
@@ -2377,12 +2377,13 @@ QPDF::getCompressibleObjGens() @@ -2377,12 +2377,13 @@ QPDF::getCompressibleObjGens()
2377 QPDFObjGen encryption_dict_og = encryption_dict.getObjGen(); 2377 QPDFObjGen encryption_dict_og = encryption_dict.getObjGen();
2378 2378
2379 QPDFObjGen::set visited; 2379 QPDFObjGen::set visited;
2380 - std::list<QPDFObjectHandle> queue;  
2381 - queue.push_front(m->trailer); 2380 + std::vector<QPDFObjectHandle> queue;
  2381 + queue.reserve(512);
  2382 + queue.push_back(m->trailer);
2382 std::vector<QPDFObjGen> result; 2383 std::vector<QPDFObjGen> result;
2383 while (!queue.empty()) { 2384 while (!queue.empty()) {
2384 - QPDFObjectHandle obj = queue.front();  
2385 - queue.pop_front(); 2385 + QPDFObjectHandle obj = queue.back();
  2386 + queue.pop_back();
2386 if (obj.isIndirect()) { 2387 if (obj.isIndirect()) {
2387 QPDFObjGen og = obj.getObjGen(); 2388 QPDFObjGen og = obj.getObjGen();
2388 if (!visited.add(og)) { 2389 if (!visited.add(og)) {
@@ -2409,18 +2410,18 @@ QPDF::getCompressibleObjGens() @@ -2409,18 +2410,18 @@ QPDF::getCompressibleObjGens()
2409 QTC::TC("qpdf", "QPDF exclude indirect length"); 2410 QTC::TC("qpdf", "QPDF exclude indirect length");
2410 } 2411 }
2411 } else { 2412 } else {
2412 - queue.push_front(value); 2413 + queue.push_back(value);
2413 } 2414 }
2414 } 2415 }
2415 } else if (obj.isDictionary()) { 2416 } else if (obj.isDictionary()) {
2416 std::set<std::string> keys = obj.getKeys(); 2417 std::set<std::string> keys = obj.getKeys();
2417 for (auto iter = keys.rbegin(); iter != keys.rend(); ++iter) { 2418 for (auto iter = keys.rbegin(); iter != keys.rend(); ++iter) {
2418 - queue.push_front(obj.getKey(*iter)); 2419 + queue.push_back(obj.getKey(*iter));
2419 } 2420 }
2420 } else if (obj.isArray()) { 2421 } else if (obj.isArray()) {
2421 int n = obj.getArrayNItems(); 2422 int n = obj.getArrayNItems();
2422 for (int i = 1; i <= n; ++i) { 2423 for (int i = 1; i <= n; ++i) {
2423 - queue.push_front(obj.getArrayItem(n - i)); 2424 + queue.push_back(obj.getArrayItem(n - i));
2424 } 2425 }
2425 } 2426 }
2426 } 2427 }