Commit 61954995983f2881c07c8ea993819c60ff1e6e63
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 | } |