Commit 4f24617e1ea4ba7a6627a9c44304c6e0a0114249

Authored by Jay Berkenbilt
1 parent 7f023701

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. :-)
examples/pdf-filter-tokens.cc
... ... @@ -193,15 +193,12 @@ main(int argc, char* argv[])
193 193 pdf.processFile(infilename);
194 194 std::vector<QPDFPageObjectHelper> pages =
195 195 QPDFPageDocumentHelper(pdf).getAllPages();
196   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
197   - iter != pages.end();
198   - ++iter) {
  196 + for (auto& page: pages) {
199 197 // Attach two token filters to each page of this file.
200 198 // When the file is written, or when the pages' contents
201 199 // are retrieved in any other way, the filters will be
202 200 // applied. See comments on the filters for additional
203 201 // details.
204   - QPDFPageObjectHelper& page(*iter);
205 202 page.addContentTokenFilter(
206 203 std::shared_ptr<QPDFObjectHandle::TokenFilter>(
207 204 new StringReverser));
... ...
examples/pdf-invert-images.cc
... ... @@ -131,14 +131,11 @@ main(int argc, char* argv[])
131 131 // For each page...
132 132 std::vector<QPDFPageObjectHelper> pages =
133 133 QPDFPageDocumentHelper(qpdf).getAllPages();
134   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
135   - iter != pages.end();
136   - ++iter) {
137   - QPDFPageObjectHelper& page(*iter);
  134 + for (auto& page: pages) {
138 135 // Get all images on the page.
139 136 std::map<std::string, QPDFObjectHandle> images = page.getImages();
140   - for (auto& iter2: images) {
141   - QPDFObjectHandle& image = iter2.second;
  137 + for (auto& iter: images) {
  138 + QPDFObjectHandle& image = iter.second;
142 139 QPDFObjectHandle image_dict = image.getDict();
143 140 QPDFObjectHandle color_space = image_dict.getKey("/ColorSpace");
144 141 QPDFObjectHandle bits_per_component =
... ...
examples/pdf-mod-info.cc
... ... @@ -132,10 +132,7 @@ main(int argc, char* argv[])
132 132 QPDFObjectHandle filetrailer = file.getTrailer();
133 133 QPDFObjectHandle fileinfo;
134 134  
135   - for (std::map<std::string, std::string>::const_iterator it =
136   - Keys.begin();
137   - Keys.end() != it;
138   - ++it) {
  135 + for (auto const& it: Keys) {
139 136 if (!fileinfo.isInitialized()) {
140 137 if (filetrailer.hasKey("/Info")) {
141 138 QTC::TC("examples", "pdf-mod-info has info");
... ... @@ -146,12 +143,12 @@ main(int argc, char* argv[])
146 143 filetrailer.replaceKey("/Info", fileinfo);
147 144 }
148 145 }
149   - if (it->second == "") {
150   - fileinfo.removeKey(it->first);
  146 + if (it.second == "") {
  147 + fileinfo.removeKey(it.first);
151 148 } else {
152   - QPDFObjectHandle elt = fileinfo.newString(it->second);
  149 + QPDFObjectHandle elt = fileinfo.newString(it.second);
153 150 elt.makeDirect();
154   - fileinfo.replaceKey(it->first, elt);
  151 + fileinfo.replaceKey(it.first, elt);
155 152 }
156 153 }
157 154 QPDFWriter w(file, fl_tmp.c_str());
... ...
examples/pdf-overlay-page.cc
... ... @@ -42,11 +42,7 @@ stamp_page(char const* infile, char const* stampfile, char const* outfile)
42 42 // For each page...
43 43 std::vector<QPDFPageObjectHelper> pages =
44 44 QPDFPageDocumentHelper(inpdf).getAllPages();
45   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
46   - iter != pages.end();
47   - ++iter) {
48   - QPDFPageObjectHelper& ph = *iter;
49   -
  45 + for (auto& ph: pages) {
50 46 // Find a unique resource name for the new form XObject
51 47 QPDFObjectHandle resources = ph.getAttribute("/Resources", true);
52 48 int min_suffix = 1;
... ...
examples/pdf-set-form-values.cc
... ... @@ -52,23 +52,17 @@ main(int argc, char* argv[])
52 52 QPDFAcroFormDocumentHelper afdh(qpdf);
53 53 QPDFPageDocumentHelper pdh(qpdf);
54 54 std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages();
55   - for (std::vector<QPDFPageObjectHelper>::iterator page_iter =
56   - pages.begin();
57   - page_iter != pages.end();
58   - ++page_iter) {
  55 + for (auto const& page: pages) {
59 56 // Get all widget annotations for each page. Widget
60 57 // annotations are the ones that contain the details of
61 58 // what's in a form field.
62 59 std::vector<QPDFAnnotationObjectHelper> annotations =
63   - afdh.getWidgetAnnotationsForPage(*page_iter);
64   - for (std::vector<QPDFAnnotationObjectHelper>::iterator annot_iter =
65   - annotations.begin();
66   - annot_iter != annotations.end();
67   - ++annot_iter) {
  60 + afdh.getWidgetAnnotationsForPage(page);
  61 + for (auto& annot: annotations) {
68 62 // For each annotation, find its associated field. If
69 63 // it's a text field, set its value.
70 64 QPDFFormFieldObjectHelper ffh =
71   - afdh.getFieldForAnnotation(*annot_iter);
  65 + afdh.getFieldForAnnotation(annot);
72 66 if (ffh.getFieldType() == "/Tx") {
73 67 // Set the value. Passing false as the second
74 68 // value prevents qpdf from setting
... ... @@ -81,7 +75,7 @@ main(int argc, char* argv[])
81 75 // additional details, please see comments in
82 76 // QPDFFormFieldObjectHelper.hh for this method.
83 77 ffh.setV(value, false);
84   - ffh.generateAppearance(*annot_iter);
  78 + ffh.generateAppearance(annot);
85 79 }
86 80 }
87 81 }
... ...
examples/pdf-split-pages.cc
... ... @@ -27,10 +27,7 @@ process(char const* whoami, char const* infile, std::string outprefix)
27 27 int pageno_len =
28 28 QIntC::to_int(QUtil::uint_to_string(pages.size()).length());
29 29 int pageno = 0;
30   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
31   - iter != pages.end();
32   - ++iter) {
33   - QPDFPageObjectHelper& page(*iter);
  30 + for (auto& page: pages) {
34 31 std::string outfile =
35 32 outprefix + QUtil::int_to_string(++pageno, pageno_len) + ".pdf";
36 33 QPDF outpdf;
... ...
fuzz/qpdf_fuzzer.cc
... ... @@ -134,10 +134,7 @@ FuzzHelper::testPages()
134 134 std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages();
135 135 DiscardContents discard_contents;
136 136 int pageno = 0;
137   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
138   - iter != pages.end();
139   - ++iter) {
140   - QPDFPageObjectHelper& page(*iter);
  137 + for (auto& page: pages) {
141 138 ++pageno;
142 139 try {
143 140 page.coalesceContentStreams();
... ... @@ -150,11 +147,7 @@ FuzzHelper::testPages()
150 147  
151 148 std::vector<QPDFAnnotationObjectHelper> annotations =
152 149 afdh.getWidgetAnnotationsForPage(page);
153   - for (std::vector<QPDFAnnotationObjectHelper>::iterator annot_iter =
154   - annotations.begin();
155   - annot_iter != annotations.end();
156   - ++annot_iter) {
157   - QPDFAnnotationObjectHelper& aoh = *annot_iter;
  150 + for (auto& aoh: annotations) {
158 151 afdh.getFieldForAnnotation(aoh);
159 152 }
160 153 } catch (QPDFExc& e) {
... ... @@ -172,11 +165,7 @@ FuzzHelper::testOutlines()
172 165 queue.push_back(odh.getTopLevelOutlines());
173 166 while (!queue.empty()) {
174 167 std::vector<QPDFOutlineObjectHelper>& outlines = *(queue.begin());
175   - for (std::vector<QPDFOutlineObjectHelper>::iterator iter =
176   - outlines.begin();
177   - iter != outlines.end();
178   - ++iter) {
179   - QPDFOutlineObjectHelper& ol = *iter;
  168 + for (auto& ol: outlines) {
180 169 ol.getDestPage();
181 170 queue.push_back(ol.getKids());
182 171 }
... ...
libqpdf/QPDF.cc
... ... @@ -262,11 +262,8 @@ QPDF::~QPDF()
262 262 // have the effect of undoing any modifications that may have been
263 263 // made to any of the objects.
264 264 this->m->xref_table.clear();
265   - for (std::map<QPDFObjGen, ObjCache>::iterator iter =
266   - this->m->obj_cache.begin();
267   - iter != this->m->obj_cache.end();
268   - ++iter) {
269   - QPDFObject::ObjAccessor::releaseResolved((*iter).second.object.get());
  265 + for (auto const& iter: this->m->obj_cache) {
  266 + QPDFObject::ObjAccessor::releaseResolved(iter.second.object.get());
270 267 }
271 268 }
272 269  
... ... @@ -577,18 +574,13 @@ QPDF::reconstruct_xref(QPDFExc&amp; e)
577 574  
578 575 // Delete all references to type 1 (uncompressed) objects
579 576 std::set<QPDFObjGen> to_delete;
580   - for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter =
581   - this->m->xref_table.begin();
582   - iter != this->m->xref_table.end();
583   - ++iter) {
584   - if (((*iter).second).getType() == 1) {
585   - to_delete.insert((*iter).first);
  577 + for (auto const& iter: this->m->xref_table) {
  578 + if (iter.second.getType() == 1) {
  579 + to_delete.insert(iter.first);
586 580 }
587 581 }
588   - for (std::set<QPDFObjGen>::iterator iter = to_delete.begin();
589   - iter != to_delete.end();
590   - ++iter) {
591   - this->m->xref_table.erase(*iter);
  582 + for (auto const& iter: to_delete) {
  583 + this->m->xref_table.erase(iter);
592 584 }
593 585  
594 586 this->m->file->seek(0, SEEK_END);
... ... @@ -1015,10 +1007,7 @@ QPDF::read_xrefTable(qpdf_offset_t xref_offset)
1015 1007 }
1016 1008  
1017 1009 // Handle any deleted items now that we've read the /XRefStm.
1018   - for (std::vector<QPDFObjGen>::iterator iter = deleted_items.begin();
1019   - iter != deleted_items.end();
1020   - ++iter) {
1021   - QPDFObjGen& og = *iter;
  1010 + for (auto const& og: deleted_items) {
1022 1011 insertXrefEntry(og.getObj(), 0, 0, og.getGen());
1023 1012 }
1024 1013  
... ... @@ -1351,12 +1340,9 @@ QPDF::insertXrefEntry(int obj, int f0, qpdf_offset_t f1, int f2, bool overwrite)
1351 1340 void
1352 1341 QPDF::showXRefTable()
1353 1342 {
1354   - for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter =
1355   - this->m->xref_table.begin();
1356   - iter != this->m->xref_table.end();
1357   - ++iter) {
1358   - QPDFObjGen const& og = (*iter).first;
1359   - QPDFXRefEntry const& entry = (*iter).second;
  1343 + for (auto const& iter: this->m->xref_table) {
  1344 + QPDFObjGen const& og = iter.first;
  1345 + QPDFXRefEntry const& entry = iter.second;
1360 1346 *this->m->out_stream << og.getObj() << "/" << og.getGen() << ": ";
1361 1347 switch (entry.getType()) {
1362 1348 case 1:
... ... @@ -1390,27 +1376,19 @@ QPDF::fixDanglingReferences(bool force)
1390 1376 // Create a set of all known indirect objects including those
1391 1377 // we've previously resolved and those that we have created.
1392 1378 std::set<QPDFObjGen> to_process;
1393   - for (std::map<QPDFObjGen, ObjCache>::iterator iter =
1394   - this->m->obj_cache.begin();
1395   - iter != this->m->obj_cache.end();
1396   - ++iter) {
1397   - to_process.insert((*iter).first);
  1379 + for (auto const& iter: this->m->obj_cache) {
  1380 + to_process.insert(iter.first);
1398 1381 }
1399   - for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter =
1400   - this->m->xref_table.begin();
1401   - iter != this->m->xref_table.end();
1402   - ++iter) {
1403   - to_process.insert((*iter).first);
  1382 + for (auto const& iter: this->m->xref_table) {
  1383 + to_process.insert(iter.first);
1404 1384 }
1405 1385  
1406 1386 // For each non-scalar item to process, put it in the queue.
1407 1387 std::list<QPDFObjectHandle> queue;
1408 1388 queue.push_back(this->m->trailer);
1409   - for (std::set<QPDFObjGen>::iterator iter = to_process.begin();
1410   - iter != to_process.end();
1411   - ++iter) {
  1389 + for (auto const& iter: to_process) {
1412 1390 QPDFObjectHandle obj = QPDFObjectHandle::Factory::newIndirect(
1413   - this, (*iter).getObj(), (*iter).getGen());
  1391 + this, iter.getObj(), iter.getGen());
1414 1392 if (obj.isDictionary() || obj.isArray()) {
1415 1393 queue.push_back(obj);
1416 1394 } else if (obj.isStream()) {
... ... @@ -1428,21 +1406,15 @@ QPDF::fixDanglingReferences(bool force)
1428 1406 if (obj.isDictionary()) {
1429 1407 std::map<std::string, QPDFObjectHandle> members =
1430 1408 obj.getDictAsMap();
1431   - for (std::map<std::string, QPDFObjectHandle>::iterator iter =
1432   - members.begin();
1433   - iter != members.end();
1434   - ++iter) {
1435   - to_check.push_back((*iter).second);
  1409 + for (auto const& iter: members) {
  1410 + to_check.push_back(iter.second);
1436 1411 }
1437 1412 } else if (obj.isArray()) {
1438 1413 QPDF_Array* arr = dynamic_cast<QPDF_Array*>(
1439 1414 QPDFObjectHandle::ObjAccessor::getObject(obj).get());
1440 1415 arr->addExplicitElementsToList(to_check);
1441 1416 }
1442   - for (std::list<QPDFObjectHandle>::iterator iter = to_check.begin();
1443   - iter != to_check.end();
1444   - ++iter) {
1445   - QPDFObjectHandle sub = *iter;
  1417 + for (auto sub: to_check) {
1446 1418 if (sub.isIndirect()) {
1447 1419 if (sub.getOwningQPDF() == this) {
1448 1420 QPDFObjGen og(sub.getObjGen());
... ... @@ -1480,11 +1452,8 @@ QPDF::getAllObjects()
1480 1452 // object cache.
1481 1453 fixDanglingReferences(true);
1482 1454 std::vector<QPDFObjectHandle> result;
1483   - for (std::map<QPDFObjGen, ObjCache>::iterator iter =
1484   - this->m->obj_cache.begin();
1485   - iter != this->m->obj_cache.end();
1486   - ++iter) {
1487   - QPDFObjGen const& og = (*iter).first;
  1455 + for (auto const& iter: this->m->obj_cache) {
  1456 + QPDFObjGen const& og = iter.first;
1488 1457 result.push_back(
1489 1458 // line-break
1490 1459 QPDFObjectHandle::Factory::newIndirect(
... ... @@ -1733,12 +1702,9 @@ QPDF::recoverStreamLength(
1733 1702 QPDFObjGen this_obj(0, 0);
1734 1703  
1735 1704 // Make sure this is inside this object
1736   - for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter =
1737   - this->m->xref_table.begin();
1738   - iter != this->m->xref_table.end();
1739   - ++iter) {
1740   - QPDFObjGen const& og = (*iter).first;
1741   - QPDFXRefEntry const& entry = (*iter).second;
  1705 + for (auto const& iter: this->m->xref_table) {
  1706 + QPDFObjGen const& og = iter.first;
  1707 + QPDFXRefEntry const& entry = iter.second;
1742 1708 if (entry.getType() == 1) {
1743 1709 qpdf_offset_t obj_offset = entry.getOffset();
1744 1710 if ((obj_offset > stream_offset) &&
... ... @@ -2157,15 +2123,13 @@ QPDF::resolveObjectsInStream(int obj_stream_number)
2157 2123 // that some objects stored here might have been overridden by new
2158 2124 // objects appended to the file, so it is necessary to recheck the
2159 2125 // xref table and only cache what would actually be resolved here.
2160   - for (std::map<int, int>::iterator iter = offsets.begin();
2161   - iter != offsets.end();
2162   - ++iter) {
2163   - int obj = (*iter).first;
  2126 + for (auto const& iter: offsets) {
  2127 + int obj = iter.first;
2164 2128 QPDFObjGen og(obj, 0);
2165 2129 QPDFXRefEntry const& entry = this->m->xref_table[og];
2166 2130 if ((entry.getType() == 2) &&
2167 2131 (entry.getObjStreamNumber() == obj_stream_number)) {
2168   - int offset = (*iter).second;
  2132 + int offset = iter.second;
2169 2133 input->seek(offset, SEEK_SET);
2170 2134 QPDFObjectHandle oh = readObject(input, "", obj, 0, true);
2171 2135 this->m->obj_cache[og] = ObjCache(
... ... @@ -2317,11 +2281,7 @@ QPDF::copyForeignObject(QPDFObjectHandle foreign)
2317 2281 }
2318 2282  
2319 2283 // Copy any new objects and replace the reservations.
2320   - for (std::vector<QPDFObjectHandle>::iterator iter =
2321   - obj_copier.to_copy.begin();
2322   - iter != obj_copier.to_copy.end();
2323   - ++iter) {
2324   - QPDFObjectHandle& to_copy = *iter;
  2284 + for (auto& to_copy: obj_copier.to_copy) {
2325 2285 QPDFObjectHandle copy =
2326 2286 replaceForeignIndirectObjects(to_copy, obj_copier, true);
2327 2287 if (!to_copy.isStream()) {
... ... @@ -2365,8 +2325,7 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier&amp; obj_copier, bool top)
2365 2325 }
2366 2326 QTC::TC("qpdf", "QPDF copy indirect");
2367 2327 obj_copier.visiting.insert(foreign_og);
2368   - std::map<QPDFObjGen, QPDFObjectHandle>::iterator mapping =
2369   - obj_copier.object_map.find(foreign_og);
  2328 + auto mapping = obj_copier.object_map.find(foreign_og);
2370 2329 if (mapping == obj_copier.object_map.end()) {
2371 2330 obj_copier.to_copy.push_back(foreign);
2372 2331 QPDFObjectHandle reservation;
... ... @@ -2388,10 +2347,8 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier&amp; obj_copier, bool top)
2388 2347 } else if (foreign.isDictionary()) {
2389 2348 QTC::TC("qpdf", "QPDF reserve dictionary");
2390 2349 std::set<std::string> keys = foreign.getKeys();
2391   - for (std::set<std::string>::iterator iter = keys.begin();
2392   - iter != keys.end();
2393   - ++iter) {
2394   - reserveObjects(foreign.getKey(*iter), obj_copier, false);
  2350 + for (auto const& key: keys) {
  2351 + reserveObjects(foreign.getKey(key), obj_copier, false);
2395 2352 }
2396 2353 } else if (foreign.isStream()) {
2397 2354 QTC::TC("qpdf", "QPDF reserve stream");
... ... @@ -2412,8 +2369,7 @@ QPDF::replaceForeignIndirectObjects(
2412 2369 if ((!top) && foreign.isIndirect()) {
2413 2370 QTC::TC("qpdf", "QPDF replace indirect");
2414 2371 QPDFObjGen foreign_og(foreign.getObjGen());
2415   - std::map<QPDFObjGen, QPDFObjectHandle>::iterator mapping =
2416   - obj_copier.object_map.find(foreign_og);
  2372 + auto mapping = obj_copier.object_map.find(foreign_og);
2417 2373 if (mapping == obj_copier.object_map.end()) {
2418 2374 // This case would occur if this is a reference to a Page
2419 2375 // or Pages object that we didn't traverse into.
... ... @@ -2657,12 +2613,9 @@ QPDF::getXRefTable()
2657 2613 void
2658 2614 QPDF::getObjectStreamData(std::map<int, int>& omap)
2659 2615 {
2660   - for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter =
2661   - this->m->xref_table.begin();
2662   - iter != this->m->xref_table.end();
2663   - ++iter) {
2664   - QPDFObjGen const& og = (*iter).first;
2665   - QPDFXRefEntry const& entry = (*iter).second;
  2616 + for (auto const& iter: this->m->xref_table) {
  2617 + QPDFObjGen const& og = iter.first;
  2618 + QPDFXRefEntry const& entry = iter.second;
2666 2619 if (entry.getType() == 2) {
2667 2620 omap[og.getObj()] = entry.getObjStreamNumber();
2668 2621 }
... ...
libqpdf/QPDFAcroFormDocumentHelper.cc
... ... @@ -182,11 +182,8 @@ QPDFAcroFormDocumentHelper::getFormFields()
182 182 {
183 183 analyze();
184 184 std::vector<QPDFFormFieldObjectHelper> result;
185   - for (std::map<QPDFObjGen, std::vector<QPDFAnnotationObjectHelper>>::iterator
186   - iter = this->m->field_to_annotations.begin();
187   - iter != this->m->field_to_annotations.end();
188   - ++iter) {
189   - result.push_back(this->qpdf.getObjectByObjGen((*iter).first));
  185 + for (auto const& iter: this->m->field_to_annotations) {
  186 + result.push_back(this->qpdf.getObjectByObjGen(iter.first));
190 187 }
191 188 return result;
192 189 }
... ... @@ -299,17 +296,11 @@ QPDFAcroFormDocumentHelper::analyze()
299 296  
300 297 QPDFPageDocumentHelper dh(this->qpdf);
301 298 std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
302   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
303   - iter != pages.end();
304   - ++iter) {
305   - QPDFPageObjectHelper ph(*iter);
  299 + for (auto const& ph: pages) {
306 300 std::vector<QPDFAnnotationObjectHelper> annots =
307 301 getWidgetAnnotationsForPage(ph);
308   - for (std::vector<QPDFAnnotationObjectHelper>::iterator i2 =
309   - annots.begin();
310   - i2 != annots.end();
311   - ++i2) {
312   - QPDFObjectHandle annot((*i2).getObjectHandle());
  302 + for (auto const& iter: annots) {
  303 + QPDFObjectHandle annot(iter.getObjectHandle());
313 304 QPDFObjGen og(annot.getObjGen());
314 305 if (this->m->annotation_to_field.count(og) == 0) {
315 306 QTC::TC("qpdf", "QPDFAcroFormDocumentHelper orphaned widget");
... ... @@ -462,16 +453,10 @@ QPDFAcroFormDocumentHelper::generateAppearancesIfNeeded()
462 453  
463 454 QPDFPageDocumentHelper pdh(this->qpdf);
464 455 std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages();
465   - for (std::vector<QPDFPageObjectHelper>::iterator page_iter = pages.begin();
466   - page_iter != pages.end();
467   - ++page_iter) {
  456 + for (auto const& page: pages) {
468 457 std::vector<QPDFAnnotationObjectHelper> annotations =
469   - getWidgetAnnotationsForPage(*page_iter);
470   - for (std::vector<QPDFAnnotationObjectHelper>::iterator annot_iter =
471   - annotations.begin();
472   - annot_iter != annotations.end();
473   - ++annot_iter) {
474   - QPDFAnnotationObjectHelper& aoh = *annot_iter;
  458 + getWidgetAnnotationsForPage(page);
  459 + for (auto& aoh: annotations) {
475 460 QPDFFormFieldObjectHelper ffh = getFieldForAnnotation(aoh);
476 461 if (ffh.getFieldType() == "/Btn") {
477 462 // Rather than generating appearances for button
... ...
libqpdf/QPDFArgParser.cc
... ... @@ -294,10 +294,7 @@ QPDFArgParser::handleBashArguments()
294 294 bool last_was_backslash = false;
295 295 enum { st_top, st_squote, st_dquote } state = st_top;
296 296 std::string arg;
297   - for (std::string::iterator iter = this->m->bash_line.begin();
298   - iter != this->m->bash_line.end();
299   - ++iter) {
300   - char ch = (*iter);
  297 + for (char ch: this->m->bash_line) {
301 298 if (last_was_backslash) {
302 299 arg.append(1, ch);
303 300 last_was_backslash = false;
... ... @@ -560,13 +557,14 @@ QPDFArgParser::parseArgs()
560 557 } else if (!oe.choices.empty()) {
561 558 QTC::TC("libtests", "QPDFArgParser required choices");
562 559 message += "{";
563   - for (std::set<std::string>::iterator iter = oe.choices.begin();
564   - iter != oe.choices.end();
565   - ++iter) {
566   - if (iter != oe.choices.begin()) {
  560 + bool first = true;
  561 + for (auto const& choice: oe.choices) {
  562 + if (first) {
  563 + first = false;
  564 + } else {
567 565 message += ",";
568 566 }
569   - message += *iter;
  567 + message += choice;
570 568 }
571 569 message += "}";
572 570 } else if (!oe.parameter_name.empty()) {
... ... @@ -624,11 +622,9 @@ QPDFArgParser::addChoicesToCompletions(
624 622 {
625 623 if (option_table.count(option) != 0) {
626 624 OptionEntry& oe = option_table[option];
627   - for (std::set<std::string>::iterator iter = oe.choices.begin();
628   - iter != oe.choices.end();
629   - ++iter) {
  625 + for (auto const& choice: oe.choices) {
630 626 QTC::TC("libtests", "QPDFArgParser complete choices");
631   - this->m->completions.insert(extra_prefix + *iter);
  627 + this->m->completions.insert(extra_prefix + choice);
632 628 }
633 629 }
634 630 }
... ... @@ -714,11 +710,9 @@ QPDFArgParser::handleCompletion()
714 710 }
715 711 }
716 712 std::string prefix = extra_prefix + this->m->bash_cur;
717   - for (std::set<std::string>::iterator iter = this->m->completions.begin();
718   - iter != this->m->completions.end();
719   - ++iter) {
720   - if (prefix.empty() || ((*iter).substr(0, prefix.length()) == prefix)) {
721   - std::cout << *iter << std::endl;
  713 + for (auto const& iter: this->m->completions) {
  714 + if (prefix.empty() || (iter.substr(0, prefix.length()) == prefix)) {
  715 + std::cout << iter << std::endl;
722 716 }
723 717 }
724 718 exit(0);
... ...
libqpdf/QPDFJob.cc
... ... @@ -852,10 +852,7 @@ QPDFJob::doCheck(QPDF&amp; pdf)
852 852 std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
853 853 DiscardContents discard_contents;
854 854 int pageno = 0;
855   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
856   - iter != pages.end();
857   - ++iter) {
858   - QPDFPageObjectHelper& page(*iter);
  855 + for (auto& page: pages) {
859 856 ++pageno;
860 857 try {
861 858 page.parseContents(&discard_contents);
... ... @@ -927,10 +924,7 @@ QPDFJob::doShowPages(QPDF&amp; pdf)
927 924 std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
928 925 int pageno = 0;
929 926 auto& cout = *this->m->cout;
930   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
931   - iter != pages.end();
932   - ++iter) {
933   - QPDFPageObjectHelper& ph(*iter);
  927 + for (auto& ph: pages) {
934 928 QPDFObjectHandle page = ph.getObjectHandle();
935 929 ++pageno;
936 930  
... ... @@ -1058,12 +1052,9 @@ QPDFJob::doJSONObjects(QPDF&amp; pdf, JSON&amp; j)
1058 1052 "trailer", pdf.getTrailer().getJSON(true));
1059 1053 }
1060 1054 std::vector<QPDFObjectHandle> objects = pdf.getAllObjects();
1061   - for (std::vector<QPDFObjectHandle>::iterator iter = objects.begin();
1062   - iter != objects.end();
1063   - ++iter) {
1064   - if (all_objects || wanted_og.count((*iter).getObjGen())) {
1065   - j_objects.addDictionaryMember(
1066   - (*iter).unparse(), (*iter).getJSON(true));
  1055 + for (auto& obj: objects) {
  1056 + if (all_objects || wanted_og.count(obj.getObjGen())) {
  1057 + j_objects.addDictionaryMember(obj.unparse(), obj.getJSON(true));
1067 1058 }
1068 1059 }
1069 1060 }
... ... @@ -1106,12 +1097,10 @@ QPDFJob::doJSONPages(QPDF&amp; pdf, JSON&amp; j)
1106 1097 QPDFOutlineDocumentHelper odh(pdf);
1107 1098 pdh.pushInheritedAttributesToPage();
1108 1099 std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages();
1109   - int pageno = 0;
1110   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
1111   - iter != pages.end();
1112   - ++iter, ++pageno) {
  1100 + int pageno = -1;
  1101 + for (auto& ph: pages) {
  1102 + ++pageno;
1113 1103 JSON j_page = j_pages.addArrayElement(JSON::makeDictionary());
1114   - QPDFPageObjectHelper& ph(*iter);
1115 1104 QPDFObjectHandle page = ph.getObjectHandle();
1116 1105 j_page.addDictionaryMember("object", page.getJSON());
1117 1106 JSON j_images = j_page.addDictionaryMember("images", JSON::makeArray());
... ... @@ -1161,17 +1150,14 @@ QPDFJob::doJSONPages(QPDF&amp; pdf, JSON&amp; j)
1161 1150 j_page.addDictionaryMember("outlines", JSON::makeArray());
1162 1151 std::vector<QPDFOutlineObjectHelper> outlines =
1163 1152 odh.getOutlinesForPage(page.getObjGen());
1164   - for (std::vector<QPDFOutlineObjectHelper>::iterator oiter =
1165   - outlines.begin();
1166   - oiter != outlines.end();
1167   - ++oiter) {
  1153 + for (auto& oiter: outlines) {
1168 1154 JSON j_outline = j_outlines.addArrayElement(JSON::makeDictionary());
1169 1155 j_outline.addDictionaryMember(
1170   - "object", (*oiter).getObjectHandle().getJSON());
  1156 + "object", oiter.getObjectHandle().getJSON());
1171 1157 j_outline.addDictionaryMember(
1172   - "title", JSON::makeString((*oiter).getTitle()));
  1158 + "title", JSON::makeString(oiter.getTitle()));
1173 1159 j_outline.addDictionaryMember(
1174   - "dest", (*oiter).getDest().getJSON(true));
  1160 + "dest", oiter.getDest().getJSON(true));
1175 1161 }
1176 1162 j_page.addDictionaryMember("pageposfrom1", JSON::makeInt(1 + pageno));
1177 1163 }
... ... @@ -1188,10 +1174,8 @@ QPDFJob::doJSONPageLabels(QPDF&amp; pdf, JSON&amp; j)
1188 1174 std::vector<QPDFObjectHandle> labels;
1189 1175 pldh.getLabelsForPageRange(
1190 1176 0, QIntC::to_int(pages.size()) - 1, 0, labels);
1191   - for (std::vector<QPDFObjectHandle>::iterator iter = labels.begin();
1192   - iter != labels.end();
1193   - ++iter) {
1194   - std::vector<QPDFObjectHandle>::iterator next = iter;
  1177 + for (auto iter = labels.begin(); iter != labels.end(); ++iter) {
  1178 + auto next = iter;
1195 1179 ++next;
1196 1180 if (next == labels.end()) {
1197 1181 // This can't happen, so ignore it. This could only
... ... @@ -1213,10 +1197,7 @@ add_outlines_to_json(
1213 1197 JSON& j,
1214 1198 std::map<QPDFObjGen, int>& page_numbers)
1215 1199 {
1216   - for (std::vector<QPDFOutlineObjectHelper>::iterator iter = outlines.begin();
1217   - iter != outlines.end();
1218   - ++iter) {
1219   - QPDFOutlineObjectHelper& ol = *iter;
  1200 + for (auto& ol: outlines) {
1220 1201 JSON jo = j.addArrayElement(JSON::makeDictionary());
1221 1202 jo.addDictionaryMember("object", ol.getObjectHandle().getJSON());
1222 1203 jo.addDictionaryMember("title", JSON::makeString(ol.getTitle()));
... ... @@ -1243,10 +1224,8 @@ QPDFJob::doJSONOutlines(QPDF&amp; pdf, JSON&amp; j)
1243 1224 QPDFPageDocumentHelper dh(pdf);
1244 1225 std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
1245 1226 int n = 0;
1246   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
1247   - iter != pages.end();
1248   - ++iter) {
1249   - QPDFObjectHandle oh = (*iter).getObjectHandle();
  1227 + for (auto const& ph: pages) {
  1228 + QPDFObjectHandle oh = ph.getObjectHandle();
1250 1229 page_numbers[oh.getObjGen()] = ++n;
1251 1230 }
1252 1231  
... ... @@ -1268,17 +1247,11 @@ QPDFJob::doJSONAcroform(QPDF&amp; pdf, JSON&amp; j)
1268 1247 QPDFPageDocumentHelper pdh(pdf);
1269 1248 std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages();
1270 1249 int pagepos1 = 0;
1271   - for (std::vector<QPDFPageObjectHelper>::iterator page_iter = pages.begin();
1272   - page_iter != pages.end();
1273   - ++page_iter) {
  1250 + for (auto const& page: pages) {
1274 1251 ++pagepos1;
1275 1252 std::vector<QPDFAnnotationObjectHelper> annotations =
1276   - afdh.getWidgetAnnotationsForPage(*page_iter);
1277   - for (std::vector<QPDFAnnotationObjectHelper>::iterator annot_iter =
1278   - annotations.begin();
1279   - annot_iter != annotations.end();
1280   - ++annot_iter) {
1281   - QPDFAnnotationObjectHelper& aoh = *annot_iter;
  1253 + afdh.getWidgetAnnotationsForPage(page);
  1254 + for (auto& aoh: annotations) {
1282 1255 QPDFFormFieldObjectHelper ffh = afdh.getFieldForAnnotation(aoh);
1283 1256 JSON j_field = j_fields.addArrayElement(JSON::makeDictionary());
1284 1257 j_field.addDictionaryMember(
... ... @@ -1314,10 +1287,8 @@ QPDFJob::doJSONAcroform(QPDF&amp; pdf, JSON&amp; j)
1314 1287 JSON j_choices =
1315 1288 j_field.addDictionaryMember("choices", JSON::makeArray());
1316 1289 std::vector<std::string> choices = ffh.getChoices();
1317   - for (std::vector<std::string>::iterator iter = choices.begin();
1318   - iter != choices.end();
1319   - ++iter) {
1320   - j_choices.addArrayElement(JSON::makeString(*iter));
  1290 + for (auto const& choice: choices) {
  1291 + j_choices.addArrayElement(JSON::makeString(choice));
1321 1292 }
1322 1293 JSON j_annot = j_field.addDictionaryMember(
1323 1294 "annotation", JSON::makeDictionary());
... ... @@ -1688,10 +1659,8 @@ Please report this as a bug at\n\
1688 1659 https://github.com/qpdf/qpdf/issues/new\n\
1689 1660 ideally with the file that caused the error and the output below. Thanks!\n\
1690 1661 \n";
1691   - for (std::list<std::string>::iterator iter = errors.begin();
1692   - iter != errors.end();
1693   - ++iter) {
1694   - *(this->m->cerr) << (*iter) << std::endl;
  1662 + for (auto const& error: errors) {
  1663 + *(this->m->cerr) << error << std::endl;
1695 1664 }
1696 1665 }
1697 1666  
... ... @@ -1816,10 +1785,8 @@ QPDFJob::doProcess(
1816 1785 QUtil::possible_repaired_encodings(password);
1817 1786 // Represent to char const*, as required by the QPDF class.
1818 1787 std::vector<char const*> passwords;
1819   - for (std::vector<std::string>::iterator iter = passwords_str.begin();
1820   - iter != passwords_str.end();
1821   - ++iter) {
1822   - passwords.push_back((*iter).c_str());
  1788 + for (auto const& iter: passwords_str) {
  1789 + passwords.push_back(iter.c_str());
1823 1790 }
1824 1791 // We always try the supplied password first because it is the
1825 1792 // first string returned by possible_repaired_encodings. If there
... ... @@ -1835,13 +1802,11 @@ QPDFJob::doProcess(
1835 1802 // attempt, which, like the first attempt, will be with the
1836 1803 // supplied password.
1837 1804 bool warned = false;
1838   - for (std::vector<char const*>::iterator iter = passwords.begin();
1839   - iter != passwords.end();
1840   - ++iter) {
  1805 + for (auto iter = passwords.begin(); iter != passwords.end(); ++iter) {
1841 1806 try {
1842 1807 return doProcessOnce(fn, *iter, empty, used_for_input);
1843 1808 } catch (QPDFExc& e) {
1844   - std::vector<char const*>::iterator next = iter;
  1809 + auto next = iter;
1845 1810 ++next;
1846 1811 if (next == passwords.end()) {
1847 1812 throw e;
... ... @@ -1961,10 +1926,7 @@ QPDFJob::doUnderOverlayForPage(
1961 1926 resources = dest_page.getObjectHandle().replaceKeyAndGet(
1962 1927 "/Resources", QPDFObjectHandle::newDictionary());
1963 1928 }
1964   - for (std::vector<int>::iterator iter = pagenos[pageno].begin();
1965   - iter != pagenos[pageno].end();
1966   - ++iter) {
1967   - int from_pageno = *iter;
  1929 + for (int from_pageno: pagenos[pageno]) {
1968 1930 doIfVerbose([&](std::ostream& cout, std::string const& prefix) {
1969 1931 cout << " " << uo.which << " " << from_pageno << std::endl;
1970 1932 });
... ... @@ -2017,15 +1979,14 @@ QPDFJob::getUOPagenos(
2017 1979 size_t idx = 0;
2018 1980 size_t from_size = uo.from_pagenos.size();
2019 1981 size_t repeat_size = uo.repeat_pagenos.size();
2020   - for (std::vector<int>::iterator iter = uo.to_pagenos.begin();
2021   - iter != uo.to_pagenos.end();
2022   - ++iter, ++idx) {
  1982 + for (int to_pageno: uo.to_pagenos) {
2023 1983 if (idx < from_size) {
2024   - pagenos[*iter].push_back(uo.from_pagenos.at(idx));
  1984 + pagenos[to_pageno].push_back(uo.from_pagenos.at(idx));
2025 1985 } else if (repeat_size) {
2026   - pagenos[*iter].push_back(
  1986 + pagenos[to_pageno].push_back(
2027 1987 uo.repeat_pagenos.at((idx - from_size) % repeat_size));
2028 1988 }
  1989 + ++idx;
2029 1990 }
2030 1991 }
2031 1992  
... ... @@ -2206,21 +2167,15 @@ QPDFJob::handleTransformations(QPDF&amp; pdf)
2206 2167 if (m->externalize_inline_images ||
2207 2168 (m->optimize_images && (!m->keep_inline_images))) {
2208 2169 std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
2209   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
2210   - iter != pages.end();
2211   - ++iter) {
2212   - QPDFPageObjectHelper& ph(*iter);
  2170 + for (auto& ph: pages) {
2213 2171 ph.externalizeInlineImages(m->ii_min_bytes);
2214 2172 }
2215 2173 }
2216 2174 if (m->optimize_images) {
2217 2175 int pageno = 0;
2218 2176 std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
2219   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
2220   - iter != pages.end();
2221   - ++iter) {
  2177 + for (auto& ph: pages) {
2222 2178 ++pageno;
2223   - QPDFPageObjectHelper& ph(*iter);
2224 2179 QPDFObjectHandle page = ph.getObjectHandle();
2225 2180 std::map<std::string, QPDFObjectHandle> images = ph.getImages();
2226 2181 for (auto& iter2: images) {
... ... @@ -2260,10 +2215,8 @@ QPDFJob::handleTransformations(QPDF&amp; pdf)
2260 2215 }
2261 2216 if (m->coalesce_contents) {
2262 2217 std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
2263   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
2264   - iter != pages.end();
2265   - ++iter) {
2266   - (*iter).coalesceContentStreams();
  2218 + for (auto& page: pages) {
  2219 + page.coalesceContentStreams();
2267 2220 }
2268 2221 }
2269 2222 if (m->flatten_rotation) {
... ... @@ -2428,10 +2381,7 @@ QPDFJob::handlePageSpecs(
2428 2381 // actual pages.
2429 2382  
2430 2383 // Handle "." as a shortcut for the input file
2431   - for (std::vector<QPDFJob::PageSpec>::iterator iter = m->page_specs.begin();
2432   - iter != m->page_specs.end();
2433   - ++iter) {
2434   - QPDFJob::PageSpec& page_spec = *iter;
  2384 + for (auto& page_spec: m->page_specs) {
2435 2385 if (page_spec.filename == ".") {
2436 2386 page_spec.filename = m->infilename.get();
2437 2387 }
... ... @@ -2463,10 +2413,7 @@ QPDFJob::handlePageSpecs(
2463 2413 page_spec_qpdfs[m->infilename.get()] = &pdf;
2464 2414 std::vector<QPDFPageData> parsed_specs;
2465 2415 std::map<unsigned long long, std::set<QPDFObjGen>> copied_pages;
2466   - for (std::vector<QPDFJob::PageSpec>::iterator iter = m->page_specs.begin();
2467   - iter != m->page_specs.end();
2468   - ++iter) {
2469   - QPDFJob::PageSpec& page_spec = *iter;
  2416 + for (auto& page_spec: m->page_specs) {
2470 2417 if (page_spec_qpdfs.count(page_spec.filename) == 0) {
2471 2418 // Open the PDF file and store the QPDF object. Throw a
2472 2419 // std::shared_ptr to the qpdf into a heap so that it
... ... @@ -2523,17 +2470,14 @@ QPDFJob::handlePageSpecs(
2523 2470  
2524 2471 std::map<unsigned long long, bool> remove_unreferenced;
2525 2472 if (m->remove_unreferenced_page_resources != QPDFJob::re_no) {
2526   - for (std::map<std::string, QPDF*>::iterator iter =
2527   - page_spec_qpdfs.begin();
2528   - iter != page_spec_qpdfs.end();
2529   - ++iter) {
2530   - std::string const& filename = (*iter).first;
  2473 + for (auto const& iter: page_spec_qpdfs) {
  2474 + std::string const& filename = iter.first;
2531 2475 ClosedFileInputSource* cis = 0;
2532 2476 if (page_spec_cfis.count(filename)) {
2533 2477 cis = page_spec_cfis[filename];
2534 2478 cis->stayOpen(true);
2535 2479 }
2536   - QPDF& other(*((*iter).second));
  2480 + QPDF& other(*(iter.second));
2537 2481 auto other_uuid = other.getUniqueId();
2538 2482 if (remove_unreferenced.count(other_uuid) == 0) {
2539 2483 remove_unreferenced[other_uuid] =
... ... @@ -2556,10 +2500,8 @@ QPDFJob::handlePageSpecs(
2556 2500 });
2557 2501 QPDFPageDocumentHelper dh(pdf);
2558 2502 std::vector<QPDFPageObjectHelper> orig_pages = dh.getAllPages();
2559   - for (std::vector<QPDFPageObjectHelper>::iterator iter = orig_pages.begin();
2560   - iter != orig_pages.end();
2561   - ++iter) {
2562   - dh.removePage(*iter);
  2503 + for (auto const& page: orig_pages) {
  2504 + dh.removePage(page);
2563 2505 }
2564 2506  
2565 2507 if (m->collate && (parsed_specs.size() > 1)) {
... ... @@ -2601,10 +2543,7 @@ QPDFJob::handlePageSpecs(
2601 2543 afdh_map;
2602 2544 auto this_afdh = get_afdh_for_qpdf(afdh_map, &pdf);
2603 2545 std::set<QPDFObjGen> referenced_fields;
2604   - for (std::vector<QPDFPageData>::iterator iter = parsed_specs.begin();
2605   - iter != parsed_specs.end();
2606   - ++iter) {
2607   - QPDFPageData& page_data = *iter;
  2546 + for (auto& page_data: parsed_specs) {
2608 2547 ClosedFileInputSource* cis = 0;
2609 2548 if (page_spec_cfis.count(page_data.filename)) {
2610 2549 cis = page_spec_cfis[page_data.filename];
... ... @@ -2619,14 +2558,12 @@ QPDFJob::handlePageSpecs(
2619 2558 cout << prefix << ": adding pages from " << page_data.filename
2620 2559 << std::endl;
2621 2560 });
2622   - for (std::vector<int>::iterator pageno_iter =
2623   - page_data.selected_pages.begin();
2624   - pageno_iter != page_data.selected_pages.end();
2625   - ++pageno_iter, ++out_pageno) {
  2561 + for (auto pageno_iter: page_data.selected_pages) {
2626 2562 // Pages are specified from 1 but numbered from 0 in the
2627 2563 // vector
2628   - int pageno = *pageno_iter - 1;
2629   - pldh.getLabelsForPageRange(pageno, pageno, out_pageno, new_labels);
  2564 + int pageno = pageno_iter - 1;
  2565 + pldh.getLabelsForPageRange(
  2566 + pageno, pageno, out_pageno++, new_labels);
2630 2567 QPDFPageObjectHelper to_copy =
2631 2568 page_data.orig_pages.at(QIntC::to_size(pageno));
2632 2569 QPDFObjGen to_copy_og = to_copy.getObjectHandle().getObjGen();
... ... @@ -2748,19 +2685,14 @@ QPDFJob::handleRotations(QPDF&amp; pdf)
2748 2685 QPDFPageDocumentHelper dh(pdf);
2749 2686 std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
2750 2687 int npages = QIntC::to_int(pages.size());
2751   - for (std::map<std::string, QPDFJob::RotationSpec>::iterator iter =
2752   - m->rotations.begin();
2753   - iter != m->rotations.end();
2754   - ++iter) {
2755   - std::string const& range = (*iter).first;
2756   - QPDFJob::RotationSpec const& rspec = (*iter).second;
  2688 + for (auto const& iter: m->rotations) {
  2689 + std::string const& range = iter.first;
  2690 + QPDFJob::RotationSpec const& rspec = iter.second;
2757 2691 // range has been previously validated
2758 2692 std::vector<int> to_rotate =
2759 2693 QUtil::parse_numrange(range.c_str(), npages);
2760   - for (std::vector<int>::iterator i2 = to_rotate.begin();
2761   - i2 != to_rotate.end();
2762   - ++i2) {
2763   - int pageno = *i2 - 1;
  2694 + for (int pageno_iter: to_rotate) {
  2695 + int pageno = pageno_iter - 1;
2764 2696 if ((pageno >= 0) && (pageno < npages)) {
2765 2697 pages.at(QIntC::to_size(pageno))
2766 2698 .rotatePage(rspec.angle, rspec.relative);
... ...
libqpdf/QPDFObjectHandle.cc
... ... @@ -1244,17 +1244,12 @@ QPDFObjectHandle::getResourceNames()
1244 1244 return result;
1245 1245 }
1246 1246 std::set<std::string> keys = getKeys();
1247   - for (std::set<std::string>::iterator iter = keys.begin();
1248   - iter != keys.end();
1249   - ++iter) {
1250   - std::string const& key = *iter;
  1247 + for (auto const& key: keys) {
1251 1248 QPDFObjectHandle val = getKey(key);
1252 1249 if (val.isDictionary()) {
1253 1250 std::set<std::string> val_keys = val.getKeys();
1254   - for (std::set<std::string>::iterator i2 = val_keys.begin();
1255   - i2 != val_keys.end();
1256   - ++i2) {
1257   - result.insert(*i2);
  1251 + for (auto const& val_key: val_keys) {
  1252 + result.insert(val_key);
1258 1253 }
1259 1254 }
1260 1255 }
... ... @@ -1620,10 +1615,7 @@ QPDFObjectHandle::arrayOrStreamToStreamArray(
1620 1615 }
1621 1616  
1622 1617 bool first = true;
1623   - for (std::vector<QPDFObjectHandle>::iterator iter = result.begin();
1624   - iter != result.end();
1625   - ++iter) {
1626   - QPDFObjectHandle item = *iter;
  1618 + for (auto const& item: result) {
1627 1619 std::string og = QUtil::int_to_string(item.getObjectID()) + " " +
1628 1620 QUtil::int_to_string(item.getGeneration());
1629 1621 if (first) {
... ... @@ -1660,11 +1652,9 @@ QPDFObjectHandle::addPageContents(QPDFObjectHandle new_contents, bool first)
1660 1652 QTC::TC("qpdf", "QPDFObjectHandle prepend page contents");
1661 1653 content_streams.push_back(new_contents);
1662 1654 }
1663   - for (std::vector<QPDFObjectHandle>::iterator iter = orig_contents.begin();
1664   - iter != orig_contents.end();
1665   - ++iter) {
  1655 + for (auto const& iter: orig_contents) {
1666 1656 QTC::TC("qpdf", "QPDFObjectHandle append page contents");
1667   - content_streams.push_back(*iter);
  1657 + content_streams.push_back(iter);
1668 1658 }
1669 1659 if (!first) {
1670 1660 content_streams.push_back(new_contents);
... ... @@ -1865,14 +1855,11 @@ QPDFObjectHandle::pipeContentStreams(
1865 1855 arrayOrStreamToStreamArray(description, all_description);
1866 1856 bool need_newline = false;
1867 1857 Pl_Buffer buf("concatenated content stream buffer");
1868   - for (std::vector<QPDFObjectHandle>::iterator iter = streams.begin();
1869   - iter != streams.end();
1870   - ++iter) {
  1858 + for (auto stream: streams) {
1871 1859 if (need_newline) {
1872 1860 buf.write(QUtil::unsigned_char_pointer("\n"), 1);
1873 1861 }
1874 1862 LastChar lc(&buf);
1875   - QPDFObjectHandle stream = *iter;
1876 1863 std::string og = QUtil::int_to_string(stream.getObjectID()) + " " +
1877 1864 QUtil::int_to_string(stream.getGeneration());
1878 1865 std::string w_description = "content stream object " + og;
... ... @@ -2920,13 +2907,11 @@ QPDFObjectHandle::copyObject(
2920 2907 QTC::TC("qpdf", "QPDFObjectHandle clone dictionary");
2921 2908 std::set<std::string> keys = getKeys();
2922 2909 std::map<std::string, QPDFObjectHandle> items;
2923   - for (std::set<std::string>::iterator iter = keys.begin();
2924   - iter != keys.end();
2925   - ++iter) {
2926   - items[*iter] = getKey(*iter);
  2910 + for (auto const& key: keys) {
  2911 + items[key] = getKey(key);
2927 2912 if ((!first_level_only) &&
2928   - (cross_indirect || (!items[*iter].isIndirect()))) {
2929   - items[*iter].copyObject(
  2913 + (cross_indirect || (!items[key].isIndirect()))) {
  2914 + items[key].copyObject(
2930 2915 visited, cross_indirect, first_level_only, stop_at_streams);
2931 2916 }
2932 2917 }
... ...
libqpdf/QPDFPageDocumentHelper.cc
... ... @@ -14,10 +14,8 @@ QPDFPageDocumentHelper::getAllPages()
14 14 {
15 15 std::vector<QPDFObjectHandle> const& pages_v = this->qpdf.getAllPages();
16 16 std::vector<QPDFPageObjectHelper> pages;
17   - for (std::vector<QPDFObjectHandle>::const_iterator iter = pages_v.begin();
18   - iter != pages_v.end();
19   - ++iter) {
20   - pages.push_back(QPDFPageObjectHelper(*iter));
  17 + for (auto const& iter: pages_v) {
  18 + pages.push_back(QPDFPageObjectHelper(iter));
21 19 }
22 20 return pages;
23 21 }
... ... @@ -32,10 +30,8 @@ void
32 30 QPDFPageDocumentHelper::removeUnreferencedResources()
33 31 {
34 32 std::vector<QPDFPageObjectHelper> pages = getAllPages();
35   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
36   - iter != pages.end();
37   - ++iter) {
38   - (*iter).removeUnreferencedResources();
  33 + for (auto& ph: pages) {
  34 + ph.removeUnreferencedResources();
39 35 }
40 36 }
41 37  
... ... @@ -71,10 +67,7 @@ QPDFPageDocumentHelper::flattenAnnotations(
71 67 " so form fields will not be flattened");
72 68 }
73 69 std::vector<QPDFPageObjectHelper> pages = getAllPages();
74   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
75   - iter != pages.end();
76   - ++iter) {
77   - QPDFPageObjectHelper ph(*iter);
  70 + for (auto& ph: pages) {
78 71 QPDFObjectHandle resources = ph.getAttribute("/Resources", true);
79 72 if (!resources.isDictionary()) {
80 73 // This should never happen and is not exercised in the
... ... @@ -107,11 +100,7 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage(
107 100 rotate = rotate_obj.getIntValueAsInt();
108 101 }
109 102 int next_fx = 1;
110   - for (std::vector<QPDFAnnotationObjectHelper>::iterator iter =
111   - annots.begin();
112   - iter != annots.end();
113   - ++iter) {
114   - QPDFAnnotationObjectHelper& aoh(*iter);
  103 + for (auto& aoh: annots) {
115 104 QPDFObjectHandle as = aoh.getAppearanceStream("/N");
116 105 bool is_widget = (aoh.getSubtype() == "/Widget");
117 106 bool process = true;
... ...
libqpdf/QPDFTokenizer.cc
... ... @@ -568,10 +568,7 @@ QPDFTokenizer::findEI(std::shared_ptr&lt;InputSource&gt; input)
568 568 bool found_non_printable = false;
569 569 bool found_other = false;
570 570 std::string value = t.getValue();
571   - for (std::string::iterator iter = value.begin();
572   - iter != value.end();
573   - ++iter) {
574   - char ch = *iter;
  571 + for (char ch: value) {
575 572 if (((ch >= 'a') && (ch <= 'z')) ||
576 573 ((ch >= 'A') && (ch <= 'Z')) || (ch == '*')) {
577 574 // Treat '*' as alpha since there are valid
... ...
libqpdf/QPDFWriter.cc
... ... @@ -755,10 +755,8 @@ QPDFWriter::setEncryptionParameters(
755 755  
756 756 int P = 0;
757 757 // Create the complement of P, then invert.
758   - for (std::set<int>::iterator iter = bits_to_clear.begin();
759   - iter != bits_to_clear.end();
760   - ++iter) {
761   - P |= (1 << ((*iter) - 1));
  758 + for (int b: bits_to_clear) {
  759 + P |= (1 << (b - 1));
762 760 }
763 761 P = ~P;
764 762  
... ... @@ -1277,11 +1275,8 @@ QPDFWriter::assignCompressedObjectNumbers(QPDFObjGen const&amp; og)
1277 1275  
1278 1276 // Reserve numbers for the objects that belong to this object
1279 1277 // stream.
1280   - for (std::set<QPDFObjGen>::iterator iter =
1281   - this->m->object_stream_to_objects[objid].begin();
1282   - iter != this->m->object_stream_to_objects[objid].end();
1283   - ++iter) {
1284   - this->m->obj_renumber[*iter] = this->m->next_objid++;
  1278 + for (auto const& iter: this->m->object_stream_to_objects[objid]) {
  1279 + this->m->obj_renumber[iter] = this->m->next_objid++;
1285 1280 }
1286 1281 }
1287 1282  
... ... @@ -1353,11 +1348,9 @@ QPDFWriter::enqueueObject(QPDFObjectHandle object)
1353 1348 }
1354 1349 } else if (object.isDictionary()) {
1355 1350 std::set<std::string> keys = object.getKeys();
1356   - for (std::set<std::string>::iterator iter = keys.begin();
1357   - iter != keys.end();
1358   - ++iter) {
  1351 + for (auto const& key: keys) {
1359 1352 if (!this->m->linearized) {
1360   - enqueueObject(object.getKey(*iter));
  1353 + enqueueObject(object.getKey(key));
1361 1354 }
1362 1355 }
1363 1356 } else {
... ... @@ -1401,10 +1394,7 @@ QPDFWriter::writeTrailer(
1401 1394 writeString(QUtil::int_to_string(size));
1402 1395 } else {
1403 1396 std::set<std::string> keys = trailer.getKeys();
1404   - for (std::set<std::string>::iterator iter = keys.begin();
1405   - iter != keys.end();
1406   - ++iter) {
1407   - std::string const& key = *iter;
  1397 + for (auto const& key: keys) {
1408 1398 writeStringQDF(" ");
1409 1399 writeStringNoQDF(" ");
1410 1400 writeString(QPDF_Name::normalizeName(key));
... ... @@ -1758,11 +1748,7 @@ QPDFWriter::unparseObject(
1758 1748 writeStringQDF("\n");
1759 1749  
1760 1750 std::set<std::string> keys = object.getKeys();
1761   - for (std::set<std::string>::iterator iter = keys.begin();
1762   - iter != keys.end();
1763   - ++iter) {
1764   - std::string const& key = *iter;
1765   -
  1751 + for (auto const& key: keys) {
1766 1752 writeStringQDF(indent);
1767 1753 writeStringQDF(" ");
1768 1754 writeStringNoQDF(" ");
... ... @@ -1930,12 +1916,9 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object)
1930 1916 pushDiscardFilter(pp_ostream);
1931 1917 } else {
1932 1918 // Adjust offsets to skip over comment before first object
1933   -
1934 1919 first = offsets.at(0);
1935   - for (std::vector<qpdf_offset_t>::iterator iter = offsets.begin();
1936   - iter != offsets.end();
1937   - ++iter) {
1938   - *iter -= first;
  1920 + for (auto& iter: offsets) {
  1921 + iter -= first;
1939 1922 }
1940 1923  
1941 1924 // Take one pass at writing pairs of numbers so we can get
... ... @@ -1960,12 +1943,9 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object)
1960 1943 writeObjectStreamOffsets(offsets, first_obj);
1961 1944 }
1962 1945  
1963   - int count = 0;
1964   - for (std::set<QPDFObjGen>::iterator iter =
1965   - this->m->object_stream_to_objects[old_id].begin();
1966   - iter != this->m->object_stream_to_objects[old_id].end();
1967   - ++iter, ++count) {
1968   - QPDFObjGen obj = *iter;
  1946 + int count = -1;
  1947 + for (auto const& obj: this->m->object_stream_to_objects[old_id]) {
  1948 + ++count;
1969 1949 int new_obj = this->m->obj_renumber[obj];
1970 1950 if (first_obj == -1) {
1971 1951 first_obj = new_obj;
... ... @@ -2197,10 +2177,8 @@ QPDFWriter::generateID()
2197 2177 if (trailer.hasKey("/Info")) {
2198 2178 QPDFObjectHandle info = trailer.getKey("/Info");
2199 2179 std::set<std::string> keys = info.getKeys();
2200   - for (std::set<std::string>::iterator iter = keys.begin();
2201   - iter != keys.end();
2202   - ++iter) {
2203   - QPDFObjectHandle obj = info.getKey(*iter);
  2180 + for (auto const& key: keys) {
  2181 + QPDFObjectHandle obj = info.getKey(key);
2204 2182 if (obj.isString()) {
2205 2183 seed += " ";
2206 2184 seed += obj.getStringValue();
... ... @@ -2235,10 +2213,7 @@ QPDFWriter::initializeSpecialStreams()
2235 2213 // normalizing.
2236 2214 std::vector<QPDFObjectHandle> pages = this->m->pdf.getAllPages();
2237 2215 int num = 0;
2238   - for (std::vector<QPDFObjectHandle>::iterator iter = pages.begin();
2239   - iter != pages.end();
2240   - ++iter) {
2241   - QPDFObjectHandle& page = *iter;
  2216 + for (auto& page: pages) {
2242 2217 this->m->page_object_to_seq[page.getObjGen()] = ++num;
2243 2218 QPDFObjectHandle contents = page.getKey("/Contents");
2244 2219 std::vector<QPDFObjGen> contents_objects;
... ... @@ -2322,9 +2297,7 @@ QPDFWriter::generateObjectStreams()
2322 2297 }
2323 2298 unsigned int n = 0;
2324 2299 int cur_ostream = 0;
2325   - for (std::vector<QPDFObjGen>::const_iterator iter = eligible.begin();
2326   - iter != eligible.end();
2327   - ++iter) {
  2300 + for (auto const& iter: eligible) {
2328 2301 if ((n % n_per) == 0) {
2329 2302 if (n > 0) {
2330 2303 QTC::TC("qpdf", "QPDFWriter generate >1 ostream");
... ... @@ -2339,7 +2312,7 @@ QPDFWriter::generateObjectStreams()
2339 2312 this->m->pdf.makeIndirectObject(QPDFObjectHandle::newNull())
2340 2313 .getObjectID();
2341 2314 }
2342   - this->m->object_to_object_stream[*iter] = cur_ostream;
  2315 + this->m->object_to_object_stream[iter] = cur_ostream;
2343 2316 ++n;
2344 2317 }
2345 2318 }
... ... @@ -2495,10 +2468,7 @@ QPDFWriter::doWriteSetup()
2495 2468 if (this->m->linearized) {
2496 2469 // Page dictionaries are not allowed to be compressed objects.
2497 2470 std::vector<QPDFObjectHandle> pages = this->m->pdf.getAllPages();
2498   - for (std::vector<QPDFObjectHandle>::iterator iter = pages.begin();
2499   - iter != pages.end();
2500   - ++iter) {
2501   - QPDFObjectHandle& page = *iter;
  2471 + for (auto& page: pages) {
2502 2472 QPDFObjGen og = page.getObjGen();
2503 2473 if (this->m->object_to_object_stream.count(og)) {
2504 2474 QTC::TC("qpdf", "QPDFWriter uncompressing page dictionary");
... ... @@ -2521,12 +2491,9 @@ QPDFWriter::doWriteSetup()
2521 2491 }
2522 2492  
2523 2493 // Generate reverse mapping from object stream to objects
2524   - for (std::map<QPDFObjGen, int>::iterator iter =
2525   - this->m->object_to_object_stream.begin();
2526   - iter != this->m->object_to_object_stream.end();
2527   - ++iter) {
2528   - QPDFObjGen obj = (*iter).first;
2529   - int stream = (*iter).second;
  2494 + for (auto const& iter: this->m->object_to_object_stream) {
  2495 + QPDFObjGen const& obj = iter.first;
  2496 + int stream = iter.second;
2530 2497 this->m->object_stream_to_objects[stream].insert(obj);
2531 2498 this->m->max_ostream_index = std::max(
2532 2499 this->m->max_ostream_index,
... ... @@ -2591,11 +2558,9 @@ QPDFWriter::getWrittenXRefTable()
2591 2558 {
2592 2559 std::map<QPDFObjGen, QPDFXRefEntry> result;
2593 2560  
2594   - for (std::map<int, QPDFXRefEntry>::iterator iter = this->m->xref.begin();
2595   - iter != this->m->xref.end();
2596   - ++iter) {
2597   - if (iter->first != 0 && iter->second.getType() != 0) {
2598   - result[QPDFObjGen(iter->first, 0)] = iter->second;
  2561 + for (auto const& iter: this->m->xref) {
  2562 + if (iter.first != 0 && iter.second.getType() != 0) {
  2563 + result[QPDFObjGen(iter.first, 0)] = iter.second;
2599 2564 }
2600 2565 }
2601 2566  
... ... @@ -2605,10 +2570,8 @@ QPDFWriter::getWrittenXRefTable()
2605 2570 void
2606 2571 QPDFWriter::enqueuePart(std::vector<QPDFObjectHandle>& part)
2607 2572 {
2608   - for (std::vector<QPDFObjectHandle>::iterator iter = part.begin();
2609   - iter != part.end();
2610   - ++iter) {
2611   - enqueueObject(*iter);
  2573 + for (auto const& oh: part) {
  2574 + enqueueObject(oh);
2612 2575 }
2613 2576 }
2614 2577  
... ... @@ -2617,14 +2580,11 @@ QPDFWriter::writeEncryptionDictionary()
2617 2580 {
2618 2581 this->m->encryption_dict_objid = openObject(this->m->encryption_dict_objid);
2619 2582 writeString("<<");
2620   - for (std::map<std::string, std::string>::iterator iter =
2621   - this->m->encryption_dictionary.begin();
2622   - iter != this->m->encryption_dictionary.end();
2623   - ++iter) {
  2583 + for (auto const& iter: this->m->encryption_dictionary) {
2624 2584 writeString(" ");
2625   - writeString((*iter).first);
  2585 + writeString(iter.first);
2626 2586 writeString(" ");
2627   - writeString((*iter).second);
  2587 + writeString(iter.second);
2628 2588 }
2629 2589 writeString(" >>");
2630 2590 closeObject(this->m->encryption_dict_objid);
... ... @@ -2937,10 +2897,8 @@ QPDFWriter::discardGeneration(
2937 2897 // maps for QPDF that throw away generation numbers.
2938 2898  
2939 2899 out.clear();
2940   - for (std::map<QPDFObjGen, int>::const_iterator iter = in.begin();
2941   - iter != in.end();
2942   - ++iter) {
2943   - if (out.count((*iter).first.getObj())) {
  2900 + for (auto const& iter: in) {
  2901 + if (out.count(iter.first.getObj())) {
2944 2902 throw std::runtime_error(
2945 2903 "QPDF cannot currently linearize files that contain"
2946 2904 " multiple objects with the same object ID and different"
... ... @@ -2950,7 +2908,7 @@ QPDFWriter::discardGeneration(
2950 2908 " linearizing, and then linearize the result of that"
2951 2909 " conversion.");
2952 2910 }
2953   - out[(*iter).first.getObj()] = (*iter).second;
  2911 + out[iter.first.getObj()] = iter.second;
2954 2912 }
2955 2913 }
2956 2914  
... ... @@ -3020,10 +2978,8 @@ QPDFWriter::writeLinearized()
3020 2978 // Assign numbers to all compressed objects in the second half.
3021 2979 std::vector<QPDFObjectHandle>* vecs2[] = {&part7, &part8, &part9};
3022 2980 for (int i = 0; i < 3; ++i) {
3023   - for (std::vector<QPDFObjectHandle>::iterator iter = (*vecs2[i]).begin();
3024   - iter != (*vecs2[i]).end();
3025   - ++iter) {
3026   - assignCompressedObjectNumbers((*iter).getObjGen());
  2981 + for (auto const& oh: *vecs2[i]) {
  2982 + assignCompressedObjectNumbers(oh.getObjGen());
3027 2983 }
3028 2984 }
3029 2985 int second_half_end = this->m->next_objid - 1;
... ... @@ -3049,10 +3005,8 @@ QPDFWriter::writeLinearized()
3049 3005 // Assign numbers to all compressed objects in the first half
3050 3006 std::vector<QPDFObjectHandle>* vecs1[] = {&part4, &part6};
3051 3007 for (int i = 0; i < 2; ++i) {
3052   - for (std::vector<QPDFObjectHandle>::iterator iter = (*vecs1[i]).begin();
3053   - iter != (*vecs1[i]).end();
3054   - ++iter) {
3055   - assignCompressedObjectNumbers((*iter).getObjGen());
  3008 + for (auto const& oh: *vecs1[i]) {
  3009 + assignCompressedObjectNumbers(oh.getObjGen());
3056 3010 }
3057 3011 }
3058 3012 int first_half_end = this->m->next_objid - 1;
... ... @@ -3240,11 +3194,7 @@ QPDFWriter::writeLinearized()
3240 3194  
3241 3195 // Parts 4 through 9
3242 3196  
3243   - for (std::list<QPDFObjectHandle>::iterator iter =
3244   - this->m->object_queue.begin();
3245   - iter != this->m->object_queue.end();
3246   - ++iter) {
3247   - QPDFObjectHandle cur_object = (*iter);
  3197 + for (auto const& cur_object: this->m->object_queue) {
3248 3198 if (cur_object.getObjectID() == part6_end_marker) {
3249 3199 first_half_max_obj_offset = this->m->pipeline->getCount();
3250 3200 }
... ... @@ -3390,11 +3340,8 @@ QPDFWriter::enqueueObjectsStandard()
3390 3340 {
3391 3341 if (this->m->preserve_unreferenced_objects) {
3392 3342 QTC::TC("qpdf", "QPDFWriter preserve unreferenced standard");
3393   - std::vector<QPDFObjectHandle> all = this->m->pdf.getAllObjects();
3394   - for (std::vector<QPDFObjectHandle>::iterator iter = all.begin();
3395   - iter != all.end();
3396   - ++iter) {
3397   - enqueueObject(*iter);
  3343 + for (auto const& oh: this->m->pdf.getAllObjects()) {
  3344 + enqueueObject(oh);
3398 3345 }
3399 3346 }
3400 3347  
... ... @@ -3407,10 +3354,8 @@ QPDFWriter::enqueueObjectsStandard()
3407 3354 // Root is already there, so enqueuing it a second time is a
3408 3355 // no-op.
3409 3356 std::set<std::string> keys = trailer.getKeys();
3410   - for (std::set<std::string>::iterator iter = keys.begin();
3411   - iter != keys.end();
3412   - ++iter) {
3413   - enqueueObject(trailer.getKey(*iter));
  3357 + for (auto const& key: keys) {
  3358 + enqueueObject(trailer.getKey(key));
3414 3359 }
3415 3360 }
3416 3361  
... ... @@ -3424,23 +3369,18 @@ QPDFWriter::enqueueObjectsPCLm()
3424 3369  
3425 3370 // enqueue all pages first
3426 3371 std::vector<QPDFObjectHandle> all = this->m->pdf.getAllPages();
3427   - for (std::vector<QPDFObjectHandle>::iterator iter = all.begin();
3428   - iter != all.end();
3429   - ++iter) {
  3372 + for (auto& page: all) {
3430 3373 // enqueue page
3431   - enqueueObject(*iter);
  3374 + enqueueObject(page);
3432 3375  
3433 3376 // enqueue page contents stream
3434   - enqueueObject((*iter).getKey("/Contents"));
  3377 + enqueueObject(page.getKey("/Contents"));
3435 3378  
3436 3379 // enqueue all the strips for each page
3437   - QPDFObjectHandle strips =
3438   - (*iter).getKey("/Resources").getKey("/XObject");
  3380 + QPDFObjectHandle strips = page.getKey("/Resources").getKey("/XObject");
3439 3381 std::set<std::string> keys = strips.getKeys();
3440   - for (std::set<std::string>::iterator image = keys.begin();
3441   - image != keys.end();
3442   - ++image) {
3443   - enqueueObject(strips.getKey(*image));
  3382 + for (auto const& image: keys) {
  3383 + enqueueObject(strips.getKey(image));
3444 3384 enqueueObject(QPDFObjectHandle::newStream(
3445 3385 &this->m->pdf, image_transform_content));
3446 3386 }
... ...
libqpdf/QPDF_Array.cc
... ... @@ -99,10 +99,8 @@ void
99 99 QPDF_Array::setFromVector(std::vector<QPDFObjectHandle> const& v)
100 100 {
101 101 this->elements = SparseOHArray();
102   - for (std::vector<QPDFObjectHandle>::const_iterator iter = v.begin();
103   - iter != v.end();
104   - ++iter) {
105   - this->elements.append(*iter);
  102 + for (auto const& iter: v) {
  103 + this->elements.append(iter);
106 104 }
107 105 }
108 106  
... ...
libqpdf/QPDF_Dictionary.cc
... ... @@ -12,11 +12,8 @@ QPDF_Dictionary::QPDF_Dictionary(
12 12 void
13 13 QPDF_Dictionary::releaseResolved()
14 14 {
15   - for (std::map<std::string, QPDFObjectHandle>::iterator iter =
16   - this->items.begin();
17   - iter != this->items.end();
18   - ++iter) {
19   - QPDFObjectHandle::ReleaseResolver::releaseResolved((*iter).second);
  15 + for (auto& iter: this->items) {
  16 + QPDFObjectHandle::ReleaseResolver::releaseResolved(iter.second);
20 17 }
21 18 }
22 19  
... ...
libqpdf/QPDF_encryption.cc
... ... @@ -945,11 +945,7 @@ QPDF::initializeEncryption()
945 945  
946 946 if ((V == 4) || (V == 5)) {
947 947 QPDFObjectHandle CF = encryption_dict.getKey("/CF");
948   - std::set<std::string> keys = CF.getKeys();
949   - for (std::set<std::string>::iterator iter = keys.begin();
950   - iter != keys.end();
951   - ++iter) {
952   - std::string const& filter = *iter;
  948 + for (auto const& filter: CF.getKeys()) {
953 949 QPDFObjectHandle cdict = CF.getKey(filter);
954 950 if (cdict.isDictionary()) {
955 951 encryption_method_e method = e_none;
... ...
libqpdf/QPDF_linearization.cc
... ... @@ -583,12 +583,9 @@ QPDF::checkLinearizationInternal()
583 583 // uncompressed.
584 584 { // local scope
585 585 std::map<int, int> object_stream_data;
586   - for (std::map<QPDFObjGen, QPDFXRefEntry>::const_iterator iter =
587   - this->m->xref_table.begin();
588   - iter != this->m->xref_table.end();
589   - ++iter) {
590   - QPDFObjGen const& og = (*iter).first;
591   - QPDFXRefEntry const& entry = (*iter).second;
  586 + for (auto const& iter: this->m->xref_table) {
  587 + QPDFObjGen const& og = iter.first;
  588 + QPDFXRefEntry const& entry = iter.second;
592 589 if (entry.getType() == 2) {
593 590 object_stream_data[og.getObj()] = entry.getObjStreamNumber();
594 591 }
... ... @@ -613,10 +610,8 @@ QPDF::checkLinearizationInternal()
613 610 }
614 611 qpdf_offset_t min_E = -1;
615 612 qpdf_offset_t max_E = -1;
616   - for (std::vector<QPDFObjectHandle>::iterator iter = this->m->part6.begin();
617   - iter != this->m->part6.end();
618   - ++iter) {
619   - QPDFObjGen og((*iter).getObjGen());
  613 + for (auto const& oh: this->m->part6) {
  614 + QPDFObjGen og(oh.getObjGen());
620 615 if (this->m->obj_cache.count(og) == 0) {
621 616 // All objects have to have been dereferenced to be classified.
622 617 throw std::logic_error("linearization part6 object not in cache");
... ... @@ -651,19 +646,15 @@ QPDF::checkLinearizationInternal()
651 646 // code.
652 647 if (!errors.empty()) {
653 648 result = false;
654   - for (std::list<std::string>::iterator iter = errors.begin();
655   - iter != errors.end();
656   - ++iter) {
657   - *this->m->err_stream << "WARNING: " << (*iter) << std::endl;
  649 + for (auto const& error: errors) {
  650 + *this->m->err_stream << "WARNING: " << error << std::endl;
658 651 }
659 652 }
660 653  
661 654 if (!warnings.empty()) {
662 655 result = false;
663   - for (std::list<std::string>::iterator iter = warnings.begin();
664   - iter != warnings.end();
665   - ++iter) {
666   - *this->m->err_stream << "WARNING: " << (*iter) << std::endl;
  656 + for (auto const& warning: warnings) {
  657 + *this->m->err_stream << "WARNING: " << warning << std::endl;
667 658 }
668 659 }
669 660  
... ... @@ -678,10 +669,7 @@ QPDF::maxEnd(ObjUser const&amp; ou)
678 669 }
679 670 std::set<QPDFObjGen> const& ogs = this->m->obj_user_to_objects[ou];
680 671 qpdf_offset_t end = 0;
681   - for (std::set<QPDFObjGen>::const_iterator iter = ogs.begin();
682   - iter != ogs.end();
683   - ++iter) {
684   - QPDFObjGen const& og = *iter;
  672 + for (auto const& og: ogs) {
685 673 if (this->m->obj_cache.count(og) == 0) {
686 674 stopOnError("unknown object referenced in object user table");
687 675 }
... ... @@ -855,28 +843,24 @@ QPDF::checkHPageOffset(
855 843 computed_shared.insert(obj);
856 844 }
857 845  
858   - for (std::set<int>::iterator iter = hint_shared.begin();
859   - iter != hint_shared.end();
860   - ++iter) {
861   - if (!computed_shared.count(*iter)) {
  846 + for (int iter: hint_shared) {
  847 + if (!computed_shared.count(iter)) {
862 848 // pdlin puts thumbnails here even though it shouldn't
863 849 warnings.push_back(
864 850 "page " + QUtil::int_to_string(pageno) +
865   - ": shared object " + QUtil::int_to_string(*iter) +
  851 + ": shared object " + QUtil::int_to_string(iter) +
866 852 ": in hint table but not computed list");
867 853 }
868 854 }
869 855  
870   - for (std::set<int>::iterator iter = computed_shared.begin();
871   - iter != computed_shared.end();
872   - ++iter) {
873   - if (!hint_shared.count(*iter)) {
  856 + for (int iter: computed_shared) {
  857 + if (!hint_shared.count(iter)) {
874 858 // Acrobat does not put some things including at least
875 859 // built-in fonts and procsets here, at least in some
876 860 // cases.
877 861 warnings.push_back(
878 862 "page " + QUtil::int_to_string(pageno) +
879   - ": shared object " + QUtil::int_to_string(*iter) +
  863 + ": shared object " + QUtil::int_to_string(iter) +
880 864 ": in computed list but not hint table");
881 865 }
882 866 }
... ... @@ -1290,13 +1274,9 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1290 1274 std::set<QPDFObjGen> lc_outlines;
1291 1275 std::set<QPDFObjGen> lc_root;
1292 1276  
1293   - for (std::map<QPDFObjGen, std::set<ObjUser>>::iterator oiter =
1294   - this->m->object_to_obj_users.begin();
1295   - oiter != this->m->object_to_obj_users.end();
1296   - ++oiter) {
1297   - QPDFObjGen const& og = (*oiter).first;
1298   -
1299   - std::set<ObjUser>& ous = (*oiter).second;
  1277 + for (auto& oiter: this->m->object_to_obj_users) {
  1278 + QPDFObjGen const& og = oiter.first;
  1279 + std::set<ObjUser>& ous = oiter.second;
1300 1280  
1301 1281 bool in_open_document = false;
1302 1282 bool in_first_page = false;
... ... @@ -1306,10 +1286,7 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1306 1286 bool in_outlines = false;
1307 1287 bool is_root = false;
1308 1288  
1309   - for (std::set<ObjUser>::iterator uiter = ous.begin();
1310   - uiter != ous.end();
1311   - ++uiter) {
1312   - ObjUser const& ou = *uiter;
  1289 + for (auto const& ou: ous) {
1313 1290 switch (ou.ou_type) {
1314 1291 case ObjUser::ou_trailer_key:
1315 1292 if (ou.key == "/Encrypt") {
... ... @@ -1396,11 +1373,8 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1396 1373 { // local scope
1397 1374 // Map all page objects to the containing object stream. This
1398 1375 // should be a no-op in a properly linearized file.
1399   - std::vector<QPDFObjectHandle> t = getAllPages();
1400   - for (std::vector<QPDFObjectHandle>::iterator iter = t.begin();
1401   - iter != t.end();
1402   - ++iter) {
1403   - pages.push_back(getUncompressedObject(*iter, object_stream_data));
  1376 + for (auto oh: getAllPages()) {
  1377 + pages.push_back(getUncompressedObject(oh, object_stream_data));
1404 1378 }
1405 1379 }
1406 1380 int npages = toI(pages.size());
... ... @@ -1427,10 +1401,8 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1427 1401 " calculating linearization data");
1428 1402 }
1429 1403 this->m->part4.push_back(objGenToIndirect(*(lc_root.begin())));
1430   - for (std::set<QPDFObjGen>::iterator iter = lc_open_document.begin();
1431   - iter != lc_open_document.end();
1432   - ++iter) {
1433   - this->m->part4.push_back(objGenToIndirect(*iter));
  1404 + for (auto const& og: lc_open_document) {
  1405 + this->m->part4.push_back(objGenToIndirect(og));
1434 1406 }
1435 1407  
1436 1408 // Part 6: first page objects. Note: implementation note 124
... ... @@ -1458,16 +1430,12 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1458 1430 // groups private and shared objects contiguously for the sake of
1459 1431 // hint tables.
1460 1432  
1461   - for (std::set<QPDFObjGen>::iterator iter = lc_first_page_private.begin();
1462   - iter != lc_first_page_private.end();
1463   - ++iter) {
1464   - this->m->part6.push_back(objGenToIndirect(*iter));
  1433 + for (auto const& og: lc_first_page_private) {
  1434 + this->m->part6.push_back(objGenToIndirect(og));
1465 1435 }
1466 1436  
1467   - for (std::set<QPDFObjGen>::iterator iter = lc_first_page_shared.begin();
1468   - iter != lc_first_page_shared.end();
1469   - ++iter) {
1470   - this->m->part6.push_back(objGenToIndirect(*iter));
  1437 + for (auto const& og: lc_first_page_shared) {
  1438 + this->m->part6.push_back(objGenToIndirect(og));
1471 1439 }
1472 1440  
1473 1441 // Place the outline dictionary if it goes in the first page section.
... ... @@ -1511,10 +1479,7 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1511 1479 " calculating linearization data");
1512 1480 }
1513 1481 std::set<QPDFObjGen> ogs = this->m->obj_user_to_objects[ou];
1514   - for (std::set<QPDFObjGen>::iterator iter = ogs.begin();
1515   - iter != ogs.end();
1516   - ++iter) {
1517   - QPDFObjGen const& og = (*iter);
  1482 + for (auto const& og: ogs) {
1518 1483 if (lc_other_page_private.count(og)) {
1519 1484 lc_other_page_private.erase(og);
1520 1485 this->m->part7.push_back(objGenToIndirect(og));
... ... @@ -1533,10 +1498,8 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1533 1498 // Part 8: other pages' shared objects
1534 1499  
1535 1500 // Order is unimportant.
1536   - for (std::set<QPDFObjGen>::iterator iter = lc_other_page_shared.begin();
1537   - iter != lc_other_page_shared.end();
1538   - ++iter) {
1539   - this->m->part8.push_back(objGenToIndirect(*iter));
  1501 + for (auto const& og: lc_other_page_shared) {
  1502 + this->m->part8.push_back(objGenToIndirect(og));
1540 1503 }
1541 1504  
1542 1505 // Part 9: other objects
... ... @@ -1555,10 +1518,7 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1555 1518 stopOnError("found empty pages tree while"
1556 1519 " calculating linearization data");
1557 1520 }
1558   - for (std::set<QPDFObjGen>::iterator iter = pages_ogs.begin();
1559   - iter != pages_ogs.end();
1560   - ++iter) {
1561   - QPDFObjGen const& og = *iter;
  1521 + for (auto const& og: pages_ogs) {
1562 1522 if (lc_other.count(og)) {
1563 1523 lc_other.erase(og);
1564 1524 this->m->part9.push_back(objGenToIndirect(og));
... ... @@ -1588,10 +1548,7 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1588 1548 std::set<QPDFObjGen>& ogs =
1589 1549 this->m
1590 1550 ->obj_user_to_objects[ObjUser(ObjUser::ou_thumb, toI(i))];
1591   - for (std::set<QPDFObjGen>::iterator iter = ogs.begin();
1592   - iter != ogs.end();
1593   - ++iter) {
1594   - QPDFObjGen const& og = *iter;
  1551 + for (auto const& og: ogs) {
1595 1552 if (lc_thumbnail_private.count(og)) {
1596 1553 lc_thumbnail_private.erase(og);
1597 1554 this->m->part9.push_back(objGenToIndirect(og));
... ... @@ -1606,10 +1563,8 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1606 1563 }
1607 1564  
1608 1565 // Place shared thumbnail objects
1609   - for (std::set<QPDFObjGen>::iterator iter = lc_thumbnail_shared.begin();
1610   - iter != lc_thumbnail_shared.end();
1611   - ++iter) {
1612   - this->m->part9.push_back(objGenToIndirect(*iter));
  1566 + for (auto const& og: lc_thumbnail_shared) {
  1567 + this->m->part9.push_back(objGenToIndirect(og));
1613 1568 }
1614 1569  
1615 1570 // Place outlines unless in first page
... ... @@ -1618,10 +1573,8 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1618 1573 }
1619 1574  
1620 1575 // Place all remaining objects
1621   - for (std::set<QPDFObjGen>::iterator iter = lc_other.begin();
1622   - iter != lc_other.end();
1623   - ++iter) {
1624   - this->m->part9.push_back(objGenToIndirect(*iter));
  1576 + for (auto const& og: lc_other) {
  1577 + this->m->part9.push_back(objGenToIndirect(og));
1625 1578 }
1626 1579  
1627 1580 // Make sure we got everything exactly once.
... ... @@ -1658,10 +1611,7 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1658 1611  
1659 1612 std::vector<CHSharedObjectEntry>& shared =
1660 1613 this->m->c_shared_object_data.entries;
1661   - for (std::vector<QPDFObjectHandle>::iterator iter = this->m->part6.begin();
1662   - iter != this->m->part6.end();
1663   - ++iter) {
1664   - QPDFObjectHandle& oh = *iter;
  1614 + for (auto& oh: this->m->part6) {
1665 1615 int obj = oh.getObjectID();
1666 1616 obj_to_index[obj] = toI(shared.size());
1667 1617 shared.push_back(CHSharedObjectEntry(obj));
... ... @@ -1670,11 +1620,7 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1670 1620 if (!this->m->part8.empty()) {
1671 1621 this->m->c_shared_object_data.first_shared_obj =
1672 1622 this->m->part8.at(0).getObjectID();
1673   - for (std::vector<QPDFObjectHandle>::iterator iter =
1674   - this->m->part8.begin();
1675   - iter != this->m->part8.end();
1676   - ++iter) {
1677   - QPDFObjectHandle& oh = *iter;
  1623 + for (auto& oh: this->m->part8) {
1678 1624 int obj = oh.getObjectID();
1679 1625 obj_to_index[obj] = toI(shared.size());
1680 1626 shared.push_back(CHSharedObjectEntry(obj));
... ... @@ -1696,10 +1642,7 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1696 1642 " calculating linearization data");
1697 1643 }
1698 1644 std::set<QPDFObjGen> const& ogs = this->m->obj_user_to_objects[ou];
1699   - for (std::set<QPDFObjGen>::const_iterator iter = ogs.begin();
1700   - iter != ogs.end();
1701   - ++iter) {
1702   - QPDFObjGen const& og = *iter;
  1645 + for (auto const& og: ogs) {
1703 1646 if ((this->m->object_to_obj_users[og].size() > 1) &&
1704 1647 (obj_to_index.count(og.getObj()) > 0)) {
1705 1648 int idx = obj_to_index[og.getObj()];
... ... @@ -1733,10 +1676,8 @@ QPDF::pushOutlinesToPart(
1733 1676 this->m->c_outline_data.nobjects = 1;
1734 1677 lc_outlines.erase(outlines_og);
1735 1678 part.push_back(outlines);
1736   - for (std::set<QPDFObjGen>::iterator iter = lc_outlines.begin();
1737   - iter != lc_outlines.end();
1738   - ++iter) {
1739   - part.push_back(objGenToIndirect(*iter));
  1679 + for (auto const& og: lc_outlines) {
  1680 + part.push_back(objGenToIndirect(og));
1740 1681 ++this->m->c_outline_data.nobjects;
1741 1682 }
1742 1683 }
... ...
libqpdf/QPDF_optimization.cc
... ... @@ -90,10 +90,7 @@ QPDF::optimize(
90 90  
91 91 // Traverse document-level items
92 92 std::set<std::string> keys = this->m->trailer.getKeys();
93   - for (std::set<std::string>::iterator iter = keys.begin();
94   - iter != keys.end();
95   - ++iter) {
96   - std::string const& key = *iter;
  93 + for (auto const& key: keys) {
97 94 if (key == "/Root") {
98 95 // handled separately
99 96 } else {
... ... @@ -105,17 +102,13 @@ QPDF::optimize(
105 102 }
106 103  
107 104 keys = root.getKeys();
108   - for (std::set<std::string>::iterator iter = keys.begin();
109   - iter != keys.end();
110   - ++iter) {
  105 + for (auto const& key: keys) {
111 106 // Technically, /I keys from /Thread dictionaries are supposed
112 107 // to be handled separately, but we are going to disregard
113 108 // that specification for now. There is loads of evidence
114 109 // that pdlin and Acrobat both disregard things like this from
115 110 // time to time, so this is almost certain not to cause any
116 111 // problems.
117   -
118   - std::string const& key = *iter;
119 112 updateObjectMaps(
120 113 ObjUser(ObjUser::ou_root_key, key),
121 114 root.getKey(key),
... ... @@ -212,10 +205,7 @@ QPDF::pushInheritedAttributesToPageInternal(
212 205  
213 206 std::set<std::string> inheritable_keys;
214 207 std::set<std::string> keys = cur_pages.getKeys();
215   - for (std::set<std::string>::iterator iter = keys.begin();
216   - iter != keys.end();
217   - ++iter) {
218   - std::string const& key = *iter;
  208 + for (auto const& key: keys) {
219 209 if ((key == "/MediaBox") || (key == "/CropBox") ||
220 210 (key == "/Resources") || (key == "/Rotate")) {
221 211 if (!allow_changes) {
... ... @@ -298,11 +288,7 @@ QPDF::pushInheritedAttributesToPageInternal(
298 288  
299 289 if (!inheritable_keys.empty()) {
300 290 QTC::TC("qpdf", "QPDF opt inheritable keys");
301   - for (std::set<std::string>::iterator iter =
302   - inheritable_keys.begin();
303   - iter != inheritable_keys.end();
304   - ++iter) {
305   - std::string const& key = (*iter);
  291 + for (auto const& key: inheritable_keys) {
306 292 key_ancestors[key].pop_back();
307 293 if (key_ancestors[key].empty()) {
308 294 QTC::TC("qpdf", "QPDF opt erase empty key ancestor");
... ... @@ -315,14 +301,11 @@ QPDF::pushInheritedAttributesToPageInternal(
315 301 } else if (type == "/Page") {
316 302 // Add all available inheritable attributes not present in
317 303 // this object to this object.
318   - for (std::map<std::string, std::vector<QPDFObjectHandle>>::iterator
319   - iter = key_ancestors.begin();
320   - iter != key_ancestors.end();
321   - ++iter) {
322   - std::string const& key = (*iter).first;
  304 + for (auto const& iter: key_ancestors) {
  305 + std::string const& key = iter.first;
323 306 if (!cur_pages.hasKey(key)) {
324 307 QTC::TC("qpdf", "QPDF opt resource inherited");
325   - cur_pages.replaceKey(key, (*iter).second.back());
  308 + cur_pages.replaceKey(key, iter.second.back());
326 309 } else {
327 310 QTC::TC("qpdf", "QPDF opt page resource hides ancestor");
328 311 }
... ... @@ -404,10 +387,7 @@ QPDF::updateObjectMapsInternal(
404 387 }
405 388  
406 389 std::set<std::string> keys = dict.getKeys();
407   - for (std::set<std::string>::iterator iter = keys.begin();
408   - iter != keys.end();
409   - ++iter) {
410   - std::string const& key = *iter;
  390 + for (auto const& key: keys) {
411 391 if (is_page_node && (key == "/Thumb")) {
412 392 // Traverse page thumbnail dictionaries as a special
413 393 // case.
... ... @@ -454,42 +434,28 @@ QPDF::filterCompressedObjects(std::map&lt;int, int&gt; const&amp; object_stream_data)
454 434 std::map<ObjUser, std::set<QPDFObjGen>> t_obj_user_to_objects;
455 435 std::map<QPDFObjGen, std::set<ObjUser>> t_object_to_obj_users;
456 436  
457   - for (std::map<ObjUser, std::set<QPDFObjGen>>::iterator i1 =
458   - this->m->obj_user_to_objects.begin();
459   - i1 != this->m->obj_user_to_objects.end();
460   - ++i1) {
461   - ObjUser const& ou = (*i1).first;
462   - std::set<QPDFObjGen> const& objects = (*i1).second;
463   - for (std::set<QPDFObjGen>::const_iterator i2 = objects.begin();
464   - i2 != objects.end();
465   - ++i2) {
466   - QPDFObjGen const& og = (*i2);
467   - std::map<int, int>::const_iterator i3 =
468   - object_stream_data.find(og.getObj());
469   - if (i3 == object_stream_data.end()) {
  437 + for (auto const& i1: this->m->obj_user_to_objects) {
  438 + ObjUser const& ou = i1.first;
  439 + std::set<QPDFObjGen> const& objects = i1.second;
  440 + for (auto const& og: objects) {
  441 + auto i2 = object_stream_data.find(og.getObj());
  442 + if (i2 == object_stream_data.end()) {
470 443 t_obj_user_to_objects[ou].insert(og);
471 444 } else {
472   - t_obj_user_to_objects[ou].insert(QPDFObjGen((*i3).second, 0));
  445 + t_obj_user_to_objects[ou].insert(QPDFObjGen(i2->second, 0));
473 446 }
474 447 }
475 448 }
476 449  
477   - for (std::map<QPDFObjGen, std::set<ObjUser>>::iterator i1 =
478   - this->m->object_to_obj_users.begin();
479   - i1 != this->m->object_to_obj_users.end();
480   - ++i1) {
481   - QPDFObjGen const& og = (*i1).first;
482   - std::set<ObjUser> const& objusers = (*i1).second;
483   - for (std::set<ObjUser>::const_iterator i2 = objusers.begin();
484   - i2 != objusers.end();
485   - ++i2) {
486   - ObjUser const& ou = (*i2);
487   - std::map<int, int>::const_iterator i3 =
488   - object_stream_data.find(og.getObj());
489   - if (i3 == object_stream_data.end()) {
  450 + for (auto const& i1: this->m->object_to_obj_users) {
  451 + QPDFObjGen const& og = i1.first;
  452 + std::set<ObjUser> const& objusers = i1.second;
  453 + for (auto const& ou: objusers) {
  454 + auto i2 = object_stream_data.find(og.getObj());
  455 + if (i2 == object_stream_data.end()) {
490 456 t_object_to_obj_users[og].insert(ou);
491 457 } else {
492   - t_object_to_obj_users[QPDFObjGen((*i3).second, 0)].insert(ou);
  458 + t_object_to_obj_users[QPDFObjGen(i2->second, 0)].insert(ou);
493 459 }
494 460 }
495 461 }
... ...
libqpdf/QPDF_pages.cc
... ... @@ -319,8 +319,7 @@ int
319 319 QPDF::findPage(QPDFObjGen const& og)
320 320 {
321 321 flattenPagesTree();
322   - std::map<QPDFObjGen, int>::iterator it =
323   - this->m->pageobj_to_pages_pos.find(og);
  322 + auto it = this->m->pageobj_to_pages_pos.find(og);
324 323 if (it == this->m->pageobj_to_pages_pos.end()) {
325 324 QTC::TC("qpdf", "QPDF_pages findPage not found");
326 325 setLastObjectDescription("page object", og.getObj(), og.getGen());
... ...
libqpdf/QUtil.cc
... ... @@ -786,14 +786,13 @@ QUtil::hex_decode(std::string const&amp; input)
786 786 {
787 787 std::string result;
788 788 size_t pos = 0;
789   - for (std::string::const_iterator p = input.begin(); p != input.end(); ++p) {
790   - char ch = *p;
  789 + for (auto ch: input) {
791 790 bool skip = false;
792   - if ((*p >= 'A') && (*p <= 'F')) {
  791 + if ((ch >= 'A') && (ch <= 'F')) {
793 792 ch = QIntC::to_char(ch - 'A' + 10);
794   - } else if ((*p >= 'a') && (*p <= 'f')) {
  793 + } else if ((ch >= 'a') && (ch <= 'f')) {
795 794 ch = QIntC::to_char(ch - 'a' + 10);
796   - } else if ((*p >= '0') && (*p <= '9')) {
  795 + } else if ((ch >= '0') && (ch <= '9')) {
797 796 ch = QIntC::to_char(ch - '0');
798 797 } else {
799 798 skip = true;
... ... @@ -1921,12 +1920,10 @@ QUtil::possible_repaired_encodings(std::string supplied)
1921 1920 // De-duplicate
1922 1921 std::vector<std::string> t;
1923 1922 std::set<std::string> seen;
1924   - for (std::vector<std::string>::iterator iter = result.begin();
1925   - iter != result.end();
1926   - ++iter) {
1927   - if (!seen.count(*iter)) {
1928   - seen.insert(*iter);
1929   - t.push_back(*iter);
  1923 + for (auto const& iter: result) {
  1924 + if (!seen.count(iter)) {
  1925 + seen.insert(iter);
  1926 + t.push_back(iter);
1930 1927 }
1931 1928 }
1932 1929 return t;
... ...
libtests/json.cc
... ... @@ -130,10 +130,8 @@ check_schema(
130 130 std::list<std::string> errors;
131 131 std::cout << "--- " << description << std::endl;
132 132 assert(exp == obj.checkSchema(schema, flags, errors));
133   - for (std::list<std::string>::iterator iter = errors.begin();
134   - iter != errors.end();
135   - ++iter) {
136   - std::cout << *iter << std::endl;
  133 + for (auto const& error: errors) {
  134 + std::cout << error << std::endl;
137 135 }
138 136 std::cout << "---" << std::endl;
139 137 }
... ...
libtests/numrange.cc
... ... @@ -9,10 +9,8 @@ test_numrange(char const* range)
9 9 } else {
10 10 std::vector<int> result = QUtil::parse_numrange(range, 15);
11 11 std::cout << "numeric range " << range << " ->";
12   - for (std::vector<int>::iterator iter = result.begin();
13   - iter != result.end();
14   - ++iter) {
15   - std::cout << " " << *iter;
  12 + for (int i: result) {
  13 + std::cout << " " << i;
16 14 }
17 15 std::cout << std::endl;
18 16 }
... ...
libtests/qutil.cc
... ... @@ -229,12 +229,10 @@ print_utf8(unsigned long val)
229 229 // Emacs has trouble with utf-8 encoding files with characters
230 230 // outside the 16-bit portion, so just show the character
231 231 // values.
232   - for (std::string::iterator iter = result.begin(); iter != result.end();
233   - ++iter) {
  232 + for (auto const& ch: result) {
234 233 std::cout << " "
235 234 << QUtil::int_to_string_base(
236   - static_cast<int>(
237   - static_cast<unsigned char>(*iter)),
  235 + static_cast<int>(static_cast<unsigned char>(ch)),
238 236 16,
239 237 2);
240 238 }
... ... @@ -289,11 +287,10 @@ print_utf16(unsigned long val)
289 287 {
290 288 std::string result = QUtil::toUTF16(val);
291 289 std::cout << "0x" << QUtil::uint_to_string_base(val, 16) << " ->";
292   - for (std::string::iterator iter = result.begin(); iter != result.end();
293   - ++iter) {
  290 + for (auto const& ch: result) {
294 291 std::cout << " "
295 292 << QUtil::int_to_string_base(
296   - static_cast<int>(static_cast<unsigned char>(*iter)),
  293 + static_cast<int>(static_cast<unsigned char>(ch)),
297 294 16,
298 295 2);
299 296 }
... ... @@ -516,10 +513,8 @@ void
516 513 read_from_file_test()
517 514 {
518 515 std::list<std::string> lines = QUtil::read_lines_from_file("other-file");
519   - for (std::list<std::string>::iterator iter = lines.begin();
520   - iter != lines.end();
521   - ++iter) {
522   - std::cout << *iter << std::endl;
  516 + for (auto const& line: lines) {
  517 + std::cout << line << std::endl;
523 518 }
524 519 // Test the other versions and make sure we get the same results
525 520 {
... ...
qpdf/test_driver.cc
... ... @@ -383,14 +383,9 @@ test_5(QPDF&amp; pdf, char const* arg2)
383 383 QPDFPageDocumentHelper dh(pdf);
384 384 std::vector<QPDFPageObjectHelper> pages = dh.getAllPages();
385 385 int pageno = 0;
386   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
387   - iter != pages.end();
388   - ++iter) {
389   - QPDFPageObjectHelper& page(*iter);
  386 + for (auto& page: pages) {
390 387 ++pageno;
391   -
392 388 std::cout << "page " << pageno << ":" << std::endl;
393   -
394 389 std::cout << " images:" << std::endl;
395 390 std::map<std::string, QPDFObjectHandle> images = page.getImages();
396 391 for (auto const& iter2: images) {
... ... @@ -714,19 +709,19 @@ test_15(QPDF&amp; pdf, char const* arg2)
714 709 // a shallow copy.
715 710 QPDFObjectHandle page_template = pages.at(0);
716 711 std::vector<QPDFObjectHandle> new_pages;
717   - for (std::vector<QPDFObjectHandle>::iterator iter = contents.begin();
718   - iter != contents.end();
719   - ++iter) {
  712 + bool first = true;
  713 + for (auto const& iter: contents) {
720 714 // We will retain indirect object references to other
721 715 // indirect objects other than page content.
722 716 QPDFObjectHandle page = page_template.shallowCopy();
723   - page.replaceKey("/Contents", *iter);
724   - if (iter == contents.begin()) {
  717 + page.replaceKey("/Contents", iter);
  718 + if (first) {
725 719 // leave direct
726   - new_pages.push_back(page);
  720 + first = false;
727 721 } else {
728   - new_pages.push_back(pdf.makeIndirectObject(page));
  722 + page = pdf.makeIndirectObject(page);
729 723 }
  724 + new_pages.push_back(page);
730 725 }
731 726  
732 727 // Now insert the pages
... ... @@ -1269,14 +1264,11 @@ test_35(QPDF&amp; pdf, char const* arg2)
1269 1264 attachments[filename] = stream.getStreamData();
1270 1265 }
1271 1266 }
1272   - for (std::map<std::string, std::shared_ptr<Buffer>>::iterator iter =
1273   - attachments.begin();
1274   - iter != attachments.end();
1275   - ++iter) {
1276   - std::string const& filename = (*iter).first;
  1267 + for (auto const& iter: attachments) {
  1268 + std::string const& filename = iter.first;
1277 1269 std::string data = std::string(
1278   - reinterpret_cast<char const*>((*iter).second->getBuffer()),
1279   - (*iter).second->getSize());
  1270 + reinterpret_cast<char const*>(iter.second->getBuffer()),
  1271 + iter.second->getSize());
1280 1272 bool is_binary = false;
1281 1273 for (size_t i = 0; i < data.size(); ++i) {
1282 1274 if ((data.at(i) < 0) || (data.at(i) > 126)) {
... ... @@ -1338,10 +1330,7 @@ test_37(QPDF&amp; pdf, char const* arg2)
1338 1330 // Parse content streams of all pages
1339 1331 std::vector<QPDFPageObjectHelper> pages =
1340 1332 QPDFPageDocumentHelper(pdf).getAllPages();
1341   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
1342   - iter != pages.end();
1343   - ++iter) {
1344   - QPDFPageObjectHelper& page(*iter);
  1333 + for (auto& page: pages) {
1345 1334 ParserCallbacks cb;
1346 1335 page.parseContents(&cb);
1347 1336 }
... ... @@ -1364,16 +1353,11 @@ test_39(QPDF&amp; pdf, char const* arg2)
1364 1353 std::vector<QPDFPageObjectHelper> pages =
1365 1354 QPDFPageDocumentHelper(pdf).getAllPages();
1366 1355 int pageno = 0;
1367   - for (std::vector<QPDFPageObjectHelper>::iterator p_iter = pages.begin();
1368   - p_iter != pages.end();
1369   - ++p_iter) {
  1356 + for (auto& page: pages) {
1370 1357 std::cout << "page " << ++pageno << std::endl;
1371   - std::map<std::string, QPDFObjectHandle> images = (*p_iter).getImages();
1372   - for (std::map<std::string, QPDFObjectHandle>::iterator i_iter =
1373   - images.begin();
1374   - i_iter != images.end();
1375   - ++i_iter) {
1376   - QPDFObjectHandle image_dict = (*i_iter).second.getDict();
  1358 + std::map<std::string, QPDFObjectHandle> images = page.getImages();
  1359 + for (auto& i_iter: images) {
  1360 + QPDFObjectHandle image_dict = i_iter.second.getDict();
1377 1361 std::cout << "filter: "
1378 1362 << image_dict.getKey("/Filter").unparseResolved()
1379 1363 << ", color space: "
... ... @@ -1404,10 +1388,8 @@ test_41(QPDF&amp; pdf, char const* arg2)
1404 1388 // with coalesce.pdf.
1405 1389 std::vector<QPDFPageObjectHelper> pages =
1406 1390 QPDFPageDocumentHelper(pdf).getAllPages();
1407   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
1408   - iter != pages.end();
1409   - ++iter) {
1410   - (*iter).addContentTokenFilter(
  1391 + for (auto& page: pages) {
  1392 + page.addContentTokenFilter(
1411 1393 std::shared_ptr<QPDFObjectHandle::TokenFilter>(new TokenFilter()));
1412 1394 }
1413 1395 QPDFWriter w(pdf, "a.pdf");
... ... @@ -1537,11 +1519,7 @@ test_43(QPDF&amp; pdf, char const* arg2)
1537 1519 }
1538 1520 std::cout << "iterating over form fields\n";
1539 1521 std::vector<QPDFFormFieldObjectHelper> form_fields = afdh.getFormFields();
1540   - for (std::vector<QPDFFormFieldObjectHelper>::iterator iter =
1541   - form_fields.begin();
1542   - iter != form_fields.end();
1543   - ++iter) {
1544   - QPDFFormFieldObjectHelper ffh(*iter);
  1522 + for (auto& ffh: form_fields) {
1545 1523 std::cout << "Field: " << ffh.getObjectHandle().unparse() << std::endl;
1546 1524 QPDFFormFieldObjectHelper node = ffh;
1547 1525 while (!node.isNull()) {
... ... @@ -1571,29 +1549,17 @@ test_43(QPDF&amp; pdf, char const* arg2)
1571 1549 std::cout << " Quadding: " << ffh.getQuadding() << std::endl;
1572 1550 std::vector<QPDFAnnotationObjectHelper> annotations =
1573 1551 afdh.getAnnotationsForField(ffh);
1574   - for (std::vector<QPDFAnnotationObjectHelper>::iterator i2 =
1575   - annotations.begin();
1576   - i2 != annotations.end();
1577   - ++i2) {
1578   - std::cout << " Annotation: " << (*i2).getObjectHandle().unparse()
  1552 + for (auto& aoh: annotations) {
  1553 + std::cout << " Annotation: " << aoh.getObjectHandle().unparse()
1579 1554 << std::endl;
1580 1555 }
1581 1556 }
1582 1557 std::cout << "iterating over annotations per page\n";
1583   - std::vector<QPDFPageObjectHelper> pages =
1584   - QPDFPageDocumentHelper(pdf).getAllPages();
1585   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
1586   - iter != pages.end();
1587   - ++iter) {
1588   - std::cout << "Page: " << (*iter).getObjectHandle().unparse()
1589   - << std::endl;
  1558 + for (auto& page: QPDFPageDocumentHelper(pdf).getAllPages()) {
  1559 + std::cout << "Page: " << page.getObjectHandle().unparse() << std::endl;
1590 1560 std::vector<QPDFAnnotationObjectHelper> annotations =
1591   - afdh.getWidgetAnnotationsForPage(*iter);
1592   - for (std::vector<QPDFAnnotationObjectHelper>::iterator i2 =
1593   - annotations.begin();
1594   - i2 != annotations.end();
1595   - ++i2) {
1596   - QPDFAnnotationObjectHelper ah(*i2);
  1561 + afdh.getWidgetAnnotationsForPage(page);
  1562 + for (auto& ah: annotations) {
1597 1563 std::cout << " Annotation: " << ah.getObjectHandle().unparse()
1598 1564 << std::endl;
1599 1565 std::cout
... ... @@ -1623,10 +1589,7 @@ test_44(QPDF&amp; pdf, char const* arg2)
1623 1589 // Set form fields.
1624 1590 QPDFAcroFormDocumentHelper afdh(pdf);
1625 1591 std::vector<QPDFFormFieldObjectHelper> fields = afdh.getFormFields();
1626   - for (std::vector<QPDFFormFieldObjectHelper>::iterator iter = fields.begin();
1627   - iter != fields.end();
1628   - ++iter) {
1629   - QPDFFormFieldObjectHelper& field(*iter);
  1592 + for (auto& field: fields) {
1630 1593 QPDFObjectHandle ft = field.getInheritableFieldValue("/FT");
1631 1594 if (ft.isName() && (ft.getName() == "/Tx")) {
1632 1595 // \xc3\xb7 is utf-8 for U+00F7 (divided by)
... ... @@ -1950,23 +1913,16 @@ static void
1950 1913 test_49(QPDF& pdf, char const* arg2)
1951 1914 {
1952 1915 // Outlines
1953   - std::vector<QPDFPageObjectHelper> pages =
1954   - QPDFPageDocumentHelper(pdf).getAllPages();
1955 1916 QPDFOutlineDocumentHelper odh(pdf);
1956 1917 int pageno = 0;
1957   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
1958   - iter != pages.end();
1959   - ++iter, ++pageno) {
1960   - std::vector<QPDFOutlineObjectHelper> outlines =
1961   - odh.getOutlinesForPage((*iter).getObjectHandle().getObjGen());
1962   - for (std::vector<QPDFOutlineObjectHelper>::iterator oiter =
1963   - outlines.begin();
1964   - oiter != outlines.end();
1965   - ++oiter) {
1966   - std::cout << "page " << pageno << ": " << (*oiter).getTitle()
1967   - << " -> " << (*oiter).getDest().unparseResolved()
1968   - << std::endl;
  1918 + for (auto& page: QPDFPageDocumentHelper(pdf).getAllPages()) {
  1919 + auto outlines =
  1920 + odh.getOutlinesForPage(page.getObjectHandle().getObjGen());
  1921 + for (auto& ol: outlines) {
  1922 + std::cout << "page " << pageno << ": " << ol.getTitle() << " -> "
  1923 + << ol.getDest().unparseResolved() << std::endl;
1969 1924 }
  1925 + ++pageno;
1970 1926 }
1971 1927 }
1972 1928  
... ... @@ -1981,11 +1937,8 @@ test_50(QPDF&amp; pdf, char const* arg2)
1981 1937 std::cout << d1.getJSON().unparse() << std::endl;
1982 1938 // Top-level type mismatch
1983 1939 d1.mergeResources(d2.getKey("/k1"));
1984   - std::set<std::string> names = d1.getResourceNames();
1985   - for (std::set<std::string>::iterator iter = names.begin();
1986   - iter != names.end();
1987   - ++iter) {
1988   - std::cout << *iter << std::endl;
  1940 + for (auto const& name: d1.getResourceNames()) {
  1941 + std::cout << name << std::endl;
1989 1942 }
1990 1943 }
1991 1944  
... ... @@ -2064,11 +2017,8 @@ test_53(QPDF&amp; pdf, char const* arg2)
2064 2017 root.replaceKey(
2065 2018 "/Q1", pdf.makeIndirectObject(QPDFObjectHandle::newString("potato")));
2066 2019 std::cout << "all objects" << std::endl;
2067   - std::vector<QPDFObjectHandle> all = pdf.getAllObjects();
2068   - for (std::vector<QPDFObjectHandle>::iterator iter = all.begin();
2069   - iter != all.end();
2070   - ++iter) {
2071   - std::cout << (*iter).unparse() << std::endl;
  2020 + for (auto& obj: pdf.getAllObjects()) {
  2021 + std::cout << obj.unparse() << std::endl;
2072 2022 }
2073 2023  
2074 2024 QPDFWriter w(pdf, "a.pdf");
... ...
qpdf/test_parsedoffset.cc
... ... @@ -52,21 +52,17 @@ walk(
52 52  
53 53 if (obj.isArray()) {
54 54 std::vector<QPDFObjectHandle> array = obj.getArrayAsVector();
55   - for (std::vector<QPDFObjectHandle>::iterator iter = array.begin();
56   - iter != array.end();
57   - ++iter) {
58   - if (!iter->isIndirect()) {
  55 + for (auto& oh: array) {
  56 + if (!oh.isIndirect()) {
59 57 // QPDF::GetAllObjects() enumerates all indirect objects.
60 58 // So only the direct objects are recursed here.
61   - walk(stream_number, *iter, result);
  59 + walk(stream_number, oh, result);
62 60 }
63 61 }
64 62 } else if (obj.isDictionary()) {
65 63 std::set<std::string> keys = obj.getKeys();
66   - for (std::set<std::string>::iterator iter = keys.begin();
67   - iter != keys.end();
68   - ++iter) {
69   - QPDFObjectHandle item = obj.getKey(*iter);
  64 + for (auto const& key: keys) {
  65 + QPDFObjectHandle item = obj.getKey(key);
70 66 if (!item.isIndirect()) {
71 67 // QPDF::GetAllObjects() enumerates all indirect objects.
72 68 // So only the direct objects are recursed here.
... ... @@ -88,21 +84,19 @@ process(
88 84 std::vector<QPDFObjectHandle> objs = qpdf.getAllObjects();
89 85 std::map<QPDFObjGen, QPDFXRefEntry> xrefs = qpdf.getXRefTable();
90 86  
91   - for (std::vector<QPDFObjectHandle>::iterator iter = objs.begin();
92   - iter != objs.end();
93   - ++iter) {
94   - if (xrefs.count(iter->getObjGen()) == 0) {
95   - std::cerr << iter->getObjectID() << "/" << iter->getGeneration()
  87 + for (auto const& oh: objs) {
  88 + if (xrefs.count(oh.getObjGen()) == 0) {
  89 + std::cerr << oh.getObjectID() << "/" << oh.getGeneration()
96 90 << " is not found in xref table" << std::endl;
97 91 std::exit(2);
98 92 }
99 93  
100   - QPDFXRefEntry xref = xrefs[iter->getObjGen()];
  94 + QPDFXRefEntry xref = xrefs[oh.getObjGen()];
101 95 size_t stream_number;
102 96  
103 97 switch (xref.getType()) {
104 98 case 0:
105   - std::cerr << iter->getObjectID() << "/" << iter->getGeneration()
  99 + std::cerr << oh.getObjectID() << "/" << oh.getGeneration()
106 100 << " xref entry is free" << std::endl;
107 101 std::exit(2);
108 102 case 1:
... ... @@ -116,7 +110,7 @@ process(
116 110 std::exit(2);
117 111 }
118 112  
119   - walk(stream_number, *iter, result);
  113 + walk(stream_number, oh, result);
120 114 }
121 115 }
122 116  
... ... @@ -146,11 +140,8 @@ main(int argc, char* argv[])
146 140 << std::endl;
147 141 }
148 142  
149   - for (std::vector<std::pair<qpdf_offset_t, std::string>>::iterator
150   - iter = table[i].begin();
151   - iter != table[i].end();
152   - ++iter) {
153   - std::cout << iter->second << std::endl;
  143 + for (auto const& iter: table[i]) {
  144 + std::cout << iter.second << std::endl;
154 145 }
155 146 }
156 147  
... ...
qpdf/test_pdf_doc_encoding.cc
... ... @@ -27,10 +27,8 @@ main(int argc, char* argv[])
27 27 }
28 28 char const* infilename = argv[1];
29 29 std::list<std::string> lines = QUtil::read_lines_from_file(infilename);
30   - for (std::list<std::string>::iterator iter = lines.begin();
31   - iter != lines.end();
32   - ++iter) {
33   - QPDFObjectHandle str = QPDFObjectHandle::newString(*iter);
  30 + for (auto const& line: lines) {
  31 + QPDFObjectHandle str = QPDFObjectHandle::newString(line);
34 32 std::cout << str.getUTF8Value() << std::endl;
35 33 }
36 34 return 0;
... ...
qpdf/test_pdf_unicode.cc
... ... @@ -27,10 +27,8 @@ main(int argc, char* argv[])
27 27 }
28 28 char const* infilename = argv[1];
29 29 std::list<std::string> lines = QUtil::read_lines_from_file(infilename);
30   - for (std::list<std::string>::iterator iter = lines.begin();
31   - iter != lines.end();
32   - ++iter) {
33   - QPDFObjectHandle str = QPDFObjectHandle::newUnicodeString(*iter);
  30 + for (auto const& line: lines) {
  31 + QPDFObjectHandle str = QPDFObjectHandle::newUnicodeString(line);
34 32 std::cout << str.getUTF8Value() << " // " << str.unparseBinary()
35 33 << std::endl;
36 34 }
... ...
qpdf/test_renumber.cc
... ... @@ -97,10 +97,8 @@ compare(QPDFObjectHandle a, QPDFObjectHandle b)
97 97 return false;
98 98 }
99 99  
100   - for (std::set<std::string>::iterator iter = keys_a.begin();
101   - iter != keys_a.end();
102   - ++iter) {
103   - if (!compare(a.getKey(*iter), b.getKey(*iter))) {
  100 + for (auto const& key: keys_a) {
  101 + if (!compare(a.getKey(key), b.getKey(key))) {
104 102 std::cerr << "different dictionary item" << std::endl;
105 103 return false;
106 104 }
... ... @@ -130,19 +128,17 @@ compare_xref_table(
130 128 return false;
131 129 }
132 130  
133   - for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter = a.begin();
134   - iter != a.end();
135   - ++iter) {
136   - std::cout << "xref entry for " << iter->first.getObj() << "/"
137   - << iter->first.getGen() << std::endl;
  131 + for (auto const& iter: a) {
  132 + std::cout << "xref entry for " << iter.first.getObj() << "/"
  133 + << iter.first.getGen() << std::endl;
138 134  
139   - if (b.count(iter->first) == 0) {
  135 + if (b.count(iter.first) == 0) {
140 136 std::cerr << "not found" << std::endl;
141 137 return false;
142 138 }
143 139  
144   - QPDFXRefEntry xref_a = iter->second;
145   - QPDFXRefEntry xref_b = b[iter->first];
  140 + QPDFXRefEntry xref_a = iter.second;
  141 + QPDFXRefEntry xref_b = b[iter.first];
146 142 if (xref_a.getType() != xref_b.getType()) {
147 143 std::cerr << "different xref entry type" << std::endl;
148 144 return false;
... ... @@ -235,10 +231,8 @@ main(int argc, char* argv[])
235 231  
236 232 std::cout << "--- compare between input and renumbered objects ---"
237 233 << std::endl;
238   - for (std::vector<QPDFObjectHandle>::iterator iter = objs_in.begin();
239   - iter != objs_in.end();
240   - ++iter) {
241   - QPDFObjGen og_in = iter->getObjGen();
  234 + for (auto const& iter: objs_in) {
  235 + QPDFObjGen og_in = iter.getObjGen();
242 236 QPDFObjGen og_ren = w.getRenumberedObjGen(og_in);
243 237  
244 238 std::cout << "input " << og_in.getObj() << "/" << og_in.getGen()
... ... @@ -250,7 +244,7 @@ main(int argc, char* argv[])
250 244 continue;
251 245 }
252 246  
253   - if (!compare(*iter, qpdf_ren.getObjectByObjGen(og_ren))) {
  247 + if (!compare(iter, qpdf_ren.getObjectByObjGen(og_ren))) {
254 248 std::cerr << "different" << std::endl;
255 249 std::exit(2);
256 250 }
... ...
qpdf/test_tokenizer.cc
... ... @@ -99,14 +99,13 @@ static std::string
99 99 sanitize(std::string const& value)
100 100 {
101 101 std::string result;
102   - for (std::string::const_iterator iter = value.begin(); iter != value.end();
103   - ++iter) {
104   - if ((*iter >= 32) && (*iter <= 126)) {
105   - result.append(1, *iter);
  102 + for (auto const& iter: value) {
  103 + if ((iter >= 32) && (iter <= 126)) {
  104 + result.append(1, iter);
106 105 } else {
107 106 result += "\\x" +
108 107 QUtil::int_to_string_base(
109   - static_cast<unsigned char>(*iter), 16, 2);
  108 + static_cast<unsigned char>(iter), 16, 2);
110 109 }
111 110 }
112 111 return result;
... ... @@ -203,12 +202,10 @@ process(char const* filename, bool include_ignorable, size_t max_len)
203 202 std::vector<QPDFPageObjectHelper> pages =
204 203 QPDFPageDocumentHelper(qpdf).getAllPages();
205 204 int pageno = 0;
206   - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin();
207   - iter != pages.end();
208   - ++iter) {
  205 + for (auto& page: pages) {
209 206 ++pageno;
210 207 Pl_Buffer plb("buffer");
211   - (*iter).pipeContents(&plb);
  208 + page.pipeContents(&plb);
212 209 auto content_data = plb.getBufferSharedPointer();
213 210 BufferInputSource* bis =
214 211 new BufferInputSource("content data", content_data.get());
... ... @@ -223,20 +220,16 @@ process(char const* filename, bool include_ignorable, size_t max_len)
223 220 }
224 221  
225 222 // Tokenize object streams
226   - std::vector<QPDFObjectHandle> all = qpdf.getAllObjects();
227   - for (std::vector<QPDFObjectHandle>::iterator iter = all.begin();
228   - iter != all.end();
229   - ++iter) {
230   - if ((*iter).isStream() && (*iter).getDict().getKey("/Type").isName() &&
231   - (*iter).getDict().getKey("/Type").getName() == "/ObjStm") {
232   - std::shared_ptr<Buffer> b =
233   - (*iter).getStreamData(qpdf_dl_specialized);
  223 + for (auto& obj: qpdf.getAllObjects()) {
  224 + if (obj.isStream() && obj.getDict().getKey("/Type").isName() &&
  225 + obj.getDict().getKey("/Type").getName() == "/ObjStm") {
  226 + std::shared_ptr<Buffer> b = obj.getStreamData(qpdf_dl_specialized);
234 227 BufferInputSource* bis =
235 228 new BufferInputSource("object stream data", b.get());
236 229 is = std::shared_ptr<InputSource>(bis);
237 230 dump_tokens(
238 231 is,
239   - "OBJECT STREAM " + QUtil::int_to_string((*iter).getObjectID()),
  232 + "OBJECT STREAM " + QUtil::int_to_string(obj.getObjectID()),
240 233 max_len,
241 234 include_ignorable,
242 235 false,
... ...
qpdf/test_xref.cc
... ... @@ -21,26 +21,24 @@ main(int argc, char* argv[])
21 21  
22 22 std::map<QPDFObjGen, QPDFXRefEntry> xref = qpdf.getXRefTable();
23 23  
24   - for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter = xref.begin();
25   - iter != xref.end();
26   - ++iter) {
27   - std::cout << iter->first.getObj() << "/" << iter->first.getGen()
  24 + for (auto const& iter: xref) {
  25 + std::cout << iter.first.getObj() << "/" << iter.first.getGen()
28 26 << ", ";
29   - switch (iter->second.getType()) {
  27 + switch (iter.second.getType()) {
30 28 case 0:
31 29 std::cout << "free entry" << std::endl;
32 30 break;
33 31 case 1:
34 32 std::cout << "uncompressed, offset = "
35   - << iter->second.getOffset() << " (0x" << std::hex
36   - << iter->second.getOffset() << std::dec << ")"
  33 + << iter.second.getOffset() << " (0x" << std::hex
  34 + << iter.second.getOffset() << std::dec << ")"
37 35 << std::endl;
38 36 break;
39 37 case 2:
40 38 std::cout << "compressed, stream number = "
41   - << iter->second.getObjStreamNumber()
  39 + << iter.second.getObjStreamNumber()
42 40 << ", stream index = "
43   - << iter->second.getObjStreamIndex() << std::endl;
  41 + << iter.second.getObjStreamIndex() << std::endl;
44 42 break;
45 43 default:
46 44 std::cerr << "unknown" << std::endl;
... ...