Commit d3f2dc322b8e6341d1c16b03c8d6f894c363ed8b

Authored by m-holger
1 parent a171ebb9

Refactor QPDF_Array::copy

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
libqpdf/qpdf/SparseOHArray.hh
... ... @@ -16,7 +16,6 @@ class SparseOHArray
16 16 {
17 17 return n_elements;
18 18 }
19   - SparseOHArray copy();
20 19  
21 20 private:
22 21 friend class QPDF_Array;
... ...