Commit d207f6151c106c7830821db75e709a7423db4bc6
1 parent
f797de7b
Refactor `QPDFObjectHandle::copyStream`: move stream copying logic to `Stream`.
Showing
4 changed files
with
30 additions
and
34 deletions
libqpdf/QPDFObjectHandle.cc
| @@ -1935,24 +1935,6 @@ QPDFObjectHandle::makeDirect(QPDFObjGen::set& visited, bool stop_at_streams) | @@ -1935,24 +1935,6 @@ QPDFObjectHandle::makeDirect(QPDFObjGen::set& visited, bool stop_at_streams) | ||
| 1935 | visited.erase(cur_og); | 1935 | visited.erase(cur_og); |
| 1936 | } | 1936 | } |
| 1937 | 1937 | ||
| 1938 | -QPDFObjectHandle | ||
| 1939 | -QPDFObjectHandle::copyStream() | ||
| 1940 | -{ | ||
| 1941 | - assertStream(); | ||
| 1942 | - QPDFObjectHandle result = newStream(getOwningQPDF()); | ||
| 1943 | - QPDFObjectHandle dict = result.getDict(); | ||
| 1944 | - QPDFObjectHandle old_dict = getDict(); | ||
| 1945 | - for (auto& iter: QPDFDictItems(old_dict)) { | ||
| 1946 | - if (iter.second.isIndirect()) { | ||
| 1947 | - dict.replaceKey(iter.first, iter.second); | ||
| 1948 | - } else { | ||
| 1949 | - dict.replaceKey(iter.first, iter.second.shallowCopy()); | ||
| 1950 | - } | ||
| 1951 | - } | ||
| 1952 | - QPDF::Doc::StreamCopier::copyStreamData(getOwningQPDF(), result, *this); | ||
| 1953 | - return result; | ||
| 1954 | -} | ||
| 1955 | - | ||
| 1956 | void | 1938 | void |
| 1957 | QPDFObjectHandle::makeDirect(bool allow_streams) | 1939 | QPDFObjectHandle::makeDirect(bool allow_streams) |
| 1958 | { | 1940 | { |
libqpdf/QPDF_Stream.cc
| @@ -44,6 +44,12 @@ class QPDF::Doc::Streams | @@ -44,6 +44,12 @@ class QPDF::Doc::Streams | ||
| 44 | return qpdf->pipeStreamData( | 44 | return qpdf->pipeStreamData( |
| 45 | og, offset, length, dict, is_root_metadata, pipeline, suppress_warnings, will_retry); | 45 | og, offset, length, dict, is_root_metadata, pipeline, suppress_warnings, will_retry); |
| 46 | } | 46 | } |
| 47 | + | ||
| 48 | + static void | ||
| 49 | + copyStreamData(QPDF* qpdf, QPDFObjectHandle const& dest, QPDFObjectHandle const& src) | ||
| 50 | + { | ||
| 51 | + qpdf->copyStreamData(dest, src); | ||
| 52 | + } | ||
| 47 | }; | 53 | }; |
| 48 | 54 | ||
| 49 | namespace | 55 | namespace |
| @@ -206,6 +212,15 @@ Stream::Stream( | @@ -206,6 +212,15 @@ Stream::Stream( | ||
| 206 | setDictDescription(); | 212 | setDictDescription(); |
| 207 | } | 213 | } |
| 208 | 214 | ||
| 215 | +Stream | ||
| 216 | +Stream::copy() const | ||
| 217 | +{ | ||
| 218 | + Stream result = qpdf()->newStream(); | ||
| 219 | + result.stream()->stream_dict = getDict().copy(); | ||
| 220 | + QPDF::Doc::Streams::copyStreamData(qpdf(), result, *this); | ||
| 221 | + return result; | ||
| 222 | +} | ||
| 223 | + | ||
| 209 | void | 224 | void |
| 210 | Stream::registerStreamFilter( | 225 | Stream::registerStreamFilter( |
| 211 | std::string const& filter_name, std::function<std::shared_ptr<QPDFStreamFilter>()> factory) | 226 | std::string const& filter_name, std::function<std::shared_ptr<QPDFStreamFilter>()> factory) |
| @@ -850,3 +865,9 @@ QPDFObjectHandle::getStreamJSON( | @@ -850,3 +865,9 @@ QPDFObjectHandle::getStreamJSON( | ||
| 850 | { | 865 | { |
| 851 | return as_stream(error).getStreamJSON(json_version, json_data, decode_level, p, data_filename); | 866 | return as_stream(error).getStreamJSON(json_version, json_data, decode_level, p, data_filename); |
| 852 | } | 867 | } |
| 868 | + | ||
| 869 | +QPDFObjectHandle | ||
| 870 | +QPDFObjectHandle::copyStream() | ||
| 871 | +{ | ||
| 872 | + return as_stream(error).copy(); | ||
| 873 | +} |
libqpdf/qpdf/QPDFObjectHandle_private.hh
libqpdf/qpdf/QPDF_private.hh
| @@ -13,10 +13,14 @@ | @@ -13,10 +13,14 @@ | ||
| 13 | 13 | ||
| 14 | using namespace qpdf; | 14 | using namespace qpdf; |
| 15 | 15 | ||
| 16 | -namespace qpdf::is | 16 | +namespace qpdf |
| 17 | { | 17 | { |
| 18 | - class OffsetBuffer; | ||
| 19 | -} // namespace qpdf::is | 18 | + class Stream; |
| 19 | + namespace is | ||
| 20 | + { | ||
| 21 | + class OffsetBuffer; | ||
| 22 | + } // namespace is | ||
| 23 | +} // namespace qpdf | ||
| 20 | 24 | ||
| 21 | class BitStream; | 25 | class BitStream; |
| 22 | class BitWriter; | 26 | class BitWriter; |
| @@ -700,19 +704,6 @@ class QPDF::Doc | @@ -700,19 +704,6 @@ class QPDF::Doc | ||
| 700 | QPDF::Members* m; | 704 | QPDF::Members* m; |
| 701 | }; // class QPDF::Doc::Pages | 705 | }; // class QPDF::Doc::Pages |
| 702 | 706 | ||
| 703 | - // StreamCopier class is restricted to QPDFObjectHandle so it can copy stream data. | ||
| 704 | - class StreamCopier | ||
| 705 | - { | ||
| 706 | - friend class QPDFObjectHandle; | ||
| 707 | - | ||
| 708 | - private: | ||
| 709 | - static void | ||
| 710 | - copyStreamData(QPDF* qpdf, QPDFObjectHandle const& dest, QPDFObjectHandle const& src) | ||
| 711 | - { | ||
| 712 | - qpdf->copyStreamData(dest, src); | ||
| 713 | - } | ||
| 714 | - }; | ||
| 715 | - | ||
| 716 | Doc() = delete; | 707 | Doc() = delete; |
| 717 | Doc(Doc const&) = delete; | 708 | Doc(Doc const&) = delete; |
| 718 | Doc(Doc&&) = delete; | 709 | Doc(Doc&&) = delete; |