aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFPageObjectHelper.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2023-05-18 18:40:06 +0200
committerm-holger <m-holger@kubitscheck.org>2023-05-19 19:49:36 +0200
commit53f6c0a55a3202d102eec92654b728de3eda2201 (patch)
tree772e5b0cbcf9c94ad72acfde3f7b0e2d255315e7 /libqpdf/QPDFPageObjectHelper.cc
parent1957ad1e05ab2372358421ae4880fcbc7fcaf10f (diff)
downloadqpdf-53f6c0a55a3202d102eec92654b728de3eda2201.tar.zst
Use QPDFObjGen::set in QPDFPageObjectHelper::forEachXObject
Diffstat (limited to 'libqpdf/QPDFPageObjectHelper.cc')
-rw-r--r--libqpdf/QPDFPageObjectHelper.cc33
1 files changed, 15 insertions, 18 deletions
diff --git a/libqpdf/QPDFPageObjectHelper.cc b/libqpdf/QPDFPageObjectHelper.cc
index a2deb386..f884b071 100644
--- a/libqpdf/QPDFPageObjectHelper.cc
+++ b/libqpdf/QPDFPageObjectHelper.cc
@@ -352,30 +352,27 @@ QPDFPageObjectHelper::forEachXObject(
"QPDFPageObjectHelper::forEachXObject",
recursive ? (this->oh.isFormXObject() ? 0 : 1)
: (this->oh.isFormXObject() ? 2 : 3));
- std::set<QPDFObjGen> seen;
+ QPDFObjGen::set seen;
std::list<QPDFPageObjectHelper> queue;
queue.push_back(*this);
while (!queue.empty()) {
- QPDFPageObjectHelper ph = queue.front();
- queue.pop_front();
- QPDFObjGen og = ph.oh.getObjGen();
- if (seen.count(og)) {
- continue;
- }
- seen.insert(og);
- QPDFObjectHandle resources = ph.getAttribute("/Resources", false);
- if (resources.isDictionary() && resources.hasKey("/XObject")) {
- QPDFObjectHandle xobj_dict = resources.getKey("/XObject");
- for (auto const& key: xobj_dict.getKeys()) {
- QPDFObjectHandle obj = xobj_dict.getKey(key);
- if ((!selector) || selector(obj)) {
- action(obj, xobj_dict, key);
- }
- if (recursive && obj.isFormXObject()) {
- queue.push_back(QPDFPageObjectHelper(obj));
+ auto& ph = queue.front();
+ if (seen.add(ph)) {
+ auto xobj_dict =
+ ph.getAttribute("/Resources", false).getKeyIfDict("/XObject");
+ if (xobj_dict.isDictionary()) {
+ for (auto const& key: xobj_dict.getKeys()) {
+ QPDFObjectHandle obj = xobj_dict.getKey(key);
+ if ((!selector) || selector(obj)) {
+ action(obj, xobj_dict, key);
+ }
+ if (recursive && obj.isFormXObject()) {
+ queue.emplace_back(obj);
+ }
}
}
}
+ queue.pop_front();
}
}