Skip to content

Commit 01f3340

Browse files
committedSep 24, 2019
speedup base64 code by reserving memory
1 parent a9b8b6d commit 01f3340

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed
 

‎ixcrypto/ixcrypto/IXBase64.cpp

+9-2
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,21 @@ namespace ix
3535
"0123456789+/";
3636

3737
std::string base64_encode(const std::string& data, size_t len)
38+
{
39+
const char* bytes_to_encode = data.c_str();
40+
return base64_encode(bytes_to_encode, len);
41+
}
42+
43+
std::string base64_encode(const char* bytes_to_encode, size_t len)
3844
{
3945
std::string ret;
46+
ret.reserve(((len + 2) / 3) * 4);
47+
4048
int i = 0;
4149
int j = 0;
4250
unsigned char char_array_3[3];
4351
unsigned char char_array_4[4];
4452

45-
const char* bytes_to_encode = data.c_str();
46-
4753
while(len--)
4854
{
4955
char_array_3[i++] = *(bytes_to_encode++);
@@ -95,6 +101,7 @@ namespace ix
95101
int in_ = 0;
96102
unsigned char char_array_4[4], char_array_3[3];
97103
std::string ret;
104+
ret.reserve(((in_len + 3) / 4) * 3);
98105

99106
while(in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_]))
100107
{

‎ixcrypto/ixcrypto/IXBase64.h

+1
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@
1111
namespace ix
1212
{
1313
std::string base64_encode(const std::string& data, size_t len);
14+
std::string base64_encode(const char* data, size_t len);
1415
std::string base64_decode(const std::string& encoded_string);
1516
} // namespace ix

0 commit comments

Comments
 (0)
Please sign in to comment.