Commit 3c6654b3a30fc9cb7317f30a9fecdb28fb437750
1 parent
eadfa25b
Refactor `StreamDataProvider`: replace `destination_qpdf` with `Streams`, improv…
…e encapsulation, and streamline foreign stream handling.
Showing
2 changed files
with
19 additions
and
15 deletions
libqpdf/QPDF.cc
| ... | ... | @@ -124,9 +124,9 @@ QPDF::ForeignStreamData::ForeignStreamData( |
| 124 | 124 | { |
| 125 | 125 | } |
| 126 | 126 | |
| 127 | -Streams::Copier::Copier(QPDF& qpdf) : | |
| 127 | +Streams::Copier::Copier(Streams& streams) : | |
| 128 | 128 | QPDFObjectHandle::StreamDataProvider(true), |
| 129 | - qpdf(qpdf) | |
| 129 | + streams(streams) | |
| 130 | 130 | { |
| 131 | 131 | } |
| 132 | 132 | |
| ... | ... | @@ -134,15 +134,15 @@ bool |
| 134 | 134 | Streams::Copier::provideStreamData( |
| 135 | 135 | QPDFObjGen const& og, Pipeline* pipeline, bool suppress_warnings, bool will_retry) |
| 136 | 136 | { |
| 137 | - auto foreign_data = copied_data.find(og); | |
| 137 | + auto data = copied_data.find(og); | |
| 138 | 138 | bool result = false; |
| 139 | - if (foreign_data != copied_data.end()) { | |
| 140 | - result = qpdf.pipeForeignStreamData( | |
| 141 | - foreign_data->second, pipeline, suppress_warnings, will_retry); | |
| 139 | + if (data != copied_data.end()) { | |
| 140 | + result = streams.qpdf().pipeForeignStreamData( | |
| 141 | + data->second, pipeline, suppress_warnings, will_retry); | |
| 142 | 142 | QTC::TC("qpdf", "QPDF copy foreign with data", result ? 0 : 1); |
| 143 | 143 | } else { |
| 144 | - auto foreign_stream = copied_streams[og]; | |
| 145 | - result = foreign_stream.pipeStreamData( | |
| 144 | + auto stream = copied_streams[og]; | |
| 145 | + result = stream.pipeStreamData( | |
| 146 | 146 | pipeline, nullptr, 0, qpdf_dl_none, suppress_warnings, will_retry); |
| 147 | 147 | QTC::TC("qpdf", "QPDF copy foreign with foreign_stream", result ? 0 : 1); |
| 148 | 148 | } | ... | ... |
libqpdf/qpdf/QPDF_private.hh
| ... | ... | @@ -606,7 +606,7 @@ class QPDF::Doc |
| 606 | 606 | Copier& operator=(StreamDataProvider const&) = delete; |
| 607 | 607 | Copier& operator=(StreamDataProvider&&) = delete; |
| 608 | 608 | |
| 609 | - Copier(QPDF& qpdf); | |
| 609 | + Copier(Streams& streams); | |
| 610 | 610 | ~Copier() final = default; |
| 611 | 611 | |
| 612 | 612 | bool provideStreamData( |
| ... | ... | @@ -628,14 +628,15 @@ class QPDF::Doc |
| 628 | 628 | } |
| 629 | 629 | |
| 630 | 630 | private: |
| 631 | - QPDF& qpdf; | |
| 631 | + Streams& streams; | |
| 632 | 632 | std::map<QPDFObjGen, QPDFObjectHandle> copied_streams; |
| 633 | 633 | std::map<QPDFObjGen, ForeignStreamData> copied_data; |
| 634 | 634 | }; |
| 635 | 635 | |
| 636 | 636 | public: |
| 637 | 637 | Streams(QPDF& qpdf) : |
| 638 | - qpdf(qpdf) | |
| 638 | + qpdf_(qpdf), | |
| 639 | + copier_(std::make_shared<Copier>(*this)) | |
| 639 | 640 | { |
| 640 | 641 | } |
| 641 | 642 | |
| ... | ... | @@ -676,17 +677,20 @@ class QPDF::Doc |
| 676 | 677 | qpdf->copyStreamData(dest, src); |
| 677 | 678 | } |
| 678 | 679 | |
| 680 | + QPDF& | |
| 681 | + qpdf() const | |
| 682 | + { | |
| 683 | + return qpdf_; | |
| 684 | + } | |
| 685 | + | |
| 679 | 686 | std::shared_ptr<Copier>& |
| 680 | 687 | copier() |
| 681 | 688 | { |
| 682 | - if (!copier_) { | |
| 683 | - copier_ = std::make_shared<Copier>(qpdf); | |
| 684 | - } | |
| 685 | 689 | return copier_; |
| 686 | 690 | } |
| 687 | 691 | |
| 688 | 692 | private: |
| 689 | - QPDF& qpdf; | |
| 693 | + QPDF& qpdf_; | |
| 690 | 694 | |
| 691 | 695 | std::shared_ptr<Copier> copier_; |
| 692 | 696 | }; | ... | ... |