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 | 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 | 1938 | void |
| 1957 | 1939 | QPDFObjectHandle::makeDirect(bool allow_streams) |
| 1958 | 1940 | { | ... | ... |
libqpdf/QPDF_Stream.cc
| ... | ... | @@ -44,6 +44,12 @@ class QPDF::Doc::Streams |
| 44 | 44 | return qpdf->pipeStreamData( |
| 45 | 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 | 55 | namespace |
| ... | ... | @@ -206,6 +212,15 @@ Stream::Stream( |
| 206 | 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 | 224 | void |
| 210 | 225 | Stream::registerStreamFilter( |
| 211 | 226 | std::string const& filter_name, std::function<std::shared_ptr<QPDFStreamFilter>()> factory) |
| ... | ... | @@ -850,3 +865,9 @@ QPDFObjectHandle::getStreamJSON( |
| 850 | 865 | { |
| 851 | 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 | 13 | |
| 14 | 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 | 25 | class BitStream; |
| 22 | 26 | class BitWriter; |
| ... | ... | @@ -700,19 +704,6 @@ class QPDF::Doc |
| 700 | 704 | QPDF::Members* m; |
| 701 | 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 | 707 | Doc() = delete; |
| 717 | 708 | Doc(Doc const&) = delete; |
| 718 | 709 | Doc(Doc&&) = delete; | ... | ... |