Commit 0f0747b3ae9b2b74d337f92c2861a11e0d0573d4

Authored by m-holger
1 parent 965f0fcd

Refactor QPDF::getXRefTable

include/qpdf/QPDF.hh
... ... @@ -827,7 +827,6 @@ class QPDF
827 827  
828 828 // For QPDFWriter:
829 829  
830   - std::map<QPDFObjGen, QPDFXRefEntry> getXRefTableInternal();
831 830 template <typename T>
832 831 void optimize_internal(
833 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 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
... ...