Commit 1a7d3700a665a5ae29c8bab67ddc7fee7040b731

Authored by Jay Berkenbilt
1 parent b89b1d77

Fix unnecessary copies in auto iter (fixes #426)

Also switch to colon-style iteration in some cases. Thanks to Dean
Scarff for drawing this to my attention after detecting some
unnecessary copies with
https://clang.llvm.org/extra/clang-tidy/checks/performance-for-range-copy.html
libqpdf/JSON.cc
... ... @@ -346,7 +346,7 @@ JSON::checkSchemaInternal(JSON_value* this_v, JSON_value* sch_v,
346 346 if (sch_dict && (! pattern_key.empty()))
347 347 {
348 348 auto pattern_schema = sch_dict->members[pattern_key].getPointer();
349   - for (auto iter: this_dict->members)
  349 + for (auto const& iter: this_dict->members)
350 350 {
351 351 std::string const& key = iter.first;
352 352 checkSchemaInternal(
... ...
libqpdf/QPDFCryptoProvider.cc
... ... @@ -110,10 +110,9 @@ QPDFCryptoProvider::getRegisteredImpls()
110 110 {
111 111 std::set<std::string> result;
112 112 QPDFCryptoProvider& p = getInstance();
113   - for (auto iter = p.m->providers.begin(); iter != p.m->providers.end();
114   - ++iter)
  113 + for (auto const& iter: p.m->providers)
115 114 {
116   - result.insert((*iter).first);
  115 + result.insert(iter.first);
117 116 }
118 117 return result;
119 118 }
... ...
libqpdf/QPDF_Array.cc
... ... @@ -146,9 +146,8 @@ QPDF_Array::getElementsForShallowCopy() const
146 146 void
147 147 QPDF_Array::addExplicitElementsToList(std::list<QPDFObjectHandle>& l) const
148 148 {
149   - for (auto iter = this->elements.begin();
150   - iter != this->elements.end(); ++iter)
  149 + for (auto const& iter: this->elements)
151 150 {
152   - l.push_back((*iter).second);
  151 + l.push_back(iter.second);
153 152 }
154 153 }
... ...
libqpdf/SparseOHArray.cc
... ... @@ -30,7 +30,7 @@ SparseOHArray::at(size_t idx) const
30 30 throw std::logic_error(
31 31 "INTERNAL ERROR: bounds error accessing SparseOHArray element");
32 32 }
33   - auto iter = this->elements.find(idx);
  33 + auto const& iter = this->elements.find(idx);
34 34 if (iter == this->elements.end())
35 35 {
36 36 return QPDFObjectHandle::newNull();
... ... @@ -57,10 +57,9 @@ SparseOHArray::remove_last()
57 57 void
58 58 SparseOHArray::releaseResolved()
59 59 {
60   - for (auto iter = this->elements.begin();
61   - iter != this->elements.end(); ++iter)
  60 + for (auto iter: this->elements)
62 61 {
63   - QPDFObjectHandle::ReleaseResolver::releaseResolved((*iter).second);
  62 + QPDFObjectHandle::ReleaseResolver::releaseResolved(iter.second);
64 63 }
65 64 }
66 65  
... ... @@ -89,16 +88,15 @@ SparseOHArray::erase(size_t idx)
89 88 throw std::logic_error("bounds error erasing item from SparseOHArray");
90 89 }
91 90 decltype(this->elements) dest;
92   - for (auto iter = this->elements.begin();
93   - iter != this->elements.end(); ++iter)
  91 + for (auto const& iter: this->elements)
94 92 {
95   - if ((*iter).first < idx)
  93 + if (iter.first < idx)
96 94 {
97   - dest.insert(*iter);
  95 + dest.insert(iter);
98 96 }
99   - else if ((*iter).first > idx)
  97 + else if (iter.first > idx)
100 98 {
101   - dest[(*iter).first - 1] = (*iter).second;
  99 + dest[iter.first - 1] = iter.second;
102 100 }
103 101 }
104 102 this->elements = dest;
... ... @@ -120,16 +118,15 @@ SparseOHArray::insert(size_t idx, QPDFObjectHandle oh)
120 118 else
121 119 {
122 120 decltype(this->elements) dest;
123   - for (auto iter = this->elements.begin();
124   - iter != this->elements.end(); ++iter)
  121 + for (auto const& iter: this->elements)
125 122 {
126   - if ((*iter).first < idx)
  123 + if (iter.first < idx)
127 124 {
128   - dest.insert(*iter);
  125 + dest.insert(iter);
129 126 }
130 127 else
131 128 {
132   - dest[(*iter).first + 1] = (*iter).second;
  129 + dest[iter.first + 1] = iter.second;
133 130 }
134 131 }
135 132 this->elements = dest;
... ...
qpdf/fix-qdf.cc
... ... @@ -387,13 +387,12 @@ QdfFixer::writeOstream()
387 387 auto onum = ostream_id;
388 388 std::string offsets;
389 389 auto n = ostream_offsets.size();
390   - for (auto iter = ostream_offsets.begin();
391   - iter != ostream_offsets.end(); ++iter)
  390 + for (auto iter: ostream_offsets)
392 391 {
393   - (*iter) -= QIntC::to_offset(first);
  392 + iter -= QIntC::to_offset(first);
394 393 ++onum;
395 394 offsets += QUtil::int_to_string(onum) + " " +
396   - QUtil::int_to_string(*iter) + "\n";
  395 + QUtil::int_to_string(iter) + "\n";
397 396 }
398 397 auto offset_adjust = QIntC::to_offset(offsets.size());
399 398 first += offset_adjust;
... ...
qpdf/qpdf.cc
... ... @@ -1694,11 +1694,11 @@ ArgParser::argShowCrypto()
1694 1694 auto crypto = QPDFCryptoProvider::getRegisteredImpls();
1695 1695 std::string default_crypto = QPDFCryptoProvider::getDefaultProvider();
1696 1696 std::cout << default_crypto << std::endl;
1697   - for (auto iter = crypto.begin(); iter != crypto.end(); ++iter)
  1697 + for (auto const& iter: crypto)
1698 1698 {
1699   - if (*iter != default_crypto)
  1699 + if (iter != default_crypto)
1700 1700 {
1701   - std::cout << *iter << std::endl;
  1701 + std::cout << iter << std::endl;
1702 1702 }
1703 1703 }
1704 1704 }
... ... @@ -3646,7 +3646,7 @@ static std::set&lt;QPDFObjGen&gt;
3646 3646 get_wanted_json_objects(Options& o)
3647 3647 {
3648 3648 std::set<QPDFObjGen> wanted_og;
3649   - for (auto iter: o.json_objects)
  3649 + for (auto const& iter: o.json_objects)
3650 3650 {
3651 3651 bool trailer;
3652 3652 int obj = 0;
... ...