Commit d60f06c15df732aa98d77e801b32f01abde39402

Authored by m-holger
1 parent d395a909

Use QPDFObjGen::set in QPDFFormFieldObjectHelper

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&amp; name) @@ -76,17 +70,17 @@ QPDFFormFieldObjectHelper::getInheritableFieldValue(std::string const&amp; 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;