Commit 0f0747b3ae9b2b74d337f92c2861a11e0d0573d4
1 parent
965f0fcd
Refactor QPDF::getXRefTable
Showing
3 changed files
with
25 additions
and
32 deletions
include/qpdf/QPDF.hh
| @@ -827,7 +827,6 @@ class QPDF | @@ -827,7 +827,6 @@ class QPDF | ||
| 827 | 827 | ||
| 828 | // For QPDFWriter: | 828 | // For QPDFWriter: |
| 829 | 829 | ||
| 830 | - std::map<QPDFObjGen, QPDFXRefEntry> getXRefTableInternal(); | ||
| 831 | template <typename T> | 830 | template <typename T> |
| 832 | void optimize_internal( | 831 | void optimize_internal( |
| 833 | T const& object_stream_data, | 832 | T const& object_stream_data, |
libqpdf/QPDF.cc
| @@ -1410,6 +1410,30 @@ QPDF::Xref_table::at_offset(qpdf_offset_t offset) const noexcept | @@ -1410,6 +1410,30 @@ QPDF::Xref_table::at_offset(qpdf_offset_t offset) const noexcept | ||
| 1410 | return QPDFObjGen(id, gen); | 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 | void | 1437 | void |
| 1414 | QPDF::showXRefTable() | 1438 | QPDF::showXRefTable() |
| 1415 | { | 1439 | { |
| @@ -2602,16 +2626,9 @@ QPDF::getRoot() | @@ -2602,16 +2626,9 @@ QPDF::getRoot() | ||
| 2602 | std::map<QPDFObjGen, QPDFXRefEntry> | 2626 | std::map<QPDFObjGen, QPDFXRefEntry> |
| 2603 | QPDF::getXRefTable() | 2627 | QPDF::getXRefTable() |
| 2604 | { | 2628 | { |
| 2605 | - return getXRefTableInternal(); | ||
| 2606 | -} | ||
| 2607 | - | ||
| 2608 | -std::map<QPDFObjGen, QPDFXRefEntry> | ||
| 2609 | -QPDF::getXRefTableInternal() | ||
| 2610 | -{ | ||
| 2611 | if (!m->xref_table.initialized()) { | 2629 | if (!m->xref_table.initialized()) { |
| 2612 | throw std::logic_error("QPDF::getXRefTable called before parsing."); | 2630 | throw std::logic_error("QPDF::getXRefTable called before parsing."); |
| 2613 | } | 2631 | } |
| 2614 | - | ||
| 2615 | return m->xref_table.as_map(); | 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,30 +89,7 @@ class QPDF::Xref_table | ||
| 89 | 89 | ||
| 90 | QPDFObjGen at_offset(qpdf_offset_t offset) const noexcept; | 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 | bool | 94 | bool |
| 118 | object_streams() const noexcept | 95 | object_streams() const noexcept |