mirror of
https://github.com/qpdf/qpdf.git
synced 2024-09-29 05:29:06 +00:00
Use QPDFObjGen::set in QPDFPageObjectHelper::forEachXObject
This commit is contained in:
parent
1957ad1e05
commit
53f6c0a55a
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user