aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/pdf-filter-tokens.cc5
-rw-r--r--examples/pdf-invert-images.cc9
-rw-r--r--examples/pdf-mod-info.cc13
-rw-r--r--examples/pdf-overlay-page.cc6
-rw-r--r--examples/pdf-set-form-values.cc16
-rw-r--r--examples/pdf-split-pages.cc5
-rw-r--r--fuzz/qpdf_fuzzer.cc17
-rw-r--r--libqpdf/QPDF.cc119
-rw-r--r--libqpdf/QPDFAcroFormDocumentHelper.cc31
-rw-r--r--libqpdf/QPDFArgParser.cc30
-rw-r--r--libqpdf/QPDFJob.cc176
-rw-r--r--libqpdf/QPDFObjectHandle.cc37
-rw-r--r--libqpdf/QPDFPageDocumentHelper.cc23
-rw-r--r--libqpdf/QPDFTokenizer.cc5
-rw-r--r--libqpdf/QPDFWriter.cc156
-rw-r--r--libqpdf/QPDF_Array.cc6
-rw-r--r--libqpdf/QPDF_Dictionary.cc7
-rw-r--r--libqpdf/QPDF_encryption.cc6
-rw-r--r--libqpdf/QPDF_linearization.cc143
-rw-r--r--libqpdf/QPDF_optimization.cc78
-rw-r--r--libqpdf/QPDF_pages.cc3
-rw-r--r--libqpdf/QUtil.cc19
-rw-r--r--libtests/json.cc6
-rw-r--r--libtests/numrange.cc6
-rw-r--r--libtests/qutil.cc17
-rw-r--r--qpdf/test_driver.cc126
-rw-r--r--qpdf/test_parsedoffset.cc35
-rw-r--r--qpdf/test_pdf_doc_encoding.cc6
-rw-r--r--qpdf/test_pdf_unicode.cc6
-rw-r--r--qpdf/test_renumber.cc28
-rw-r--r--qpdf/test_tokenizer.cc29
-rw-r--r--qpdf/test_xref.cc16
32 files changed, 367 insertions, 818 deletions
diff --git a/examples/pdf-filter-tokens.cc b/examples/pdf-filter-tokens.cc
index 59c85271..3d4bad8b 100644
--- a/examples/pdf-filter-tokens.cc
+++ b/examples/pdf-filter-tokens.cc
@@ -193,15 +193,12 @@ main(int argc, char* argv[])
pdf.processFile(infilename);
std::vector<QPDFPageObjectHelper> pages =
QPDFPageDocumentHelper(pdf).getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
+ for (auto& page: pages) {
// Attach two token filters to each page of this file.
// When the file is written, or when the pages' contents
// are retrieved in any other way, the filters will be
// applied. See comments on the filters for additional
// details.
- QPDFPageObjectHelper& page(*iter);
page.addContentTokenFilter(
std::shared_ptr<QPDFObjectHandle::TokenFilter>(
new StringReverser));
diff --git a/examples/pdf-invert-images.cc b/examples/pdf-invert-images.cc
index bd36f33f..b784c8e3 100644
--- a/examples/pdf-invert-images.cc
+++ b/examples/pdf-invert-images.cc
@@ -131,14 +131,11 @@ main(int argc, char* argv[])
// For each page...
std::vector<QPDFPageObjectHelper> pages =
QPDFPageDocumentHelper(qpdf).getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFPageObjectHelper& page(*iter);
+ for (auto& page: pages) {
// Get all images on the page.
std::map<std::string, QPDFObjectHandle> images = page.getImages();
- for (auto& iter2: images) {
- QPDFObjectHandle& image = iter2.second;
+ for (auto& iter: images) {
+ QPDFObjectHandle& image = iter.second;
QPDFObjectHandle image_dict = image.getDict();
QPDFObjectHandle color_space = image_dict.getKey("/ColorSpace");
QPDFObjectHandle bits_per_component =
diff --git a/examples/pdf-mod-info.cc b/examples/pdf-mod-info.cc
index 425a25ba..2b8e3c47 100644
--- a/examples/pdf-mod-info.cc
+++ b/examples/pdf-mod-info.cc
@@ -132,10 +132,7 @@ main(int argc, char* argv[])
QPDFObjectHandle filetrailer = file.getTrailer();
QPDFObjectHandle fileinfo;
- for (std::map<std::string, std::string>::const_iterator it =
- Keys.begin();
- Keys.end() != it;
- ++it) {
+ for (auto const& it: Keys) {
if (!fileinfo.isInitialized()) {
if (filetrailer.hasKey("/Info")) {
QTC::TC("examples", "pdf-mod-info has info");
@@ -146,12 +143,12 @@ main(int argc, char* argv[])
filetrailer.replaceKey("/Info", fileinfo);
}
}
- if (it->second == "") {
- fileinfo.removeKey(it->first);
+ if (it.second == "") {
+ fileinfo.removeKey(it.first);
} else {
- QPDFObjectHandle elt = fileinfo.newString(it->second);
+ QPDFObjectHandle elt = fileinfo.newString(it.second);
elt.makeDirect();
- fileinfo.replaceKey(it->first, elt);
+ fileinfo.replaceKey(it.first, elt);
}
}
QPDFWriter w(file, fl_tmp.c_str());
diff --git a/examples/pdf-overlay-page.cc b/examples/pdf-overlay-page.cc
index 64a8d48f..f9603d9c 100644
--- a/examples/pdf-overlay-page.cc
+++ b/examples/pdf-overlay-page.cc
@@ -42,11 +42,7 @@ stamp_page(char const* infile, char const* stampfile, char const* outfile)
// For each page...
std::vector<QPDFPageObjectHelper> pages =
QPDFPageDocumentHelper(inpdf).getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFPageObjectHelper& ph = *iter;
-
+ for (auto& ph: pages) {
// Find a unique resource name for the new form XObject
QPDFObjectHandle resources = ph.getAttribute("/Resources", true);
int min_suffix = 1;
diff --git a/examples/pdf-set-form-values.cc b/examples/pdf-set-form-values.cc
index 10394c7b..c28149ad 100644
--- a/examples/pdf-set-form-values.cc
+++ b/examples/pdf-set-form-values.cc
@@ -52,23 +52,17 @@ main(int argc, char* argv[])
QPDFAcroFormDocumentHelper afdh(qpdf);
QPDFPageDocumentHelper pdh(qpdf);
std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator page_iter =
- pages.begin();
- page_iter != pages.end();
- ++page_iter) {
+ for (auto const& page: pages) {
// Get all widget annotations for each page. Widget
// annotations are the ones that contain the details of
// what's in a form field.
std::vector<QPDFAnnotationObjectHelper> annotations =
- afdh.getWidgetAnnotationsForPage(*page_iter);
- for (std::vector<QPDFAnnotationObjectHelper>::iterator annot_iter =
- annotations.begin();
- annot_iter != annotations.end();
- ++annot_iter) {
+ afdh.getWidgetAnnotationsForPage(page);
+ for (auto& annot: annotations) {
// For each annotation, find its associated field. If
// it's a text field, set its value.
QPDFFormFieldObjectHelper ffh =
- afdh.getFieldForAnnotation(*annot_iter);
+ afdh.getFieldForAnnotation(annot);
if (ffh.getFieldType() == "/Tx") {
// Set the value. Passing false as the second
// value prevents qpdf from setting
@@ -81,7 +75,7 @@ main(int argc, char* argv[])
// additional details, please see comments in
// QPDFFormFieldObjectHelper.hh for this method.
ffh.setV(value, false);
- ffh.generateAppearance(*annot_iter);
+ ffh.generateAppearance(annot);
}
}
}
diff --git a/examples/pdf-split-pages.cc b/examples/pdf-split-pages.cc
index a8e65260..150de0df 100644
--- a/examples/pdf-split-pages.cc
+++ b/examples/pdf-split-pages.cc
@@ -27,10 +27,7 @@ process(char const* whoami, char const* infile, std::string outprefix)
int pageno_len =
QIntC::to_int(QUtil::uint_to_string(pages.size()).length());
int pageno = 0;
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFPageObjectHelper& page(*iter);
+ for (auto& page: pages) {
std::string outfile =
outprefix + QUtil::int_to_string(++pageno, pageno_len) + ".pdf";
QPDF outpdf;
diff --git a/fuzz/qpdf_fuzzer.cc b/fuzz/qpdf_fuzzer.cc
index aba08c7f..8b192b51 100644
--- a/fuzz/qpdf_fuzzer.cc
+++ b/fuzz/qpdf_fuzzer.cc
@@ -134,10 +134,7 @@ FuzzHelper::testPages()
std::vector<QPDFPageObjectHelper> pages = pdh.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.coalesceContentStreams();
@@ -150,11 +147,7 @@ FuzzHelper::testPages()
std::vector<QPDFAnnotationObjectHelper> annotations =
afdh.getWidgetAnnotationsForPage(page);
- for (std::vector<QPDFAnnotationObjectHelper>::iterator annot_iter =
- annotations.begin();
- annot_iter != annotations.end();
- ++annot_iter) {
- QPDFAnnotationObjectHelper& aoh = *annot_iter;
+ for (auto& aoh: annotations) {
afdh.getFieldForAnnotation(aoh);
}
} catch (QPDFExc& e) {
@@ -172,11 +165,7 @@ FuzzHelper::testOutlines()
queue.push_back(odh.getTopLevelOutlines());
while (!queue.empty()) {
std::vector<QPDFOutlineObjectHelper>& outlines = *(queue.begin());
- for (std::vector<QPDFOutlineObjectHelper>::iterator iter =
- outlines.begin();
- iter != outlines.end();
- ++iter) {
- QPDFOutlineObjectHelper& ol = *iter;
+ for (auto& ol: outlines) {
ol.getDestPage();
queue.push_back(ol.getKids());
}
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index bab30042..815894d3 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -262,11 +262,8 @@ QPDF::~QPDF()
// have the effect of undoing any modifications that may have been
// made to any of the objects.
this->m->xref_table.clear();
- for (std::map<QPDFObjGen, ObjCache>::iterator iter =
- this->m->obj_cache.begin();
- iter != this->m->obj_cache.end();
- ++iter) {
- QPDFObject::ObjAccessor::releaseResolved((*iter).second.object.get());
+ for (auto const& iter: this->m->obj_cache) {
+ QPDFObject::ObjAccessor::releaseResolved(iter.second.object.get());
}
}
@@ -577,18 +574,13 @@ QPDF::reconstruct_xref(QPDFExc& e)
// Delete all references to type 1 (uncompressed) objects
std::set<QPDFObjGen> to_delete;
- for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter =
- this->m->xref_table.begin();
- iter != this->m->xref_table.end();
- ++iter) {
- if (((*iter).second).getType() == 1) {
- to_delete.insert((*iter).first);
+ for (auto const& iter: this->m->xref_table) {
+ if (iter.second.getType() == 1) {
+ to_delete.insert(iter.first);
}
}
- for (std::set<QPDFObjGen>::iterator iter = to_delete.begin();
- iter != to_delete.end();
- ++iter) {
- this->m->xref_table.erase(*iter);
+ for (auto const& iter: to_delete) {
+ this->m->xref_table.erase(iter);
}
this->m->file->seek(0, SEEK_END);
@@ -1015,10 +1007,7 @@ QPDF::read_xrefTable(qpdf_offset_t xref_offset)
}
// Handle any deleted items now that we've read the /XRefStm.
- for (std::vector<QPDFObjGen>::iterator iter = deleted_items.begin();
- iter != deleted_items.end();
- ++iter) {
- QPDFObjGen& og = *iter;
+ for (auto const& og: deleted_items) {
insertXrefEntry(og.getObj(), 0, 0, og.getGen());
}
@@ -1351,12 +1340,9 @@ QPDF::insertXrefEntry(int obj, int f0, qpdf_offset_t f1, int f2, bool overwrite)
void
QPDF::showXRefTable()
{
- for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter =
- this->m->xref_table.begin();
- iter != this->m->xref_table.end();
- ++iter) {
- QPDFObjGen const& og = (*iter).first;
- QPDFXRefEntry const& entry = (*iter).second;
+ for (auto const& iter: this->m->xref_table) {
+ QPDFObjGen const& og = iter.first;
+ QPDFXRefEntry const& entry = iter.second;
*this->m->out_stream << og.getObj() << "/" << og.getGen() << ": ";
switch (entry.getType()) {
case 1:
@@ -1390,27 +1376,19 @@ QPDF::fixDanglingReferences(bool force)
// Create a set of all known indirect objects including those
// we've previously resolved and those that we have created.
std::set<QPDFObjGen> to_process;
- for (std::map<QPDFObjGen, ObjCache>::iterator iter =
- this->m->obj_cache.begin();
- iter != this->m->obj_cache.end();
- ++iter) {
- to_process.insert((*iter).first);
+ for (auto const& iter: this->m->obj_cache) {
+ to_process.insert(iter.first);
}
- for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter =
- this->m->xref_table.begin();
- iter != this->m->xref_table.end();
- ++iter) {
- to_process.insert((*iter).first);
+ for (auto const& iter: this->m->xref_table) {
+ to_process.insert(iter.first);
}
// For each non-scalar item to process, put it in the queue.
std::list<QPDFObjectHandle> queue;
queue.push_back(this->m->trailer);
- for (std::set<QPDFObjGen>::iterator iter = to_process.begin();
- iter != to_process.end();
- ++iter) {
+ for (auto const& iter: to_process) {
QPDFObjectHandle obj = QPDFObjectHandle::Factory::newIndirect(
- this, (*iter).getObj(), (*iter).getGen());
+ this, iter.getObj(), iter.getGen());
if (obj.isDictionary() || obj.isArray()) {
queue.push_back(obj);
} else if (obj.isStream()) {
@@ -1428,21 +1406,15 @@ QPDF::fixDanglingReferences(bool force)
if (obj.isDictionary()) {
std::map<std::string, QPDFObjectHandle> members =
obj.getDictAsMap();
- for (std::map<std::string, QPDFObjectHandle>::iterator iter =
- members.begin();
- iter != members.end();
- ++iter) {
- to_check.push_back((*iter).second);
+ for (auto const& iter: members) {
+ to_check.push_back(iter.second);
}
} else if (obj.isArray()) {
QPDF_Array* arr = dynamic_cast<QPDF_Array*>(
QPDFObjectHandle::ObjAccessor::getObject(obj).get());
arr->addExplicitElementsToList(to_check);
}
- for (std::list<QPDFObjectHandle>::iterator iter = to_check.begin();
- iter != to_check.end();
- ++iter) {
- QPDFObjectHandle sub = *iter;
+ for (auto sub: to_check) {
if (sub.isIndirect()) {
if (sub.getOwningQPDF() == this) {
QPDFObjGen og(sub.getObjGen());
@@ -1480,11 +1452,8 @@ QPDF::getAllObjects()
// object cache.
fixDanglingReferences(true);
std::vector<QPDFObjectHandle> result;
- for (std::map<QPDFObjGen, ObjCache>::iterator iter =
- this->m->obj_cache.begin();
- iter != this->m->obj_cache.end();
- ++iter) {
- QPDFObjGen const& og = (*iter).first;
+ for (auto const& iter: this->m->obj_cache) {
+ QPDFObjGen const& og = iter.first;
result.push_back(
// line-break
QPDFObjectHandle::Factory::newIndirect(
@@ -1733,12 +1702,9 @@ QPDF::recoverStreamLength(
QPDFObjGen this_obj(0, 0);
// Make sure this is inside this object
- for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter =
- this->m->xref_table.begin();
- iter != this->m->xref_table.end();
- ++iter) {
- QPDFObjGen const& og = (*iter).first;
- QPDFXRefEntry const& entry = (*iter).second;
+ for (auto const& iter: this->m->xref_table) {
+ QPDFObjGen const& og = iter.first;
+ QPDFXRefEntry const& entry = iter.second;
if (entry.getType() == 1) {
qpdf_offset_t obj_offset = entry.getOffset();
if ((obj_offset > stream_offset) &&
@@ -2157,15 +2123,13 @@ QPDF::resolveObjectsInStream(int obj_stream_number)
// that some objects stored here might have been overridden by new
// objects appended to the file, so it is necessary to recheck the
// xref table and only cache what would actually be resolved here.
- for (std::map<int, int>::iterator iter = offsets.begin();
- iter != offsets.end();
- ++iter) {
- int obj = (*iter).first;
+ for (auto const& iter: offsets) {
+ int obj = iter.first;
QPDFObjGen og(obj, 0);
QPDFXRefEntry const& entry = this->m->xref_table[og];
if ((entry.getType() == 2) &&
(entry.getObjStreamNumber() == obj_stream_number)) {
- int offset = (*iter).second;
+ int offset = iter.second;
input->seek(offset, SEEK_SET);
QPDFObjectHandle oh = readObject(input, "", obj, 0, true);
this->m->obj_cache[og] = ObjCache(
@@ -2317,11 +2281,7 @@ QPDF::copyForeignObject(QPDFObjectHandle foreign)
}
// Copy any new objects and replace the reservations.
- for (std::vector<QPDFObjectHandle>::iterator iter =
- obj_copier.to_copy.begin();
- iter != obj_copier.to_copy.end();
- ++iter) {
- QPDFObjectHandle& to_copy = *iter;
+ for (auto& to_copy: obj_copier.to_copy) {
QPDFObjectHandle copy =
replaceForeignIndirectObjects(to_copy, obj_copier, true);
if (!to_copy.isStream()) {
@@ -2365,8 +2325,7 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier& obj_copier, bool top)
}
QTC::TC("qpdf", "QPDF copy indirect");
obj_copier.visiting.insert(foreign_og);
- std::map<QPDFObjGen, QPDFObjectHandle>::iterator mapping =
- obj_copier.object_map.find(foreign_og);
+ auto mapping = obj_copier.object_map.find(foreign_og);
if (mapping == obj_copier.object_map.end()) {
obj_copier.to_copy.push_back(foreign);
QPDFObjectHandle reservation;
@@ -2388,10 +2347,8 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier& obj_copier, bool top)
} else if (foreign.isDictionary()) {
QTC::TC("qpdf", "QPDF reserve dictionary");
std::set<std::string> keys = foreign.getKeys();
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
- reserveObjects(foreign.getKey(*iter), obj_copier, false);
+ for (auto const& key: keys) {
+ reserveObjects(foreign.getKey(key), obj_copier, false);
}
} else if (foreign.isStream()) {
QTC::TC("qpdf", "QPDF reserve stream");
@@ -2412,8 +2369,7 @@ QPDF::replaceForeignIndirectObjects(
if ((!top) && foreign.isIndirect()) {
QTC::TC("qpdf", "QPDF replace indirect");
QPDFObjGen foreign_og(foreign.getObjGen());
- std::map<QPDFObjGen, QPDFObjectHandle>::iterator mapping =
- obj_copier.object_map.find(foreign_og);
+ auto mapping = obj_copier.object_map.find(foreign_og);
if (mapping == obj_copier.object_map.end()) {
// This case would occur if this is a reference to a Page
// or Pages object that we didn't traverse into.
@@ -2657,12 +2613,9 @@ QPDF::getXRefTable()
void
QPDF::getObjectStreamData(std::map<int, int>& omap)
{
- for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter =
- this->m->xref_table.begin();
- iter != this->m->xref_table.end();
- ++iter) {
- QPDFObjGen const& og = (*iter).first;
- QPDFXRefEntry const& entry = (*iter).second;
+ for (auto const& iter: this->m->xref_table) {
+ QPDFObjGen const& og = iter.first;
+ QPDFXRefEntry const& entry = iter.second;
if (entry.getType() == 2) {
omap[og.getObj()] = entry.getObjStreamNumber();
}
diff --git a/libqpdf/QPDFAcroFormDocumentHelper.cc b/libqpdf/QPDFAcroFormDocumentHelper.cc
index 435c7666..4e9f08b9 100644
--- a/libqpdf/QPDFAcroFormDocumentHelper.cc
+++ b/libqpdf/QPDFAcroFormDocumentHelper.cc
@@ -182,11 +182,8 @@ QPDFAcroFormDocumentHelper::getFormFields()
{
analyze();
std::vector<QPDFFormFieldObjectHelper> result;
- for (std::map<QPDFObjGen, std::vector<QPDFAnnotationObjectHelper>>::iterator
- iter = this->m->field_to_annotations.begin();
- iter != this->m->field_to_annotations.end();
- ++iter) {
- result.push_back(this->qpdf.getObjectByObjGen((*iter).first));
+ for (auto const& iter: this->m->field_to_annotations) {
+ result.push_back(this->qpdf.getObjectByObjGen(iter.first));
}
return result;
}
@@ -299,17 +296,11 @@ QPDFAcroFormDocumentHelper::analyze()
QPDFPageDocumentHelper dh(this->qpdf);
std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFPageObjectHelper ph(*iter);
+ for (auto const& ph: pages) {
std::vector<QPDFAnnotationObjectHelper> annots =
getWidgetAnnotationsForPage(ph);
- for (std::vector<QPDFAnnotationObjectHelper>::iterator i2 =
- annots.begin();
- i2 != annots.end();
- ++i2) {
- QPDFObjectHandle annot((*i2).getObjectHandle());
+ for (auto const& iter: annots) {
+ QPDFObjectHandle annot(iter.getObjectHandle());
QPDFObjGen og(annot.getObjGen());
if (this->m->annotation_to_field.count(og) == 0) {
QTC::TC("qpdf", "QPDFAcroFormDocumentHelper orphaned widget");
@@ -462,16 +453,10 @@ QPDFAcroFormDocumentHelper::generateAppearancesIfNeeded()
QPDFPageDocumentHelper pdh(this->qpdf);
std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator page_iter = pages.begin();
- page_iter != pages.end();
- ++page_iter) {
+ for (auto const& page: pages) {
std::vector<QPDFAnnotationObjectHelper> annotations =
- getWidgetAnnotationsForPage(*page_iter);
- for (std::vector<QPDFAnnotationObjectHelper>::iterator annot_iter =
- annotations.begin();
- annot_iter != annotations.end();
- ++annot_iter) {
- QPDFAnnotationObjectHelper& aoh = *annot_iter;
+ getWidgetAnnotationsForPage(page);
+ for (auto& aoh: annotations) {
QPDFFormFieldObjectHelper ffh = getFieldForAnnotation(aoh);
if (ffh.getFieldType() == "/Btn") {
// Rather than generating appearances for button
diff --git a/libqpdf/QPDFArgParser.cc b/libqpdf/QPDFArgParser.cc
index 8cd53efa..63197684 100644
--- a/libqpdf/QPDFArgParser.cc
+++ b/libqpdf/QPDFArgParser.cc
@@ -294,10 +294,7 @@ QPDFArgParser::handleBashArguments()
bool last_was_backslash = false;
enum { st_top, st_squote, st_dquote } state = st_top;
std::string arg;
- for (std::string::iterator iter = this->m->bash_line.begin();
- iter != this->m->bash_line.end();
- ++iter) {
- char ch = (*iter);
+ for (char ch: this->m->bash_line) {
if (last_was_backslash) {
arg.append(1, ch);
last_was_backslash = false;
@@ -560,13 +557,14 @@ QPDFArgParser::parseArgs()
} else if (!oe.choices.empty()) {
QTC::TC("libtests", "QPDFArgParser required choices");
message += "{";
- for (std::set<std::string>::iterator iter = oe.choices.begin();
- iter != oe.choices.end();
- ++iter) {
- if (iter != oe.choices.begin()) {
+ bool first = true;
+ for (auto const& choice: oe.choices) {
+ if (first) {
+ first = false;
+ } else {
message += ",";
}
- message += *iter;
+ message += choice;
}
message += "}";
} else if (!oe.parameter_name.empty()) {
@@ -624,11 +622,9 @@ QPDFArgParser::addChoicesToCompletions(
{
if (option_table.count(option) != 0) {
OptionEntry& oe = option_table[option];
- for (std::set<std::string>::iterator iter = oe.choices.begin();
- iter != oe.choices.end();
- ++iter) {
+ for (auto const& choice: oe.choices) {
QTC::TC("libtests", "QPDFArgParser complete choices");
- this->m->completions.insert(extra_prefix + *iter);
+ this->m->completions.insert(extra_prefix + choice);
}
}
}
@@ -714,11 +710,9 @@ QPDFArgParser::handleCompletion()
}
}
std::string prefix = extra_prefix + this->m->bash_cur;
- for (std::set<std::string>::iterator iter = this->m->completions.begin();
- iter != this->m->completions.end();
- ++iter) {
- if (prefix.empty() || ((*iter).substr(0, prefix.length()) == prefix)) {
- std::cout << *iter << std::endl;
+ for (auto const& iter: this->m->completions) {
+ if (prefix.empty() || (iter.substr(0, prefix.length()) == prefix)) {
+ std::cout << iter << std::endl;
}
}
exit(0);
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);
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc
index c156e627..76a6127e 100644
--- a/libqpdf/QPDFObjectHandle.cc
+++ b/libqpdf/QPDFObjectHandle.cc
@@ -1244,17 +1244,12 @@ QPDFObjectHandle::getResourceNames()
return result;
}
std::set<std::string> keys = getKeys();
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
- std::string const& key = *iter;
+ for (auto const& key: keys) {
QPDFObjectHandle val = getKey(key);
if (val.isDictionary()) {
std::set<std::string> val_keys = val.getKeys();
- for (std::set<std::string>::iterator i2 = val_keys.begin();
- i2 != val_keys.end();
- ++i2) {
- result.insert(*i2);
+ for (auto const& val_key: val_keys) {
+ result.insert(val_key);
}
}
}
@@ -1620,10 +1615,7 @@ QPDFObjectHandle::arrayOrStreamToStreamArray(
}
bool first = true;
- for (std::vector<QPDFObjectHandle>::iterator iter = result.begin();
- iter != result.end();
- ++iter) {
- QPDFObjectHandle item = *iter;
+ for (auto const& item: result) {
std::string og = QUtil::int_to_string(item.getObjectID()) + " " +
QUtil::int_to_string(item.getGeneration());
if (first) {
@@ -1660,11 +1652,9 @@ QPDFObjectHandle::addPageContents(QPDFObjectHandle new_contents, bool first)
QTC::TC("qpdf", "QPDFObjectHandle prepend page contents");
content_streams.push_back(new_contents);
}
- for (std::vector<QPDFObjectHandle>::iterator iter = orig_contents.begin();
- iter != orig_contents.end();
- ++iter) {
+ for (auto const& iter: orig_contents) {
QTC::TC("qpdf", "QPDFObjectHandle append page contents");
- content_streams.push_back(*iter);
+ content_streams.push_back(iter);
}
if (!first) {
content_streams.push_back(new_contents);
@@ -1865,14 +1855,11 @@ QPDFObjectHandle::pipeContentStreams(
arrayOrStreamToStreamArray(description, all_description);
bool need_newline = false;
Pl_Buffer buf("concatenated content stream buffer");
- for (std::vector<QPDFObjectHandle>::iterator iter = streams.begin();
- iter != streams.end();
- ++iter) {
+ for (auto stream: streams) {
if (need_newline) {
buf.write(QUtil::unsigned_char_pointer("\n"), 1);
}
LastChar lc(&buf);
- QPDFObjectHandle stream = *iter;
std::string og = QUtil::int_to_string(stream.getObjectID()) + " " +
QUtil::int_to_string(stream.getGeneration());
std::string w_description = "content stream object " + og;
@@ -2920,13 +2907,11 @@ QPDFObjectHandle::copyObject(
QTC::TC("qpdf", "QPDFObjectHandle clone dictionary");
std::set<std::string> keys = getKeys();
std::map<std::string, QPDFObjectHandle> items;
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
- items[*iter] = getKey(*iter);
+ for (auto const& key: keys) {
+ items[key] = getKey(key);
if ((!first_level_only) &&
- (cross_indirect || (!items[*iter].isIndirect()))) {
- items[*iter].copyObject(
+ (cross_indirect || (!items[key].isIndirect()))) {
+ items[key].copyObject(
visited, cross_indirect, first_level_only, stop_at_streams);
}
}
diff --git a/libqpdf/QPDFPageDocumentHelper.cc b/libqpdf/QPDFPageDocumentHelper.cc
index 61eba8c3..f54ad843 100644
--- a/libqpdf/QPDFPageDocumentHelper.cc
+++ b/libqpdf/QPDFPageDocumentHelper.cc
@@ -14,10 +14,8 @@ QPDFPageDocumentHelper::getAllPages()
{
std::vector<QPDFObjectHandle> const& pages_v = this->qpdf.getAllPages();
std::vector<QPDFPageObjectHelper> pages;
- for (std::vector<QPDFObjectHandle>::const_iterator iter = pages_v.begin();
- iter != pages_v.end();
- ++iter) {
- pages.push_back(QPDFPageObjectHelper(*iter));
+ for (auto const& iter: pages_v) {
+ pages.push_back(QPDFPageObjectHelper(iter));
}
return pages;
}
@@ -32,10 +30,8 @@ void
QPDFPageDocumentHelper::removeUnreferencedResources()
{
std::vector<QPDFPageObjectHelper> pages = getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- (*iter).removeUnreferencedResources();
+ for (auto& ph: pages) {
+ ph.removeUnreferencedResources();
}
}
@@ -71,10 +67,7 @@ QPDFPageDocumentHelper::flattenAnnotations(
" so form fields will not be flattened");
}
std::vector<QPDFPageObjectHelper> pages = getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFPageObjectHelper ph(*iter);
+ for (auto& ph: pages) {
QPDFObjectHandle resources = ph.getAttribute("/Resources", true);
if (!resources.isDictionary()) {
// This should never happen and is not exercised in the
@@ -107,11 +100,7 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage(
rotate = rotate_obj.getIntValueAsInt();
}
int next_fx = 1;
- for (std::vector<QPDFAnnotationObjectHelper>::iterator iter =
- annots.begin();
- iter != annots.end();
- ++iter) {
- QPDFAnnotationObjectHelper& aoh(*iter);
+ for (auto& aoh: annots) {
QPDFObjectHandle as = aoh.getAppearanceStream("/N");
bool is_widget = (aoh.getSubtype() == "/Widget");
bool process = true;
diff --git a/libqpdf/QPDFTokenizer.cc b/libqpdf/QPDFTokenizer.cc
index 5f70542e..a38b9ef8 100644
--- a/libqpdf/QPDFTokenizer.cc
+++ b/libqpdf/QPDFTokenizer.cc
@@ -568,10 +568,7 @@ QPDFTokenizer::findEI(std::shared_ptr<InputSource> input)
bool found_non_printable = false;
bool found_other = false;
std::string value = t.getValue();
- for (std::string::iterator iter = value.begin();
- iter != value.end();
- ++iter) {
- char ch = *iter;
+ for (char ch: value) {
if (((ch >= 'a') && (ch <= 'z')) ||
((ch >= 'A') && (ch <= 'Z')) || (ch == '*')) {
// Treat '*' as alpha since there are valid
diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc
index 962a8a6c..215af009 100644
--- a/libqpdf/QPDFWriter.cc
+++ b/libqpdf/QPDFWriter.cc
@@ -755,10 +755,8 @@ QPDFWriter::setEncryptionParameters(
int P = 0;
// Create the complement of P, then invert.
- for (std::set<int>::iterator iter = bits_to_clear.begin();
- iter != bits_to_clear.end();
- ++iter) {
- P |= (1 << ((*iter) - 1));
+ for (int b: bits_to_clear) {
+ P |= (1 << (b - 1));
}
P = ~P;
@@ -1277,11 +1275,8 @@ QPDFWriter::assignCompressedObjectNumbers(QPDFObjGen const& og)
// Reserve numbers for the objects that belong to this object
// stream.
- for (std::set<QPDFObjGen>::iterator iter =
- this->m->object_stream_to_objects[objid].begin();
- iter != this->m->object_stream_to_objects[objid].end();
- ++iter) {
- this->m->obj_renumber[*iter] = this->m->next_objid++;
+ for (auto const& iter: this->m->object_stream_to_objects[objid]) {
+ this->m->obj_renumber[iter] = this->m->next_objid++;
}
}
@@ -1353,11 +1348,9 @@ QPDFWriter::enqueueObject(QPDFObjectHandle object)
}
} else if (object.isDictionary()) {
std::set<std::string> keys = object.getKeys();
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
+ for (auto const& key: keys) {
if (!this->m->linearized) {
- enqueueObject(object.getKey(*iter));
+ enqueueObject(object.getKey(key));
}
}
} else {
@@ -1401,10 +1394,7 @@ QPDFWriter::writeTrailer(
writeString(QUtil::int_to_string(size));
} else {
std::set<std::string> keys = 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) {
writeStringQDF(" ");
writeStringNoQDF(" ");
writeString(QPDF_Name::normalizeName(key));
@@ -1758,11 +1748,7 @@ QPDFWriter::unparseObject(
writeStringQDF("\n");
std::set<std::string> keys = object.getKeys();
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
- std::string const& key = *iter;
-
+ for (auto const& key: keys) {
writeStringQDF(indent);
writeStringQDF(" ");
writeStringNoQDF(" ");
@@ -1930,12 +1916,9 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object)
pushDiscardFilter(pp_ostream);
} else {
// Adjust offsets to skip over comment before first object
-
first = offsets.at(0);
- for (std::vector<qpdf_offset_t>::iterator iter = offsets.begin();
- iter != offsets.end();
- ++iter) {
- *iter -= first;
+ for (auto& iter: offsets) {
+ iter -= first;
}
// Take one pass at writing pairs of numbers so we can get
@@ -1960,12 +1943,9 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object)
writeObjectStreamOffsets(offsets, first_obj);
}
- int count = 0;
- for (std::set<QPDFObjGen>::iterator iter =
- this->m->object_stream_to_objects[old_id].begin();
- iter != this->m->object_stream_to_objects[old_id].end();
- ++iter, ++count) {
- QPDFObjGen obj = *iter;
+ int count = -1;
+ for (auto const& obj: this->m->object_stream_to_objects[old_id]) {
+ ++count;
int new_obj = this->m->obj_renumber[obj];
if (first_obj == -1) {
first_obj = new_obj;
@@ -2197,10 +2177,8 @@ QPDFWriter::generateID()
if (trailer.hasKey("/Info")) {
QPDFObjectHandle info = trailer.getKey("/Info");
std::set<std::string> keys = info.getKeys();
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
- QPDFObjectHandle obj = info.getKey(*iter);
+ for (auto const& key: keys) {
+ QPDFObjectHandle obj = info.getKey(key);
if (obj.isString()) {
seed += " ";
seed += obj.getStringValue();
@@ -2235,10 +2213,7 @@ QPDFWriter::initializeSpecialStreams()
// normalizing.
std::vector<QPDFObjectHandle> pages = this->m->pdf.getAllPages();
int num = 0;
- for (std::vector<QPDFObjectHandle>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFObjectHandle& page = *iter;
+ for (auto& page: pages) {
this->m->page_object_to_seq[page.getObjGen()] = ++num;
QPDFObjectHandle contents = page.getKey("/Contents");
std::vector<QPDFObjGen> contents_objects;
@@ -2322,9 +2297,7 @@ QPDFWriter::generateObjectStreams()
}
unsigned int n = 0;
int cur_ostream = 0;
- for (std::vector<QPDFObjGen>::const_iterator iter = eligible.begin();
- iter != eligible.end();
- ++iter) {
+ for (auto const& iter: eligible) {
if ((n % n_per) == 0) {
if (n > 0) {
QTC::TC("qpdf", "QPDFWriter generate >1 ostream");
@@ -2339,7 +2312,7 @@ QPDFWriter::generateObjectStreams()
this->m->pdf.makeIndirectObject(QPDFObjectHandle::newNull())
.getObjectID();
}
- this->m->object_to_object_stream[*iter] = cur_ostream;
+ this->m->object_to_object_stream[iter] = cur_ostream;
++n;
}
}
@@ -2495,10 +2468,7 @@ QPDFWriter::doWriteSetup()
if (this->m->linearized) {
// Page dictionaries are not allowed to be compressed objects.
std::vector<QPDFObjectHandle> pages = this->m->pdf.getAllPages();
- for (std::vector<QPDFObjectHandle>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFObjectHandle& page = *iter;
+ for (auto& page: pages) {
QPDFObjGen og = page.getObjGen();
if (this->m->object_to_object_stream.count(og)) {
QTC::TC("qpdf", "QPDFWriter uncompressing page dictionary");
@@ -2521,12 +2491,9 @@ QPDFWriter::doWriteSetup()
}
// Generate reverse mapping from object stream to objects
- for (std::map<QPDFObjGen, int>::iterator iter =
- this->m->object_to_object_stream.begin();
- iter != this->m->object_to_object_stream.end();
- ++iter) {
- QPDFObjGen obj = (*iter).first;
- int stream = (*iter).second;
+ for (auto const& iter: this->m->object_to_object_stream) {
+ QPDFObjGen const& obj = iter.first;
+ int stream = iter.second;
this->m->object_stream_to_objects[stream].insert(obj);
this->m->max_ostream_index = std::max(
this->m->max_ostream_index,
@@ -2591,11 +2558,9 @@ QPDFWriter::getWrittenXRefTable()
{
std::map<QPDFObjGen, QPDFXRefEntry> result;
- for (std::map<int, QPDFXRefEntry>::iterator iter = this->m->xref.begin();
- iter != this->m->xref.end();
- ++iter) {
- if (iter->first != 0 && iter->second.getType() != 0) {
- result[QPDFObjGen(iter->first, 0)] = iter->second;
+ for (auto const& iter: this->m->xref) {
+ if (iter.first != 0 && iter.second.getType() != 0) {
+ result[QPDFObjGen(iter.first, 0)] = iter.second;
}
}
@@ -2605,10 +2570,8 @@ QPDFWriter::getWrittenXRefTable()
void
QPDFWriter::enqueuePart(std::vector<QPDFObjectHandle>& part)
{
- for (std::vector<QPDFObjectHandle>::iterator iter = part.begin();
- iter != part.end();
- ++iter) {
- enqueueObject(*iter);
+ for (auto const& oh: part) {
+ enqueueObject(oh);
}
}
@@ -2617,14 +2580,11 @@ QPDFWriter::writeEncryptionDictionary()
{
this->m->encryption_dict_objid = openObject(this->m->encryption_dict_objid);
writeString("<<");
- for (std::map<std::string, std::string>::iterator iter =
- this->m->encryption_dictionary.begin();
- iter != this->m->encryption_dictionary.end();
- ++iter) {
+ for (auto const& iter: this->m->encryption_dictionary) {
writeString(" ");
- writeString((*iter).first);
+ writeString(iter.first);
writeString(" ");
- writeString((*iter).second);
+ writeString(iter.second);
}
writeString(" >>");
closeObject(this->m->encryption_dict_objid);
@@ -2937,10 +2897,8 @@ QPDFWriter::discardGeneration(
// maps for QPDF that throw away generation numbers.
out.clear();
- for (std::map<QPDFObjGen, int>::const_iterator iter = in.begin();
- iter != in.end();
- ++iter) {
- if (out.count((*iter).first.getObj())) {
+ for (auto const& iter: in) {
+ if (out.count(iter.first.getObj())) {
throw std::runtime_error(
"QPDF cannot currently linearize files that contain"
" multiple objects with the same object ID and different"
@@ -2950,7 +2908,7 @@ QPDFWriter::discardGeneration(
" linearizing, and then linearize the result of that"
" conversion.");
}
- out[(*iter).first.getObj()] = (*iter).second;
+ out[iter.first.getObj()] = iter.second;
}
}
@@ -3020,10 +2978,8 @@ QPDFWriter::writeLinearized()
// Assign numbers to all compressed objects in the second half.
std::vector<QPDFObjectHandle>* vecs2[] = {&part7, &part8, &part9};
for (int i = 0; i < 3; ++i) {
- for (std::vector<QPDFObjectHandle>::iterator iter = (*vecs2[i]).begin();
- iter != (*vecs2[i]).end();
- ++iter) {
- assignCompressedObjectNumbers((*iter).getObjGen());
+ for (auto const& oh: *vecs2[i]) {
+ assignCompressedObjectNumbers(oh.getObjGen());
}
}
int second_half_end = this->m->next_objid - 1;
@@ -3049,10 +3005,8 @@ QPDFWriter::writeLinearized()
// Assign numbers to all compressed objects in the first half
std::vector<QPDFObjectHandle>* vecs1[] = {&part4, &part6};
for (int i = 0; i < 2; ++i) {
- for (std::vector<QPDFObjectHandle>::iterator iter = (*vecs1[i]).begin();
- iter != (*vecs1[i]).end();
- ++iter) {
- assignCompressedObjectNumbers((*iter).getObjGen());
+ for (auto const& oh: *vecs1[i]) {
+ assignCompressedObjectNumbers(oh.getObjGen());
}
}
int first_half_end = this->m->next_objid - 1;
@@ -3240,11 +3194,7 @@ QPDFWriter::writeLinearized()
// Parts 4 through 9
- for (std::list<QPDFObjectHandle>::iterator iter =
- this->m->object_queue.begin();
- iter != this->m->object_queue.end();
- ++iter) {
- QPDFObjectHandle cur_object = (*iter);
+ for (auto const& cur_object: this->m->object_queue) {
if (cur_object.getObjectID() == part6_end_marker) {
first_half_max_obj_offset = this->m->pipeline->getCount();
}
@@ -3390,11 +3340,8 @@ QPDFWriter::enqueueObjectsStandard()
{
if (this->m->preserve_unreferenced_objects) {
QTC::TC("qpdf", "QPDFWriter preserve unreferenced standard");
- std::vector<QPDFObjectHandle> all = this->m->pdf.getAllObjects();
- for (std::vector<QPDFObjectHandle>::iterator iter = all.begin();
- iter != all.end();
- ++iter) {
- enqueueObject(*iter);
+ for (auto const& oh: this->m->pdf.getAllObjects()) {
+ enqueueObject(oh);
}
}
@@ -3407,10 +3354,8 @@ QPDFWriter::enqueueObjectsStandard()
// Root is already there, so enqueuing it a second time is a
// no-op.
std::set<std::string> keys = trailer.getKeys();
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
- enqueueObject(trailer.getKey(*iter));
+ for (auto const& key: keys) {
+ enqueueObject(trailer.getKey(key));
}
}
@@ -3424,23 +3369,18 @@ QPDFWriter::enqueueObjectsPCLm()
// enqueue all pages first
std::vector<QPDFObjectHandle> all = this->m->pdf.getAllPages();
- for (std::vector<QPDFObjectHandle>::iterator iter = all.begin();
- iter != all.end();
- ++iter) {
+ for (auto& page: all) {
// enqueue page
- enqueueObject(*iter);
+ enqueueObject(page);
// enqueue page contents stream
- enqueueObject((*iter).getKey("/Contents"));
+ enqueueObject(page.getKey("/Contents"));
// enqueue all the strips for each page
- QPDFObjectHandle strips =
- (*iter).getKey("/Resources").getKey("/XObject");
+ QPDFObjectHandle strips = page.getKey("/Resources").getKey("/XObject");
std::set<std::string> keys = strips.getKeys();
- for (std::set<std::string>::iterator image = keys.begin();
- image != keys.end();
- ++image) {
- enqueueObject(strips.getKey(*image));
+ for (auto const& image: keys) {
+ enqueueObject(strips.getKey(image));
enqueueObject(QPDFObjectHandle::newStream(
&this->m->pdf, image_transform_content));
}
diff --git a/libqpdf/QPDF_Array.cc b/libqpdf/QPDF_Array.cc
index 0567f66b..8899bf6f 100644
--- a/libqpdf/QPDF_Array.cc
+++ b/libqpdf/QPDF_Array.cc
@@ -99,10 +99,8 @@ void
QPDF_Array::setFromVector(std::vector<QPDFObjectHandle> const& v)
{
this->elements = SparseOHArray();
- for (std::vector<QPDFObjectHandle>::const_iterator iter = v.begin();
- iter != v.end();
- ++iter) {
- this->elements.append(*iter);
+ for (auto const& iter: v) {
+ this->elements.append(iter);
}
}
diff --git a/libqpdf/QPDF_Dictionary.cc b/libqpdf/QPDF_Dictionary.cc
index e5b88027..44b8a474 100644
--- a/libqpdf/QPDF_Dictionary.cc
+++ b/libqpdf/QPDF_Dictionary.cc
@@ -12,11 +12,8 @@ QPDF_Dictionary::QPDF_Dictionary(
void
QPDF_Dictionary::releaseResolved()
{
- for (std::map<std::string, QPDFObjectHandle>::iterator iter =
- this->items.begin();
- iter != this->items.end();
- ++iter) {
- QPDFObjectHandle::ReleaseResolver::releaseResolved((*iter).second);
+ for (auto& iter: this->items) {
+ QPDFObjectHandle::ReleaseResolver::releaseResolved(iter.second);
}
}
diff --git a/libqpdf/QPDF_encryption.cc b/libqpdf/QPDF_encryption.cc
index 00920082..b943777f 100644
--- a/libqpdf/QPDF_encryption.cc
+++ b/libqpdf/QPDF_encryption.cc
@@ -945,11 +945,7 @@ QPDF::initializeEncryption()
if ((V == 4) || (V == 5)) {
QPDFObjectHandle CF = encryption_dict.getKey("/CF");
- std::set<std::string> keys = CF.getKeys();
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
- std::string const& filter = *iter;
+ for (auto const& filter: CF.getKeys()) {
QPDFObjectHandle cdict = CF.getKey(filter);
if (cdict.isDictionary()) {
encryption_method_e method = e_none;
diff --git a/libqpdf/QPDF_linearization.cc b/libqpdf/QPDF_linearization.cc
index cdeb89a9..ec422406 100644
--- a/libqpdf/QPDF_linearization.cc
+++ b/libqpdf/QPDF_linearization.cc
@@ -583,12 +583,9 @@ QPDF::checkLinearizationInternal()
// uncompressed.
{ // local scope
std::map<int, int> object_stream_data;
- for (std::map<QPDFObjGen, QPDFXRefEntry>::const_iterator iter =
- this->m->xref_table.begin();
- iter != this->m->xref_table.end();
- ++iter) {
- QPDFObjGen const& og = (*iter).first;
- QPDFXRefEntry const& entry = (*iter).second;
+ for (auto const& iter: this->m->xref_table) {
+ QPDFObjGen const& og = iter.first;
+ QPDFXRefEntry const& entry = iter.second;
if (entry.getType() == 2) {
object_stream_data[og.getObj()] = entry.getObjStreamNumber();
}
@@ -613,10 +610,8 @@ QPDF::checkLinearizationInternal()
}
qpdf_offset_t min_E = -1;
qpdf_offset_t max_E = -1;
- for (std::vector<QPDFObjectHandle>::iterator iter = this->m->part6.begin();
- iter != this->m->part6.end();
- ++iter) {
- QPDFObjGen og((*iter).getObjGen());
+ for (auto const& oh: this->m->part6) {
+ QPDFObjGen og(oh.getObjGen());
if (this->m->obj_cache.count(og) == 0) {
// All objects have to have been dereferenced to be classified.
throw std::logic_error("linearization part6 object not in cache");
@@ -651,19 +646,15 @@ QPDF::checkLinearizationInternal()
// code.
if (!errors.empty()) {
result = false;
- for (std::list<std::string>::iterator iter = errors.begin();
- iter != errors.end();
- ++iter) {
- *this->m->err_stream << "WARNING: " << (*iter) << std::endl;
+ for (auto const& error: errors) {
+ *this->m->err_stream << "WARNING: " << error << std::endl;
}
}
if (!warnings.empty()) {
result = false;
- for (std::list<std::string>::iterator iter = warnings.begin();
- iter != warnings.end();
- ++iter) {
- *this->m->err_stream << "WARNING: " << (*iter) << std::endl;
+ for (auto const& warning: warnings) {
+ *this->m->err_stream << "WARNING: " << warning << std::endl;
}
}
@@ -678,10 +669,7 @@ QPDF::maxEnd(ObjUser const& ou)
}
std::set<QPDFObjGen> const& ogs = this->m->obj_user_to_objects[ou];
qpdf_offset_t end = 0;
- for (std::set<QPDFObjGen>::const_iterator iter = ogs.begin();
- iter != ogs.end();
- ++iter) {
- QPDFObjGen const& og = *iter;
+ for (auto const& og: ogs) {
if (this->m->obj_cache.count(og) == 0) {
stopOnError("unknown object referenced in object user table");
}
@@ -855,28 +843,24 @@ QPDF::checkHPageOffset(
computed_shared.insert(obj);
}
- for (std::set<int>::iterator iter = hint_shared.begin();
- iter != hint_shared.end();
- ++iter) {
- if (!computed_shared.count(*iter)) {
+ for (int iter: hint_shared) {
+ if (!computed_shared.count(iter)) {
// pdlin puts thumbnails here even though it shouldn't
warnings.push_back(
"page " + QUtil::int_to_string(pageno) +
- ": shared object " + QUtil::int_to_string(*iter) +
+ ": shared object " + QUtil::int_to_string(iter) +
": in hint table but not computed list");
}
}
- for (std::set<int>::iterator iter = computed_shared.begin();
- iter != computed_shared.end();
- ++iter) {
- if (!hint_shared.count(*iter)) {
+ for (int iter: computed_shared) {
+ if (!hint_shared.count(iter)) {
// Acrobat does not put some things including at least
// built-in fonts and procsets here, at least in some
// cases.
warnings.push_back(
"page " + QUtil::int_to_string(pageno) +
- ": shared object " + QUtil::int_to_string(*iter) +
+ ": shared object " + QUtil::int_to_string(iter) +
": in computed list but not hint table");
}
}
@@ -1290,13 +1274,9 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
std::set<QPDFObjGen> lc_outlines;
std::set<QPDFObjGen> lc_root;
- for (std::map<QPDFObjGen, std::set<ObjUser>>::iterator oiter =
- this->m->object_to_obj_users.begin();
- oiter != this->m->object_to_obj_users.end();
- ++oiter) {
- QPDFObjGen const& og = (*oiter).first;
-
- std::set<ObjUser>& ous = (*oiter).second;
+ for (auto& oiter: this->m->object_to_obj_users) {
+ QPDFObjGen const& og = oiter.first;
+ std::set<ObjUser>& ous = oiter.second;
bool in_open_document = false;
bool in_first_page = false;
@@ -1306,10 +1286,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
bool in_outlines = false;
bool is_root = false;
- for (std::set<ObjUser>::iterator uiter = ous.begin();
- uiter != ous.end();
- ++uiter) {
- ObjUser const& ou = *uiter;
+ for (auto const& ou: ous) {
switch (ou.ou_type) {
case ObjUser::ou_trailer_key:
if (ou.key == "/Encrypt") {
@@ -1396,11 +1373,8 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
{ // local scope
// Map all page objects to the containing object stream. This
// should be a no-op in a properly linearized file.
- std::vector<QPDFObjectHandle> t = getAllPages();
- for (std::vector<QPDFObjectHandle>::iterator iter = t.begin();
- iter != t.end();
- ++iter) {
- pages.push_back(getUncompressedObject(*iter, object_stream_data));
+ for (auto oh: getAllPages()) {
+ pages.push_back(getUncompressedObject(oh, object_stream_data));
}
}
int npages = toI(pages.size());
@@ -1427,10 +1401,8 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
" calculating linearization data");
}
this->m->part4.push_back(objGenToIndirect(*(lc_root.begin())));
- for (std::set<QPDFObjGen>::iterator iter = lc_open_document.begin();
- iter != lc_open_document.end();
- ++iter) {
- this->m->part4.push_back(objGenToIndirect(*iter));
+ for (auto const& og: lc_open_document) {
+ this->m->part4.push_back(objGenToIndirect(og));
}
// Part 6: first page objects. Note: implementation note 124
@@ -1458,16 +1430,12 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
// groups private and shared objects contiguously for the sake of
// hint tables.
- for (std::set<QPDFObjGen>::iterator iter = lc_first_page_private.begin();
- iter != lc_first_page_private.end();
- ++iter) {
- this->m->part6.push_back(objGenToIndirect(*iter));
+ for (auto const& og: lc_first_page_private) {
+ this->m->part6.push_back(objGenToIndirect(og));
}
- for (std::set<QPDFObjGen>::iterator iter = lc_first_page_shared.begin();
- iter != lc_first_page_shared.end();
- ++iter) {
- this->m->part6.push_back(objGenToIndirect(*iter));
+ for (auto const& og: lc_first_page_shared) {
+ this->m->part6.push_back(objGenToIndirect(og));
}
// Place the outline dictionary if it goes in the first page section.
@@ -1511,10 +1479,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
" calculating linearization data");
}
std::set<QPDFObjGen> ogs = this->m->obj_user_to_objects[ou];
- for (std::set<QPDFObjGen>::iterator iter = ogs.begin();
- iter != ogs.end();
- ++iter) {
- QPDFObjGen const& og = (*iter);
+ for (auto const& og: ogs) {
if (lc_other_page_private.count(og)) {
lc_other_page_private.erase(og);
this->m->part7.push_back(objGenToIndirect(og));
@@ -1533,10 +1498,8 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
// Part 8: other pages' shared objects
// Order is unimportant.
- for (std::set<QPDFObjGen>::iterator iter = lc_other_page_shared.begin();
- iter != lc_other_page_shared.end();
- ++iter) {
- this->m->part8.push_back(objGenToIndirect(*iter));
+ for (auto const& og: lc_other_page_shared) {
+ this->m->part8.push_back(objGenToIndirect(og));
}
// Part 9: other objects
@@ -1555,10 +1518,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
stopOnError("found empty pages tree while"
" calculating linearization data");
}
- for (std::set<QPDFObjGen>::iterator iter = pages_ogs.begin();
- iter != pages_ogs.end();
- ++iter) {
- QPDFObjGen const& og = *iter;
+ for (auto const& og: pages_ogs) {
if (lc_other.count(og)) {
lc_other.erase(og);
this->m->part9.push_back(objGenToIndirect(og));
@@ -1588,10 +1548,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
std::set<QPDFObjGen>& ogs =
this->m
->obj_user_to_objects[ObjUser(ObjUser::ou_thumb, toI(i))];
- for (std::set<QPDFObjGen>::iterator iter = ogs.begin();
- iter != ogs.end();
- ++iter) {
- QPDFObjGen const& og = *iter;
+ for (auto const& og: ogs) {
if (lc_thumbnail_private.count(og)) {
lc_thumbnail_private.erase(og);
this->m->part9.push_back(objGenToIndirect(og));
@@ -1606,10 +1563,8 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
}
// Place shared thumbnail objects
- for (std::set<QPDFObjGen>::iterator iter = lc_thumbnail_shared.begin();
- iter != lc_thumbnail_shared.end();
- ++iter) {
- this->m->part9.push_back(objGenToIndirect(*iter));
+ for (auto const& og: lc_thumbnail_shared) {
+ this->m->part9.push_back(objGenToIndirect(og));
}
// Place outlines unless in first page
@@ -1618,10 +1573,8 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
}
// Place all remaining objects
- for (std::set<QPDFObjGen>::iterator iter = lc_other.begin();
- iter != lc_other.end();
- ++iter) {
- this->m->part9.push_back(objGenToIndirect(*iter));
+ for (auto const& og: lc_other) {
+ this->m->part9.push_back(objGenToIndirect(og));
}
// Make sure we got everything exactly once.
@@ -1658,10 +1611,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
std::vector<CHSharedObjectEntry>& shared =
this->m->c_shared_object_data.entries;
- for (std::vector<QPDFObjectHandle>::iterator iter = this->m->part6.begin();
- iter != this->m->part6.end();
- ++iter) {
- QPDFObjectHandle& oh = *iter;
+ for (auto& oh: this->m->part6) {
int obj = oh.getObjectID();
obj_to_index[obj] = toI(shared.size());
shared.push_back(CHSharedObjectEntry(obj));
@@ -1670,11 +1620,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
if (!this->m->part8.empty()) {
this->m->c_shared_object_data.first_shared_obj =
this->m->part8.at(0).getObjectID();
- for (std::vector<QPDFObjectHandle>::iterator iter =
- this->m->part8.begin();
- iter != this->m->part8.end();
- ++iter) {
- QPDFObjectHandle& oh = *iter;
+ for (auto& oh: this->m->part8) {
int obj = oh.getObjectID();
obj_to_index[obj] = toI(shared.size());
shared.push_back(CHSharedObjectEntry(obj));
@@ -1696,10 +1642,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data)
" calculating linearization data");
}
std::set<QPDFObjGen> const& ogs = this->m->obj_user_to_objects[ou];
- for (std::set<QPDFObjGen>::const_iterator iter = ogs.begin();
- iter != ogs.end();
- ++iter) {
- QPDFObjGen const& og = *iter;
+ for (auto const& og: ogs) {
if ((this->m->object_to_obj_users[og].size() > 1) &&
(obj_to_index.count(og.getObj()) > 0)) {
int idx = obj_to_index[og.getObj()];
@@ -1733,10 +1676,8 @@ QPDF::pushOutlinesToPart(
this->m->c_outline_data.nobjects = 1;
lc_outlines.erase(outlines_og);
part.push_back(outlines);
- for (std::set<QPDFObjGen>::iterator iter = lc_outlines.begin();
- iter != lc_outlines.end();
- ++iter) {
- part.push_back(objGenToIndirect(*iter));
+ for (auto const& og: lc_outlines) {
+ part.push_back(objGenToIndirect(og));
++this->m->c_outline_data.nobjects;
}
}
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);
}
}
}
diff --git a/libqpdf/QPDF_pages.cc b/libqpdf/QPDF_pages.cc
index c2b2dd1a..89a782f4 100644
--- a/libqpdf/QPDF_pages.cc
+++ b/libqpdf/QPDF_pages.cc
@@ -319,8 +319,7 @@ int
QPDF::findPage(QPDFObjGen const& og)
{
flattenPagesTree();
- std::map<QPDFObjGen, int>::iterator it =
- this->m->pageobj_to_pages_pos.find(og);
+ auto it = this->m->pageobj_to_pages_pos.find(og);
if (it == this->m->pageobj_to_pages_pos.end()) {
QTC::TC("qpdf", "QPDF_pages findPage not found");
setLastObjectDescription("page object", og.getObj(), og.getGen());
diff --git a/libqpdf/QUtil.cc b/libqpdf/QUtil.cc
index 5fa6c4b9..22962199 100644
--- a/libqpdf/QUtil.cc
+++ b/libqpdf/QUtil.cc
@@ -786,14 +786,13 @@ QUtil::hex_decode(std::string const& input)
{
std::string result;
size_t pos = 0;
- for (std::string::const_iterator p = input.begin(); p != input.end(); ++p) {
- char ch = *p;
+ for (auto ch: input) {
bool skip = false;
- if ((*p >= 'A') && (*p <= 'F')) {
+ if ((ch >= 'A') && (ch <= 'F')) {
ch = QIntC::to_char(ch - 'A' + 10);
- } else if ((*p >= 'a') && (*p <= 'f')) {
+ } else if ((ch >= 'a') && (ch <= 'f')) {
ch = QIntC::to_char(ch - 'a' + 10);
- } else if ((*p >= '0') && (*p <= '9')) {
+ } else if ((ch >= '0') && (ch <= '9')) {
ch = QIntC::to_char(ch - '0');
} else {
skip = true;
@@ -1921,12 +1920,10 @@ QUtil::possible_repaired_encodings(std::string supplied)
// De-duplicate
std::vector<std::string> t;
std::set<std::string> seen;
- for (std::vector<std::string>::iterator iter = result.begin();
- iter != result.end();
- ++iter) {
- if (!seen.count(*iter)) {
- seen.insert(*iter);
- t.push_back(*iter);
+ for (auto const& iter: result) {
+ if (!seen.count(iter)) {
+ seen.insert(iter);
+ t.push_back(iter);
}
}
return t;
diff --git a/libtests/json.cc b/libtests/json.cc
index 17a5d574..43f2b3c6 100644
--- a/libtests/json.cc
+++ b/libtests/json.cc
@@ -130,10 +130,8 @@ check_schema(
std::list<std::string> errors;
std::cout << "--- " << description << std::endl;
assert(exp == obj.checkSchema(schema, flags, errors));
- for (std::list<std::string>::iterator iter = errors.begin();
- iter != errors.end();
- ++iter) {
- std::cout << *iter << std::endl;
+ for (auto const& error: errors) {
+ std::cout << error << std::endl;
}
std::cout << "---" << std::endl;
}
diff --git a/libtests/numrange.cc b/libtests/numrange.cc
index d1548fe9..c0bf5bd7 100644
--- a/libtests/numrange.cc
+++ b/libtests/numrange.cc
@@ -9,10 +9,8 @@ test_numrange(char const* range)
} else {
std::vector<int> result = QUtil::parse_numrange(range, 15);
std::cout << "numeric range " << range << " ->";
- for (std::vector<int>::iterator iter = result.begin();
- iter != result.end();
- ++iter) {
- std::cout << " " << *iter;
+ for (int i: result) {
+ std::cout << " " << i;
}
std::cout << std::endl;
}
diff --git a/libtests/qutil.cc b/libtests/qutil.cc
index eb16bf0b..017f371b 100644
--- a/libtests/qutil.cc
+++ b/libtests/qutil.cc
@@ -229,12 +229,10 @@ print_utf8(unsigned long val)
// Emacs has trouble with utf-8 encoding files with characters
// outside the 16-bit portion, so just show the character
// values.
- for (std::string::iterator iter = result.begin(); iter != result.end();
- ++iter) {
+ for (auto const& ch: result) {
std::cout << " "
<< QUtil::int_to_string_base(
- static_cast<int>(
- static_cast<unsigned char>(*iter)),
+ static_cast<int>(static_cast<unsigned char>(ch)),
16,
2);
}
@@ -289,11 +287,10 @@ print_utf16(unsigned long val)
{
std::string result = QUtil::toUTF16(val);
std::cout << "0x" << QUtil::uint_to_string_base(val, 16) << " ->";
- for (std::string::iterator iter = result.begin(); iter != result.end();
- ++iter) {
+ for (auto const& ch: result) {
std::cout << " "
<< QUtil::int_to_string_base(
- static_cast<int>(static_cast<unsigned char>(*iter)),
+ static_cast<int>(static_cast<unsigned char>(ch)),
16,
2);
}
@@ -516,10 +513,8 @@ void
read_from_file_test()
{
std::list<std::string> lines = QUtil::read_lines_from_file("other-file");
- for (std::list<std::string>::iterator iter = lines.begin();
- iter != lines.end();
- ++iter) {
- std::cout << *iter << std::endl;
+ for (auto const& line: lines) {
+ std::cout << line << std::endl;
}
// Test the other versions and make sure we get the same results
{
diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc
index e0e77cfe..f0c56176 100644
--- a/qpdf/test_driver.cc
+++ b/qpdf/test_driver.cc
@@ -383,14 +383,9 @@ test_5(QPDF& pdf, char const* arg2)
QPDFPageDocumentHelper dh(pdf);
std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
int pageno = 0;
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFPageObjectHelper& page(*iter);
+ for (auto& page: pages) {
++pageno;
-
std::cout << "page " << pageno << ":" << std::endl;
-
std::cout << " images:" << std::endl;
std::map<std::string, QPDFObjectHandle> images = page.getImages();
for (auto const& iter2: images) {
@@ -714,19 +709,19 @@ test_15(QPDF& pdf, char const* arg2)
// a shallow copy.
QPDFObjectHandle page_template = pages.at(0);
std::vector<QPDFObjectHandle> new_pages;
- for (std::vector<QPDFObjectHandle>::iterator iter = contents.begin();
- iter != contents.end();
- ++iter) {
+ bool first = true;
+ for (auto const& iter: contents) {
// We will retain indirect object references to other
// indirect objects other than page content.
QPDFObjectHandle page = page_template.shallowCopy();
- page.replaceKey("/Contents", *iter);
- if (iter == contents.begin()) {
+ page.replaceKey("/Contents", iter);
+ if (first) {
// leave direct
- new_pages.push_back(page);
+ first = false;
} else {
- new_pages.push_back(pdf.makeIndirectObject(page));
+ page = pdf.makeIndirectObject(page);
}
+ new_pages.push_back(page);
}
// Now insert the pages
@@ -1269,14 +1264,11 @@ test_35(QPDF& pdf, char const* arg2)
attachments[filename] = stream.getStreamData();
}
}
- for (std::map<std::string, std::shared_ptr<Buffer>>::iterator iter =
- attachments.begin();
- iter != attachments.end();
- ++iter) {
- std::string const& filename = (*iter).first;
+ for (auto const& iter: attachments) {
+ std::string const& filename = iter.first;
std::string data = std::string(
- reinterpret_cast<char const*>((*iter).second->getBuffer()),
- (*iter).second->getSize());
+ reinterpret_cast<char const*>(iter.second->getBuffer()),
+ iter.second->getSize());
bool is_binary = false;
for (size_t i = 0; i < data.size(); ++i) {
if ((data.at(i) < 0) || (data.at(i) > 126)) {
@@ -1338,10 +1330,7 @@ test_37(QPDF& pdf, char const* arg2)
// Parse content streams of all pages
std::vector<QPDFPageObjectHelper> pages =
QPDFPageDocumentHelper(pdf).getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- QPDFPageObjectHelper& page(*iter);
+ for (auto& page: pages) {
ParserCallbacks cb;
page.parseContents(&cb);
}
@@ -1364,16 +1353,11 @@ test_39(QPDF& pdf, char const* arg2)
std::vector<QPDFPageObjectHelper> pages =
QPDFPageDocumentHelper(pdf).getAllPages();
int pageno = 0;
- for (std::vector<QPDFPageObjectHelper>::iterator p_iter = pages.begin();
- p_iter != pages.end();
- ++p_iter) {
+ for (auto& page: pages) {
std::cout << "page " << ++pageno << std::endl;
- std::map<std::string, QPDFObjectHandle> images = (*p_iter).getImages();
- for (std::map<std::string, QPDFObjectHandle>::iterator i_iter =
- images.begin();
- i_iter != images.end();
- ++i_iter) {
- QPDFObjectHandle image_dict = (*i_iter).second.getDict();
+ std::map<std::string, QPDFObjectHandle> images = page.getImages();
+ for (auto& i_iter: images) {
+ QPDFObjectHandle image_dict = i_iter.second.getDict();
std::cout << "filter: "
<< image_dict.getKey("/Filter").unparseResolved()
<< ", color space: "
@@ -1404,10 +1388,8 @@ test_41(QPDF& pdf, char const* arg2)
// with coalesce.pdf.
std::vector<QPDFPageObjectHelper> pages =
QPDFPageDocumentHelper(pdf).getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- (*iter).addContentTokenFilter(
+ for (auto& page: pages) {
+ page.addContentTokenFilter(
std::shared_ptr<QPDFObjectHandle::TokenFilter>(new TokenFilter()));
}
QPDFWriter w(pdf, "a.pdf");
@@ -1537,11 +1519,7 @@ test_43(QPDF& pdf, char const* arg2)
}
std::cout << "iterating over form fields\n";
std::vector<QPDFFormFieldObjectHelper> form_fields = afdh.getFormFields();
- for (std::vector<QPDFFormFieldObjectHelper>::iterator iter =
- form_fields.begin();
- iter != form_fields.end();
- ++iter) {
- QPDFFormFieldObjectHelper ffh(*iter);
+ for (auto& ffh: form_fields) {
std::cout << "Field: " << ffh.getObjectHandle().unparse() << std::endl;
QPDFFormFieldObjectHelper node = ffh;
while (!node.isNull()) {
@@ -1571,29 +1549,17 @@ test_43(QPDF& pdf, char const* arg2)
std::cout << " Quadding: " << ffh.getQuadding() << std::endl;
std::vector<QPDFAnnotationObjectHelper> annotations =
afdh.getAnnotationsForField(ffh);
- for (std::vector<QPDFAnnotationObjectHelper>::iterator i2 =
- annotations.begin();
- i2 != annotations.end();
- ++i2) {
- std::cout << " Annotation: " << (*i2).getObjectHandle().unparse()
+ for (auto& aoh: annotations) {
+ std::cout << " Annotation: " << aoh.getObjectHandle().unparse()
<< std::endl;
}
}
std::cout << "iterating over annotations per page\n";
- std::vector<QPDFPageObjectHelper> pages =
- QPDFPageDocumentHelper(pdf).getAllPages();
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
- std::cout << "Page: " << (*iter).getObjectHandle().unparse()
- << std::endl;
+ for (auto& page: QPDFPageDocumentHelper(pdf).getAllPages()) {
+ std::cout << "Page: " << page.getObjectHandle().unparse() << std::endl;
std::vector<QPDFAnnotationObjectHelper> annotations =
- afdh.getWidgetAnnotationsForPage(*iter);
- for (std::vector<QPDFAnnotationObjectHelper>::iterator i2 =
- annotations.begin();
- i2 != annotations.end();
- ++i2) {
- QPDFAnnotationObjectHelper ah(*i2);
+ afdh.getWidgetAnnotationsForPage(page);
+ for (auto& ah: annotations) {
std::cout << " Annotation: " << ah.getObjectHandle().unparse()
<< std::endl;
std::cout
@@ -1623,10 +1589,7 @@ test_44(QPDF& pdf, char const* arg2)
// Set form fields.
QPDFAcroFormDocumentHelper afdh(pdf);
std::vector<QPDFFormFieldObjectHelper> fields = afdh.getFormFields();
- for (std::vector<QPDFFormFieldObjectHelper>::iterator iter = fields.begin();
- iter != fields.end();
- ++iter) {
- QPDFFormFieldObjectHelper& field(*iter);
+ for (auto& field: fields) {
QPDFObjectHandle ft = field.getInheritableFieldValue("/FT");
if (ft.isName() && (ft.getName() == "/Tx")) {
// \xc3\xb7 is utf-8 for U+00F7 (divided by)
@@ -1950,23 +1913,16 @@ static void
test_49(QPDF& pdf, char const* arg2)
{
// Outlines
- std::vector<QPDFPageObjectHelper> pages =
- QPDFPageDocumentHelper(pdf).getAllPages();
QPDFOutlineDocumentHelper odh(pdf);
int pageno = 0;
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter, ++pageno) {
- std::vector<QPDFOutlineObjectHelper> outlines =
- odh.getOutlinesForPage((*iter).getObjectHandle().getObjGen());
- for (std::vector<QPDFOutlineObjectHelper>::iterator oiter =
- outlines.begin();
- oiter != outlines.end();
- ++oiter) {
- std::cout << "page " << pageno << ": " << (*oiter).getTitle()
- << " -> " << (*oiter).getDest().unparseResolved()
- << std::endl;
+ for (auto& page: QPDFPageDocumentHelper(pdf).getAllPages()) {
+ auto outlines =
+ odh.getOutlinesForPage(page.getObjectHandle().getObjGen());
+ for (auto& ol: outlines) {
+ std::cout << "page " << pageno << ": " << ol.getTitle() << " -> "
+ << ol.getDest().unparseResolved() << std::endl;
}
+ ++pageno;
}
}
@@ -1981,11 +1937,8 @@ test_50(QPDF& pdf, char const* arg2)
std::cout << d1.getJSON().unparse() << std::endl;
// Top-level type mismatch
d1.mergeResources(d2.getKey("/k1"));
- std::set<std::string> names = d1.getResourceNames();
- for (std::set<std::string>::iterator iter = names.begin();
- iter != names.end();
- ++iter) {
- std::cout << *iter << std::endl;
+ for (auto const& name: d1.getResourceNames()) {
+ std::cout << name << std::endl;
}
}
@@ -2064,11 +2017,8 @@ test_53(QPDF& pdf, char const* arg2)
root.replaceKey(
"/Q1", pdf.makeIndirectObject(QPDFObjectHandle::newString("potato")));
std::cout << "all objects" << std::endl;
- std::vector<QPDFObjectHandle> all = pdf.getAllObjects();
- for (std::vector<QPDFObjectHandle>::iterator iter = all.begin();
- iter != all.end();
- ++iter) {
- std::cout << (*iter).unparse() << std::endl;
+ for (auto& obj: pdf.getAllObjects()) {
+ std::cout << obj.unparse() << std::endl;
}
QPDFWriter w(pdf, "a.pdf");
diff --git a/qpdf/test_parsedoffset.cc b/qpdf/test_parsedoffset.cc
index aecaf404..26a50875 100644
--- a/qpdf/test_parsedoffset.cc
+++ b/qpdf/test_parsedoffset.cc
@@ -52,21 +52,17 @@ walk(
if (obj.isArray()) {
std::vector<QPDFObjectHandle> array = obj.getArrayAsVector();
- for (std::vector<QPDFObjectHandle>::iterator iter = array.begin();
- iter != array.end();
- ++iter) {
- if (!iter->isIndirect()) {
+ for (auto& oh: array) {
+ if (!oh.isIndirect()) {
// QPDF::GetAllObjects() enumerates all indirect objects.
// So only the direct objects are recursed here.
- walk(stream_number, *iter, result);
+ walk(stream_number, oh, result);
}
}
} else if (obj.isDictionary()) {
std::set<std::string> keys = obj.getKeys();
- for (std::set<std::string>::iterator iter = keys.begin();
- iter != keys.end();
- ++iter) {
- QPDFObjectHandle item = obj.getKey(*iter);
+ for (auto const& key: keys) {
+ QPDFObjectHandle item = obj.getKey(key);
if (!item.isIndirect()) {
// QPDF::GetAllObjects() enumerates all indirect objects.
// So only the direct objects are recursed here.
@@ -88,21 +84,19 @@ process(
std::vector<QPDFObjectHandle> objs = qpdf.getAllObjects();
std::map<QPDFObjGen, QPDFXRefEntry> xrefs = qpdf.getXRefTable();
- for (std::vector<QPDFObjectHandle>::iterator iter = objs.begin();
- iter != objs.end();
- ++iter) {
- if (xrefs.count(iter->getObjGen()) == 0) {
- std::cerr << iter->getObjectID() << "/" << iter->getGeneration()
+ for (auto const& oh: objs) {
+ if (xrefs.count(oh.getObjGen()) == 0) {
+ std::cerr << oh.getObjectID() << "/" << oh.getGeneration()
<< " is not found in xref table" << std::endl;
std::exit(2);
}
- QPDFXRefEntry xref = xrefs[iter->getObjGen()];
+ QPDFXRefEntry xref = xrefs[oh.getObjGen()];
size_t stream_number;
switch (xref.getType()) {
case 0:
- std::cerr << iter->getObjectID() << "/" << iter->getGeneration()
+ std::cerr << oh.getObjectID() << "/" << oh.getGeneration()
<< " xref entry is free" << std::endl;
std::exit(2);
case 1:
@@ -116,7 +110,7 @@ process(
std::exit(2);
}
- walk(stream_number, *iter, result);
+ walk(stream_number, oh, result);
}
}
@@ -146,11 +140,8 @@ main(int argc, char* argv[])
<< std::endl;
}
- for (std::vector<std::pair<qpdf_offset_t, std::string>>::iterator
- iter = table[i].begin();
- iter != table[i].end();
- ++iter) {
- std::cout << iter->second << std::endl;
+ for (auto const& iter: table[i]) {
+ std::cout << iter.second << std::endl;
}
}
diff --git a/qpdf/test_pdf_doc_encoding.cc b/qpdf/test_pdf_doc_encoding.cc
index 3dafceac..c705fd2f 100644
--- a/qpdf/test_pdf_doc_encoding.cc
+++ b/qpdf/test_pdf_doc_encoding.cc
@@ -27,10 +27,8 @@ main(int argc, char* argv[])
}
char const* infilename = argv[1];
std::list<std::string> lines = QUtil::read_lines_from_file(infilename);
- for (std::list<std::string>::iterator iter = lines.begin();
- iter != lines.end();
- ++iter) {
- QPDFObjectHandle str = QPDFObjectHandle::newString(*iter);
+ for (auto const& line: lines) {
+ QPDFObjectHandle str = QPDFObjectHandle::newString(line);
std::cout << str.getUTF8Value() << std::endl;
}
return 0;
diff --git a/qpdf/test_pdf_unicode.cc b/qpdf/test_pdf_unicode.cc
index ead143b3..006b1183 100644
--- a/qpdf/test_pdf_unicode.cc
+++ b/qpdf/test_pdf_unicode.cc
@@ -27,10 +27,8 @@ main(int argc, char* argv[])
}
char const* infilename = argv[1];
std::list<std::string> lines = QUtil::read_lines_from_file(infilename);
- for (std::list<std::string>::iterator iter = lines.begin();
- iter != lines.end();
- ++iter) {
- QPDFObjectHandle str = QPDFObjectHandle::newUnicodeString(*iter);
+ for (auto const& line: lines) {
+ QPDFObjectHandle str = QPDFObjectHandle::newUnicodeString(line);
std::cout << str.getUTF8Value() << " // " << str.unparseBinary()
<< std::endl;
}
diff --git a/qpdf/test_renumber.cc b/qpdf/test_renumber.cc
index da4d7c1d..206ef49a 100644
--- a/qpdf/test_renumber.cc
+++ b/qpdf/test_renumber.cc
@@ -97,10 +97,8 @@ compare(QPDFObjectHandle a, QPDFObjectHandle b)
return false;
}
- for (std::set<std::string>::iterator iter = keys_a.begin();
- iter != keys_a.end();
- ++iter) {
- if (!compare(a.getKey(*iter), b.getKey(*iter))) {
+ for (auto const& key: keys_a) {
+ if (!compare(a.getKey(key), b.getKey(key))) {
std::cerr << "different dictionary item" << std::endl;
return false;
}
@@ -130,19 +128,17 @@ compare_xref_table(
return false;
}
- for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter = a.begin();
- iter != a.end();
- ++iter) {
- std::cout << "xref entry for " << iter->first.getObj() << "/"
- << iter->first.getGen() << std::endl;
+ for (auto const& iter: a) {
+ std::cout << "xref entry for " << iter.first.getObj() << "/"
+ << iter.first.getGen() << std::endl;
- if (b.count(iter->first) == 0) {
+ if (b.count(iter.first) == 0) {
std::cerr << "not found" << std::endl;
return false;
}
- QPDFXRefEntry xref_a = iter->second;
- QPDFXRefEntry xref_b = b[iter->first];
+ QPDFXRefEntry xref_a = iter.second;
+ QPDFXRefEntry xref_b = b[iter.first];
if (xref_a.getType() != xref_b.getType()) {
std::cerr << "different xref entry type" << std::endl;
return false;
@@ -235,10 +231,8 @@ main(int argc, char* argv[])
std::cout << "--- compare between input and renumbered objects ---"
<< std::endl;
- for (std::vector<QPDFObjectHandle>::iterator iter = objs_in.begin();
- iter != objs_in.end();
- ++iter) {
- QPDFObjGen og_in = iter->getObjGen();
+ for (auto const& iter: objs_in) {
+ QPDFObjGen og_in = iter.getObjGen();
QPDFObjGen og_ren = w.getRenumberedObjGen(og_in);
std::cout << "input " << og_in.getObj() << "/" << og_in.getGen()
@@ -250,7 +244,7 @@ main(int argc, char* argv[])
continue;
}
- if (!compare(*iter, qpdf_ren.getObjectByObjGen(og_ren))) {
+ if (!compare(iter, qpdf_ren.getObjectByObjGen(og_ren))) {
std::cerr << "different" << std::endl;
std::exit(2);
}
diff --git a/qpdf/test_tokenizer.cc b/qpdf/test_tokenizer.cc
index c3cda112..f1155a28 100644
--- a/qpdf/test_tokenizer.cc
+++ b/qpdf/test_tokenizer.cc
@@ -99,14 +99,13 @@ static std::string
sanitize(std::string const& value)
{
std::string result;
- for (std::string::const_iterator iter = value.begin(); iter != value.end();
- ++iter) {
- if ((*iter >= 32) && (*iter <= 126)) {
- result.append(1, *iter);
+ for (auto const& iter: value) {
+ if ((iter >= 32) && (iter <= 126)) {
+ result.append(1, iter);
} else {
result += "\\x" +
QUtil::int_to_string_base(
- static_cast<unsigned char>(*iter), 16, 2);
+ static_cast<unsigned char>(iter), 16, 2);
}
}
return result;
@@ -203,12 +202,10 @@ process(char const* filename, bool include_ignorable, size_t max_len)
std::vector<QPDFPageObjectHelper> pages =
QPDFPageDocumentHelper(qpdf).getAllPages();
int pageno = 0;
- for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
- iter != pages.end();
- ++iter) {
+ for (auto& page: pages) {
++pageno;
Pl_Buffer plb("buffer");
- (*iter).pipeContents(&plb);
+ page.pipeContents(&plb);
auto content_data = plb.getBufferSharedPointer();
BufferInputSource* bis =
new BufferInputSource("content data", content_data.get());
@@ -223,20 +220,16 @@ process(char const* filename, bool include_ignorable, size_t max_len)
}
// Tokenize object streams
- std::vector<QPDFObjectHandle> all = qpdf.getAllObjects();
- for (std::vector<QPDFObjectHandle>::iterator iter = all.begin();
- iter != all.end();
- ++iter) {
- if ((*iter).isStream() && (*iter).getDict().getKey("/Type").isName() &&
- (*iter).getDict().getKey("/Type").getName() == "/ObjStm") {
- std::shared_ptr<Buffer> b =
- (*iter).getStreamData(qpdf_dl_specialized);
+ for (auto& obj: qpdf.getAllObjects()) {
+ if (obj.isStream() && obj.getDict().getKey("/Type").isName() &&
+ obj.getDict().getKey("/Type").getName() == "/ObjStm") {
+ std::shared_ptr<Buffer> b = obj.getStreamData(qpdf_dl_specialized);
BufferInputSource* bis =
new BufferInputSource("object stream data", b.get());
is = std::shared_ptr<InputSource>(bis);
dump_tokens(
is,
- "OBJECT STREAM " + QUtil::int_to_string((*iter).getObjectID()),
+ "OBJECT STREAM " + QUtil::int_to_string(obj.getObjectID()),
max_len,
include_ignorable,
false,
diff --git a/qpdf/test_xref.cc b/qpdf/test_xref.cc
index 238ef2a0..2c89dce7 100644
--- a/qpdf/test_xref.cc
+++ b/qpdf/test_xref.cc
@@ -21,26 +21,24 @@ main(int argc, char* argv[])
std::map<QPDFObjGen, QPDFXRefEntry> xref = qpdf.getXRefTable();
- for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter = xref.begin();
- iter != xref.end();
- ++iter) {
- std::cout << iter->first.getObj() << "/" << iter->first.getGen()
+ for (auto const& iter: xref) {
+ std::cout << iter.first.getObj() << "/" << iter.first.getGen()
<< ", ";
- switch (iter->second.getType()) {
+ switch (iter.second.getType()) {
case 0:
std::cout << "free entry" << std::endl;
break;
case 1:
std::cout << "uncompressed, offset = "
- << iter->second.getOffset() << " (0x" << std::hex
- << iter->second.getOffset() << std::dec << ")"
+ << iter.second.getOffset() << " (0x" << std::hex
+ << iter.second.getOffset() << std::dec << ")"
<< std::endl;
break;
case 2:
std::cout << "compressed, stream number = "
- << iter->second.getObjStreamNumber()
+ << iter.second.getObjStreamNumber()
<< ", stream index = "
- << iter->second.getObjStreamIndex() << std::endl;
+ << iter.second.getObjStreamIndex() << std::endl;
break;
default:
std::cerr << "unknown" << std::endl;