aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-12-19 20:20:36 +0100
committerJay Berkenbilt <jberkenbilt@users.noreply.github.com>2022-12-31 20:37:35 +0100
commitd67a54ae93640f784a03df5d07404df13b1b297a (patch)
treef0db36860634d0707143391b9bfbf1726dcf5914
parent846504129f58a638ba481c4329187be8ebb20419 (diff)
downloadqpdf-d67a54ae93640f784a03df5d07404df13b1b297a.tar.zst
Tune parsing of dictionaries in QPDFParser::parse
Use move semantics for dictionary creation.
-rw-r--r--libqpdf/QPDFParser.cc2
-rw-r--r--libqpdf/QPDF_Dictionary.cc13
-rw-r--r--libqpdf/qpdf/QPDF_Dictionary.hh3
3 files changed, 17 insertions, 1 deletions
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,6 +9,13 @@ QPDF_Dictionary::QPDF_Dictionary(
{
}
+QPDF_Dictionary::QPDF_Dictionary(
+ std::map<std::string, QPDFObjectHandle>&& items) :
+ QPDFValue(::ot_dictionary, "dictionary"),
+ items(items)
+{
+}
+
std::shared_ptr<QPDFObject>
QPDF_Dictionary::create(std::map<std::string, QPDFObjectHandle> const& items)
{
@@ -16,6 +23,12 @@ QPDF_Dictionary::create(std::map<std::string, QPDFObjectHandle> const& items)
}
std::shared_ptr<QPDFObject>
+QPDF_Dictionary::create(std::map<std::string, QPDFObjectHandle>&& items)
+{
+ return do_create(new QPDF_Dictionary(items));
+}
+
+std::shared_ptr<QPDFObject>
QPDF_Dictionary::copy(bool shallow)
{
if (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<QPDFObject>
create(std::map<std::string, QPDFObjectHandle> const& items);
+ static std::shared_ptr<QPDFObject>
+ create(std::map<std::string, QPDFObjectHandle>&& items);
virtual std::shared_ptr<QPDFObject> 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<std::string, QPDFObjectHandle> const& items);
+ QPDF_Dictionary(std::map<std::string, QPDFObjectHandle>&& items);
std::map<std::string, QPDFObjectHandle> items;
};