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,20 +36,14 @@ QPDFFormFieldObjectHelper | ||
| 36 | QPDFFormFieldObjectHelper::getTopLevelField(bool* is_different) | 36 | QPDFFormFieldObjectHelper::getTopLevelField(bool* is_different) |
| 37 | { | 37 | { |
| 38 | auto top_field = this->oh; | 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 | top_field = top_field.getKey("/Parent"); | 41 | top_field = top_field.getKey("/Parent"); |
| 43 | if (is_different) { | 42 | if (is_different) { |
| 44 | *is_different = true; | 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 | QPDFObjectHandle | 49 | QPDFObjectHandle |
| @@ -76,17 +70,17 @@ QPDFFormFieldObjectHelper::getInheritableFieldValue(std::string const& name) | @@ -76,17 +70,17 @@ QPDFFormFieldObjectHelper::getInheritableFieldValue(std::string const& name) | ||
| 76 | return QPDFObjectHandle::newNull(); | 70 | return QPDFObjectHandle::newNull(); |
| 77 | } | 71 | } |
| 78 | QPDFObjectHandle result(node.getKey(name)); | 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 | return result; | 86 | return result; |
| @@ -127,8 +121,8 @@ QPDFFormFieldObjectHelper::getFullyQualifiedName() | @@ -127,8 +121,8 @@ QPDFFormFieldObjectHelper::getFullyQualifiedName() | ||
| 127 | { | 121 | { |
| 128 | std::string result; | 122 | std::string result; |
| 129 | QPDFObjectHandle node = this->oh; | 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 | if (node.getKey("/T").isString()) { | 126 | if (node.getKey("/T").isString()) { |
| 133 | if (!result.empty()) { | 127 | if (!result.empty()) { |
| 134 | QTC::TC( | 128 | QTC::TC( |
| @@ -138,7 +132,6 @@ QPDFFormFieldObjectHelper::getFullyQualifiedName() | @@ -138,7 +132,6 @@ QPDFFormFieldObjectHelper::getFullyQualifiedName() | ||
| 138 | } | 132 | } |
| 139 | result = node.getKey("/T").getUTF8Value() + result; | 133 | result = node.getKey("/T").getUTF8Value() + result; |
| 140 | } | 134 | } |
| 141 | - seen.insert(node.getObjGen()); | ||
| 142 | node = node.getKey("/Parent"); | 135 | node = node.getKey("/Parent"); |
| 143 | } | 136 | } |
| 144 | return result; | 137 | return result; |