version 0.1.9
[fms.git] / src / base64.cpp
index 06491fc..a31a701 100644 (file)
@@ -13,6 +13,8 @@ const bool Encode(const std::vector<unsigned char> &data, std::string &encoded)
 {\r
        std::vector<unsigned char>::size_type currentdatapos=0;\r
 \r
+       //reserve space for encoded data 4*input/3\r
+       encoded.reserve((4L*data.size())/3L);\r
        while(currentdatapos<data.size())\r
        {\r
                encoded.push_back(base64chars[(data[currentdatapos]>>2 & 0x3F)]);\r
@@ -46,6 +48,12 @@ const bool Decode(const std::string &encoded, std::vector<unsigned char> &data)
        std::string::size_type encodedpos=0;\r
        unsigned char currentbyte=0;\r
 \r
+       // reserve space for decoded data (encoded size*3/4)\r
+       if(encoded.size()>1)\r
+       {\r
+               data.reserve((encoded.size()*3)/4);\r
+       }\r
+\r
        // loop while encoded pos fits in current size\r
        while(encodedpos+3<encoded.size())\r
        {\r