]> git.tdb.fi Git - libs/net.git/blobdiff - source/http/utils.cpp
Add a dynamic receiver class for more flexible packet handling
[libs/net.git] / source / http / utils.cpp
index 2f13576166ba9b128f0a111a1e507a8cb645fb96..7e1037e693d42094679d59ec905375eb6cd81ffe 100644 (file)
@@ -1,8 +1,8 @@
+#include "utils.h"
 #include <algorithm>
 #include <msp/strings/format.h>
 #include <msp/strings/regex.h>
 #include <msp/strings/utils.h>
-#include "utils.h"
 
 using namespace std;
 
@@ -31,6 +31,7 @@ namespace Http {
 string urlencode(const string &str, EncodeLevel level)
 {
        string result;
+       result.reserve(str.size());
        for(char c: str)
        {
                if(is_reserved(c, level))
@@ -44,6 +45,7 @@ string urlencode(const string &str, EncodeLevel level)
 string urlencode_plus(const string &str, EncodeLevel level)
 {
        string result;
+       result.reserve(str.size());
        for(char c: str)
        {
                if(c==' ')
@@ -104,16 +106,8 @@ string build_url(const Url &url)
                str += url.scheme+"://";
        str += url.host;
        str += urlencode(url.path);
-       if(!url.query.empty())
-       {
-               str += '?';
-               str += url.query;
-       }
-       if(!url.fragment.empty())
-       {
-               str += '#';
-               str += url.fragment;
-       }
+       append(str, "?", url.query);
+       append(str, "#", url.fragment);
        return str;
 }
 
@@ -135,9 +129,7 @@ string build_query(const Query &query)
        string str;
        for(const auto &kvp: query)
        {
-               if(!str.empty())
-                       str += '&';
-               str += urlencode_plus(kvp.first);
+               append(str, "&", urlencode_plus(kvp.first));
                str += '=';
                str += urlencode_plus(kvp.second);
        }