diff options
author | m-holger <m-holger@kubitscheck.org> | 2024-01-09 16:19:48 +0100 |
---|---|---|
committer | m-holger <m-holger@kubitscheck.org> | 2024-01-10 10:36:18 +0100 |
commit | 5e9de5cd509310bb5f954bb6c767cfec2b2bbeb7 (patch) | |
tree | 41f431ef919bb96afabfac30d7428edc4d147024 /libqpdf/qpdf/QPDF_Array.hh | |
parent | 452e1f5c20ec6adf62cd296cb9dddacbc06e6ffa (diff) | |
download | qpdf-5e9de5cd509310bb5f954bb6c767cfec2b2bbeb7.tar.zst |
Tune handling of sparse arrays in QPDF_Array
Sparse arrays are rare. Dynamically create the variables needed to manage
them only when needed.
Diffstat (limited to 'libqpdf/qpdf/QPDF_Array.hh')
-rw-r--r-- | libqpdf/qpdf/QPDF_Array.hh | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/libqpdf/qpdf/QPDF_Array.hh b/libqpdf/qpdf/QPDF_Array.hh index 10ac9f8c..281e1d48 100644 --- a/libqpdf/qpdf/QPDF_Array.hh +++ b/libqpdf/qpdf/QPDF_Array.hh @@ -8,6 +8,13 @@ class QPDF_Array: public QPDFValue { + private: + struct Sparse + { + int size{0}; + std::map<int, std::shared_ptr<QPDFObject>> elements; + }; + public: ~QPDF_Array() override = default; static std::shared_ptr<QPDFObject> create(std::vector<QPDFObjectHandle> const& items); @@ -21,7 +28,7 @@ class QPDF_Array: public QPDFValue int size() const noexcept { - return sparse ? sp_size : int(elements.size()); + return sp ? sp->size : int(elements.size()); } QPDFObjectHandle at(int n) const noexcept; bool setAt(int n, QPDFObjectHandle const& oh); @@ -39,9 +46,7 @@ class QPDF_Array: public QPDFValue void checkOwnership(QPDFObjectHandle const& item) const; - bool sparse{false}; - int sp_size{0}; - std::map<int, std::shared_ptr<QPDFObject>> sp_elements; + std::unique_ptr<Sparse> sp; std::vector<std::shared_ptr<QPDFObject>> elements; }; |