Commit 0f0747b3ae9b2b74d337f92c2861a11e0d0573d4

Authored by m-holger
1 parent 965f0fcd

Refactor QPDF::getXRefTable

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