diff options
Diffstat (limited to 'libqpdf/qpdf/QPDF_Array.hh')
-rw-r--r-- | libqpdf/qpdf/QPDF_Array.hh | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/libqpdf/qpdf/QPDF_Array.hh b/libqpdf/qpdf/QPDF_Array.hh index 56c0101f..4762bb6e 100644 --- a/libqpdf/qpdf/QPDF_Array.hh +++ b/libqpdf/qpdf/QPDF_Array.hh @@ -3,8 +3,7 @@ #include <qpdf/QPDFValue.hh> -#include <qpdf/SparseOHArray.hh> -#include <list> +#include <map> #include <vector> class QPDF_Array: public QPDFValue @@ -14,34 +13,37 @@ class QPDF_Array: public QPDFValue static std::shared_ptr<QPDFObject> create(std::vector<QPDFObjectHandle> const& items); static std::shared_ptr<QPDFObject> - create(std::vector<std::shared_ptr<QPDFObject>>&& items); - static std::shared_ptr<QPDFObject> create(SparseOHArray const& items); + create(std::vector<std::shared_ptr<QPDFObject>>&& items, bool sparse); virtual std::shared_ptr<QPDFObject> copy(bool shallow = false); virtual std::string unparse(); virtual JSON getJSON(int json_version); virtual void disconnect(); - int getNItems() const; - QPDFObjectHandle getItem(int n) const; - void getAsVector(std::vector<QPDFObjectHandle>&) const; - - void setItem(int, QPDFObjectHandle const&); + int + size() const noexcept + { + return sparse ? sp_size : int(elements.size()); + } + QPDFObjectHandle at(int n) const noexcept; + 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); - void insertItem(int at, QPDFObjectHandle const& item); - void appendItem(QPDFObjectHandle const& item); - void eraseItem(int at); - - // Helper methods for QPDF and QPDFObjectHandle -- these are - // public methods since the whole class is not part of the public - // API. Otherwise, these would be wrapped in accessor classes. - void addExplicitElementsToList(std::list<QPDFObjectHandle>&) const; + bool insert(int at, QPDFObjectHandle const& item); + void push_back(QPDFObjectHandle const& item); + bool erase(int at); private: + QPDF_Array(); + QPDF_Array(QPDF_Array const&); QPDF_Array(std::vector<QPDFObjectHandle> const& items); - QPDF_Array(std::vector<std::shared_ptr<QPDFObject>>&& items); - QPDF_Array(SparseOHArray const& items); - SparseOHArray elements; + QPDF_Array(std::vector<std::shared_ptr<QPDFObject>>&& items, bool sparse); + + void checkOwnership(QPDFObjectHandle const& item) const; + + bool sparse{false}; + int sp_size{0}; + std::map<int, std::shared_ptr<QPDFObject>> sp_elements; + std::vector<std::shared_ptr<QPDFObject>> elements; }; #endif // QPDF_ARRAY_HH |