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,7 +346,7 @@ JSON::checkSchemaInternal(JSON_value* this_v, JSON_value* sch_v,
346 if (sch_dict && (! pattern_key.empty())) 346 if (sch_dict && (! pattern_key.empty()))
347 { 347 {
348 auto pattern_schema = sch_dict->members[pattern_key].getPointer(); 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 std::string const& key = iter.first; 351 std::string const& key = iter.first;
352 checkSchemaInternal( 352 checkSchemaInternal(
libqpdf/QPDFCryptoProvider.cc
@@ -110,10 +110,9 @@ QPDFCryptoProvider::getRegisteredImpls() @@ -110,10 +110,9 @@ QPDFCryptoProvider::getRegisteredImpls()
110 { 110 {
111 std::set<std::string> result; 111 std::set<std::string> result;
112 QPDFCryptoProvider& p = getInstance(); 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 return result; 117 return result;
119 } 118 }
libqpdf/QPDF_Array.cc
@@ -146,9 +146,8 @@ QPDF_Array::getElementsForShallowCopy() const @@ -146,9 +146,8 @@ QPDF_Array::getElementsForShallowCopy() const
146 void 146 void
147 QPDF_Array::addExplicitElementsToList(std::list<QPDFObjectHandle>& l) const 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,7 +30,7 @@ SparseOHArray::at(size_t idx) const
30 throw std::logic_error( 30 throw std::logic_error(
31 "INTERNAL ERROR: bounds error accessing SparseOHArray element"); 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 if (iter == this->elements.end()) 34 if (iter == this->elements.end())
35 { 35 {
36 return QPDFObjectHandle::newNull(); 36 return QPDFObjectHandle::newNull();
@@ -57,10 +57,9 @@ SparseOHArray::remove_last() @@ -57,10 +57,9 @@ SparseOHArray::remove_last()
57 void 57 void
58 SparseOHArray::releaseResolved() 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,16 +88,15 @@ SparseOHArray::erase(size_t idx)
89 throw std::logic_error("bounds error erasing item from SparseOHArray"); 88 throw std::logic_error("bounds error erasing item from SparseOHArray");
90 } 89 }
91 decltype(this->elements) dest; 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 this->elements = dest; 102 this->elements = dest;
@@ -120,16 +118,15 @@ SparseOHArray::insert(size_t idx, QPDFObjectHandle oh) @@ -120,16 +118,15 @@ SparseOHArray::insert(size_t idx, QPDFObjectHandle oh)
120 else 118 else
121 { 119 {
122 decltype(this->elements) dest; 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 else 127 else
131 { 128 {
132 - dest[(*iter).first + 1] = (*iter).second; 129 + dest[iter.first + 1] = iter.second;
133 } 130 }
134 } 131 }
135 this->elements = dest; 132 this->elements = dest;
qpdf/fix-qdf.cc
@@ -387,13 +387,12 @@ QdfFixer::writeOstream() @@ -387,13 +387,12 @@ QdfFixer::writeOstream()
387 auto onum = ostream_id; 387 auto onum = ostream_id;
388 std::string offsets; 388 std::string offsets;
389 auto n = ostream_offsets.size(); 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 ++onum; 393 ++onum;
395 offsets += QUtil::int_to_string(onum) + " " + 394 offsets += QUtil::int_to_string(onum) + " " +
396 - QUtil::int_to_string(*iter) + "\n"; 395 + QUtil::int_to_string(iter) + "\n";
397 } 396 }
398 auto offset_adjust = QIntC::to_offset(offsets.size()); 397 auto offset_adjust = QIntC::to_offset(offsets.size());
399 first += offset_adjust; 398 first += offset_adjust;
qpdf/qpdf.cc
@@ -1694,11 +1694,11 @@ ArgParser::argShowCrypto() @@ -1694,11 +1694,11 @@ ArgParser::argShowCrypto()
1694 auto crypto = QPDFCryptoProvider::getRegisteredImpls(); 1694 auto crypto = QPDFCryptoProvider::getRegisteredImpls();
1695 std::string default_crypto = QPDFCryptoProvider::getDefaultProvider(); 1695 std::string default_crypto = QPDFCryptoProvider::getDefaultProvider();
1696 std::cout << default_crypto << std::endl; 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,7 +3646,7 @@ static std::set&lt;QPDFObjGen&gt;
3646 get_wanted_json_objects(Options& o) 3646 get_wanted_json_objects(Options& o)
3647 { 3647 {
3648 std::set<QPDFObjGen> wanted_og; 3648 std::set<QPDFObjGen> wanted_og;
3649 - for (auto iter: o.json_objects) 3649 + for (auto const& iter: o.json_objects)
3650 { 3650 {
3651 bool trailer; 3651 bool trailer;
3652 int obj = 0; 3652 int obj = 0;