Commit 0f0747b3ae9b2b74d337f92c2861a11e0d0573d4
1 parent
965f0fcd
Refactor QPDF::getXRefTable
Showing
3 changed files
with
25 additions
and
32 deletions
include/qpdf/QPDF.hh
libqpdf/QPDF.cc
| ... | ... | @@ -1410,6 +1410,30 @@ QPDF::Xref_table::at_offset(qpdf_offset_t offset) const noexcept |
| 1410 | 1410 | return QPDFObjGen(id, gen); |
| 1411 | 1411 | } |
| 1412 | 1412 | |
| 1413 | +std::map<QPDFObjGen, QPDFXRefEntry> | |
| 1414 | +QPDF::Xref_table::as_map() const | |
| 1415 | +{ | |
| 1416 | + std::map<QPDFObjGen, QPDFXRefEntry> result; | |
| 1417 | + int i{0}; | |
| 1418 | + for (auto const& item: table) { | |
| 1419 | + switch (item.type()) { | |
| 1420 | + case 0: | |
| 1421 | + break; | |
| 1422 | + case 1: | |
| 1423 | + result.emplace(QPDFObjGen(i, item.gen()), item.offset()); | |
| 1424 | + break; | |
| 1425 | + case 2: | |
| 1426 | + result.emplace( | |
| 1427 | + QPDFObjGen(i, 0), QPDFXRefEntry(item.stream_number(), item.stream_index())); | |
| 1428 | + break; | |
| 1429 | + default: | |
| 1430 | + throw std::logic_error("Xref_table: invalid entry type"); | |
| 1431 | + } | |
| 1432 | + ++i; | |
| 1433 | + } | |
| 1434 | + return result; | |
| 1435 | +} | |
| 1436 | + | |
| 1413 | 1437 | void |
| 1414 | 1438 | QPDF::showXRefTable() |
| 1415 | 1439 | { |
| ... | ... | @@ -2602,16 +2626,9 @@ QPDF::getRoot() |
| 2602 | 2626 | std::map<QPDFObjGen, QPDFXRefEntry> |
| 2603 | 2627 | QPDF::getXRefTable() |
| 2604 | 2628 | { |
| 2605 | - return getXRefTableInternal(); | |
| 2606 | -} | |
| 2607 | - | |
| 2608 | -std::map<QPDFObjGen, QPDFXRefEntry> | |
| 2609 | -QPDF::getXRefTableInternal() | |
| 2610 | -{ | |
| 2611 | 2629 | if (!m->xref_table.initialized()) { |
| 2612 | 2630 | throw std::logic_error("QPDF::getXRefTable called before parsing."); |
| 2613 | 2631 | } |
| 2614 | - | |
| 2615 | 2632 | return m->xref_table.as_map(); |
| 2616 | 2633 | } |
| 2617 | 2634 | ... | ... |
libqpdf/qpdf/QPDF_private.hh
| ... | ... | @@ -89,30 +89,7 @@ class QPDF::Xref_table |
| 89 | 89 | |
| 90 | 90 | QPDFObjGen at_offset(qpdf_offset_t offset) const noexcept; |
| 91 | 91 | |
| 92 | - // Temporary access to underlying map | |
| 93 | - std::map<QPDFObjGen, QPDFXRefEntry> | |
| 94 | - as_map() | |
| 95 | - { | |
| 96 | - std::map<QPDFObjGen, QPDFXRefEntry> result; | |
| 97 | - int i{0}; | |
| 98 | - for (auto const& item: table) { | |
| 99 | - switch (item.type()) { | |
| 100 | - case 0: | |
| 101 | - break; | |
| 102 | - case 1: | |
| 103 | - result.emplace(QPDFObjGen(i, item.gen()), item.offset()); | |
| 104 | - break; | |
| 105 | - case 2: | |
| 106 | - result.emplace( | |
| 107 | - QPDFObjGen(i, 0), QPDFXRefEntry(item.stream_number(), item.stream_index())); | |
| 108 | - break; | |
| 109 | - default: | |
| 110 | - throw std::logic_error("Xref_table: invalid entry type"); | |
| 111 | - } | |
| 112 | - ++i; | |
| 113 | - } | |
| 114 | - return result; | |
| 115 | - } | |
| 92 | + std::map<QPDFObjGen, QPDFXRefEntry> as_map() const; | |
| 116 | 93 | |
| 117 | 94 | bool |
| 118 | 95 | object_streams() const noexcept | ... | ... |