2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-09-27 12:39:06 +00:00

Use QPDFObjGen::set in QPDFFormFieldObjectHelper

This commit is contained in:
m-holger 2023-01-05 15:12:31 +00:00
parent d395a90904
commit d60f06c15d

View File

@ -36,20 +36,14 @@ QPDFFormFieldObjectHelper
QPDFFormFieldObjectHelper::getTopLevelField(bool* is_different) QPDFFormFieldObjectHelper::getTopLevelField(bool* is_different)
{ {
auto top_field = this->oh; auto top_field = this->oh;
std::set<QPDFObjGen> seen; QPDFObjGen::set seen;
while (top_field.isDictionary() && while (seen.add(top_field) && !top_field.getKeyIfDict("/Parent").isNull()) {
(!top_field.getKey("/Parent").isNull())) {
top_field = top_field.getKey("/Parent"); top_field = top_field.getKey("/Parent");
if (is_different) { if (is_different) {
*is_different = true; *is_different = true;
} }
auto og = top_field.getObjGen();
if (seen.count(og)) {
break;
} }
seen.insert(og); return {top_field};
}
return QPDFFormFieldObjectHelper(top_field);
} }
QPDFObjectHandle QPDFObjectHandle
@ -76,17 +70,17 @@ QPDFFormFieldObjectHelper::getInheritableFieldValue(std::string const& name)
return QPDFObjectHandle::newNull(); return QPDFObjectHandle::newNull();
} }
QPDFObjectHandle result(node.getKey(name)); QPDFObjectHandle result(node.getKey(name));
std::set<QPDFObjGen> seen; if (result.isNull()) {
while (result.isNull() && node.hasKey("/Parent")) { QPDFObjGen::set seen;
seen.insert(node.getObjGen()); while (seen.add(node) && node.hasKey("/Parent")) {
node = node.getKey("/Parent"); node = node.getKey("/Parent");
if (seen.count(node.getObjGen())) {
break;
}
result = node.getKey(name); result = node.getKey(name);
if (!result.isNull()) { if (!result.isNull()) {
QTC::TC( QTC::TC(
"qpdf", "QPDFFormFieldObjectHelper non-trivial inheritance"); "qpdf",
"QPDFFormFieldObjectHelper non-trivial inheritance");
return result;
}
} }
} }
return result; return result;
@ -127,8 +121,8 @@ QPDFFormFieldObjectHelper::getFullyQualifiedName()
{ {
std::string result; std::string result;
QPDFObjectHandle node = this->oh; QPDFObjectHandle node = this->oh;
std::set<QPDFObjGen> seen; QPDFObjGen::set seen;
while ((!node.isNull()) && (seen.count(node.getObjGen()) == 0)) { while (!node.isNull() && seen.add(node)) {
if (node.getKey("/T").isString()) { if (node.getKey("/T").isString()) {
if (!result.empty()) { if (!result.empty()) {
QTC::TC( QTC::TC(
@ -138,7 +132,6 @@ QPDFFormFieldObjectHelper::getFullyQualifiedName()
} }
result = node.getKey("/T").getUTF8Value() + result; result = node.getKey("/T").getUTF8Value() + result;
} }
seen.insert(node.getObjGen());
node = node.getKey("/Parent"); node = node.getKey("/Parent");
} }
return result; return result;