diff options
author | m-holger <m-holger@kubitscheck.org> | 2023-03-30 15:16:07 +0200 |
---|---|---|
committer | m-holger <m-holger@kubitscheck.org> | 2023-04-01 14:57:28 +0200 |
commit | 0aae54d3836107fdb9dc54faf0778bf262dd7e0a (patch) | |
tree | 4fa3dc74d62d03c760c7b6d614bbe65b1348290d /libqpdf/QPDF_Array.cc | |
parent | 5072238867f37f6c6ecd53dab06e42ea2763cf56 (diff) | |
download | qpdf-0aae54d3836107fdb9dc54faf0778bf262dd7e0a.tar.zst |
Refactor QPDF_Array::setFromVector
Diffstat (limited to 'libqpdf/QPDF_Array.cc')
-rw-r--r-- | libqpdf/QPDF_Array.cc | 45 |
1 files changed, 17 insertions, 28 deletions
diff --git a/libqpdf/QPDF_Array.cc b/libqpdf/QPDF_Array.cc index 9593c31f..afec05af 100644 --- a/libqpdf/QPDF_Array.cc +++ b/libqpdf/QPDF_Array.cc @@ -35,7 +35,18 @@ QPDF_Array::QPDF_Array( QPDFValue(::ot_array, "array"), sparse(sparse) { - setFromVector(std::move(v)); + if (sparse) { + sp_elements = SparseOHArray(); + for (auto&& item: v) { + if (item->getTypeCode() != ::ot_null || + item->getObjGen().isIndirect()) { + sp_elements.elements[sp_elements.n_elements] = std::move(item); + } + ++sp_elements.n_elements; + } + } else { + elements = std::move(v); + } } QPDF_Array::QPDF_Array(SparseOHArray const& items) : @@ -207,33 +218,11 @@ QPDF_Array::setAt(int at, QPDFObjectHandle const& oh) void QPDF_Array::setFromVector(std::vector<QPDFObjectHandle> const& v) { - if (sparse) { - sp_elements = SparseOHArray(); - for (auto const& iter: v) { - sp_elements.elements[sp_elements.n_elements++] = iter.getObj(); - } - } else { - elements.resize(0); - for (auto const& iter: v) { - elements.push_back(iter.getObj()); - } - } -} - -void -QPDF_Array::setFromVector(std::vector<std::shared_ptr<QPDFObject>>&& v) -{ - if (sparse) { - sp_elements = SparseOHArray(); - for (auto&& item: v) { - if (item->getTypeCode() != ::ot_null || - item->getObjGen().isIndirect()) { - sp_elements.elements[sp_elements.n_elements] = std::move(item); - } - ++sp_elements.n_elements; - } - } else { - elements = std::move(v); + elements.resize(0); + elements.reserve(v.size()); + for (auto const& item: v) { + checkOwnership(item); + elements.push_back(item.getObj()); } } |