From d67a54ae93640f784a03df5d07404df13b1b297a Mon Sep 17 00:00:00 2001 From: m-holger Date: Mon, 19 Dec 2022 19:20:36 +0000 Subject: Tune parsing of dictionaries in QPDFParser::parse Use move semantics for dictionary creation. --- libqpdf/QPDFParser.cc | 2 +- libqpdf/QPDF_Dictionary.cc | 13 +++++++++++++ libqpdf/qpdf/QPDF_Dictionary.hh | 3 +++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/libqpdf/QPDFParser.cc b/libqpdf/QPDFParser.cc index 6a1525d4..fa2562ca 100644 --- a/libqpdf/QPDFParser.cc +++ b/libqpdf/QPDFParser.cc @@ -404,7 +404,7 @@ QPDFParser::parse(bool& empty, bool content_stream) QPDFObjectHandle::newString(frame.contents_string); dict["/Contents"].setParsedOffset(frame.contents_offset); } - object = QPDF_Dictionary::create(dict); + object = QPDF_Dictionary::create(std::move(dict)); setDescription(object, offset - 2); // The `offset` points to the next of "<<". Set the rewind // offset to point to the beginning of "<<". This has been diff --git a/libqpdf/QPDF_Dictionary.cc b/libqpdf/QPDF_Dictionary.cc index 87d93a32..5349a2a8 100644 --- a/libqpdf/QPDF_Dictionary.cc +++ b/libqpdf/QPDF_Dictionary.cc @@ -9,12 +9,25 @@ QPDF_Dictionary::QPDF_Dictionary( { } +QPDF_Dictionary::QPDF_Dictionary( + std::map&& items) : + QPDFValue(::ot_dictionary, "dictionary"), + items(items) +{ +} + std::shared_ptr QPDF_Dictionary::create(std::map const& items) { return do_create(new QPDF_Dictionary(items)); } +std::shared_ptr +QPDF_Dictionary::create(std::map&& items) +{ + return do_create(new QPDF_Dictionary(items)); +} + std::shared_ptr QPDF_Dictionary::copy(bool shallow) { diff --git a/libqpdf/qpdf/QPDF_Dictionary.hh b/libqpdf/qpdf/QPDF_Dictionary.hh index 3354a256..bc025403 100644 --- a/libqpdf/qpdf/QPDF_Dictionary.hh +++ b/libqpdf/qpdf/QPDF_Dictionary.hh @@ -14,6 +14,8 @@ class QPDF_Dictionary: public QPDFValue virtual ~QPDF_Dictionary() = default; static std::shared_ptr create(std::map const& items); + static std::shared_ptr + create(std::map&& items); virtual std::shared_ptr copy(bool shallow = false); virtual std::string unparse(); virtual JSON getJSON(int json_version); @@ -35,6 +37,7 @@ class QPDF_Dictionary: public QPDFValue private: QPDF_Dictionary(std::map const& items); + QPDF_Dictionary(std::map&& items); std::map items; }; -- cgit v1.2.3-54-g00ecf