Commit b84375c46fb4d2ffe5308ee5989da60489514b24

Authored by m-holger
1 parent 68754ee8

Refactor `Pages::insertPage`: rename to `insert`, update parameter handling, inl…

…ine logic, update calls across codebase, and streamline method implementation.
libqpdf/QPDF_pages.cc
@@ -444,47 +444,46 @@ Pages::insertPageobjToPage(QPDFObjectHandle const& obj, int pos, bool check_dupl @@ -444,47 +444,46 @@ Pages::insertPageobjToPage(QPDFObjectHandle const& obj, int pos, bool check_dupl
444 } 444 }
445 445
446 void 446 void
447 -Pages::insertPage(QPDFObjectHandle newpage, int pos) 447 +Pages::insert(QPDFObjectHandle newpage, int pos)
448 { 448 {
449 // pos is numbered from 0, so pos = 0 inserts at the beginning and pos = npages adds to the end. 449 // pos is numbered from 0, so pos = 0 inserts at the beginning and pos = npages adds to the end.
450 450
451 flattenPagesTree(); 451 flattenPagesTree();
452 452
453 - if (!newpage.isIndirect()) { 453 + if (!newpage.indirect()) {
454 newpage = qpdf.makeIndirectObject(newpage); 454 newpage = qpdf.makeIndirectObject(newpage);
455 - } else if (newpage.getOwningQPDF() != &qpdf) {  
456 - newpage.getQPDF().pushInheritedAttributesToPage(); 455 + } else if (newpage.qpdf() != &qpdf) {
  456 + newpage.qpdf()->pushInheritedAttributesToPage();
457 newpage = qpdf.copyForeignObject(newpage); 457 newpage = qpdf.copyForeignObject(newpage);
458 } else { 458 } else {
459 QTC::TC("qpdf", "QPDF insert indirect page"); 459 QTC::TC("qpdf", "QPDF insert indirect page");
460 } 460 }
461 461
462 - if (pos < 0 || toS(pos) > all_pages.size()) { 462 + if (pos < 0 || std::cmp_greater(pos, all_pages.size())) {
463 throw std::runtime_error("QPDF::insertPage called with pos out of range"); 463 throw std::runtime_error("QPDF::insertPage called with pos out of range");
464 } 464 }
465 465
466 QTC::TC( 466 QTC::TC(
467 "qpdf", 467 "qpdf",
468 "QPDF insert page", 468 "QPDF insert page",
469 - (pos == 0) ? 0 : // insert at beginning  
470 - (pos == toI(all_pages.size())) ? 1 // at end  
471 - : 2); // insert in middle 469 + pos == 0 ? 0 : // insert at beginning
  470 + std::cmp_equal(pos, size()) ? 1 // at end
  471 + : 2); // insert in middle
472 472
473 - auto og = newpage.getObjGen();  
474 - if (pageobj_to_pages_pos.contains(og)) {  
475 - newpage = qpdf.makeIndirectObject(QPDFObjectHandle(newpage).shallowCopy()); 473 + if (pageobj_to_pages_pos.contains(newpage)) {
  474 + newpage = qpdf.makeIndirectObject(newpage.copy());
476 } 475 }
477 476
478 - QPDFObjectHandle pages = qpdf.getRoot().getKey("/Pages");  
479 - QPDFObjectHandle kids = pages.getKey("/Kids"); 477 + auto pages = qpdf.getRoot()["/Pages"];
  478 + Array kids = pages["/Kids"];
480 479
481 newpage.replaceKey("/Parent", pages); 480 newpage.replaceKey("/Parent", pages);
482 - kids.insertItem(pos, newpage);  
483 - int npages = static_cast<int>(kids.size());  
484 - pages.replaceKey("/Count", QPDFObjectHandle::newInteger(npages)); 481 + kids.insert(pos, newpage);
  482 + size_t npages = kids.size();
  483 + pages.replaceKey("/Count", Integer(npages));
485 all_pages.insert(all_pages.begin() + pos, newpage); 484 all_pages.insert(all_pages.begin() + pos, newpage);
486 - for (int i = pos + 1; i < npages; ++i) {  
487 - insertPageobjToPage(all_pages.at(toS(i)), i, false); 485 + for (size_t i = static_cast<size_t>(pos) + 1; i < npages; ++i) {
  486 + insertPageobjToPage(all_pages.at(i), static_cast<int>(i), false);
488 } 487 }
489 insertPageobjToPage(newpage, pos, true); 488 insertPageobjToPage(newpage, pos, true);
490 } 489 }
@@ -526,17 +525,16 @@ QPDF::addPageAt(QPDFObjectHandle newpage, bool before, QPDFObjectHandle refpage) @@ -526,17 +525,16 @@ QPDF::addPageAt(QPDFObjectHandle newpage, bool before, QPDFObjectHandle refpage)
526 if (!before) { 525 if (!before) {
527 ++refpos; 526 ++refpos;
528 } 527 }
529 - m->pages.insertPage(newpage, refpos); 528 + m->pages.insert(newpage, refpos);
530 } 529 }
531 530
532 void 531 void
533 QPDF::addPage(QPDFObjectHandle newpage, bool first) 532 QPDF::addPage(QPDFObjectHandle newpage, bool first)
534 { 533 {
535 if (first) { 534 if (first) {
536 - m->pages.insertPage(newpage, 0); 535 + m->pages.insert(newpage, 0);
537 } else { 536 } else {
538 - m->pages.insertPage(  
539 - newpage, getRoot().getKey("/Pages").getKey("/Count").getIntValueAsInt()); 537 + m->pages.insert(newpage, getRoot()["/Pages"]["/Count"].getIntValueAsInt());
540 } 538 }
541 } 539 }
542 540
@@ -612,7 +610,7 @@ QPDFPageDocumentHelper::removeUnreferencedResources() @@ -612,7 +610,7 @@ QPDFPageDocumentHelper::removeUnreferencedResources()
612 void 610 void
613 QPDFPageDocumentHelper::addPage(QPDFPageObjectHelper newpage, bool first) 611 QPDFPageDocumentHelper::addPage(QPDFPageObjectHelper newpage, bool first)
614 { 612 {
615 - qpdf.addPage(newpage.getObjectHandle(), first); 613 + qpdf.doc().pages().insert(newpage, first ? 0 : qpdf.doc().pages().size());
616 } 614 }
617 615
618 void 616 void
libqpdf/qpdf/QPDF_private.hh
@@ -898,6 +898,12 @@ class QPDF::Doc::Pages: Common @@ -898,6 +898,12 @@ class QPDF::Doc::Pages: Common
898 } 898 }
899 899
900 int find(QPDFObjGen og); 900 int find(QPDFObjGen og);
  901 + void insert(QPDFObjectHandle newpage, int pos);
  902 + void
  903 + insert(QPDFObjectHandle const& newpage, size_t pos)
  904 + {
  905 + insert(newpage, static_cast<int>(pos));
  906 + }
901 void erase(QPDFObjectHandle& page); 907 void erase(QPDFObjectHandle& page);
902 void update_cache(); 908 void update_cache();
903 void flatten_annotations(int required_flags, int forbidden_flags); 909 void flatten_annotations(int required_flags, int forbidden_flags);
@@ -914,7 +920,6 @@ class QPDF::Doc::Pages: Common @@ -914,7 +920,6 @@ class QPDF::Doc::Pages: Common
914 return ever_called_get_all_pages_; 920 return ever_called_get_all_pages_;
915 } 921 }
916 922
917 - void insertPage(QPDFObjectHandle newpage, int pos);  
918 void pushInheritedAttributesToPage(bool allow_changes, bool warn_skipped_keys); 923 void pushInheritedAttributesToPage(bool allow_changes, bool warn_skipped_keys);
919 924
920 private: 925 private: