Commit 361f147fd16f16db227899be45551951933191f0
1 parent
92d076ed
Refactor `Pages` interface: replace `.all()` with iterator-based access, add `be…
…gin`/`end` methods, update calls across codebase, and streamline page handling logic.
Showing
7 changed files
with
30 additions
and
21 deletions
libqpdf/QPDFJob.cc
| ... | ... | @@ -855,7 +855,7 @@ QPDFJob::doShowPages(QPDF& pdf) |
| 855 | 855 | { |
| 856 | 856 | int pageno = 0; |
| 857 | 857 | auto& cout = *m->log->getInfo(); |
| 858 | - for (auto& page: pdf.doc().pages().all()) { | |
| 858 | + for (auto& page: pdf.doc().pages()) { | |
| 859 | 859 | QPDFPageObjectHelper ph(page); |
| 860 | 860 | ++pageno; |
| 861 | 861 | |
| ... | ... | @@ -1050,7 +1050,7 @@ QPDFJob::doJSONPages(Pipeline* p, bool& first, QPDF& pdf) |
| 1050 | 1050 | auto& pldh = doc.page_labels(); |
| 1051 | 1051 | auto& odh = doc.outlines(); |
| 1052 | 1052 | int pageno = -1; |
| 1053 | - for (auto& page: doc.pages().all()) { | |
| 1053 | + for (auto& page: doc.pages()) { | |
| 1054 | 1054 | ++pageno; |
| 1055 | 1055 | JSON j_page = JSON::makeDictionary(); |
| 1056 | 1056 | QPDFPageObjectHelper ph(page); |
| ... | ... | @@ -1112,7 +1112,7 @@ QPDFJob::doJSONPageLabels(Pipeline* p, bool& first, QPDF& pdf) |
| 1112 | 1112 | auto& doc = pdf.doc(); |
| 1113 | 1113 | JSON j_labels = JSON::makeArray(); |
| 1114 | 1114 | auto& pldh = doc.page_labels(); |
| 1115 | - long long npages = QIntC::to_longlong(doc.pages().all().size()); | |
| 1115 | + long long npages = QIntC::to_longlong(doc.pages().size()); | |
| 1116 | 1116 | if (pldh.hasPageLabels()) { |
| 1117 | 1117 | std::vector<QPDFObjectHandle> labels; |
| 1118 | 1118 | pldh.getLabelsForPageRange(0, npages - 1, 0, labels); |
| ... | ... | @@ -1161,7 +1161,7 @@ QPDFJob::doJSONOutlines(Pipeline* p, bool& first, QPDF& pdf) |
| 1161 | 1161 | auto& doc = pdf.doc(); |
| 1162 | 1162 | std::map<QPDFObjGen, int> page_numbers; |
| 1163 | 1163 | int n = 0; |
| 1164 | - for (auto const& oh: doc.pages().all()) { | |
| 1164 | + for (auto const& oh: doc.pages()) { | |
| 1165 | 1165 | page_numbers[oh] = ++n; |
| 1166 | 1166 | } |
| 1167 | 1167 | |
| ... | ... | @@ -1180,7 +1180,7 @@ QPDFJob::doJSONAcroform(Pipeline* p, bool& first, QPDF& pdf) |
| 1180 | 1180 | j_acroform.addDictionaryMember("needappearances", JSON::makeBool(afdh.getNeedAppearances())); |
| 1181 | 1181 | JSON j_fields = j_acroform.addDictionaryMember("fields", JSON::makeArray()); |
| 1182 | 1182 | int pagepos1 = 0; |
| 1183 | - for (auto const& page: doc.pages().all()) { | |
| 1183 | + for (auto const& page: doc.pages()) { | |
| 1184 | 1184 | ++pagepos1; |
| 1185 | 1185 | for (auto& aoh: afdh.getWidgetAnnotationsForPage({page})) { |
| 1186 | 1186 | QPDFFormFieldObjectHelper ffh = afdh.getFieldForAnnotation(aoh); |
| ... | ... | @@ -1858,8 +1858,8 @@ QPDFJob::validateUnderOverlay(QPDF& pdf, UnderOverlay* uo) |
| 1858 | 1858 | { |
| 1859 | 1859 | processFile(uo->pdf, uo->filename.data(), uo->password.data(), true, false); |
| 1860 | 1860 | try { |
| 1861 | - uo->to_pagenos = QUtil::parse_numrange( | |
| 1862 | - uo->to_nr.data(), static_cast<int>(pdf.doc().pages().all().size())); | |
| 1861 | + uo->to_pagenos = | |
| 1862 | + QUtil::parse_numrange(uo->to_nr.data(), static_cast<int>(pdf.doc().pages().size())); | |
| 1863 | 1863 | } catch (std::runtime_error& e) { |
| 1864 | 1864 | throw std::runtime_error( |
| 1865 | 1865 | "parsing numeric range for " + uo->which + " \"to\" pages: " + e.what()); |
| ... | ... | @@ -2355,8 +2355,8 @@ void |
| 2355 | 2355 | QPDFJob::Input::initialize(Inputs& in, QPDF* a_qpdf) |
| 2356 | 2356 | { |
| 2357 | 2357 | qpdf = a_qpdf ? a_qpdf : qpdf_p.get(); |
| 2358 | - auto& doc = qpdf->doc(); | |
| 2359 | 2358 | if (qpdf) { |
| 2359 | + auto& doc = qpdf->doc(); | |
| 2360 | 2360 | orig_pages = doc.pages().all(); |
| 2361 | 2361 | n_pages = static_cast<int>(orig_pages.size()); |
| 2362 | 2362 | copied_pages = std::vector<bool>(orig_pages.size(), false); | ... | ... |
libqpdf/QPDFPageDocumentHelper.cc
| ... | ... | @@ -30,12 +30,7 @@ std::vector<QPDFPageObjectHelper> |
| 30 | 30 | QPDFPageDocumentHelper::getAllPages() |
| 31 | 31 | { |
| 32 | 32 | auto& pp = qpdf.doc().pages(); |
| 33 | - std::vector<QPDFPageObjectHelper> pages; | |
| 34 | - pages.reserve(pp.size()); | |
| 35 | - for (auto const& iter: pp.all()) { | |
| 36 | - pages.emplace_back(iter); | |
| 37 | - } | |
| 38 | - return pages; | |
| 33 | + return {pp.begin(), pp.end()}; | |
| 39 | 34 | } |
| 40 | 35 | |
| 41 | 36 | void | ... | ... |
libqpdf/QPDFWriter.cc
| ... | ... | @@ -2128,7 +2128,7 @@ QPDFWriter::Members::initializeSpecialStreams() |
| 2128 | 2128 | { |
| 2129 | 2129 | // Mark all page content streams in case we are filtering or normalizing. |
| 2130 | 2130 | int num = 0; |
| 2131 | - for (auto& page: pages.all()) { | |
| 2131 | + for (auto& page: pages) { | |
| 2132 | 2132 | page_object_to_seq[page.getObjGen()] = ++num; |
| 2133 | 2133 | QPDFObjectHandle contents = page.getKey("/Contents"); |
| 2134 | 2134 | std::vector<QPDFObjGen> contents_objects; |
| ... | ... | @@ -2380,7 +2380,7 @@ QPDFWriter::Members::doWriteSetup() |
| 2380 | 2380 | if (!obj.streams_empty) { |
| 2381 | 2381 | if (linearized) { |
| 2382 | 2382 | // Page dictionaries are not allowed to be compressed objects. |
| 2383 | - for (auto& page: qpdf.doc().pages().all()) { | |
| 2383 | + for (auto& page: pages) { | |
| 2384 | 2384 | if (obj[page].object_stream > 0) { |
| 2385 | 2385 | obj[page].object_stream = 0; |
| 2386 | 2386 | } |
| ... | ... | @@ -3133,7 +3133,7 @@ QPDFWriter::Members::enqueueObjectsPCLm() |
| 3133 | 3133 | std::string image_transform_content = "q /image Do Q\n"; |
| 3134 | 3134 | |
| 3135 | 3135 | // enqueue all pages first |
| 3136 | - for (auto& page: pages.all()) { | |
| 3136 | + for (auto& page: pages) { | |
| 3137 | 3137 | // enqueue page |
| 3138 | 3138 | enqueueObject(page); |
| 3139 | 3139 | ... | ... |
libqpdf/QPDF_linearization.cc
| ... | ... | @@ -1108,7 +1108,7 @@ Lin::calculateLinearizationData(T const& object_stream_data) |
| 1108 | 1108 | { // local scope |
| 1109 | 1109 | // Map all page objects to the containing object stream. This should be a no-op in a |
| 1110 | 1110 | // properly linearized file. |
| 1111 | - for (auto oh: pages.all()) { | |
| 1111 | + for (auto oh: pages) { | |
| 1112 | 1112 | uc_pages.emplace_back(getUncompressedObject(oh, object_stream_data)); |
| 1113 | 1113 | } |
| 1114 | 1114 | } | ... | ... |
libqpdf/QPDF_optimization.cc
| ... | ... | @@ -99,7 +99,7 @@ Lin::optimize_internal( |
| 99 | 99 | // Traverse pages |
| 100 | 100 | |
| 101 | 101 | size_t n = 0; |
| 102 | - for (auto const& page: m->pages.all()) { | |
| 102 | + for (auto const& page: m->pages) { | |
| 103 | 103 | updateObjectMaps(ObjUser(ObjUser::ou_page, n), page, skip_stream_parameters); |
| 104 | 104 | ++n; |
| 105 | 105 | } | ... | ... |
libqpdf/QPDF_pages.cc
| ... | ... | @@ -494,7 +494,7 @@ QPDF::removePage(QPDFObjectHandle page) |
| 494 | 494 | } |
| 495 | 495 | |
| 496 | 496 | void |
| 497 | -Pages ::erase(QPDFObjectHandle& page) | |
| 497 | +Pages::erase(QPDFObjectHandle& page) | |
| 498 | 498 | { |
| 499 | 499 | int pos = qpdf.findPage(page); // also ensures flat /Pages |
| 500 | 500 | QTC::TC( |
| ... | ... | @@ -551,7 +551,7 @@ QPDF::findPage(QPDFObjGen og) |
| 551 | 551 | } |
| 552 | 552 | |
| 553 | 553 | int |
| 554 | -Pages ::find(QPDFObjGen og) | |
| 554 | +Pages::find(QPDFObjGen og) | |
| 555 | 555 | { |
| 556 | 556 | flattenPagesTree(); |
| 557 | 557 | auto it = pageobj_to_pages_pos.find(og); | ... | ... |
libqpdf/qpdf/QPDF_private.hh
| ... | ... | @@ -853,6 +853,8 @@ class QPDF::Doc::Objects: Common |
| 853 | 853 | class QPDF::Doc::Pages: Common |
| 854 | 854 | { |
| 855 | 855 | public: |
| 856 | + using iterator = std::vector<QPDFObjectHandle>::const_iterator; | |
| 857 | + | |
| 856 | 858 | Pages() = delete; |
| 857 | 859 | Pages(Pages const&) = delete; |
| 858 | 860 | Pages(Pages&&) = delete; |
| ... | ... | @@ -883,6 +885,18 @@ class QPDF::Doc::Pages: Common |
| 883 | 885 | return all().size(); |
| 884 | 886 | } |
| 885 | 887 | |
| 888 | + iterator | |
| 889 | + begin() | |
| 890 | + { | |
| 891 | + return all().cbegin(); | |
| 892 | + } | |
| 893 | + | |
| 894 | + iterator | |
| 895 | + end() | |
| 896 | + { | |
| 897 | + return all().cend(); | |
| 898 | + } | |
| 899 | + | |
| 886 | 900 | int find(QPDFObjGen og); |
| 887 | 901 | void erase(QPDFObjectHandle& page); |
| 888 | 902 | void update_cache(); | ... | ... |