mirror of
https://github.com/qpdf/qpdf.git
synced 2025-02-07 06:08:26 +00:00
Refactor QPDF_Array::setFromVector
This commit is contained in:
parent
5072238867
commit
0aae54d383
@ -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");
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user