Commit b84375c46fb4d2ffe5308ee5989da60489514b24
1 parent
68754ee8
Refactor `Pages::insertPage`: rename to `insert`, update parameter handling, inl…
…ine logic, update calls across codebase, and streamline method implementation.
Showing
2 changed files
with
27 additions
and
24 deletions
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: |