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