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,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 | QPDFObjectHandle::StreamDataProvider(true), | 128 | QPDFObjectHandle::StreamDataProvider(true), |
| 129 | - qpdf(qpdf) | 129 | + streams(streams) |
| 130 | { | 130 | { |
| 131 | } | 131 | } |
| 132 | 132 | ||
| @@ -134,15 +134,15 @@ bool | @@ -134,15 +134,15 @@ bool | ||
| 134 | Streams::Copier::provideStreamData( | 134 | Streams::Copier::provideStreamData( |
| 135 | QPDFObjGen const& og, Pipeline* pipeline, bool suppress_warnings, bool will_retry) | 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 | bool result = false; | 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 | QTC::TC("qpdf", "QPDF copy foreign with data", result ? 0 : 1); | 142 | QTC::TC("qpdf", "QPDF copy foreign with data", result ? 0 : 1); |
| 143 | } else { | 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 | pipeline, nullptr, 0, qpdf_dl_none, suppress_warnings, will_retry); | 146 | pipeline, nullptr, 0, qpdf_dl_none, suppress_warnings, will_retry); |
| 147 | QTC::TC("qpdf", "QPDF copy foreign with foreign_stream", result ? 0 : 1); | 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,7 +606,7 @@ class QPDF::Doc | ||
| 606 | Copier& operator=(StreamDataProvider const&) = delete; | 606 | Copier& operator=(StreamDataProvider const&) = delete; |
| 607 | Copier& operator=(StreamDataProvider&&) = delete; | 607 | Copier& operator=(StreamDataProvider&&) = delete; |
| 608 | 608 | ||
| 609 | - Copier(QPDF& qpdf); | 609 | + Copier(Streams& streams); |
| 610 | ~Copier() final = default; | 610 | ~Copier() final = default; |
| 611 | 611 | ||
| 612 | bool provideStreamData( | 612 | bool provideStreamData( |
| @@ -628,14 +628,15 @@ class QPDF::Doc | @@ -628,14 +628,15 @@ class QPDF::Doc | ||
| 628 | } | 628 | } |
| 629 | 629 | ||
| 630 | private: | 630 | private: |
| 631 | - QPDF& qpdf; | 631 | + Streams& streams; |
| 632 | std::map<QPDFObjGen, QPDFObjectHandle> copied_streams; | 632 | std::map<QPDFObjGen, QPDFObjectHandle> copied_streams; |
| 633 | std::map<QPDFObjGen, ForeignStreamData> copied_data; | 633 | std::map<QPDFObjGen, ForeignStreamData> copied_data; |
| 634 | }; | 634 | }; |
| 635 | 635 | ||
| 636 | public: | 636 | public: |
| 637 | Streams(QPDF& qpdf) : | 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,17 +677,20 @@ class QPDF::Doc | ||
| 676 | qpdf->copyStreamData(dest, src); | 677 | qpdf->copyStreamData(dest, src); |
| 677 | } | 678 | } |
| 678 | 679 | ||
| 680 | + QPDF& | ||
| 681 | + qpdf() const | ||
| 682 | + { | ||
| 683 | + return qpdf_; | ||
| 684 | + } | ||
| 685 | + | ||
| 679 | std::shared_ptr<Copier>& | 686 | std::shared_ptr<Copier>& |
| 680 | copier() | 687 | copier() |
| 681 | { | 688 | { |
| 682 | - if (!copier_) { | ||
| 683 | - copier_ = std::make_shared<Copier>(qpdf); | ||
| 684 | - } | ||
| 685 | return copier_; | 689 | return copier_; |
| 686 | } | 690 | } |
| 687 | 691 | ||
| 688 | private: | 692 | private: |
| 689 | - QPDF& qpdf; | 693 | + QPDF& qpdf_; |
| 690 | 694 | ||
| 691 | std::shared_ptr<Copier> copier_; | 695 | std::shared_ptr<Copier> copier_; |
| 692 | }; | 696 | }; |