aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFJob.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-04-30 19:23:18 +0200
committerJay Berkenbilt <ejb@ql.org>2022-04-30 19:27:18 +0200
commit4f24617e1ea4ba7a6627a9c44304c6e0a0114249 (patch)
tree65c02e9e31cac60bac6f6aec165e8397dcde70e2 /libqpdf/QPDFJob.cc
parent7f023701dd843749cf878baabeb3d33917fda62f (diff)
downloadqpdf-4f24617e1ea4ba7a6627a9c44304c6e0a0114249.tar.zst
Code clean up: use range-style for loops wherever possible
Where not possible, use "auto" to get the iterator type. Editorial note: I have avoid this change for a long time because of not wanting to make gratuitous changes to version history, which can obscure when certain changes were made, but with having recently touched every single file to apply automatic code formatting and with making several broad changes to the API, I decided it was time to take the plunge and get rid of the older (pre-C++11) verbose iterator syntax. The new code is just easier to read and understand, and in many cases, it will be more effecient as fewer temporary copies are being made. m-holger, if you're reading, you can see that I've finally come around. :-)
Diffstat (limited to 'libqpdf/QPDFJob.cc')
-rw-r--r--libqpdf/QPDFJob.cc176
1 files changed, 54 insertions, 122 deletions
diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc
index e0cc783f..4d136223 100644
--- a/libqpdf/QPDFJob.cc
+++ b/libqpdf/QPDFJob.cc
@@ -852,10 +852,7 @@ QPDFJob::doCheck(QPDF& pdf)
std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
DiscardContents discard_contents;
int pageno = 0;
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFPageObjectHelper& page(*iter);
+ for (auto& page: pages) {
++pageno;
try {
page.parseContents(&discard_contents);
@@ -927,10 +924,7 @@ QPDFJob::doShowPages(QPDF& pdf)
std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
int pageno = 0;
auto& cout = *this->m->cout;
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFPageObjectHelper& ph(*iter);
+ for (auto& ph: pages) {
QPDFObjectHandle page = ph.getObjectHandle();
++pageno;
@@ -1058,12 +1052,9 @@ QPDFJob::doJSONObjects(QPDF& pdf, JSON& j)
"trailer", pdf.getTrailer().getJSON(true));
}
std::vector<QPDFObjectHandle> objects = pdf.getAllObjects();
- for (std::vector<QPDFObjectHandle>::iterator iter = objects.begin();
- iter != objects.end();
- ++iter) {
- if (all_objects || wanted_og.count((*iter).getObjGen())) {
- j_objects.addDictionaryMember(
- (*iter).unparse(), (*iter).getJSON(true));
+ for (auto& obj: objects) {
+ if (all_objects || wanted_og.count(obj.getObjGen())) {
+ j_objects.addDictionaryMember(obj.unparse(), obj.getJSON(true));
}
}
}
@@ -1106,12 +1097,10 @@ QPDFJob::doJSONPages(QPDF& pdf, JSON& j)
QPDFOutlineDocumentHelper odh(pdf);
pdh.pushInheritedAttributesToPage();
std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages();
- int pageno = 0;
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter, ++pageno) {
+ int pageno = -1;
+ for (auto& ph: pages) {
+ ++pageno;
JSON j_page = j_pages.addArrayElement(JSON::makeDictionary());
- QPDFPageObjectHelper& ph(*iter);
QPDFObjectHandle page = ph.getObjectHandle();
j_page.addDictionaryMember("object", page.getJSON());
JSON j_images = j_page.addDictionaryMember("images", JSON::makeArray());
@@ -1161,17 +1150,14 @@ QPDFJob::doJSONPages(QPDF& pdf, JSON& j)
j_page.addDictionaryMember("outlines", JSON::makeArray());
std::vector<QPDFOutlineObjectHelper> outlines =
odh.getOutlinesForPage(page.getObjGen());
- for (std::vector<QPDFOutlineObjectHelper>::iterator oiter =
- outlines.begin();
- oiter != outlines.end();
- ++oiter) {
+ for (auto& oiter: outlines) {
JSON j_outline = j_outlines.addArrayElement(JSON::makeDictionary());
j_outline.addDictionaryMember(
- "object", (*oiter).getObjectHandle().getJSON());
+ "object", oiter.getObjectHandle().getJSON());
j_outline.addDictionaryMember(
- "title", JSON::makeString((*oiter).getTitle()));
+ "title", JSON::makeString(oiter.getTitle()));
j_outline.addDictionaryMember(
- "dest", (*oiter).getDest().getJSON(true));
+ "dest", oiter.getDest().getJSON(true));
}
j_page.addDictionaryMember("pageposfrom1", JSON::makeInt(1 + pageno));
}
@@ -1188,10 +1174,8 @@ QPDFJob::doJSONPageLabels(QPDF& pdf, JSON& j)
std::vector<QPDFObjectHandle> labels;
pldh.getLabelsForPageRange(
0, QIntC::to_int(pages.size()) - 1, 0, labels);
- for (std::vector<QPDFObjectHandle>::iterator iter = labels.begin();
- iter != labels.end();
- ++iter) {
- std::vector<QPDFObjectHandle>::iterator next = iter;
+ for (auto iter = labels.begin(); iter != labels.end(); ++iter) {
+ auto next = iter;
++next;
if (next == labels.end()) {
// This can't happen, so ignore it. This could only
@@ -1213,10 +1197,7 @@ add_outlines_to_json(
JSON& j,
std::map<QPDFObjGen, int>& page_numbers)
{
- for (std::vector<QPDFOutlineObjectHelper>::iterator iter = outlines.begin();
- iter != outlines.end();
- ++iter) {
- QPDFOutlineObjectHelper& ol = *iter;
+ for (auto& ol: outlines) {
JSON jo = j.addArrayElement(JSON::makeDictionary());
jo.addDictionaryMember("object", ol.getObjectHandle().getJSON());
jo.addDictionaryMember("title", JSON::makeString(ol.getTitle()));
@@ -1243,10 +1224,8 @@ QPDFJob::doJSONOutlines(QPDF& pdf, JSON& j)
QPDFPageDocumentHelper dh(pdf);
std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
int n = 0;
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFObjectHandle oh = (*iter).getObjectHandle();
+ for (auto const& ph: pages) {
+ QPDFObjectHandle oh = ph.getObjectHandle();
page_numbers[oh.getObjGen()] = ++n;
}
@@ -1268,17 +1247,11 @@ QPDFJob::doJSONAcroform(QPDF& pdf, JSON& j)
QPDFPageDocumentHelper pdh(pdf);
std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages();
int pagepos1 = 0;
- for (std::vector<QPDFPageObjectHelper>::iterator page_iter = pages.begin();
- page_iter != pages.end();
- ++page_iter) {
+ for (auto const& page: pages) {
++pagepos1;
std::vector<QPDFAnnotationObjectHelper> annotations =
- afdh.getWidgetAnnotationsForPage(*page_iter);
- for (std::vector<QPDFAnnotationObjectHelper>::iterator annot_iter =
- annotations.begin();
- annot_iter != annotations.end();
- ++annot_iter) {
- QPDFAnnotationObjectHelper& aoh = *annot_iter;
+ afdh.getWidgetAnnotationsForPage(page);
+ for (auto& aoh: annotations) {
QPDFFormFieldObjectHelper ffh = afdh.getFieldForAnnotation(aoh);
JSON j_field = j_fields.addArrayElement(JSON::makeDictionary());
j_field.addDictionaryMember(
@@ -1314,10 +1287,8 @@ QPDFJob::doJSONAcroform(QPDF& pdf, JSON& j)
JSON j_choices =
j_field.addDictionaryMember("choices", JSON::makeArray());
std::vector<std::string> choices = ffh.getChoices();
- for (std::vector<std::string>::iterator iter = choices.begin();
- iter != choices.end();
- ++iter) {
- j_choices.addArrayElement(JSON::makeString(*iter));
+ for (auto const& choice: choices) {
+ j_choices.addArrayElement(JSON::makeString(choice));
}
JSON j_annot = j_field.addDictionaryMember(
"annotation", JSON::makeDictionary());
@@ -1688,10 +1659,8 @@ Please report this as a bug at\n\
https://github.com/qpdf/qpdf/issues/new\n\
ideally with the file that caused the error and the output below. Thanks!\n\
\n";
- for (std::list<std::string>::iterator iter = errors.begin();
- iter != errors.end();
- ++iter) {
- *(this->m->cerr) << (*iter) << std::endl;
+ for (auto const& error: errors) {
+ *(this->m->cerr) << error << std::endl;
}
}
@@ -1816,10 +1785,8 @@ QPDFJob::doProcess(
QUtil::possible_repaired_encodings(password);
// Represent to char const*, as required by the QPDF class.
std::vector<char const*> passwords;
- for (std::vector<std::string>::iterator iter = passwords_str.begin();
- iter != passwords_str.end();
- ++iter) {
- passwords.push_back((*iter).c_str());
+ for (auto const& iter: passwords_str) {
+ passwords.push_back(iter.c_str());
}
// We always try the supplied password first because it is the
// first string returned by possible_repaired_encodings. If there
@@ -1835,13 +1802,11 @@ QPDFJob::doProcess(
// attempt, which, like the first attempt, will be with the
// supplied password.
bool warned = false;
- for (std::vector<char const*>::iterator iter = passwords.begin();
- iter != passwords.end();
- ++iter) {
+ for (auto iter = passwords.begin(); iter != passwords.end(); ++iter) {
try {
return doProcessOnce(fn, *iter, empty, used_for_input);
} catch (QPDFExc& e) {
- std::vector<char const*>::iterator next = iter;
+ auto next = iter;
++next;
if (next == passwords.end()) {
throw e;
@@ -1961,10 +1926,7 @@ QPDFJob::doUnderOverlayForPage(
resources = dest_page.getObjectHandle().replaceKeyAndGet(
"/Resources", QPDFObjectHandle::newDictionary());
}
- for (std::vector<int>::iterator iter = pagenos[pageno].begin();
- iter != pagenos[pageno].end();
- ++iter) {
- int from_pageno = *iter;
+ for (int from_pageno: pagenos[pageno]) {
doIfVerbose([&](std::ostream& cout, std::string const& prefix) {
cout << " " << uo.which << " " << from_pageno << std::endl;
});
@@ -2017,15 +1979,14 @@ QPDFJob::getUOPagenos(
size_t idx = 0;
size_t from_size = uo.from_pagenos.size();
size_t repeat_size = uo.repeat_pagenos.size();
- for (std::vector<int>::iterator iter = uo.to_pagenos.begin();
- iter != uo.to_pagenos.end();
- ++iter, ++idx) {
+ for (int to_pageno: uo.to_pagenos) {
if (idx < from_size) {
- pagenos[*iter].push_back(uo.from_pagenos.at(idx));
+ pagenos[to_pageno].push_back(uo.from_pagenos.at(idx));
} else if (repeat_size) {
- pagenos[*iter].push_back(
+ pagenos[to_pageno].push_back(
uo.repeat_pagenos.at((idx - from_size) % repeat_size));
}
+ ++idx;
}
}
@@ -2206,21 +2167,15 @@ QPDFJob::handleTransformations(QPDF& pdf)
if (m->externalize_inline_images ||
(m->optimize_images && (!m->keep_inline_images))) {
std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFPageObjectHelper& ph(*iter);
+ for (auto& ph: pages) {
ph.externalizeInlineImages(m->ii_min_bytes);
}
}
if (m->optimize_images) {
int pageno = 0;
std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
+ for (auto& ph: pages) {
++pageno;
- QPDFPageObjectHelper& ph(*iter);
QPDFObjectHandle page = ph.getObjectHandle();
std::map<std::string, QPDFObjectHandle> images = ph.getImages();
for (auto& iter2: images) {
@@ -2260,10 +2215,8 @@ QPDFJob::handleTransformations(QPDF& pdf)
}
if (m->coalesce_contents) {
std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- (*iter).coalesceContentStreams();
+ for (auto& page: pages) {
+ page.coalesceContentStreams();
}
}
if (m->flatten_rotation) {
@@ -2428,10 +2381,7 @@ QPDFJob::handlePageSpecs(
// actual pages.
// Handle "." as a shortcut for the input file
- for (std::vector<QPDFJob::PageSpec>::iterator iter = m->page_specs.begin();
- iter != m->page_specs.end();
- ++iter) {
- QPDFJob::PageSpec& page_spec = *iter;
+ for (auto& page_spec: m->page_specs) {
if (page_spec.filename == ".") {
page_spec.filename = m->infilename.get();
}
@@ -2463,10 +2413,7 @@ QPDFJob::handlePageSpecs(
page_spec_qpdfs[m->infilename.get()] = &pdf;
std::vector<QPDFPageData> parsed_specs;
std::map<unsigned long long, std::set<QPDFObjGen>> copied_pages;
- for (std::vector<QPDFJob::PageSpec>::iterator iter = m->page_specs.begin();
- iter != m->page_specs.end();
- ++iter) {
- QPDFJob::PageSpec& page_spec = *iter;
+ for (auto& page_spec: m->page_specs) {
if (page_spec_qpdfs.count(page_spec.filename) == 0) {
// Open the PDF file and store the QPDF object. Throw a
// std::shared_ptr to the qpdf into a heap so that it
@@ -2523,17 +2470,14 @@ QPDFJob::handlePageSpecs(
std::map<unsigned long long, bool> remove_unreferenced;
if (m->remove_unreferenced_page_resources != QPDFJob::re_no) {
- for (std::map<std::string, QPDF*>::iterator iter =
- page_spec_qpdfs.begin();
- iter != page_spec_qpdfs.end();
- ++iter) {
- std::string const& filename = (*iter).first;
+ for (auto const& iter: page_spec_qpdfs) {
+ std::string const& filename = iter.first;
ClosedFileInputSource* cis = 0;
if (page_spec_cfis.count(filename)) {
cis = page_spec_cfis[filename];
cis->stayOpen(true);
}
- QPDF& other(*((*iter).second));
+ QPDF& other(*(iter.second));
auto other_uuid = other.getUniqueId();
if (remove_unreferenced.count(other_uuid) == 0) {
remove_unreferenced[other_uuid] =
@@ -2556,10 +2500,8 @@ QPDFJob::handlePageSpecs(
});
QPDFPageDocumentHelper dh(pdf);
std::vector<QPDFPageObjectHelper> orig_pages = dh.getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = orig_pages.begin();
- iter != orig_pages.end();
- ++iter) {
- dh.removePage(*iter);
+ for (auto const& page: orig_pages) {
+ dh.removePage(page);
}
if (m->collate && (parsed_specs.size() > 1)) {
@@ -2601,10 +2543,7 @@ QPDFJob::handlePageSpecs(
afdh_map;
auto this_afdh = get_afdh_for_qpdf(afdh_map, &pdf);
std::set<QPDFObjGen> referenced_fields;
- for (std::vector<QPDFPageData>::iterator iter = parsed_specs.begin();
- iter != parsed_specs.end();
- ++iter) {
- QPDFPageData& page_data = *iter;
+ for (auto& page_data: parsed_specs) {
ClosedFileInputSource* cis = 0;
if (page_spec_cfis.count(page_data.filename)) {
cis = page_spec_cfis[page_data.filename];
@@ -2619,14 +2558,12 @@ QPDFJob::handlePageSpecs(
cout << prefix << ": adding pages from " << page_data.filename
<< std::endl;
});
- for (std::vector<int>::iterator pageno_iter =
- page_data.selected_pages.begin();
- pageno_iter != page_data.selected_pages.end();
- ++pageno_iter, ++out_pageno) {
+ for (auto pageno_iter: page_data.selected_pages) {
// Pages are specified from 1 but numbered from 0 in the
// vector
- int pageno = *pageno_iter - 1;
- pldh.getLabelsForPageRange(pageno, pageno, out_pageno, new_labels);
+ int pageno = pageno_iter - 1;
+ pldh.getLabelsForPageRange(
+ pageno, pageno, out_pageno++, new_labels);
QPDFPageObjectHelper to_copy =
page_data.orig_pages.at(QIntC::to_size(pageno));
QPDFObjGen to_copy_og = to_copy.getObjectHandle().getObjGen();
@@ -2748,19 +2685,14 @@ QPDFJob::handleRotations(QPDF& pdf)
QPDFPageDocumentHelper dh(pdf);
std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
int npages = QIntC::to_int(pages.size());
- for (std::map<std::string, QPDFJob::RotationSpec>::iterator iter =
- m->rotations.begin();
- iter != m->rotations.end();
- ++iter) {
- std::string const& range = (*iter).first;
- QPDFJob::RotationSpec const& rspec = (*iter).second;
+ for (auto const& iter: m->rotations) {
+ std::string const& range = iter.first;
+ QPDFJob::RotationSpec const& rspec = iter.second;
// range has been previously validated
std::vector<int> to_rotate =
QUtil::parse_numrange(range.c_str(), npages);
- for (std::vector<int>::iterator i2 = to_rotate.begin();
- i2 != to_rotate.end();
- ++i2) {
- int pageno = *i2 - 1;
+ for (int pageno_iter: to_rotate) {
+ int pageno = pageno_iter - 1;
if ((pageno >= 0) && (pageno < npages)) {
pages.at(QIntC::to_size(pageno))
.rotatePage(rspec.angle, rspec.relative);