aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF_optimization.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf/QPDF_optimization.cc')
-rw-r--r--libqpdf/QPDF_optimization.cc78
1 files changed, 22 insertions, 56 deletions
diff --git a/libqpdf/QPDF_optimization.cc b/libqpdf/QPDF_optimization.cc
index 0c453126..d22aa378 100644
--- a/libqpdf/QPDF_optimization.cc
+++ b/libqpdf/QPDF_optimization.cc
@@ -90,10 +90,7 @@ QPDF::optimize(
// Traverse document-level items
std::set<std::string> keys = this->m->trailer.getKeys();
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
- std::string const& key = *iter;
+ for (auto const& key: keys) {
if (key == "/Root") {
// handled separately
} else {
@@ -105,17 +102,13 @@ QPDF::optimize(
}
keys = root.getKeys();
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
+ for (auto const& key: keys) {
// Technically, /I keys from /Thread dictionaries are supposed
// to be handled separately, but we are going to disregard
// that specification for now. There is loads of evidence
// that pdlin and Acrobat both disregard things like this from
// time to time, so this is almost certain not to cause any
// problems.
-
- std::string const& key = *iter;
updateObjectMaps(
ObjUser(ObjUser::ou_root_key, key),
root.getKey(key),
@@ -212,10 +205,7 @@ QPDF::pushInheritedAttributesToPageInternal(
std::set<std::string> inheritable_keys;
std::set<std::string> keys = cur_pages.getKeys();
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
- std::string const& key = *iter;
+ for (auto const& key: keys) {
if ((key == "/MediaBox") || (key == "/CropBox") ||
(key == "/Resources") || (key == "/Rotate")) {
if (!allow_changes) {
@@ -298,11 +288,7 @@ QPDF::pushInheritedAttributesToPageInternal(
if (!inheritable_keys.empty()) {
QTC::TC("qpdf", "QPDF opt inheritable keys");
- for (std::set<std::string>::iterator iter =
- inheritable_keys.begin();
- iter != inheritable_keys.end();
- ++iter) {
- std::string const& key = (*iter);
+ for (auto const& key: inheritable_keys) {
key_ancestors[key].pop_back();
if (key_ancestors[key].empty()) {
QTC::TC("qpdf", "QPDF opt erase empty key ancestor");
@@ -315,14 +301,11 @@ QPDF::pushInheritedAttributesToPageInternal(
} else if (type == "/Page") {
// Add all available inheritable attributes not present in
// this object to this object.
- for (std::map<std::string, std::vector<QPDFObjectHandle>>::iterator
- iter = key_ancestors.begin();
- iter != key_ancestors.end();
- ++iter) {
- std::string const& key = (*iter).first;
+ for (auto const& iter: key_ancestors) {
+ std::string const& key = iter.first;
if (!cur_pages.hasKey(key)) {
QTC::TC("qpdf", "QPDF opt resource inherited");
- cur_pages.replaceKey(key, (*iter).second.back());
+ cur_pages.replaceKey(key, iter.second.back());
} else {
QTC::TC("qpdf", "QPDF opt page resource hides ancestor");
}
@@ -404,10 +387,7 @@ QPDF::updateObjectMapsInternal(
}
std::set<std::string> keys = dict.getKeys();
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
- std::string const& key = *iter;
+ for (auto const& key: keys) {
if (is_page_node && (key == "/Thumb")) {
// Traverse page thumbnail dictionaries as a special
// case.
@@ -454,42 +434,28 @@ QPDF::filterCompressedObjects(std::map<int, int> const& object_stream_data)
std::map<ObjUser, std::set<QPDFObjGen>> t_obj_user_to_objects;
std::map<QPDFObjGen, std::set<ObjUser>> t_object_to_obj_users;
- for (std::map<ObjUser, std::set<QPDFObjGen>>::iterator i1 =
- this->m->obj_user_to_objects.begin();
- i1 != this->m->obj_user_to_objects.end();
- ++i1) {
- ObjUser const& ou = (*i1).first;
- std::set<QPDFObjGen> const& objects = (*i1).second;
- for (std::set<QPDFObjGen>::const_iterator i2 = objects.begin();
- i2 != objects.end();
- ++i2) {
- QPDFObjGen const& og = (*i2);
- std::map<int, int>::const_iterator i3 =
- object_stream_data.find(og.getObj());
- if (i3 == object_stream_data.end()) {
+ for (auto const& i1: this->m->obj_user_to_objects) {
+ ObjUser const& ou = i1.first;
+ std::set<QPDFObjGen> const& objects = i1.second;
+ for (auto const& og: objects) {
+ auto i2 = object_stream_data.find(og.getObj());
+ if (i2 == object_stream_data.end()) {
t_obj_user_to_objects[ou].insert(og);
} else {
- t_obj_user_to_objects[ou].insert(QPDFObjGen((*i3).second, 0));
+ t_obj_user_to_objects[ou].insert(QPDFObjGen(i2->second, 0));
}
}
}
- for (std::map<QPDFObjGen, std::set<ObjUser>>::iterator i1 =
- this->m->object_to_obj_users.begin();
- i1 != this->m->object_to_obj_users.end();
- ++i1) {
- QPDFObjGen const& og = (*i1).first;
- std::set<ObjUser> const& objusers = (*i1).second;
- for (std::set<ObjUser>::const_iterator i2 = objusers.begin();
- i2 != objusers.end();
- ++i2) {
- ObjUser const& ou = (*i2);
- std::map<int, int>::const_iterator i3 =
- object_stream_data.find(og.getObj());
- if (i3 == object_stream_data.end()) {
+ for (auto const& i1: this->m->object_to_obj_users) {
+ QPDFObjGen const& og = i1.first;
+ std::set<ObjUser> const& objusers = i1.second;
+ for (auto const& ou: objusers) {
+ auto i2 = object_stream_data.find(og.getObj());
+ if (i2 == object_stream_data.end()) {
t_object_to_obj_users[og].insert(ou);
} else {
- t_object_to_obj_users[QPDFObjGen((*i3).second, 0)].insert(ou);
+ t_object_to_obj_users[QPDFObjGen(i2->second, 0)].insert(ou);
}
}
}