diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index 2273b67..b34b8a3 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -124,9 +124,9 @@ QPDF::ForeignStreamData::ForeignStreamData( { } -Streams::Copier::Copier(QPDF& qpdf) : +Streams::Copier::Copier(Streams& streams) : QPDFObjectHandle::StreamDataProvider(true), - qpdf(qpdf) + streams(streams) { } @@ -134,15 +134,15 @@ bool Streams::Copier::provideStreamData( QPDFObjGen const& og, Pipeline* pipeline, bool suppress_warnings, bool will_retry) { - auto foreign_data = copied_data.find(og); + auto data = copied_data.find(og); bool result = false; - if (foreign_data != copied_data.end()) { - result = qpdf.pipeForeignStreamData( - foreign_data->second, pipeline, suppress_warnings, will_retry); + if (data != copied_data.end()) { + result = streams.qpdf().pipeForeignStreamData( + data->second, pipeline, suppress_warnings, will_retry); QTC::TC("qpdf", "QPDF copy foreign with data", result ? 0 : 1); } else { - auto foreign_stream = copied_streams[og]; - result = foreign_stream.pipeStreamData( + auto stream = copied_streams[og]; + result = stream.pipeStreamData( pipeline, nullptr, 0, qpdf_dl_none, suppress_warnings, will_retry); QTC::TC("qpdf", "QPDF copy foreign with foreign_stream", result ? 0 : 1); } diff --git a/libqpdf/qpdf/QPDF_private.hh b/libqpdf/qpdf/QPDF_private.hh index 6a355c8..2fb827a 100644 --- a/libqpdf/qpdf/QPDF_private.hh +++ b/libqpdf/qpdf/QPDF_private.hh @@ -606,7 +606,7 @@ class QPDF::Doc Copier& operator=(StreamDataProvider const&) = delete; Copier& operator=(StreamDataProvider&&) = delete; - Copier(QPDF& qpdf); + Copier(Streams& streams); ~Copier() final = default; bool provideStreamData( @@ -628,14 +628,15 @@ class QPDF::Doc } private: - QPDF& qpdf; + Streams& streams; std::map copied_streams; std::map copied_data; }; public: Streams(QPDF& qpdf) : - qpdf(qpdf) + qpdf_(qpdf), + copier_(std::make_shared(*this)) { } @@ -676,17 +677,20 @@ class QPDF::Doc qpdf->copyStreamData(dest, src); } + QPDF& + qpdf() const + { + return qpdf_; + } + std::shared_ptr& copier() { - if (!copier_) { - copier_ = std::make_shared(qpdf); - } return copier_; } private: - QPDF& qpdf; + QPDF& qpdf_; std::shared_ptr copier_; };