2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-29 00:10:54 +00:00

Refactor QPDF_Array::setFromVector

This commit is contained in:
m-holger 2023-03-30 14:16:07 +01:00
parent 5072238867
commit 0aae54d383
3 changed files with 18 additions and 34 deletions

View File

@ -916,11 +916,7 @@ QPDFObjectHandle::setArrayItem(int n, QPDFObjectHandle const& item)
void
QPDFObjectHandle::setArrayFromVector(std::vector<QPDFObjectHandle> const& items)
{
auto array = asArray();
if (array) {
for (auto const& item: items) {
checkOwnership(item);
}
if (auto array = asArray()) {
array->setFromVector(items);
} else {
typeWarning("array", "ignoring attempt to replace items");

View File

@ -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());
}
}

View File

@ -31,7 +31,6 @@ class QPDF_Array: public QPDFValue
bool setAt(int n, QPDFObjectHandle const& oh);
std::vector<QPDFObjectHandle> getAsVector() const;
void setFromVector(std::vector<QPDFObjectHandle> const& items);
void setFromVector(std::vector<std::shared_ptr<QPDFObject>>&& items);
bool insert(int at, QPDFObjectHandle const& item);
void push_back(QPDFObjectHandle const& item);
bool erase(int at);