diff options
author | m-holger <m-holger@kubitscheck.org> | 2022-12-11 17:49:41 +0100 |
---|---|---|
committer | m-holger <m-holger@kubitscheck.org> | 2023-04-01 14:57:47 +0200 |
commit | d3f2dc322b8e6341d1c16b03c8d6f894c363ed8b (patch) | |
tree | 629a55bcc893240162632d38af54f0ca50acb06f /libqpdf/QPDF_Array.cc | |
parent | a171ebb9427e41559efbeb1f144a19b73bb3eca6 (diff) | |
download | qpdf-d3f2dc322b8e6341d1c16b03c8d6f894c363ed8b.tar.zst |
Refactor QPDF_Array::copy
Diffstat (limited to 'libqpdf/QPDF_Array.cc')
-rw-r--r-- | libqpdf/QPDF_Array.cc | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/libqpdf/QPDF_Array.cc b/libqpdf/QPDF_Array.cc index 1f1ce55a..d5cef946 100644 --- a/libqpdf/QPDF_Array.cc +++ b/libqpdf/QPDF_Array.cc @@ -92,11 +92,22 @@ QPDF_Array::create(std::vector<std::shared_ptr<QPDFObject>> const& items) std::shared_ptr<QPDFObject> QPDF_Array::copy(bool shallow) { - if (sparse) { - return create(shallow ? sp_elements : sp_elements.copy()); - } else { - if (shallow) { + if (shallow) { + if (sparse) { + return create(sp_elements); + } else { return create(elements); + } + } else { + if (sparse) { + SparseOHArray result; + result.n_elements = sp_elements.n_elements; + for (auto const& element: sp_elements.elements) { + auto const& obj = element.second; + result.elements[element.first] = + obj->getObjGen().isIndirect() ? obj : obj->copy(); + } + return create(std::move(result)); } else { std::vector<std::shared_ptr<QPDFObject>> result; result.reserve(elements.size()); @@ -107,7 +118,7 @@ QPDF_Array::copy(bool shallow) : element->copy()) : element); } - return create(result); + return create(std::move(result)); } } } |