Commit 1edbed57016f8aa1b98ebef679f42f3aa091174a

Authored by m-holger
1 parent ae90619f

Refactor `QPDF::getAllPages` and `Pages` methods: move implementation to new `Pa…

…ges::all` method, add `Pages::size` and `empty` methods, move `getAllPagesInternal` to private section, streamline encapsulation, and enhance code organization.
libqpdf/QPDF_pages.cc
@@ -42,10 +42,16 @@ using Pages = QPDF::Doc::Pages; @@ -42,10 +42,16 @@ using Pages = QPDF::Doc::Pages;
42 std::vector<QPDFObjectHandle> const& 42 std::vector<QPDFObjectHandle> const&
43 QPDF::getAllPages() 43 QPDF::getAllPages()
44 { 44 {
  45 + return m->pages.all();
  46 +}
  47 +
  48 +std::vector<QPDFObjectHandle> const&
  49 +Pages::all()
  50 +{
45 // Note that pushInheritedAttributesToPage may also be used to initialize m->all_pages. 51 // Note that pushInheritedAttributesToPage may also be used to initialize m->all_pages.
46 if (m->all_pages.empty() && !m->invalid_page_found) { 52 if (m->all_pages.empty() && !m->invalid_page_found) {
47 m->ever_called_get_all_pages = true; 53 m->ever_called_get_all_pages = true;
48 - auto root = getRoot(); 54 + auto root = qpdf.getRoot();
49 QPDFObjGen::set visited; 55 QPDFObjGen::set visited;
50 QPDFObjGen::set seen; 56 QPDFObjGen::set seen;
51 QPDFObjectHandle pages = root.getKey("/Pages"); 57 QPDFObjectHandle pages = root.getKey("/Pages");
@@ -77,14 +83,14 @@ QPDF::getAllPages() @@ -77,14 +83,14 @@ QPDF::getAllPages()
77 qpdf_e_pages, m->file->getName(), "", 0, "root of pages tree has no /Kids array"); 83 qpdf_e_pages, m->file->getName(), "", 0, "root of pages tree has no /Kids array");
78 } 84 }
79 try { 85 try {
80 - m->pages.getAllPagesInternal(pages, visited, seen, false, false); 86 + getAllPagesInternal(pages, visited, seen, false, false);
81 } catch (...) { 87 } catch (...) {
82 m->all_pages.clear(); 88 m->all_pages.clear();
83 m->invalid_page_found = false; 89 m->invalid_page_found = false;
84 throw; 90 throw;
85 } 91 }
86 if (m->invalid_page_found) { 92 if (m->invalid_page_found) {
87 - m->pages.flattenPagesTree(); 93 + flattenPagesTree();
88 m->invalid_page_found = false; 94 m->invalid_page_found = false;
89 } 95 }
90 } 96 }
libqpdf/qpdf/QPDF_private.hh
@@ -867,12 +867,20 @@ class QPDF::Doc::Pages: Common @@ -867,12 +867,20 @@ class QPDF::Doc::Pages: Common
867 { 867 {
868 } 868 }
869 869
870 - void getAllPagesInternal(  
871 - QPDFObjectHandle cur_pages,  
872 - QPDFObjGen::set& visited,  
873 - QPDFObjGen::set& seen,  
874 - bool media_box,  
875 - bool resources); 870 + std::vector<QPDFObjectHandle> const& all();
  871 +
  872 + bool
  873 + empty()
  874 + {
  875 + return all().empty();
  876 + }
  877 +
  878 + size_t
  879 + size()
  880 + {
  881 + return all().size();
  882 + }
  883 +
876 void insertPage(QPDFObjectHandle newpage, int pos); 884 void insertPage(QPDFObjectHandle newpage, int pos);
877 void flattenPagesTree(); 885 void flattenPagesTree();
878 void insertPageobjToPage(QPDFObjectHandle const& obj, int pos, bool check_duplicate); 886 void insertPageobjToPage(QPDFObjectHandle const& obj, int pos, bool check_duplicate);
@@ -882,6 +890,15 @@ class QPDF::Doc::Pages: Common @@ -882,6 +890,15 @@ class QPDF::Doc::Pages: Common
882 std::map<std::string, std::vector<QPDFObjectHandle>>&, 890 std::map<std::string, std::vector<QPDFObjectHandle>>&,
883 bool allow_changes, 891 bool allow_changes,
884 bool warn_skipped_keys); 892 bool warn_skipped_keys);
  893 +
  894 + private:
  895 + void getAllPagesInternal(
  896 + QPDFObjectHandle cur_pages,
  897 + QPDFObjGen::set& visited,
  898 + QPDFObjGen::set& seen,
  899 + bool media_box,
  900 + bool resources);
  901 +
885 }; // class QPDF::Doc::Pages 902 }; // class QPDF::Doc::Pages
886 903
887 class QPDF::Members: Doc 904 class QPDF::Members: Doc