X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fhttp%2Futils.cpp;h=8aa966cd09fc88a45092d46b4d37e72323beb9c3;hb=cc2e643d6ec3025db3fb6f0a4c1f77af05cf1026;hp=e52309aae50aab02648a1f1278d6787027063e74;hpb=9a4e72786cb5026fe80a16337f5b916310c7a562;p=libs%2Fnet.git diff --git a/source/http/utils.cpp b/source/http/utils.cpp index e52309a..8aa966c 100644 --- a/source/http/utils.cpp +++ b/source/http/utils.cpp @@ -1,8 +1,8 @@ +#include "utils.h" #include #include #include #include -#include "utils.h" using namespace std; @@ -31,12 +31,13 @@ namespace Http { string urlencode(const string &str, EncodeLevel level) { string result; - for(string::const_iterator i=str.begin(); i!=str.end(); ++i) + result.reserve(str.size()); + for(char c: str) { - if(is_reserved(*i, level)) - result += format("%%%02X", *i); + if(is_reserved(c, level)) + result += format("%%%02X", c); else - result += *i; + result += c; } return result; } @@ -44,14 +45,15 @@ string urlencode(const string &str, EncodeLevel level) string urlencode_plus(const string &str, EncodeLevel level) { string result; - for(string::const_iterator i=str.begin(); i!=str.end(); ++i) + result.reserve(str.size()); + for(char c: str) { - if(*i==' ') + if(c==' ') result += '+'; - else if(is_reserved(*i, level)) - result += format("%%%02X", *i); + else if(is_reserved(c, level)) + result += format("%%%02X", c); else - result += *i; + result += c; } return result; } @@ -119,14 +121,13 @@ string build_url(const Url &url) Query parse_query(const std::string &str) { - vector parts = split(str, '&'); Query query; - for(vector::const_iterator i=parts.begin(); i!=parts.end(); ++i) + for(const string &p: split(str, '&')) { - string::size_type equals = i->find('='); - string &value = query[urldecode(i->substr(0, equals))]; + string::size_type equals = p.find('='); + string &value = query[urldecode(p.substr(0, equals))]; if(equals!=string::npos) - value = urldecode(i->substr(equals+1)); + value = urldecode(p.substr(equals+1)); } return query; } @@ -134,13 +135,13 @@ Query parse_query(const std::string &str) string build_query(const Query &query) { string str; - for(Query::const_iterator i=query.begin(); i!=query.end(); ++i) + for(const auto &kvp: query) { - if(i!=query.begin()) + if(!str.empty()) str += '&'; - str += urlencode_plus(i->first); + str += urlencode_plus(kvp.first); str += '='; - str += urlencode_plus(i->second); + str += urlencode_plus(kvp.second); } return str; }