aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF_Array.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2023-03-30 15:16:07 +0200
committerm-holger <m-holger@kubitscheck.org>2023-04-01 14:57:28 +0200
commit0aae54d3836107fdb9dc54faf0778bf262dd7e0a (patch)
tree4fa3dc74d62d03c760c7b6d614bbe65b1348290d /libqpdf/QPDF_Array.cc
parent5072238867f37f6c6ecd53dab06e42ea2763cf56 (diff)
downloadqpdf-0aae54d3836107fdb9dc54faf0778bf262dd7e0a.tar.zst
Refactor QPDF_Array::setFromVector
Diffstat (limited to 'libqpdf/QPDF_Array.cc')
-rw-r--r--libqpdf/QPDF_Array.cc45
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());
}
}