diff options
author | m-holger <m-holger@kubitscheck.org> | 2023-05-18 18:40:06 +0200 |
---|---|---|
committer | m-holger <m-holger@kubitscheck.org> | 2023-05-19 19:49:36 +0200 |
commit | 53f6c0a55a3202d102eec92654b728de3eda2201 (patch) | |
tree | 772e5b0cbcf9c94ad72acfde3f7b0e2d255315e7 /libqpdf | |
parent | 1957ad1e05ab2372358421ae4880fcbc7fcaf10f (diff) | |
download | qpdf-53f6c0a55a3202d102eec92654b728de3eda2201.tar.zst |
Use QPDFObjGen::set in QPDFPageObjectHelper::forEachXObject
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDFPageObjectHelper.cc | 33 |
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(); } } |