aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-12-11 17:49:41 +0100
committerm-holger <m-holger@kubitscheck.org>2023-04-01 14:57:47 +0200
commitd3f2dc322b8e6341d1c16b03c8d6f894c363ed8b (patch)
tree629a55bcc893240162632d38af54f0ca50acb06f
parenta171ebb9427e41559efbeb1f144a19b73bb3eca6 (diff)
downloadqpdf-d3f2dc322b8e6341d1c16b03c8d6f894c363ed8b.tar.zst
Refactor QPDF_Array::copy
-rw-r--r--libqpdf/QPDF_Array.cc21
-rw-r--r--libqpdf/SparseOHArray.cc13
-rw-r--r--libqpdf/qpdf/SparseOHArray.hh1
3 files changed, 16 insertions, 19 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));
}
}
}
diff --git a/libqpdf/SparseOHArray.cc b/libqpdf/SparseOHArray.cc
index c830d035..8b137891 100644
--- a/libqpdf/SparseOHArray.cc
+++ b/libqpdf/SparseOHArray.cc
@@ -1,14 +1 @@
-#include <qpdf/SparseOHArray.hh>
-SparseOHArray
-SparseOHArray::copy()
-{
- SparseOHArray result;
- result.n_elements = this->n_elements;
- for (auto const& element: this->elements) {
- auto value = element.second;
- result.elements[element.first] =
- value->getObjGen().isIndirect() ? value : value->copy();
- }
- return result;
-}
diff --git a/libqpdf/qpdf/SparseOHArray.hh b/libqpdf/qpdf/SparseOHArray.hh
index e7733472..5760f174 100644
--- a/libqpdf/qpdf/SparseOHArray.hh
+++ b/libqpdf/qpdf/SparseOHArray.hh
@@ -16,7 +16,6 @@ class SparseOHArray
{
return n_elements;
}
- SparseOHArray copy();
private:
friend class QPDF_Array;