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 2377 QPDFObjGen encryption_dict_og = encryption_dict.getObjGen();
2378 2378  
2379 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 2383 std::vector<QPDFObjGen> result;
2383 2384 while (!queue.empty()) {
2384   - QPDFObjectHandle obj = queue.front();
2385   - queue.pop_front();
  2385 + QPDFObjectHandle obj = queue.back();
  2386 + queue.pop_back();
2386 2387 if (obj.isIndirect()) {
2387 2388 QPDFObjGen og = obj.getObjGen();
2388 2389 if (!visited.add(og)) {
... ... @@ -2409,18 +2410,18 @@ QPDF::getCompressibleObjGens()
2409 2410 QTC::TC("qpdf", "QPDF exclude indirect length");
2410 2411 }
2411 2412 } else {
2412   - queue.push_front(value);
  2413 + queue.push_back(value);
2413 2414 }
2414 2415 }
2415 2416 } else if (obj.isDictionary()) {
2416 2417 std::set<std::string> keys = obj.getKeys();
2417 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 2421 } else if (obj.isArray()) {
2421 2422 int n = obj.getArrayNItems();
2422 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 }
... ...