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 444 }
445 445  
446 446 void
447   -Pages::insertPage(QPDFObjectHandle newpage, int pos)
  447 +Pages::insert(QPDFObjectHandle newpage, int pos)
448 448 {
449 449 // pos is numbered from 0, so pos = 0 inserts at the beginning and pos = npages adds to the end.
450 450  
451 451 flattenPagesTree();
452 452  
453   - if (!newpage.isIndirect()) {
  453 + if (!newpage.indirect()) {
454 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 457 newpage = qpdf.copyForeignObject(newpage);
458 458 } else {
459 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 463 throw std::runtime_error("QPDF::insertPage called with pos out of range");
464 464 }
465 465  
466 466 QTC::TC(
467 467 "qpdf",
468 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 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 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 488 insertPageobjToPage(newpage, pos, true);
490 489 }
... ... @@ -526,17 +525,16 @@ QPDF::addPageAt(QPDFObjectHandle newpage, bool before, QPDFObjectHandle refpage)
526 525 if (!before) {
527 526 ++refpos;
528 527 }
529   - m->pages.insertPage(newpage, refpos);
  528 + m->pages.insert(newpage, refpos);
530 529 }
531 530  
532 531 void
533 532 QPDF::addPage(QPDFObjectHandle newpage, bool first)
534 533 {
535 534 if (first) {
536   - m->pages.insertPage(newpage, 0);
  535 + m->pages.insert(newpage, 0);
537 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 610 void
613 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 616 void
... ...
libqpdf/qpdf/QPDF_private.hh
... ... @@ -898,6 +898,12 @@ class QPDF::Doc::Pages: Common
898 898 }
899 899  
900 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 907 void erase(QPDFObjectHandle& page);
902 908 void update_cache();
903 909 void flatten_annotations(int required_flags, int forbidden_flags);
... ... @@ -914,7 +920,6 @@ class QPDF::Doc::Pages: Common
914 920 return ever_called_get_all_pages_;
915 921 }
916 922  
917   - void insertPage(QPDFObjectHandle newpage, int pos);
918 923 void pushInheritedAttributesToPage(bool allow_changes, bool warn_skipped_keys);
919 924  
920 925 private:
... ...