Commit d60f06c15df732aa98d77e801b32f01abde39402

Authored by m-holger
1 parent d395a909

Use QPDFObjGen::set in QPDFFormFieldObjectHelper

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&amp; 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;
... ...