@@ -194,21 +194,29 @@ char ToLower(char c) {
194194 return std::tolower (c, std::locale::classic ());
195195}
196196
197- std::string ToLower (const std::string& in) {
198- std::string out (in.size (), 0 );
199- for (size_t i = 0 ; i < in.size (); ++i)
200- out[i] = ToLower (in[i]);
197+ template <typename T>
198+ std::string ToLower (const T& in) {
199+ auto it = std::cbegin (in);
200+ auto end = std::cend (in);
201+ std::string out (std::distance (it, end), 0 );
202+ size_t i;
203+ for (i = 0 ; it != end; ++it, ++i) out[i] = ToLower (*it);
204+ DCHECK_EQ (i, out.size ());
201205 return out;
202206}
203207
204208char ToUpper (char c) {
205209 return std::toupper (c, std::locale::classic ());
206210}
207211
208- std::string ToUpper (const std::string& in) {
209- std::string out (in.size (), 0 );
210- for (size_t i = 0 ; i < in.size (); ++i)
211- out[i] = ToUpper (in[i]);
212+ template <typename T>
213+ std::string ToUpper (const T& in) {
214+ auto it = std::cbegin (in);
215+ auto end = std::cend (in);
216+ std::string out (std::distance (it, end), 0 );
217+ size_t i;
218+ for (i = 0 ; it != end; ++it, ++i) out[i] = ToUpper (*it);
219+ DCHECK_EQ (i, out.size ());
212220 return out;
213221}
214222
0 commit comments