2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-06-27 15:43:33 +00:00

Use QPDFObjGen::set in QPDFPageObjectHelper::forEachXObject

This commit is contained in:
m-holger 2023-05-18 17:40:06 +01:00
parent 1957ad1e05
commit 53f6c0a55a

View File

@ -352,30 +352,27 @@ QPDFPageObjectHelper::forEachXObject(
"QPDFPageObjectHelper::forEachXObject", "QPDFPageObjectHelper::forEachXObject",
recursive ? (this->oh.isFormXObject() ? 0 : 1) recursive ? (this->oh.isFormXObject() ? 0 : 1)
: (this->oh.isFormXObject() ? 2 : 3)); : (this->oh.isFormXObject() ? 2 : 3));
std::set<QPDFObjGen> seen; QPDFObjGen::set seen;
std::list<QPDFPageObjectHelper> queue; std::list<QPDFPageObjectHelper> queue;
queue.push_back(*this); queue.push_back(*this);
while (!queue.empty()) { while (!queue.empty()) {
QPDFPageObjectHelper ph = queue.front(); auto& ph = queue.front();
queue.pop_front(); if (seen.add(ph)) {
QPDFObjGen og = ph.oh.getObjGen(); auto xobj_dict =
if (seen.count(og)) { ph.getAttribute("/Resources", false).getKeyIfDict("/XObject");
continue; if (xobj_dict.isDictionary()) {
} for (auto const& key: xobj_dict.getKeys()) {
seen.insert(og); QPDFObjectHandle obj = xobj_dict.getKey(key);
QPDFObjectHandle resources = ph.getAttribute("/Resources", false); if ((!selector) || selector(obj)) {
if (resources.isDictionary() && resources.hasKey("/XObject")) { action(obj, xobj_dict, key);
QPDFObjectHandle xobj_dict = resources.getKey("/XObject"); }
for (auto const& key: xobj_dict.getKeys()) { if (recursive && obj.isFormXObject()) {
QPDFObjectHandle obj = xobj_dict.getKey(key); queue.emplace_back(obj);
if ((!selector) || selector(obj)) { }
action(obj, xobj_dict, key);
}
if (recursive && obj.isFormXObject()) {
queue.push_back(QPDFPageObjectHelper(obj));
} }
} }
} }
queue.pop_front();
} }
} }