aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/qpdf/QPDF_Array.hh
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2024-01-09 16:19:48 +0100
committerm-holger <m-holger@kubitscheck.org>2024-01-10 10:36:18 +0100
commit5e9de5cd509310bb5f954bb6c767cfec2b2bbeb7 (patch)
tree41f431ef919bb96afabfac30d7428edc4d147024 /libqpdf/qpdf/QPDF_Array.hh
parent452e1f5c20ec6adf62cd296cb9dddacbc06e6ffa (diff)
downloadqpdf-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.hh13
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;
};