Commit d3f2dc322b8e6341d1c16b03c8d6f894c363ed8b
1 parent
a171ebb9
Refactor QPDF_Array::copy
Showing
3 changed files
with
16 additions
and
19 deletions
libqpdf/QPDF_Array.cc
| @@ -92,11 +92,22 @@ QPDF_Array::create(std::vector<std::shared_ptr<QPDFObject>> const& items) | @@ -92,11 +92,22 @@ QPDF_Array::create(std::vector<std::shared_ptr<QPDFObject>> const& items) | ||
| 92 | std::shared_ptr<QPDFObject> | 92 | std::shared_ptr<QPDFObject> |
| 93 | QPDF_Array::copy(bool shallow) | 93 | QPDF_Array::copy(bool shallow) |
| 94 | { | 94 | { |
| 95 | - if (sparse) { | ||
| 96 | - return create(shallow ? sp_elements : sp_elements.copy()); | ||
| 97 | - } else { | ||
| 98 | - if (shallow) { | 95 | + if (shallow) { |
| 96 | + if (sparse) { | ||
| 97 | + return create(sp_elements); | ||
| 98 | + } else { | ||
| 99 | return create(elements); | 99 | return create(elements); |
| 100 | + } | ||
| 101 | + } else { | ||
| 102 | + if (sparse) { | ||
| 103 | + SparseOHArray result; | ||
| 104 | + result.n_elements = sp_elements.n_elements; | ||
| 105 | + for (auto const& element: sp_elements.elements) { | ||
| 106 | + auto const& obj = element.second; | ||
| 107 | + result.elements[element.first] = | ||
| 108 | + obj->getObjGen().isIndirect() ? obj : obj->copy(); | ||
| 109 | + } | ||
| 110 | + return create(std::move(result)); | ||
| 100 | } else { | 111 | } else { |
| 101 | std::vector<std::shared_ptr<QPDFObject>> result; | 112 | std::vector<std::shared_ptr<QPDFObject>> result; |
| 102 | result.reserve(elements.size()); | 113 | result.reserve(elements.size()); |
| @@ -107,7 +118,7 @@ QPDF_Array::copy(bool shallow) | @@ -107,7 +118,7 @@ QPDF_Array::copy(bool shallow) | ||
| 107 | : element->copy()) | 118 | : element->copy()) |
| 108 | : element); | 119 | : element); |
| 109 | } | 120 | } |
| 110 | - return create(result); | 121 | + return create(std::move(result)); |
| 111 | } | 122 | } |
| 112 | } | 123 | } |
| 113 | } | 124 | } |
libqpdf/SparseOHArray.cc
No preview for this file type
libqpdf/qpdf/SparseOHArray.hh