22 {
24 if (data.
empty())
return out;
25
26 fl::size encoded_len = 4 * ((data.
size() + 2) / 3);
28
29 fl::size i = 0;
30 fl::size len = data.
size();
31
32 while (i + 2 < len) {
33 fl::u32 triple = (fl::u32(data[i]) << 16) |
34 (fl::u32(data[i + 1]) << 8) |
35 fl::u32(data[i + 2]);
36 out += kBase64Chars[(triple >> 18) & 0x3F];
37 out += kBase64Chars[(triple >> 12) & 0x3F];
38 out += kBase64Chars[(triple >> 6) & 0x3F];
39 out += kBase64Chars[triple & 0x3F];
40 i += 3;
41 }
42
43
44 if (i < len) {
45 fl::u32 triple = fl::u32(data[i]) << 16;
46 if (i + 1 < len) {
47 triple |= fl::u32(data[i + 1]) << 8;
48 }
51 if (i + 1 < len) {
53 } else {
54 out += '=';
55 }
56 out += '=';
57 }
58
59 return out;
60}
void reserve(fl::size newCapacity) FL_NOEXCEPT
constexpr bool empty() const FL_NOEXCEPT
constexpr fl::size size() const FL_NOEXCEPT
static const char kBase64Chars[]