Commit c72de58d6c80475316bb0767e73fda0ed2ca2f9f

Authored by m-holger
1 parent 08dcf84c

Remove `getKey` from `BaseDictionary`, refactor dictionary key access to use `op…

…erator[]`, and simplify null handling logic.
libqpdf/QPDF_Dictionary.cc
... ... @@ -35,21 +35,6 @@ BaseHandle::contains(std::string const& key) const
35 35 return !(*this)[key].null();
36 36 }
37 37  
38   -QPDFObjectHandle
39   -BaseDictionary::getKey(std::string const& key) const
40   -{
41   - auto d = dict();
42   -
43   - // PDF spec says fetching a non-existent key from a dictionary returns the null object.
44   - auto item = d->items.find(key);
45   - if (item != d->items.end()) {
46   - // May be a null object
47   - return item->second;
48   - }
49   - static auto constexpr msg = " -> dictionary key $VD"sv;
50   - return QPDF_Null::create(obj, msg, key);
51   -}
52   -
53 38 std::set<std::string>
54 39 BaseDictionary::getKeys()
55 40 {
... ... @@ -133,11 +118,14 @@ QPDFObjectHandle::hasKey(std::string const&amp; key) const
133 118 QPDFObjectHandle
134 119 QPDFObjectHandle::getKey(std::string const& key) const
135 120 {
136   - if (auto dict = as_dictionary(strict)) {
137   - return dict.getKey(key);
  121 + if (auto result = (*this)[key]) {
  122 + return result;
  123 + }
  124 + if (isDictionary()) {
  125 + static auto constexpr msg = " -> dictionary key $VD"sv;
  126 + return QPDF_Null::create(obj, msg, key);
138 127 }
139 128 typeWarning("dictionary", "returning null for attempted key retrieval");
140   - QTC::TC("qpdf", "QPDFObjectHandle dictionary null for getKey");
141 129 static auto constexpr msg = " -> null returned from getting key $VD from non-Dictionary"sv;
142 130 return QPDF_Null::create(obj, msg, "");
143 131 }
... ... @@ -211,10 +199,7 @@ QPDFObjectHandle::removeKey(std::string const&amp; key)
211 199 QPDFObjectHandle
212 200 QPDFObjectHandle::removeKeyAndGetOld(std::string const& key)
213 201 {
214   - auto result = QPDFObjectHandle::newNull();
215   - if (auto dict = as_dictionary(strict)) {
216   - result = dict.getKey(key);
217   - }
  202 + auto result = (*this)[key];
218 203 removeKey(key);
219   - return result;
  204 + return result ? result : newNull();
220 205 }
... ...
libqpdf/qpdf/QPDFObjectHandle_private.hh
... ... @@ -120,7 +120,6 @@ namespace qpdf
120 120 {
121 121 public:
122 122 // The following methods are not part of the public API.
123   - QPDFObjectHandle getKey(std::string const& key) const;
124 123 std::set<std::string> getKeys();
125 124 std::map<std::string, QPDFObjectHandle> const& getAsMap() const;
126 125 void removeKey(std::string const& key);
... ...
qpdf/qpdf.testcov
... ... @@ -304,7 +304,6 @@ QPDFObjectHandle insert array bounds 0
304 304 QPDFObjectHandle array ignoring append item 0
305 305 QPDFObjectHandle array ignoring erase item 0
306 306 QPDFObjectHandle dictionary false for hasKey 0
307   -QPDFObjectHandle dictionary null for getKey 0
308 307 QPDFObjectHandle dictionary empty set for getKeys 0
309 308 QPDFObjectHandle dictionary empty map for asMap 0
310 309 QPDFObjectHandle dictionary ignoring replaceKey 0
... ...