Commit 3c6654b3a30fc9cb7317f30a9fecdb28fb437750

Authored by m-holger
1 parent eadfa25b

Refactor `StreamDataProvider`: replace `destination_qpdf` with `Streams`, improv…

…e encapsulation, and streamline foreign stream handling.
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 };
... ...