From 1496472e1c2f64f46d2d7d76481aef1aa3fff869 Mon Sep 17 00:00:00 2001 From: m-holger Date: Fri, 17 Feb 2023 13:58:21 +0000 Subject: Add method QPDFValue::setChildDescription --- libqpdf/QPDF_Dictionary.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'libqpdf/QPDF_Dictionary.cc') diff --git a/libqpdf/QPDF_Dictionary.cc b/libqpdf/QPDF_Dictionary.cc index 5349a2a8..f45c00c6 100644 --- a/libqpdf/QPDF_Dictionary.cc +++ b/libqpdf/QPDF_Dictionary.cc @@ -1,7 +1,10 @@ #include +#include #include +using namespace std::literals; + QPDF_Dictionary::QPDF_Dictionary( std::map const& items) : QPDFValue(::ot_dictionary, "dictionary"), @@ -98,10 +101,8 @@ QPDF_Dictionary::getKey(std::string const& key) return item->second; } else { auto null = QPDFObjectHandle::newNull(); - if (qpdf != nullptr) { - null.setObjectDescription( - qpdf, getDescription() + " -> dictionary key " + key); - } + static auto constexpr msg = " -> dictionary key $VD"sv; + null.getObj()->setChildDescription(shared_from_this(), msg, key); return null; } } -- cgit v1.2.3-70-g09d2 From 07bb5c3dd6213af9c9a64e17ae2d457cf4fc7190 Mon Sep 17 00:00:00 2001 From: m-holger Date: Fri, 17 Feb 2023 14:59:33 +0000 Subject: Overload QPDF_Null::create to take a child object description --- libqpdf/QPDFObjectHandle.cc | 17 +++++------------ libqpdf/QPDF_Dictionary.cc | 5 ++--- libqpdf/QPDF_Null.cc | 24 ++++++++++++++++++++++++ libqpdf/qpdf/QPDF_Null.hh | 8 ++++++++ 4 files changed, 39 insertions(+), 15 deletions(-) (limited to 'libqpdf/QPDF_Dictionary.cc') diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index cbe42995..d474dcce 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -802,12 +802,10 @@ QPDFObjectHandle::getArrayNItems() QPDFObjectHandle QPDFObjectHandle::getArrayItem(int n) { - QPDFObjectHandle result; auto array = asArray(); if (array && (n < array->getNItems()) && (n >= 0)) { - result = array->getItem(n); + return array->getItem(n); } else { - result = newNull(); if (array) { objectWarning("returning null for out of bounds array access"); QTC::TC("qpdf", "QPDFObjectHandle array bounds"); @@ -817,9 +815,8 @@ QPDFObjectHandle::getArrayItem(int n) } static auto constexpr msg = " -> null returned from invalid array access"sv; - result.obj->setChildDescription(obj, msg, ""); + return QPDF_Null::create(obj, msg, ""); } - return result; } bool @@ -1028,19 +1025,15 @@ QPDFObjectHandle::hasKey(std::string const& key) QPDFObjectHandle QPDFObjectHandle::getKey(std::string const& key) { - QPDFObjectHandle result; - auto dict = asDictionary(); - if (dict) { - result = dict->getKey(key); + if (auto dict = asDictionary()) { + return dict->getKey(key); } else { typeWarning("dictionary", "returning null for attempted key retrieval"); QTC::TC("qpdf", "QPDFObjectHandle dictionary null for getKey"); - result = newNull(); static auto constexpr msg = " -> null returned from getting key $VD from non-Dictionary"sv; - result.obj->setChildDescription(obj, msg, key); + return QPDF_Null::create(obj, msg, ""); } - return result; } QPDFObjectHandle diff --git a/libqpdf/QPDF_Dictionary.cc b/libqpdf/QPDF_Dictionary.cc index f45c00c6..43ad8a85 100644 --- a/libqpdf/QPDF_Dictionary.cc +++ b/libqpdf/QPDF_Dictionary.cc @@ -2,6 +2,7 @@ #include #include +#include using namespace std::literals; @@ -100,10 +101,8 @@ QPDF_Dictionary::getKey(std::string const& key) // May be a null object return item->second; } else { - auto null = QPDFObjectHandle::newNull(); static auto constexpr msg = " -> dictionary key $VD"sv; - null.getObj()->setChildDescription(shared_from_this(), msg, key); - return null; + return QPDF_Null::create(shared_from_this(), msg, key); } } diff --git a/libqpdf/QPDF_Null.cc b/libqpdf/QPDF_Null.cc index 6ec4556c..a82f23c0 100644 --- a/libqpdf/QPDF_Null.cc +++ b/libqpdf/QPDF_Null.cc @@ -1,5 +1,7 @@ #include +#include + QPDF_Null::QPDF_Null() : QPDFValue(::ot_null, "null") { @@ -11,6 +13,28 @@ QPDF_Null::create() return do_create(new QPDF_Null()); } +std::shared_ptr +QPDF_Null::create( + std::shared_ptr parent, + std::string_view const& static_descr, + std::string var_descr) +{ + auto n = do_create(new QPDF_Null()); + n->setChildDescription(parent, static_descr, var_descr); + return n; +} + +std::shared_ptr +QPDF_Null::create( + std::shared_ptr parent, + std::string_view const& static_descr, + std::string var_descr) +{ + auto n = do_create(new QPDF_Null()); + n->setChildDescription(parent, static_descr, var_descr); + return n; +} + std::shared_ptr QPDF_Null::copy(bool shallow) { diff --git a/libqpdf/qpdf/QPDF_Null.hh b/libqpdf/qpdf/QPDF_Null.hh index 1a92b214..2bbb3db5 100644 --- a/libqpdf/qpdf/QPDF_Null.hh +++ b/libqpdf/qpdf/QPDF_Null.hh @@ -8,6 +8,14 @@ class QPDF_Null: public QPDFValue public: virtual ~QPDF_Null() = default; static std::shared_ptr create(); + static std::shared_ptr create( + std::shared_ptr parent, + std::string_view const& static_descr, + std::string var_descr); + static std::shared_ptr create( + std::shared_ptr parent, + std::string_view const& static_descr, + std::string var_descr); virtual std::shared_ptr copy(bool shallow = false); virtual std::string unparse(); virtual JSON getJSON(int json_version); -- cgit v1.2.3-70-g09d2