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 | 92 | std::shared_ptr<QPDFObject> |
| 93 | 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 | 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 | 111 | } else { |
| 101 | 112 | std::vector<std::shared_ptr<QPDFObject>> result; |
| 102 | 113 | result.reserve(elements.size()); |
| ... | ... | @@ -107,7 +118,7 @@ QPDF_Array::copy(bool shallow) |
| 107 | 118 | : element->copy()) |
| 108 | 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