diff options
author | Jay Berkenbilt <jberkenbilt@users.noreply.github.com> | 2023-05-20 20:09:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-20 20:09:49 +0200 |
commit | a85635b839755765713eb27d767f42b357056b2e (patch) | |
tree | 369b4e49b78e54e04a0409b774a659206017addd /libqpdf/QPDFFormFieldObjectHelper.cc | |
parent | fd17c8e3fe38a56abf50ce0edec1cde48d4f74cb (diff) | |
parent | 50bc82b4e035853bd06a9935722d6b5aec902133 (diff) | |
download | qpdf-a85635b839755765713eb27d767f42b357056b2e.tar.zst |
Merge pull request #929 from m-holger/ogguard
Add new convenience class QPDFObjGen::Guard
Diffstat (limited to 'libqpdf/QPDFFormFieldObjectHelper.cc')
-rw-r--r-- | libqpdf/QPDFFormFieldObjectHelper.cc | 39 |
1 files changed, 16 insertions, 23 deletions
diff --git a/libqpdf/QPDFFormFieldObjectHelper.cc b/libqpdf/QPDFFormFieldObjectHelper.cc index 4b95c91f..255270a8 100644 --- a/libqpdf/QPDFFormFieldObjectHelper.cc +++ b/libqpdf/QPDFFormFieldObjectHelper.cc @@ -36,20 +36,14 @@ QPDFFormFieldObjectHelper QPDFFormFieldObjectHelper::getTopLevelField(bool* is_different) { auto top_field = this->oh; - std::set<QPDFObjGen> seen; - while (top_field.isDictionary() && - (!top_field.getKey("/Parent").isNull())) { + QPDFObjGen::set seen; + while (seen.add(top_field) && !top_field.getKeyIfDict("/Parent").isNull()) { top_field = top_field.getKey("/Parent"); if (is_different) { *is_different = true; } - auto og = top_field.getObjGen(); - if (seen.count(og)) { - break; - } - seen.insert(og); } - return QPDFFormFieldObjectHelper(top_field); + return {top_field}; } QPDFObjectHandle @@ -76,17 +70,17 @@ QPDFFormFieldObjectHelper::getInheritableFieldValue(std::string const& name) return QPDFObjectHandle::newNull(); } QPDFObjectHandle result(node.getKey(name)); - std::set<QPDFObjGen> seen; - while (result.isNull() && node.hasKey("/Parent")) { - seen.insert(node.getObjGen()); - node = node.getKey("/Parent"); - if (seen.count(node.getObjGen())) { - break; - } - result = node.getKey(name); - if (!result.isNull()) { - QTC::TC( - "qpdf", "QPDFFormFieldObjectHelper non-trivial inheritance"); + if (result.isNull()) { + QPDFObjGen::set seen; + while (seen.add(node) && node.hasKey("/Parent")) { + node = node.getKey("/Parent"); + result = node.getKey(name); + if (!result.isNull()) { + QTC::TC( + "qpdf", + "QPDFFormFieldObjectHelper non-trivial inheritance"); + return result; + } } } return result; @@ -127,8 +121,8 @@ QPDFFormFieldObjectHelper::getFullyQualifiedName() { std::string result; QPDFObjectHandle node = this->oh; - std::set<QPDFObjGen> seen; - while ((!node.isNull()) && (seen.count(node.getObjGen()) == 0)) { + QPDFObjGen::set seen; + while (!node.isNull() && seen.add(node)) { if (node.getKey("/T").isString()) { if (!result.empty()) { QTC::TC( @@ -138,7 +132,6 @@ QPDFFormFieldObjectHelper::getFullyQualifiedName() } result = node.getKey("/T").getUTF8Value() + result; } - seen.insert(node.getObjGen()); node = node.getKey("/Parent"); } return result; |