forked from lix-project/lix
libutil: Reserve memory when en/decoding base64
The size of the output when encoding to and decoding from base64 is (roughly) known so we can allocate it in advance to prevent reallocation.
This commit is contained in:
parent
27b952a8a1
commit
1fa0393479
|
@ -1471,6 +1471,7 @@ constexpr char base64Chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
|
||||||
std::string base64Encode(std::string_view s)
|
std::string base64Encode(std::string_view s)
|
||||||
{
|
{
|
||||||
std::string res;
|
std::string res;
|
||||||
|
res.reserve((s.size() + 2) / 3 * 4);
|
||||||
int data = 0, nbits = 0;
|
int data = 0, nbits = 0;
|
||||||
|
|
||||||
for (char c : s) {
|
for (char c : s) {
|
||||||
|
@ -1502,6 +1503,9 @@ std::string base64Decode(std::string_view s)
|
||||||
}();
|
}();
|
||||||
|
|
||||||
std::string res;
|
std::string res;
|
||||||
|
// Some sequences are missing the padding consisting of up to two '='.
|
||||||
|
// vvv
|
||||||
|
res.reserve((s.size() + 2) / 4 * 3);
|
||||||
unsigned int d = 0, bits = 0;
|
unsigned int d = 0, bits = 0;
|
||||||
|
|
||||||
for (char c : s) {
|
for (char c : s) {
|
||||||
|
|
Loading…
Reference in a new issue