Commit d60f06c15df732aa98d77e801b32f01abde39402
1 parent
d395a909
Use QPDFObjGen::set in QPDFFormFieldObjectHelper
Showing
1 changed file
with
16 additions
and
23 deletions
libqpdf/QPDFFormFieldObjectHelper.cc
| ... | ... | @@ -36,20 +36,14 @@ QPDFFormFieldObjectHelper |
| 36 | 36 | QPDFFormFieldObjectHelper::getTopLevelField(bool* is_different) |
| 37 | 37 | { |
| 38 | 38 | auto top_field = this->oh; |
| 39 | - std::set<QPDFObjGen> seen; | |
| 40 | - while (top_field.isDictionary() && | |
| 41 | - (!top_field.getKey("/Parent").isNull())) { | |
| 39 | + QPDFObjGen::set seen; | |
| 40 | + while (seen.add(top_field) && !top_field.getKeyIfDict("/Parent").isNull()) { | |
| 42 | 41 | top_field = top_field.getKey("/Parent"); |
| 43 | 42 | if (is_different) { |
| 44 | 43 | *is_different = true; |
| 45 | 44 | } |
| 46 | - auto og = top_field.getObjGen(); | |
| 47 | - if (seen.count(og)) { | |
| 48 | - break; | |
| 49 | - } | |
| 50 | - seen.insert(og); | |
| 51 | 45 | } |
| 52 | - return QPDFFormFieldObjectHelper(top_field); | |
| 46 | + return {top_field}; | |
| 53 | 47 | } |
| 54 | 48 | |
| 55 | 49 | QPDFObjectHandle |
| ... | ... | @@ -76,17 +70,17 @@ QPDFFormFieldObjectHelper::getInheritableFieldValue(std::string const& name) |
| 76 | 70 | return QPDFObjectHandle::newNull(); |
| 77 | 71 | } |
| 78 | 72 | QPDFObjectHandle result(node.getKey(name)); |
| 79 | - std::set<QPDFObjGen> seen; | |
| 80 | - while (result.isNull() && node.hasKey("/Parent")) { | |
| 81 | - seen.insert(node.getObjGen()); | |
| 82 | - node = node.getKey("/Parent"); | |
| 83 | - if (seen.count(node.getObjGen())) { | |
| 84 | - break; | |
| 85 | - } | |
| 86 | - result = node.getKey(name); | |
| 87 | - if (!result.isNull()) { | |
| 88 | - QTC::TC( | |
| 89 | - "qpdf", "QPDFFormFieldObjectHelper non-trivial inheritance"); | |
| 73 | + if (result.isNull()) { | |
| 74 | + QPDFObjGen::set seen; | |
| 75 | + while (seen.add(node) && node.hasKey("/Parent")) { | |
| 76 | + node = node.getKey("/Parent"); | |
| 77 | + result = node.getKey(name); | |
| 78 | + if (!result.isNull()) { | |
| 79 | + QTC::TC( | |
| 80 | + "qpdf", | |
| 81 | + "QPDFFormFieldObjectHelper non-trivial inheritance"); | |
| 82 | + return result; | |
| 83 | + } | |
| 90 | 84 | } |
| 91 | 85 | } |
| 92 | 86 | return result; |
| ... | ... | @@ -127,8 +121,8 @@ QPDFFormFieldObjectHelper::getFullyQualifiedName() |
| 127 | 121 | { |
| 128 | 122 | std::string result; |
| 129 | 123 | QPDFObjectHandle node = this->oh; |
| 130 | - std::set<QPDFObjGen> seen; | |
| 131 | - while ((!node.isNull()) && (seen.count(node.getObjGen()) == 0)) { | |
| 124 | + QPDFObjGen::set seen; | |
| 125 | + while (!node.isNull() && seen.add(node)) { | |
| 132 | 126 | if (node.getKey("/T").isString()) { |
| 133 | 127 | if (!result.empty()) { |
| 134 | 128 | QTC::TC( |
| ... | ... | @@ -138,7 +132,6 @@ QPDFFormFieldObjectHelper::getFullyQualifiedName() |
| 138 | 132 | } |
| 139 | 133 | result = node.getKey("/T").getUTF8Value() + result; |
| 140 | 134 | } |
| 141 | - seen.insert(node.getObjGen()); | |
| 142 | 135 | node = node.getKey("/Parent"); |
| 143 | 136 | } |
| 144 | 137 | return result; | ... | ... |