diff options
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/QPDF.cc | 119 | ||||
-rw-r--r-- | libqpdf/QPDFAcroFormDocumentHelper.cc | 31 | ||||
-rw-r--r-- | libqpdf/QPDFArgParser.cc | 30 | ||||
-rw-r--r-- | libqpdf/QPDFJob.cc | 176 | ||||
-rw-r--r-- | libqpdf/QPDFObjectHandle.cc | 37 | ||||
-rw-r--r-- | libqpdf/QPDFPageDocumentHelper.cc | 23 | ||||
-rw-r--r-- | libqpdf/QPDFTokenizer.cc | 5 | ||||
-rw-r--r-- | libqpdf/QPDFWriter.cc | 156 | ||||
-rw-r--r-- | libqpdf/QPDF_Array.cc | 6 | ||||
-rw-r--r-- | libqpdf/QPDF_Dictionary.cc | 7 | ||||
-rw-r--r-- | libqpdf/QPDF_encryption.cc | 6 | ||||
-rw-r--r-- | libqpdf/QPDF_linearization.cc | 143 | ||||
-rw-r--r-- | libqpdf/QPDF_optimization.cc | 78 | ||||
-rw-r--r-- | libqpdf/QPDF_pages.cc | 3 | ||||
-rw-r--r-- | libqpdf/QUtil.cc | 19 |
15 files changed, 254 insertions, 585 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc index bab30042..815894d3 100644 --- a/libqpdf/QPDF.cc +++ b/libqpdf/QPDF.cc @@ -262,11 +262,8 @@ QPDF::~QPDF() // have the effect of undoing any modifications that may have been // made to any of the objects. this->m->xref_table.clear(); - for (std::map<QPDFObjGen, ObjCache>::iterator iter = - this->m->obj_cache.begin(); - iter != this->m->obj_cache.end(); - ++iter) { - QPDFObject::ObjAccessor::releaseResolved((*iter).second.object.get()); + for (auto const& iter: this->m->obj_cache) { + QPDFObject::ObjAccessor::releaseResolved(iter.second.object.get()); } } @@ -577,18 +574,13 @@ QPDF::reconstruct_xref(QPDFExc& e) // Delete all references to type 1 (uncompressed) objects std::set<QPDFObjGen> to_delete; - for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter = - this->m->xref_table.begin(); - iter != this->m->xref_table.end(); - ++iter) { - if (((*iter).second).getType() == 1) { - to_delete.insert((*iter).first); + for (auto const& iter: this->m->xref_table) { + if (iter.second.getType() == 1) { + to_delete.insert(iter.first); } } - for (std::set<QPDFObjGen>::iterator iter = to_delete.begin(); - iter != to_delete.end(); - ++iter) { - this->m->xref_table.erase(*iter); + for (auto const& iter: to_delete) { + this->m->xref_table.erase(iter); } this->m->file->seek(0, SEEK_END); @@ -1015,10 +1007,7 @@ QPDF::read_xrefTable(qpdf_offset_t xref_offset) } // Handle any deleted items now that we've read the /XRefStm. - for (std::vector<QPDFObjGen>::iterator iter = deleted_items.begin(); - iter != deleted_items.end(); - ++iter) { - QPDFObjGen& og = *iter; + for (auto const& og: deleted_items) { insertXrefEntry(og.getObj(), 0, 0, og.getGen()); } @@ -1351,12 +1340,9 @@ QPDF::insertXrefEntry(int obj, int f0, qpdf_offset_t f1, int f2, bool overwrite) void QPDF::showXRefTable() { - for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter = - this->m->xref_table.begin(); - iter != this->m->xref_table.end(); - ++iter) { - QPDFObjGen const& og = (*iter).first; - QPDFXRefEntry const& entry = (*iter).second; + for (auto const& iter: this->m->xref_table) { + QPDFObjGen const& og = iter.first; + QPDFXRefEntry const& entry = iter.second; *this->m->out_stream << og.getObj() << "/" << og.getGen() << ": "; switch (entry.getType()) { case 1: @@ -1390,27 +1376,19 @@ QPDF::fixDanglingReferences(bool force) // Create a set of all known indirect objects including those // we've previously resolved and those that we have created. std::set<QPDFObjGen> to_process; - for (std::map<QPDFObjGen, ObjCache>::iterator iter = - this->m->obj_cache.begin(); - iter != this->m->obj_cache.end(); - ++iter) { - to_process.insert((*iter).first); + for (auto const& iter: this->m->obj_cache) { + to_process.insert(iter.first); } - for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter = - this->m->xref_table.begin(); - iter != this->m->xref_table.end(); - ++iter) { - to_process.insert((*iter).first); + for (auto const& iter: this->m->xref_table) { + to_process.insert(iter.first); } // For each non-scalar item to process, put it in the queue. std::list<QPDFObjectHandle> queue; queue.push_back(this->m->trailer); - for (std::set<QPDFObjGen>::iterator iter = to_process.begin(); - iter != to_process.end(); - ++iter) { + for (auto const& iter: to_process) { QPDFObjectHandle obj = QPDFObjectHandle::Factory::newIndirect( - this, (*iter).getObj(), (*iter).getGen()); + this, iter.getObj(), iter.getGen()); if (obj.isDictionary() || obj.isArray()) { queue.push_back(obj); } else if (obj.isStream()) { @@ -1428,21 +1406,15 @@ QPDF::fixDanglingReferences(bool force) if (obj.isDictionary()) { std::map<std::string, QPDFObjectHandle> members = obj.getDictAsMap(); - for (std::map<std::string, QPDFObjectHandle>::iterator iter = - members.begin(); - iter != members.end(); - ++iter) { - to_check.push_back((*iter).second); + for (auto const& iter: members) { + to_check.push_back(iter.second); } } else if (obj.isArray()) { QPDF_Array* arr = dynamic_cast<QPDF_Array*>( QPDFObjectHandle::ObjAccessor::getObject(obj).get()); arr->addExplicitElementsToList(to_check); } - for (std::list<QPDFObjectHandle>::iterator iter = to_check.begin(); - iter != to_check.end(); - ++iter) { - QPDFObjectHandle sub = *iter; + for (auto sub: to_check) { if (sub.isIndirect()) { if (sub.getOwningQPDF() == this) { QPDFObjGen og(sub.getObjGen()); @@ -1480,11 +1452,8 @@ QPDF::getAllObjects() // object cache. fixDanglingReferences(true); std::vector<QPDFObjectHandle> result; - for (std::map<QPDFObjGen, ObjCache>::iterator iter = - this->m->obj_cache.begin(); - iter != this->m->obj_cache.end(); - ++iter) { - QPDFObjGen const& og = (*iter).first; + for (auto const& iter: this->m->obj_cache) { + QPDFObjGen const& og = iter.first; result.push_back( // line-break QPDFObjectHandle::Factory::newIndirect( @@ -1733,12 +1702,9 @@ QPDF::recoverStreamLength( QPDFObjGen this_obj(0, 0); // Make sure this is inside this object - for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter = - this->m->xref_table.begin(); - iter != this->m->xref_table.end(); - ++iter) { - QPDFObjGen const& og = (*iter).first; - QPDFXRefEntry const& entry = (*iter).second; + for (auto const& iter: this->m->xref_table) { + QPDFObjGen const& og = iter.first; + QPDFXRefEntry const& entry = iter.second; if (entry.getType() == 1) { qpdf_offset_t obj_offset = entry.getOffset(); if ((obj_offset > stream_offset) && @@ -2157,15 +2123,13 @@ QPDF::resolveObjectsInStream(int obj_stream_number) // that some objects stored here might have been overridden by new // objects appended to the file, so it is necessary to recheck the // xref table and only cache what would actually be resolved here. - for (std::map<int, int>::iterator iter = offsets.begin(); - iter != offsets.end(); - ++iter) { - int obj = (*iter).first; + for (auto const& iter: offsets) { + int obj = iter.first; QPDFObjGen og(obj, 0); QPDFXRefEntry const& entry = this->m->xref_table[og]; if ((entry.getType() == 2) && (entry.getObjStreamNumber() == obj_stream_number)) { - int offset = (*iter).second; + int offset = iter.second; input->seek(offset, SEEK_SET); QPDFObjectHandle oh = readObject(input, "", obj, 0, true); this->m->obj_cache[og] = ObjCache( @@ -2317,11 +2281,7 @@ QPDF::copyForeignObject(QPDFObjectHandle foreign) } // Copy any new objects and replace the reservations. - for (std::vector<QPDFObjectHandle>::iterator iter = - obj_copier.to_copy.begin(); - iter != obj_copier.to_copy.end(); - ++iter) { - QPDFObjectHandle& to_copy = *iter; + for (auto& to_copy: obj_copier.to_copy) { QPDFObjectHandle copy = replaceForeignIndirectObjects(to_copy, obj_copier, true); if (!to_copy.isStream()) { @@ -2365,8 +2325,7 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier& obj_copier, bool top) } QTC::TC("qpdf", "QPDF copy indirect"); obj_copier.visiting.insert(foreign_og); - std::map<QPDFObjGen, QPDFObjectHandle>::iterator mapping = - obj_copier.object_map.find(foreign_og); + auto mapping = obj_copier.object_map.find(foreign_og); if (mapping == obj_copier.object_map.end()) { obj_copier.to_copy.push_back(foreign); QPDFObjectHandle reservation; @@ -2388,10 +2347,8 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier& obj_copier, bool top) } else if (foreign.isDictionary()) { QTC::TC("qpdf", "QPDF reserve dictionary"); std::set<std::string> keys = foreign.getKeys(); - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { - reserveObjects(foreign.getKey(*iter), obj_copier, false); + for (auto const& key: keys) { + reserveObjects(foreign.getKey(key), obj_copier, false); } } else if (foreign.isStream()) { QTC::TC("qpdf", "QPDF reserve stream"); @@ -2412,8 +2369,7 @@ QPDF::replaceForeignIndirectObjects( if ((!top) && foreign.isIndirect()) { QTC::TC("qpdf", "QPDF replace indirect"); QPDFObjGen foreign_og(foreign.getObjGen()); - std::map<QPDFObjGen, QPDFObjectHandle>::iterator mapping = - obj_copier.object_map.find(foreign_og); + auto mapping = obj_copier.object_map.find(foreign_og); if (mapping == obj_copier.object_map.end()) { // This case would occur if this is a reference to a Page // or Pages object that we didn't traverse into. @@ -2657,12 +2613,9 @@ QPDF::getXRefTable() void QPDF::getObjectStreamData(std::map<int, int>& omap) { - for (std::map<QPDFObjGen, QPDFXRefEntry>::iterator iter = - this->m->xref_table.begin(); - iter != this->m->xref_table.end(); - ++iter) { - QPDFObjGen const& og = (*iter).first; - QPDFXRefEntry const& entry = (*iter).second; + for (auto const& iter: this->m->xref_table) { + QPDFObjGen const& og = iter.first; + QPDFXRefEntry const& entry = iter.second; if (entry.getType() == 2) { omap[og.getObj()] = entry.getObjStreamNumber(); } diff --git a/libqpdf/QPDFAcroFormDocumentHelper.cc b/libqpdf/QPDFAcroFormDocumentHelper.cc index 435c7666..4e9f08b9 100644 --- a/libqpdf/QPDFAcroFormDocumentHelper.cc +++ b/libqpdf/QPDFAcroFormDocumentHelper.cc @@ -182,11 +182,8 @@ QPDFAcroFormDocumentHelper::getFormFields() { analyze(); std::vector<QPDFFormFieldObjectHelper> result; - for (std::map<QPDFObjGen, std::vector<QPDFAnnotationObjectHelper>>::iterator - iter = this->m->field_to_annotations.begin(); - iter != this->m->field_to_annotations.end(); - ++iter) { - result.push_back(this->qpdf.getObjectByObjGen((*iter).first)); + for (auto const& iter: this->m->field_to_annotations) { + result.push_back(this->qpdf.getObjectByObjGen(iter.first)); } return result; } @@ -299,17 +296,11 @@ QPDFAcroFormDocumentHelper::analyze() QPDFPageDocumentHelper dh(this->qpdf); std::vector<QPDFPageObjectHelper> pages = dh.getAllPages(); - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin(); - iter != pages.end(); - ++iter) { - QPDFPageObjectHelper ph(*iter); + for (auto const& ph: pages) { std::vector<QPDFAnnotationObjectHelper> annots = getWidgetAnnotationsForPage(ph); - for (std::vector<QPDFAnnotationObjectHelper>::iterator i2 = - annots.begin(); - i2 != annots.end(); - ++i2) { - QPDFObjectHandle annot((*i2).getObjectHandle()); + for (auto const& iter: annots) { + QPDFObjectHandle annot(iter.getObjectHandle()); QPDFObjGen og(annot.getObjGen()); if (this->m->annotation_to_field.count(og) == 0) { QTC::TC("qpdf", "QPDFAcroFormDocumentHelper orphaned widget"); @@ -462,16 +453,10 @@ QPDFAcroFormDocumentHelper::generateAppearancesIfNeeded() QPDFPageDocumentHelper pdh(this->qpdf); std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages(); - for (std::vector<QPDFPageObjectHelper>::iterator page_iter = pages.begin(); - page_iter != pages.end(); - ++page_iter) { + for (auto const& page: pages) { std::vector<QPDFAnnotationObjectHelper> annotations = - getWidgetAnnotationsForPage(*page_iter); - for (std::vector<QPDFAnnotationObjectHelper>::iterator annot_iter = - annotations.begin(); - annot_iter != annotations.end(); - ++annot_iter) { - QPDFAnnotationObjectHelper& aoh = *annot_iter; + getWidgetAnnotationsForPage(page); + for (auto& aoh: annotations) { QPDFFormFieldObjectHelper ffh = getFieldForAnnotation(aoh); if (ffh.getFieldType() == "/Btn") { // Rather than generating appearances for button diff --git a/libqpdf/QPDFArgParser.cc b/libqpdf/QPDFArgParser.cc index 8cd53efa..63197684 100644 --- a/libqpdf/QPDFArgParser.cc +++ b/libqpdf/QPDFArgParser.cc @@ -294,10 +294,7 @@ QPDFArgParser::handleBashArguments() bool last_was_backslash = false; enum { st_top, st_squote, st_dquote } state = st_top; std::string arg; - for (std::string::iterator iter = this->m->bash_line.begin(); - iter != this->m->bash_line.end(); - ++iter) { - char ch = (*iter); + for (char ch: this->m->bash_line) { if (last_was_backslash) { arg.append(1, ch); last_was_backslash = false; @@ -560,13 +557,14 @@ QPDFArgParser::parseArgs() } else if (!oe.choices.empty()) { QTC::TC("libtests", "QPDFArgParser required choices"); message += "{"; - for (std::set<std::string>::iterator iter = oe.choices.begin(); - iter != oe.choices.end(); - ++iter) { - if (iter != oe.choices.begin()) { + bool first = true; + for (auto const& choice: oe.choices) { + if (first) { + first = false; + } else { message += ","; } - message += *iter; + message += choice; } message += "}"; } else if (!oe.parameter_name.empty()) { @@ -624,11 +622,9 @@ QPDFArgParser::addChoicesToCompletions( { if (option_table.count(option) != 0) { OptionEntry& oe = option_table[option]; - for (std::set<std::string>::iterator iter = oe.choices.begin(); - iter != oe.choices.end(); - ++iter) { + for (auto const& choice: oe.choices) { QTC::TC("libtests", "QPDFArgParser complete choices"); - this->m->completions.insert(extra_prefix + *iter); + this->m->completions.insert(extra_prefix + choice); } } } @@ -714,11 +710,9 @@ QPDFArgParser::handleCompletion() } } std::string prefix = extra_prefix + this->m->bash_cur; - for (std::set<std::string>::iterator iter = this->m->completions.begin(); - iter != this->m->completions.end(); - ++iter) { - if (prefix.empty() || ((*iter).substr(0, prefix.length()) == prefix)) { - std::cout << *iter << std::endl; + for (auto const& iter: this->m->completions) { + if (prefix.empty() || (iter.substr(0, prefix.length()) == prefix)) { + std::cout << iter << std::endl; } } exit(0); diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc index e0cc783f..4d136223 100644 --- a/libqpdf/QPDFJob.cc +++ b/libqpdf/QPDFJob.cc @@ -852,10 +852,7 @@ QPDFJob::doCheck(QPDF& pdf) std::vector<QPDFPageObjectHelper> pages = dh.getAllPages(); DiscardContents discard_contents; int pageno = 0; - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin(); - iter != pages.end(); - ++iter) { - QPDFPageObjectHelper& page(*iter); + for (auto& page: pages) { ++pageno; try { page.parseContents(&discard_contents); @@ -927,10 +924,7 @@ QPDFJob::doShowPages(QPDF& pdf) std::vector<QPDFPageObjectHelper> pages = dh.getAllPages(); int pageno = 0; auto& cout = *this->m->cout; - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin(); - iter != pages.end(); - ++iter) { - QPDFPageObjectHelper& ph(*iter); + for (auto& ph: pages) { QPDFObjectHandle page = ph.getObjectHandle(); ++pageno; @@ -1058,12 +1052,9 @@ QPDFJob::doJSONObjects(QPDF& pdf, JSON& j) "trailer", pdf.getTrailer().getJSON(true)); } std::vector<QPDFObjectHandle> objects = pdf.getAllObjects(); - for (std::vector<QPDFObjectHandle>::iterator iter = objects.begin(); - iter != objects.end(); - ++iter) { - if (all_objects || wanted_og.count((*iter).getObjGen())) { - j_objects.addDictionaryMember( - (*iter).unparse(), (*iter).getJSON(true)); + for (auto& obj: objects) { + if (all_objects || wanted_og.count(obj.getObjGen())) { + j_objects.addDictionaryMember(obj.unparse(), obj.getJSON(true)); } } } @@ -1106,12 +1097,10 @@ QPDFJob::doJSONPages(QPDF& pdf, JSON& j) QPDFOutlineDocumentHelper odh(pdf); pdh.pushInheritedAttributesToPage(); std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages(); - int pageno = 0; - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin(); - iter != pages.end(); - ++iter, ++pageno) { + int pageno = -1; + for (auto& ph: pages) { + ++pageno; JSON j_page = j_pages.addArrayElement(JSON::makeDictionary()); - QPDFPageObjectHelper& ph(*iter); QPDFObjectHandle page = ph.getObjectHandle(); j_page.addDictionaryMember("object", page.getJSON()); JSON j_images = j_page.addDictionaryMember("images", JSON::makeArray()); @@ -1161,17 +1150,14 @@ QPDFJob::doJSONPages(QPDF& pdf, JSON& j) j_page.addDictionaryMember("outlines", JSON::makeArray()); std::vector<QPDFOutlineObjectHelper> outlines = odh.getOutlinesForPage(page.getObjGen()); - for (std::vector<QPDFOutlineObjectHelper>::iterator oiter = - outlines.begin(); - oiter != outlines.end(); - ++oiter) { + for (auto& oiter: outlines) { JSON j_outline = j_outlines.addArrayElement(JSON::makeDictionary()); j_outline.addDictionaryMember( - "object", (*oiter).getObjectHandle().getJSON()); + "object", oiter.getObjectHandle().getJSON()); j_outline.addDictionaryMember( - "title", JSON::makeString((*oiter).getTitle())); + "title", JSON::makeString(oiter.getTitle())); j_outline.addDictionaryMember( - "dest", (*oiter).getDest().getJSON(true)); + "dest", oiter.getDest().getJSON(true)); } j_page.addDictionaryMember("pageposfrom1", JSON::makeInt(1 + pageno)); } @@ -1188,10 +1174,8 @@ QPDFJob::doJSONPageLabels(QPDF& pdf, JSON& j) std::vector<QPDFObjectHandle> labels; pldh.getLabelsForPageRange( 0, QIntC::to_int(pages.size()) - 1, 0, labels); - for (std::vector<QPDFObjectHandle>::iterator iter = labels.begin(); - iter != labels.end(); - ++iter) { - std::vector<QPDFObjectHandle>::iterator next = iter; + for (auto iter = labels.begin(); iter != labels.end(); ++iter) { + auto next = iter; ++next; if (next == labels.end()) { // This can't happen, so ignore it. This could only @@ -1213,10 +1197,7 @@ add_outlines_to_json( JSON& j, std::map<QPDFObjGen, int>& page_numbers) { - for (std::vector<QPDFOutlineObjectHelper>::iterator iter = outlines.begin(); - iter != outlines.end(); - ++iter) { - QPDFOutlineObjectHelper& ol = *iter; + for (auto& ol: outlines) { JSON jo = j.addArrayElement(JSON::makeDictionary()); jo.addDictionaryMember("object", ol.getObjectHandle().getJSON()); jo.addDictionaryMember("title", JSON::makeString(ol.getTitle())); @@ -1243,10 +1224,8 @@ QPDFJob::doJSONOutlines(QPDF& pdf, JSON& j) QPDFPageDocumentHelper dh(pdf); std::vector<QPDFPageObjectHelper> pages = dh.getAllPages(); int n = 0; - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin(); - iter != pages.end(); - ++iter) { - QPDFObjectHandle oh = (*iter).getObjectHandle(); + for (auto const& ph: pages) { + QPDFObjectHandle oh = ph.getObjectHandle(); page_numbers[oh.getObjGen()] = ++n; } @@ -1268,17 +1247,11 @@ QPDFJob::doJSONAcroform(QPDF& pdf, JSON& j) QPDFPageDocumentHelper pdh(pdf); std::vector<QPDFPageObjectHelper> pages = pdh.getAllPages(); int pagepos1 = 0; - for (std::vector<QPDFPageObjectHelper>::iterator page_iter = pages.begin(); - page_iter != pages.end(); - ++page_iter) { + for (auto const& page: pages) { ++pagepos1; std::vector<QPDFAnnotationObjectHelper> annotations = - afdh.getWidgetAnnotationsForPage(*page_iter); - for (std::vector<QPDFAnnotationObjectHelper>::iterator annot_iter = - annotations.begin(); - annot_iter != annotations.end(); - ++annot_iter) { - QPDFAnnotationObjectHelper& aoh = *annot_iter; + afdh.getWidgetAnnotationsForPage(page); + for (auto& aoh: annotations) { QPDFFormFieldObjectHelper ffh = afdh.getFieldForAnnotation(aoh); JSON j_field = j_fields.addArrayElement(JSON::makeDictionary()); j_field.addDictionaryMember( @@ -1314,10 +1287,8 @@ QPDFJob::doJSONAcroform(QPDF& pdf, JSON& j) JSON j_choices = j_field.addDictionaryMember("choices", JSON::makeArray()); std::vector<std::string> choices = ffh.getChoices(); - for (std::vector<std::string>::iterator iter = choices.begin(); - iter != choices.end(); - ++iter) { - j_choices.addArrayElement(JSON::makeString(*iter)); + for (auto const& choice: choices) { + j_choices.addArrayElement(JSON::makeString(choice)); } JSON j_annot = j_field.addDictionaryMember( "annotation", JSON::makeDictionary()); @@ -1688,10 +1659,8 @@ Please report this as a bug at\n\ https://github.com/qpdf/qpdf/issues/new\n\ ideally with the file that caused the error and the output below. Thanks!\n\ \n"; - for (std::list<std::string>::iterator iter = errors.begin(); - iter != errors.end(); - ++iter) { - *(this->m->cerr) << (*iter) << std::endl; + for (auto const& error: errors) { + *(this->m->cerr) << error << std::endl; } } @@ -1816,10 +1785,8 @@ QPDFJob::doProcess( QUtil::possible_repaired_encodings(password); // Represent to char const*, as required by the QPDF class. std::vector<char const*> passwords; - for (std::vector<std::string>::iterator iter = passwords_str.begin(); - iter != passwords_str.end(); - ++iter) { - passwords.push_back((*iter).c_str()); + for (auto const& iter: passwords_str) { + passwords.push_back(iter.c_str()); } // We always try the supplied password first because it is the // first string returned by possible_repaired_encodings. If there @@ -1835,13 +1802,11 @@ QPDFJob::doProcess( // attempt, which, like the first attempt, will be with the // supplied password. bool warned = false; - for (std::vector<char const*>::iterator iter = passwords.begin(); - iter != passwords.end(); - ++iter) { + for (auto iter = passwords.begin(); iter != passwords.end(); ++iter) { try { return doProcessOnce(fn, *iter, empty, used_for_input); } catch (QPDFExc& e) { - std::vector<char const*>::iterator next = iter; + auto next = iter; ++next; if (next == passwords.end()) { throw e; @@ -1961,10 +1926,7 @@ QPDFJob::doUnderOverlayForPage( resources = dest_page.getObjectHandle().replaceKeyAndGet( "/Resources", QPDFObjectHandle::newDictionary()); } - for (std::vector<int>::iterator iter = pagenos[pageno].begin(); - iter != pagenos[pageno].end(); - ++iter) { - int from_pageno = *iter; + for (int from_pageno: pagenos[pageno]) { doIfVerbose([&](std::ostream& cout, std::string const& prefix) { cout << " " << uo.which << " " << from_pageno << std::endl; }); @@ -2017,15 +1979,14 @@ QPDFJob::getUOPagenos( size_t idx = 0; size_t from_size = uo.from_pagenos.size(); size_t repeat_size = uo.repeat_pagenos.size(); - for (std::vector<int>::iterator iter = uo.to_pagenos.begin(); - iter != uo.to_pagenos.end(); - ++iter, ++idx) { + for (int to_pageno: uo.to_pagenos) { if (idx < from_size) { - pagenos[*iter].push_back(uo.from_pagenos.at(idx)); + pagenos[to_pageno].push_back(uo.from_pagenos.at(idx)); } else if (repeat_size) { - pagenos[*iter].push_back( + pagenos[to_pageno].push_back( uo.repeat_pagenos.at((idx - from_size) % repeat_size)); } + ++idx; } } @@ -2206,21 +2167,15 @@ QPDFJob::handleTransformations(QPDF& pdf) if (m->externalize_inline_images || (m->optimize_images && (!m->keep_inline_images))) { std::vector<QPDFPageObjectHelper> pages = dh.getAllPages(); - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin(); - iter != pages.end(); - ++iter) { - QPDFPageObjectHelper& ph(*iter); + for (auto& ph: pages) { ph.externalizeInlineImages(m->ii_min_bytes); } } if (m->optimize_images) { int pageno = 0; std::vector<QPDFPageObjectHelper> pages = dh.getAllPages(); - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin(); - iter != pages.end(); - ++iter) { + for (auto& ph: pages) { ++pageno; - QPDFPageObjectHelper& ph(*iter); QPDFObjectHandle page = ph.getObjectHandle(); std::map<std::string, QPDFObjectHandle> images = ph.getImages(); for (auto& iter2: images) { @@ -2260,10 +2215,8 @@ QPDFJob::handleTransformations(QPDF& pdf) } if (m->coalesce_contents) { std::vector<QPDFPageObjectHelper> pages = dh.getAllPages(); - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin(); - iter != pages.end(); - ++iter) { - (*iter).coalesceContentStreams(); + for (auto& page: pages) { + page.coalesceContentStreams(); } } if (m->flatten_rotation) { @@ -2428,10 +2381,7 @@ QPDFJob::handlePageSpecs( // actual pages. // Handle "." as a shortcut for the input file - for (std::vector<QPDFJob::PageSpec>::iterator iter = m->page_specs.begin(); - iter != m->page_specs.end(); - ++iter) { - QPDFJob::PageSpec& page_spec = *iter; + for (auto& page_spec: m->page_specs) { if (page_spec.filename == ".") { page_spec.filename = m->infilename.get(); } @@ -2463,10 +2413,7 @@ QPDFJob::handlePageSpecs( page_spec_qpdfs[m->infilename.get()] = &pdf; std::vector<QPDFPageData> parsed_specs; std::map<unsigned long long, std::set<QPDFObjGen>> copied_pages; - for (std::vector<QPDFJob::PageSpec>::iterator iter = m->page_specs.begin(); - iter != m->page_specs.end(); - ++iter) { - QPDFJob::PageSpec& page_spec = *iter; + for (auto& page_spec: m->page_specs) { if (page_spec_qpdfs.count(page_spec.filename) == 0) { // Open the PDF file and store the QPDF object. Throw a // std::shared_ptr to the qpdf into a heap so that it @@ -2523,17 +2470,14 @@ QPDFJob::handlePageSpecs( std::map<unsigned long long, bool> remove_unreferenced; if (m->remove_unreferenced_page_resources != QPDFJob::re_no) { - for (std::map<std::string, QPDF*>::iterator iter = - page_spec_qpdfs.begin(); - iter != page_spec_qpdfs.end(); - ++iter) { - std::string const& filename = (*iter).first; + for (auto const& iter: page_spec_qpdfs) { + std::string const& filename = iter.first; ClosedFileInputSource* cis = 0; if (page_spec_cfis.count(filename)) { cis = page_spec_cfis[filename]; cis->stayOpen(true); } - QPDF& other(*((*iter).second)); + QPDF& other(*(iter.second)); auto other_uuid = other.getUniqueId(); if (remove_unreferenced.count(other_uuid) == 0) { remove_unreferenced[other_uuid] = @@ -2556,10 +2500,8 @@ QPDFJob::handlePageSpecs( }); QPDFPageDocumentHelper dh(pdf); std::vector<QPDFPageObjectHelper> orig_pages = dh.getAllPages(); - for (std::vector<QPDFPageObjectHelper>::iterator iter = orig_pages.begin(); - iter != orig_pages.end(); - ++iter) { - dh.removePage(*iter); + for (auto const& page: orig_pages) { + dh.removePage(page); } if (m->collate && (parsed_specs.size() > 1)) { @@ -2601,10 +2543,7 @@ QPDFJob::handlePageSpecs( afdh_map; auto this_afdh = get_afdh_for_qpdf(afdh_map, &pdf); std::set<QPDFObjGen> referenced_fields; - for (std::vector<QPDFPageData>::iterator iter = parsed_specs.begin(); - iter != parsed_specs.end(); - ++iter) { - QPDFPageData& page_data = *iter; + for (auto& page_data: parsed_specs) { ClosedFileInputSource* cis = 0; if (page_spec_cfis.count(page_data.filename)) { cis = page_spec_cfis[page_data.filename]; @@ -2619,14 +2558,12 @@ QPDFJob::handlePageSpecs( cout << prefix << ": adding pages from " << page_data.filename << std::endl; }); - for (std::vector<int>::iterator pageno_iter = - page_data.selected_pages.begin(); - pageno_iter != page_data.selected_pages.end(); - ++pageno_iter, ++out_pageno) { + for (auto pageno_iter: page_data.selected_pages) { // Pages are specified from 1 but numbered from 0 in the // vector - int pageno = *pageno_iter - 1; - pldh.getLabelsForPageRange(pageno, pageno, out_pageno, new_labels); + int pageno = pageno_iter - 1; + pldh.getLabelsForPageRange( + pageno, pageno, out_pageno++, new_labels); QPDFPageObjectHelper to_copy = page_data.orig_pages.at(QIntC::to_size(pageno)); QPDFObjGen to_copy_og = to_copy.getObjectHandle().getObjGen(); @@ -2748,19 +2685,14 @@ QPDFJob::handleRotations(QPDF& pdf) QPDFPageDocumentHelper dh(pdf); std::vector<QPDFPageObjectHelper> pages = dh.getAllPages(); int npages = QIntC::to_int(pages.size()); - for (std::map<std::string, QPDFJob::RotationSpec>::iterator iter = - m->rotations.begin(); - iter != m->rotations.end(); - ++iter) { - std::string const& range = (*iter).first; - QPDFJob::RotationSpec const& rspec = (*iter).second; + for (auto const& iter: m->rotations) { + std::string const& range = iter.first; + QPDFJob::RotationSpec const& rspec = iter.second; // range has been previously validated std::vector<int> to_rotate = QUtil::parse_numrange(range.c_str(), npages); - for (std::vector<int>::iterator i2 = to_rotate.begin(); - i2 != to_rotate.end(); - ++i2) { - int pageno = *i2 - 1; + for (int pageno_iter: to_rotate) { + int pageno = pageno_iter - 1; if ((pageno >= 0) && (pageno < npages)) { pages.at(QIntC::to_size(pageno)) .rotatePage(rspec.angle, rspec.relative); diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc index c156e627..76a6127e 100644 --- a/libqpdf/QPDFObjectHandle.cc +++ b/libqpdf/QPDFObjectHandle.cc @@ -1244,17 +1244,12 @@ QPDFObjectHandle::getResourceNames() return result; } std::set<std::string> keys = getKeys(); - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { - std::string const& key = *iter; + for (auto const& key: keys) { QPDFObjectHandle val = getKey(key); if (val.isDictionary()) { std::set<std::string> val_keys = val.getKeys(); - for (std::set<std::string>::iterator i2 = val_keys.begin(); - i2 != val_keys.end(); - ++i2) { - result.insert(*i2); + for (auto const& val_key: val_keys) { + result.insert(val_key); } } } @@ -1620,10 +1615,7 @@ QPDFObjectHandle::arrayOrStreamToStreamArray( } bool first = true; - for (std::vector<QPDFObjectHandle>::iterator iter = result.begin(); - iter != result.end(); - ++iter) { - QPDFObjectHandle item = *iter; + for (auto const& item: result) { std::string og = QUtil::int_to_string(item.getObjectID()) + " " + QUtil::int_to_string(item.getGeneration()); if (first) { @@ -1660,11 +1652,9 @@ QPDFObjectHandle::addPageContents(QPDFObjectHandle new_contents, bool first) QTC::TC("qpdf", "QPDFObjectHandle prepend page contents"); content_streams.push_back(new_contents); } - for (std::vector<QPDFObjectHandle>::iterator iter = orig_contents.begin(); - iter != orig_contents.end(); - ++iter) { + for (auto const& iter: orig_contents) { QTC::TC("qpdf", "QPDFObjectHandle append page contents"); - content_streams.push_back(*iter); + content_streams.push_back(iter); } if (!first) { content_streams.push_back(new_contents); @@ -1865,14 +1855,11 @@ QPDFObjectHandle::pipeContentStreams( arrayOrStreamToStreamArray(description, all_description); bool need_newline = false; Pl_Buffer buf("concatenated content stream buffer"); - for (std::vector<QPDFObjectHandle>::iterator iter = streams.begin(); - iter != streams.end(); - ++iter) { + for (auto stream: streams) { if (need_newline) { buf.write(QUtil::unsigned_char_pointer("\n"), 1); } LastChar lc(&buf); - QPDFObjectHandle stream = *iter; std::string og = QUtil::int_to_string(stream.getObjectID()) + " " + QUtil::int_to_string(stream.getGeneration()); std::string w_description = "content stream object " + og; @@ -2920,13 +2907,11 @@ QPDFObjectHandle::copyObject( QTC::TC("qpdf", "QPDFObjectHandle clone dictionary"); std::set<std::string> keys = getKeys(); std::map<std::string, QPDFObjectHandle> items; - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { - items[*iter] = getKey(*iter); + for (auto const& key: keys) { + items[key] = getKey(key); if ((!first_level_only) && - (cross_indirect || (!items[*iter].isIndirect()))) { - items[*iter].copyObject( + (cross_indirect || (!items[key].isIndirect()))) { + items[key].copyObject( visited, cross_indirect, first_level_only, stop_at_streams); } } diff --git a/libqpdf/QPDFPageDocumentHelper.cc b/libqpdf/QPDFPageDocumentHelper.cc index 61eba8c3..f54ad843 100644 --- a/libqpdf/QPDFPageDocumentHelper.cc +++ b/libqpdf/QPDFPageDocumentHelper.cc @@ -14,10 +14,8 @@ QPDFPageDocumentHelper::getAllPages() { std::vector<QPDFObjectHandle> const& pages_v = this->qpdf.getAllPages(); std::vector<QPDFPageObjectHelper> pages; - for (std::vector<QPDFObjectHandle>::const_iterator iter = pages_v.begin(); - iter != pages_v.end(); - ++iter) { - pages.push_back(QPDFPageObjectHelper(*iter)); + for (auto const& iter: pages_v) { + pages.push_back(QPDFPageObjectHelper(iter)); } return pages; } @@ -32,10 +30,8 @@ void QPDFPageDocumentHelper::removeUnreferencedResources() { std::vector<QPDFPageObjectHelper> pages = getAllPages(); - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin(); - iter != pages.end(); - ++iter) { - (*iter).removeUnreferencedResources(); + for (auto& ph: pages) { + ph.removeUnreferencedResources(); } } @@ -71,10 +67,7 @@ QPDFPageDocumentHelper::flattenAnnotations( " so form fields will not be flattened"); } std::vector<QPDFPageObjectHelper> pages = getAllPages(); - for (std::vector<QPDFPageObjectHelper>::iterator iter = pages.begin(); - iter != pages.end(); - ++iter) { - QPDFPageObjectHelper ph(*iter); + for (auto& ph: pages) { QPDFObjectHandle resources = ph.getAttribute("/Resources", true); if (!resources.isDictionary()) { // This should never happen and is not exercised in the @@ -107,11 +100,7 @@ QPDFPageDocumentHelper::flattenAnnotationsForPage( rotate = rotate_obj.getIntValueAsInt(); } int next_fx = 1; - for (std::vector<QPDFAnnotationObjectHelper>::iterator iter = - annots.begin(); - iter != annots.end(); - ++iter) { - QPDFAnnotationObjectHelper& aoh(*iter); + for (auto& aoh: annots) { QPDFObjectHandle as = aoh.getAppearanceStream("/N"); bool is_widget = (aoh.getSubtype() == "/Widget"); bool process = true; diff --git a/libqpdf/QPDFTokenizer.cc b/libqpdf/QPDFTokenizer.cc index 5f70542e..a38b9ef8 100644 --- a/libqpdf/QPDFTokenizer.cc +++ b/libqpdf/QPDFTokenizer.cc @@ -568,10 +568,7 @@ QPDFTokenizer::findEI(std::shared_ptr<InputSource> input) bool found_non_printable = false; bool found_other = false; std::string value = t.getValue(); - for (std::string::iterator iter = value.begin(); - iter != value.end(); - ++iter) { - char ch = *iter; + for (char ch: value) { if (((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) || (ch == '*')) { // Treat '*' as alpha since there are valid diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc index 962a8a6c..215af009 100644 --- a/libqpdf/QPDFWriter.cc +++ b/libqpdf/QPDFWriter.cc @@ -755,10 +755,8 @@ QPDFWriter::setEncryptionParameters( int P = 0; // Create the complement of P, then invert. - for (std::set<int>::iterator iter = bits_to_clear.begin(); - iter != bits_to_clear.end(); - ++iter) { - P |= (1 << ((*iter) - 1)); + for (int b: bits_to_clear) { + P |= (1 << (b - 1)); } P = ~P; @@ -1277,11 +1275,8 @@ QPDFWriter::assignCompressedObjectNumbers(QPDFObjGen const& og) // Reserve numbers for the objects that belong to this object // stream. - for (std::set<QPDFObjGen>::iterator iter = - this->m->object_stream_to_objects[objid].begin(); - iter != this->m->object_stream_to_objects[objid].end(); - ++iter) { - this->m->obj_renumber[*iter] = this->m->next_objid++; + for (auto const& iter: this->m->object_stream_to_objects[objid]) { + this->m->obj_renumber[iter] = this->m->next_objid++; } } @@ -1353,11 +1348,9 @@ QPDFWriter::enqueueObject(QPDFObjectHandle object) } } else if (object.isDictionary()) { std::set<std::string> keys = object.getKeys(); - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { + for (auto const& key: keys) { if (!this->m->linearized) { - enqueueObject(object.getKey(*iter)); + enqueueObject(object.getKey(key)); } } } else { @@ -1401,10 +1394,7 @@ QPDFWriter::writeTrailer( writeString(QUtil::int_to_string(size)); } else { std::set<std::string> keys = trailer.getKeys(); - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { - std::string const& key = *iter; + for (auto const& key: keys) { writeStringQDF(" "); writeStringNoQDF(" "); writeString(QPDF_Name::normalizeName(key)); @@ -1758,11 +1748,7 @@ QPDFWriter::unparseObject( writeStringQDF("\n"); std::set<std::string> keys = object.getKeys(); - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { - std::string const& key = *iter; - + for (auto const& key: keys) { writeStringQDF(indent); writeStringQDF(" "); writeStringNoQDF(" "); @@ -1930,12 +1916,9 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object) pushDiscardFilter(pp_ostream); } else { // Adjust offsets to skip over comment before first object - first = offsets.at(0); - for (std::vector<qpdf_offset_t>::iterator iter = offsets.begin(); - iter != offsets.end(); - ++iter) { - *iter -= first; + for (auto& iter: offsets) { + iter -= first; } // Take one pass at writing pairs of numbers so we can get @@ -1960,12 +1943,9 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object) writeObjectStreamOffsets(offsets, first_obj); } - int count = 0; - for (std::set<QPDFObjGen>::iterator iter = - this->m->object_stream_to_objects[old_id].begin(); - iter != this->m->object_stream_to_objects[old_id].end(); - ++iter, ++count) { - QPDFObjGen obj = *iter; + int count = -1; + for (auto const& obj: this->m->object_stream_to_objects[old_id]) { + ++count; int new_obj = this->m->obj_renumber[obj]; if (first_obj == -1) { first_obj = new_obj; @@ -2197,10 +2177,8 @@ QPDFWriter::generateID() if (trailer.hasKey("/Info")) { QPDFObjectHandle info = trailer.getKey("/Info"); std::set<std::string> keys = info.getKeys(); - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { - QPDFObjectHandle obj = info.getKey(*iter); + for (auto const& key: keys) { + QPDFObjectHandle obj = info.getKey(key); if (obj.isString()) { seed += " "; seed += obj.getStringValue(); @@ -2235,10 +2213,7 @@ QPDFWriter::initializeSpecialStreams() // normalizing. std::vector<QPDFObjectHandle> pages = this->m->pdf.getAllPages(); int num = 0; - for (std::vector<QPDFObjectHandle>::iterator iter = pages.begin(); - iter != pages.end(); - ++iter) { - QPDFObjectHandle& page = *iter; + for (auto& page: pages) { this->m->page_object_to_seq[page.getObjGen()] = ++num; QPDFObjectHandle contents = page.getKey("/Contents"); std::vector<QPDFObjGen> contents_objects; @@ -2322,9 +2297,7 @@ QPDFWriter::generateObjectStreams() } unsigned int n = 0; int cur_ostream = 0; - for (std::vector<QPDFObjGen>::const_iterator iter = eligible.begin(); - iter != eligible.end(); - ++iter) { + for (auto const& iter: eligible) { if ((n % n_per) == 0) { if (n > 0) { QTC::TC("qpdf", "QPDFWriter generate >1 ostream"); @@ -2339,7 +2312,7 @@ QPDFWriter::generateObjectStreams() this->m->pdf.makeIndirectObject(QPDFObjectHandle::newNull()) .getObjectID(); } - this->m->object_to_object_stream[*iter] = cur_ostream; + this->m->object_to_object_stream[iter] = cur_ostream; ++n; } } @@ -2495,10 +2468,7 @@ QPDFWriter::doWriteSetup() if (this->m->linearized) { // Page dictionaries are not allowed to be compressed objects. std::vector<QPDFObjectHandle> pages = this->m->pdf.getAllPages(); - for (std::vector<QPDFObjectHandle>::iterator iter = pages.begin(); - iter != pages.end(); - ++iter) { - QPDFObjectHandle& page = *iter; + for (auto& page: pages) { QPDFObjGen og = page.getObjGen(); if (this->m->object_to_object_stream.count(og)) { QTC::TC("qpdf", "QPDFWriter uncompressing page dictionary"); @@ -2521,12 +2491,9 @@ QPDFWriter::doWriteSetup() } // Generate reverse mapping from object stream to objects - for (std::map<QPDFObjGen, int>::iterator iter = - this->m->object_to_object_stream.begin(); - iter != this->m->object_to_object_stream.end(); - ++iter) { - QPDFObjGen obj = (*iter).first; - int stream = (*iter).second; + for (auto const& iter: this->m->object_to_object_stream) { + QPDFObjGen const& obj = iter.first; + int stream = iter.second; this->m->object_stream_to_objects[stream].insert(obj); this->m->max_ostream_index = std::max( this->m->max_ostream_index, @@ -2591,11 +2558,9 @@ QPDFWriter::getWrittenXRefTable() { std::map<QPDFObjGen, QPDFXRefEntry> result; - for (std::map<int, QPDFXRefEntry>::iterator iter = this->m->xref.begin(); - iter != this->m->xref.end(); - ++iter) { - if (iter->first != 0 && iter->second.getType() != 0) { - result[QPDFObjGen(iter->first, 0)] = iter->second; + for (auto const& iter: this->m->xref) { + if (iter.first != 0 && iter.second.getType() != 0) { + result[QPDFObjGen(iter.first, 0)] = iter.second; } } @@ -2605,10 +2570,8 @@ QPDFWriter::getWrittenXRefTable() void QPDFWriter::enqueuePart(std::vector<QPDFObjectHandle>& part) { - for (std::vector<QPDFObjectHandle>::iterator iter = part.begin(); - iter != part.end(); - ++iter) { - enqueueObject(*iter); + for (auto const& oh: part) { + enqueueObject(oh); } } @@ -2617,14 +2580,11 @@ QPDFWriter::writeEncryptionDictionary() { this->m->encryption_dict_objid = openObject(this->m->encryption_dict_objid); writeString("<<"); - for (std::map<std::string, std::string>::iterator iter = - this->m->encryption_dictionary.begin(); - iter != this->m->encryption_dictionary.end(); - ++iter) { + for (auto const& iter: this->m->encryption_dictionary) { writeString(" "); - writeString((*iter).first); + writeString(iter.first); writeString(" "); - writeString((*iter).second); + writeString(iter.second); } writeString(" >>"); closeObject(this->m->encryption_dict_objid); @@ -2937,10 +2897,8 @@ QPDFWriter::discardGeneration( // maps for QPDF that throw away generation numbers. out.clear(); - for (std::map<QPDFObjGen, int>::const_iterator iter = in.begin(); - iter != in.end(); - ++iter) { - if (out.count((*iter).first.getObj())) { + for (auto const& iter: in) { + if (out.count(iter.first.getObj())) { throw std::runtime_error( "QPDF cannot currently linearize files that contain" " multiple objects with the same object ID and different" @@ -2950,7 +2908,7 @@ QPDFWriter::discardGeneration( " linearizing, and then linearize the result of that" " conversion."); } - out[(*iter).first.getObj()] = (*iter).second; + out[iter.first.getObj()] = iter.second; } } @@ -3020,10 +2978,8 @@ QPDFWriter::writeLinearized() // Assign numbers to all compressed objects in the second half. std::vector<QPDFObjectHandle>* vecs2[] = {&part7, &part8, &part9}; for (int i = 0; i < 3; ++i) { - for (std::vector<QPDFObjectHandle>::iterator iter = (*vecs2[i]).begin(); - iter != (*vecs2[i]).end(); - ++iter) { - assignCompressedObjectNumbers((*iter).getObjGen()); + for (auto const& oh: *vecs2[i]) { + assignCompressedObjectNumbers(oh.getObjGen()); } } int second_half_end = this->m->next_objid - 1; @@ -3049,10 +3005,8 @@ QPDFWriter::writeLinearized() // Assign numbers to all compressed objects in the first half std::vector<QPDFObjectHandle>* vecs1[] = {&part4, &part6}; for (int i = 0; i < 2; ++i) { - for (std::vector<QPDFObjectHandle>::iterator iter = (*vecs1[i]).begin(); - iter != (*vecs1[i]).end(); - ++iter) { - assignCompressedObjectNumbers((*iter).getObjGen()); + for (auto const& oh: *vecs1[i]) { + assignCompressedObjectNumbers(oh.getObjGen()); } } int first_half_end = this->m->next_objid - 1; @@ -3240,11 +3194,7 @@ QPDFWriter::writeLinearized() // Parts 4 through 9 - for (std::list<QPDFObjectHandle>::iterator iter = - this->m->object_queue.begin(); - iter != this->m->object_queue.end(); - ++iter) { - QPDFObjectHandle cur_object = (*iter); + for (auto const& cur_object: this->m->object_queue) { if (cur_object.getObjectID() == part6_end_marker) { first_half_max_obj_offset = this->m->pipeline->getCount(); } @@ -3390,11 +3340,8 @@ QPDFWriter::enqueueObjectsStandard() { if (this->m->preserve_unreferenced_objects) { QTC::TC("qpdf", "QPDFWriter preserve unreferenced standard"); - std::vector<QPDFObjectHandle> all = this->m->pdf.getAllObjects(); - for (std::vector<QPDFObjectHandle>::iterator iter = all.begin(); - iter != all.end(); - ++iter) { - enqueueObject(*iter); + for (auto const& oh: this->m->pdf.getAllObjects()) { + enqueueObject(oh); } } @@ -3407,10 +3354,8 @@ QPDFWriter::enqueueObjectsStandard() // Root is already there, so enqueuing it a second time is a // no-op. std::set<std::string> keys = trailer.getKeys(); - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { - enqueueObject(trailer.getKey(*iter)); + for (auto const& key: keys) { + enqueueObject(trailer.getKey(key)); } } @@ -3424,23 +3369,18 @@ QPDFWriter::enqueueObjectsPCLm() // enqueue all pages first std::vector<QPDFObjectHandle> all = this->m->pdf.getAllPages(); - for (std::vector<QPDFObjectHandle>::iterator iter = all.begin(); - iter != all.end(); - ++iter) { + for (auto& page: all) { // enqueue page - enqueueObject(*iter); + enqueueObject(page); // enqueue page contents stream - enqueueObject((*iter).getKey("/Contents")); + enqueueObject(page.getKey("/Contents")); // enqueue all the strips for each page - QPDFObjectHandle strips = - (*iter).getKey("/Resources").getKey("/XObject"); + QPDFObjectHandle strips = page.getKey("/Resources").getKey("/XObject"); std::set<std::string> keys = strips.getKeys(); - for (std::set<std::string>::iterator image = keys.begin(); - image != keys.end(); - ++image) { - enqueueObject(strips.getKey(*image)); + for (auto const& image: keys) { + enqueueObject(strips.getKey(image)); enqueueObject(QPDFObjectHandle::newStream( &this->m->pdf, image_transform_content)); } diff --git a/libqpdf/QPDF_Array.cc b/libqpdf/QPDF_Array.cc index 0567f66b..8899bf6f 100644 --- a/libqpdf/QPDF_Array.cc +++ b/libqpdf/QPDF_Array.cc @@ -99,10 +99,8 @@ void QPDF_Array::setFromVector(std::vector<QPDFObjectHandle> const& v) { this->elements = SparseOHArray(); - for (std::vector<QPDFObjectHandle>::const_iterator iter = v.begin(); - iter != v.end(); - ++iter) { - this->elements.append(*iter); + for (auto const& iter: v) { + this->elements.append(iter); } } diff --git a/libqpdf/QPDF_Dictionary.cc b/libqpdf/QPDF_Dictionary.cc index e5b88027..44b8a474 100644 --- a/libqpdf/QPDF_Dictionary.cc +++ b/libqpdf/QPDF_Dictionary.cc @@ -12,11 +12,8 @@ QPDF_Dictionary::QPDF_Dictionary( void QPDF_Dictionary::releaseResolved() { - for (std::map<std::string, QPDFObjectHandle>::iterator iter = - this->items.begin(); - iter != this->items.end(); - ++iter) { - QPDFObjectHandle::ReleaseResolver::releaseResolved((*iter).second); + for (auto& iter: this->items) { + QPDFObjectHandle::ReleaseResolver::releaseResolved(iter.second); } } diff --git a/libqpdf/QPDF_encryption.cc b/libqpdf/QPDF_encryption.cc index 00920082..b943777f 100644 --- a/libqpdf/QPDF_encryption.cc +++ b/libqpdf/QPDF_encryption.cc @@ -945,11 +945,7 @@ QPDF::initializeEncryption() if ((V == 4) || (V == 5)) { QPDFObjectHandle CF = encryption_dict.getKey("/CF"); - std::set<std::string> keys = CF.getKeys(); - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { - std::string const& filter = *iter; + for (auto const& filter: CF.getKeys()) { QPDFObjectHandle cdict = CF.getKey(filter); if (cdict.isDictionary()) { encryption_method_e method = e_none; diff --git a/libqpdf/QPDF_linearization.cc b/libqpdf/QPDF_linearization.cc index cdeb89a9..ec422406 100644 --- a/libqpdf/QPDF_linearization.cc +++ b/libqpdf/QPDF_linearization.cc @@ -583,12 +583,9 @@ QPDF::checkLinearizationInternal() // uncompressed. { // local scope std::map<int, int> object_stream_data; - for (std::map<QPDFObjGen, QPDFXRefEntry>::const_iterator iter = - this->m->xref_table.begin(); - iter != this->m->xref_table.end(); - ++iter) { - QPDFObjGen const& og = (*iter).first; - QPDFXRefEntry const& entry = (*iter).second; + for (auto const& iter: this->m->xref_table) { + QPDFObjGen const& og = iter.first; + QPDFXRefEntry const& entry = iter.second; if (entry.getType() == 2) { object_stream_data[og.getObj()] = entry.getObjStreamNumber(); } @@ -613,10 +610,8 @@ QPDF::checkLinearizationInternal() } qpdf_offset_t min_E = -1; qpdf_offset_t max_E = -1; - for (std::vector<QPDFObjectHandle>::iterator iter = this->m->part6.begin(); - iter != this->m->part6.end(); - ++iter) { - QPDFObjGen og((*iter).getObjGen()); + for (auto const& oh: this->m->part6) { + QPDFObjGen og(oh.getObjGen()); if (this->m->obj_cache.count(og) == 0) { // All objects have to have been dereferenced to be classified. throw std::logic_error("linearization part6 object not in cache"); @@ -651,19 +646,15 @@ QPDF::checkLinearizationInternal() // code. if (!errors.empty()) { result = false; - for (std::list<std::string>::iterator iter = errors.begin(); - iter != errors.end(); - ++iter) { - *this->m->err_stream << "WARNING: " << (*iter) << std::endl; + for (auto const& error: errors) { + *this->m->err_stream << "WARNING: " << error << std::endl; } } if (!warnings.empty()) { result = false; - for (std::list<std::string>::iterator iter = warnings.begin(); - iter != warnings.end(); - ++iter) { - *this->m->err_stream << "WARNING: " << (*iter) << std::endl; + for (auto const& warning: warnings) { + *this->m->err_stream << "WARNING: " << warning << std::endl; } } @@ -678,10 +669,7 @@ QPDF::maxEnd(ObjUser const& ou) } std::set<QPDFObjGen> const& ogs = this->m->obj_user_to_objects[ou]; qpdf_offset_t end = 0; - for (std::set<QPDFObjGen>::const_iterator iter = ogs.begin(); - iter != ogs.end(); - ++iter) { - QPDFObjGen const& og = *iter; + for (auto const& og: ogs) { if (this->m->obj_cache.count(og) == 0) { stopOnError("unknown object referenced in object user table"); } @@ -855,28 +843,24 @@ QPDF::checkHPageOffset( computed_shared.insert(obj); } - for (std::set<int>::iterator iter = hint_shared.begin(); - iter != hint_shared.end(); - ++iter) { - if (!computed_shared.count(*iter)) { + for (int iter: hint_shared) { + if (!computed_shared.count(iter)) { // pdlin puts thumbnails here even though it shouldn't warnings.push_back( "page " + QUtil::int_to_string(pageno) + - ": shared object " + QUtil::int_to_string(*iter) + + ": shared object " + QUtil::int_to_string(iter) + ": in hint table but not computed list"); } } - for (std::set<int>::iterator iter = computed_shared.begin(); - iter != computed_shared.end(); - ++iter) { - if (!hint_shared.count(*iter)) { + for (int iter: computed_shared) { + if (!hint_shared.count(iter)) { // Acrobat does not put some things including at least // built-in fonts and procsets here, at least in some // cases. warnings.push_back( "page " + QUtil::int_to_string(pageno) + - ": shared object " + QUtil::int_to_string(*iter) + + ": shared object " + QUtil::int_to_string(iter) + ": in computed list but not hint table"); } } @@ -1290,13 +1274,9 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) std::set<QPDFObjGen> lc_outlines; std::set<QPDFObjGen> lc_root; - for (std::map<QPDFObjGen, std::set<ObjUser>>::iterator oiter = - this->m->object_to_obj_users.begin(); - oiter != this->m->object_to_obj_users.end(); - ++oiter) { - QPDFObjGen const& og = (*oiter).first; - - std::set<ObjUser>& ous = (*oiter).second; + for (auto& oiter: this->m->object_to_obj_users) { + QPDFObjGen const& og = oiter.first; + std::set<ObjUser>& ous = oiter.second; bool in_open_document = false; bool in_first_page = false; @@ -1306,10 +1286,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) bool in_outlines = false; bool is_root = false; - for (std::set<ObjUser>::iterator uiter = ous.begin(); - uiter != ous.end(); - ++uiter) { - ObjUser const& ou = *uiter; + for (auto const& ou: ous) { switch (ou.ou_type) { case ObjUser::ou_trailer_key: if (ou.key == "/Encrypt") { @@ -1396,11 +1373,8 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) { // local scope // Map all page objects to the containing object stream. This // should be a no-op in a properly linearized file. - std::vector<QPDFObjectHandle> t = getAllPages(); - for (std::vector<QPDFObjectHandle>::iterator iter = t.begin(); - iter != t.end(); - ++iter) { - pages.push_back(getUncompressedObject(*iter, object_stream_data)); + for (auto oh: getAllPages()) { + pages.push_back(getUncompressedObject(oh, object_stream_data)); } } int npages = toI(pages.size()); @@ -1427,10 +1401,8 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) " calculating linearization data"); } this->m->part4.push_back(objGenToIndirect(*(lc_root.begin()))); - for (std::set<QPDFObjGen>::iterator iter = lc_open_document.begin(); - iter != lc_open_document.end(); - ++iter) { - this->m->part4.push_back(objGenToIndirect(*iter)); + for (auto const& og: lc_open_document) { + this->m->part4.push_back(objGenToIndirect(og)); } // Part 6: first page objects. Note: implementation note 124 @@ -1458,16 +1430,12 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) // groups private and shared objects contiguously for the sake of // hint tables. - for (std::set<QPDFObjGen>::iterator iter = lc_first_page_private.begin(); - iter != lc_first_page_private.end(); - ++iter) { - this->m->part6.push_back(objGenToIndirect(*iter)); + for (auto const& og: lc_first_page_private) { + this->m->part6.push_back(objGenToIndirect(og)); } - for (std::set<QPDFObjGen>::iterator iter = lc_first_page_shared.begin(); - iter != lc_first_page_shared.end(); - ++iter) { - this->m->part6.push_back(objGenToIndirect(*iter)); + for (auto const& og: lc_first_page_shared) { + this->m->part6.push_back(objGenToIndirect(og)); } // Place the outline dictionary if it goes in the first page section. @@ -1511,10 +1479,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) " calculating linearization data"); } std::set<QPDFObjGen> ogs = this->m->obj_user_to_objects[ou]; - for (std::set<QPDFObjGen>::iterator iter = ogs.begin(); - iter != ogs.end(); - ++iter) { - QPDFObjGen const& og = (*iter); + for (auto const& og: ogs) { if (lc_other_page_private.count(og)) { lc_other_page_private.erase(og); this->m->part7.push_back(objGenToIndirect(og)); @@ -1533,10 +1498,8 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) // Part 8: other pages' shared objects // Order is unimportant. - for (std::set<QPDFObjGen>::iterator iter = lc_other_page_shared.begin(); - iter != lc_other_page_shared.end(); - ++iter) { - this->m->part8.push_back(objGenToIndirect(*iter)); + for (auto const& og: lc_other_page_shared) { + this->m->part8.push_back(objGenToIndirect(og)); } // Part 9: other objects @@ -1555,10 +1518,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) stopOnError("found empty pages tree while" " calculating linearization data"); } - for (std::set<QPDFObjGen>::iterator iter = pages_ogs.begin(); - iter != pages_ogs.end(); - ++iter) { - QPDFObjGen const& og = *iter; + for (auto const& og: pages_ogs) { if (lc_other.count(og)) { lc_other.erase(og); this->m->part9.push_back(objGenToIndirect(og)); @@ -1588,10 +1548,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) std::set<QPDFObjGen>& ogs = this->m ->obj_user_to_objects[ObjUser(ObjUser::ou_thumb, toI(i))]; - for (std::set<QPDFObjGen>::iterator iter = ogs.begin(); - iter != ogs.end(); - ++iter) { - QPDFObjGen const& og = *iter; + for (auto const& og: ogs) { if (lc_thumbnail_private.count(og)) { lc_thumbnail_private.erase(og); this->m->part9.push_back(objGenToIndirect(og)); @@ -1606,10 +1563,8 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) } // Place shared thumbnail objects - for (std::set<QPDFObjGen>::iterator iter = lc_thumbnail_shared.begin(); - iter != lc_thumbnail_shared.end(); - ++iter) { - this->m->part9.push_back(objGenToIndirect(*iter)); + for (auto const& og: lc_thumbnail_shared) { + this->m->part9.push_back(objGenToIndirect(og)); } // Place outlines unless in first page @@ -1618,10 +1573,8 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) } // Place all remaining objects - for (std::set<QPDFObjGen>::iterator iter = lc_other.begin(); - iter != lc_other.end(); - ++iter) { - this->m->part9.push_back(objGenToIndirect(*iter)); + for (auto const& og: lc_other) { + this->m->part9.push_back(objGenToIndirect(og)); } // Make sure we got everything exactly once. @@ -1658,10 +1611,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) std::vector<CHSharedObjectEntry>& shared = this->m->c_shared_object_data.entries; - for (std::vector<QPDFObjectHandle>::iterator iter = this->m->part6.begin(); - iter != this->m->part6.end(); - ++iter) { - QPDFObjectHandle& oh = *iter; + for (auto& oh: this->m->part6) { int obj = oh.getObjectID(); obj_to_index[obj] = toI(shared.size()); shared.push_back(CHSharedObjectEntry(obj)); @@ -1670,11 +1620,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) if (!this->m->part8.empty()) { this->m->c_shared_object_data.first_shared_obj = this->m->part8.at(0).getObjectID(); - for (std::vector<QPDFObjectHandle>::iterator iter = - this->m->part8.begin(); - iter != this->m->part8.end(); - ++iter) { - QPDFObjectHandle& oh = *iter; + for (auto& oh: this->m->part8) { int obj = oh.getObjectID(); obj_to_index[obj] = toI(shared.size()); shared.push_back(CHSharedObjectEntry(obj)); @@ -1696,10 +1642,7 @@ QPDF::calculateLinearizationData(std::map<int, int> const& object_stream_data) " calculating linearization data"); } std::set<QPDFObjGen> const& ogs = this->m->obj_user_to_objects[ou]; - for (std::set<QPDFObjGen>::const_iterator iter = ogs.begin(); - iter != ogs.end(); - ++iter) { - QPDFObjGen const& og = *iter; + for (auto const& og: ogs) { if ((this->m->object_to_obj_users[og].size() > 1) && (obj_to_index.count(og.getObj()) > 0)) { int idx = obj_to_index[og.getObj()]; @@ -1733,10 +1676,8 @@ QPDF::pushOutlinesToPart( this->m->c_outline_data.nobjects = 1; lc_outlines.erase(outlines_og); part.push_back(outlines); - for (std::set<QPDFObjGen>::iterator iter = lc_outlines.begin(); - iter != lc_outlines.end(); - ++iter) { - part.push_back(objGenToIndirect(*iter)); + for (auto const& og: lc_outlines) { + part.push_back(objGenToIndirect(og)); ++this->m->c_outline_data.nobjects; } } diff --git a/libqpdf/QPDF_optimization.cc b/libqpdf/QPDF_optimization.cc index 0c453126..d22aa378 100644 --- a/libqpdf/QPDF_optimization.cc +++ b/libqpdf/QPDF_optimization.cc @@ -90,10 +90,7 @@ QPDF::optimize( // Traverse document-level items std::set<std::string> keys = this->m->trailer.getKeys(); - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { - std::string const& key = *iter; + for (auto const& key: keys) { if (key == "/Root") { // handled separately } else { @@ -105,17 +102,13 @@ QPDF::optimize( } keys = root.getKeys(); - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { + for (auto const& key: keys) { // Technically, /I keys from /Thread dictionaries are supposed // to be handled separately, but we are going to disregard // that specification for now. There is loads of evidence // that pdlin and Acrobat both disregard things like this from // time to time, so this is almost certain not to cause any // problems. - - std::string const& key = *iter; updateObjectMaps( ObjUser(ObjUser::ou_root_key, key), root.getKey(key), @@ -212,10 +205,7 @@ QPDF::pushInheritedAttributesToPageInternal( std::set<std::string> inheritable_keys; std::set<std::string> keys = cur_pages.getKeys(); - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { - std::string const& key = *iter; + for (auto const& key: keys) { if ((key == "/MediaBox") || (key == "/CropBox") || (key == "/Resources") || (key == "/Rotate")) { if (!allow_changes) { @@ -298,11 +288,7 @@ QPDF::pushInheritedAttributesToPageInternal( if (!inheritable_keys.empty()) { QTC::TC("qpdf", "QPDF opt inheritable keys"); - for (std::set<std::string>::iterator iter = - inheritable_keys.begin(); - iter != inheritable_keys.end(); - ++iter) { - std::string const& key = (*iter); + for (auto const& key: inheritable_keys) { key_ancestors[key].pop_back(); if (key_ancestors[key].empty()) { QTC::TC("qpdf", "QPDF opt erase empty key ancestor"); @@ -315,14 +301,11 @@ QPDF::pushInheritedAttributesToPageInternal( } else if (type == "/Page") { // Add all available inheritable attributes not present in // this object to this object. - for (std::map<std::string, std::vector<QPDFObjectHandle>>::iterator - iter = key_ancestors.begin(); - iter != key_ancestors.end(); - ++iter) { - std::string const& key = (*iter).first; + for (auto const& iter: key_ancestors) { + std::string const& key = iter.first; if (!cur_pages.hasKey(key)) { QTC::TC("qpdf", "QPDF opt resource inherited"); - cur_pages.replaceKey(key, (*iter).second.back()); + cur_pages.replaceKey(key, iter.second.back()); } else { QTC::TC("qpdf", "QPDF opt page resource hides ancestor"); } @@ -404,10 +387,7 @@ QPDF::updateObjectMapsInternal( } std::set<std::string> keys = dict.getKeys(); - for (std::set<std::string>::iterator iter = keys.begin(); - iter != keys.end(); - ++iter) { - std::string const& key = *iter; + for (auto const& key: keys) { if (is_page_node && (key == "/Thumb")) { // Traverse page thumbnail dictionaries as a special // case. @@ -454,42 +434,28 @@ QPDF::filterCompressedObjects(std::map<int, int> const& object_stream_data) std::map<ObjUser, std::set<QPDFObjGen>> t_obj_user_to_objects; std::map<QPDFObjGen, std::set<ObjUser>> t_object_to_obj_users; - for (std::map<ObjUser, std::set<QPDFObjGen>>::iterator i1 = - this->m->obj_user_to_objects.begin(); - i1 != this->m->obj_user_to_objects.end(); - ++i1) { - ObjUser const& ou = (*i1).first; - std::set<QPDFObjGen> const& objects = (*i1).second; - for (std::set<QPDFObjGen>::const_iterator i2 = objects.begin(); - i2 != objects.end(); - ++i2) { - QPDFObjGen const& og = (*i2); - std::map<int, int>::const_iterator i3 = - object_stream_data.find(og.getObj()); - if (i3 == object_stream_data.end()) { + for (auto const& i1: this->m->obj_user_to_objects) { + ObjUser const& ou = i1.first; + std::set<QPDFObjGen> const& objects = i1.second; + for (auto const& og: objects) { + auto i2 = object_stream_data.find(og.getObj()); + if (i2 == object_stream_data.end()) { t_obj_user_to_objects[ou].insert(og); } else { - t_obj_user_to_objects[ou].insert(QPDFObjGen((*i3).second, 0)); + t_obj_user_to_objects[ou].insert(QPDFObjGen(i2->second, 0)); } } } - for (std::map<QPDFObjGen, std::set<ObjUser>>::iterator i1 = - this->m->object_to_obj_users.begin(); - i1 != this->m->object_to_obj_users.end(); - ++i1) { - QPDFObjGen const& og = (*i1).first; - std::set<ObjUser> const& objusers = (*i1).second; - for (std::set<ObjUser>::const_iterator i2 = objusers.begin(); - i2 != objusers.end(); - ++i2) { - ObjUser const& ou = (*i2); - std::map<int, int>::const_iterator i3 = - object_stream_data.find(og.getObj()); - if (i3 == object_stream_data.end()) { + for (auto const& i1: this->m->object_to_obj_users) { + QPDFObjGen const& og = i1.first; + std::set<ObjUser> const& objusers = i1.second; + for (auto const& ou: objusers) { + auto i2 = object_stream_data.find(og.getObj()); + if (i2 == object_stream_data.end()) { t_object_to_obj_users[og].insert(ou); } else { - t_object_to_obj_users[QPDFObjGen((*i3).second, 0)].insert(ou); + t_object_to_obj_users[QPDFObjGen(i2->second, 0)].insert(ou); } } } diff --git a/libqpdf/QPDF_pages.cc b/libqpdf/QPDF_pages.cc index c2b2dd1a..89a782f4 100644 --- a/libqpdf/QPDF_pages.cc +++ b/libqpdf/QPDF_pages.cc @@ -319,8 +319,7 @@ int QPDF::findPage(QPDFObjGen const& og) { flattenPagesTree(); - std::map<QPDFObjGen, int>::iterator it = - this->m->pageobj_to_pages_pos.find(og); + auto it = this->m->pageobj_to_pages_pos.find(og); if (it == this->m->pageobj_to_pages_pos.end()) { QTC::TC("qpdf", "QPDF_pages findPage not found"); setLastObjectDescription("page object", og.getObj(), og.getGen()); diff --git a/libqpdf/QUtil.cc b/libqpdf/QUtil.cc index 5fa6c4b9..22962199 100644 --- a/libqpdf/QUtil.cc +++ b/libqpdf/QUtil.cc @@ -786,14 +786,13 @@ QUtil::hex_decode(std::string const& input) { std::string result; size_t pos = 0; - for (std::string::const_iterator p = input.begin(); p != input.end(); ++p) { - char ch = *p; + for (auto ch: input) { bool skip = false; - if ((*p >= 'A') && (*p <= 'F')) { + if ((ch >= 'A') && (ch <= 'F')) { ch = QIntC::to_char(ch - 'A' + 10); - } else if ((*p >= 'a') && (*p <= 'f')) { + } else if ((ch >= 'a') && (ch <= 'f')) { ch = QIntC::to_char(ch - 'a' + 10); - } else if ((*p >= '0') && (*p <= '9')) { + } else if ((ch >= '0') && (ch <= '9')) { ch = QIntC::to_char(ch - '0'); } else { skip = true; @@ -1921,12 +1920,10 @@ QUtil::possible_repaired_encodings(std::string supplied) // De-duplicate std::vector<std::string> t; std::set<std::string> seen; - for (std::vector<std::string>::iterator iter = result.begin(); - iter != result.end(); - ++iter) { - if (!seen.count(*iter)) { - seen.insert(*iter); - t.push_back(*iter); + for (auto const& iter: result) { + if (!seen.count(iter)) { + seen.insert(iter); + t.push_back(iter); } } return t; |