MCPcopy Create free account
hub / github.com/DISTRHO/DPF / d_getChunkFromBase64String_impl

Function d_getChunkFromBase64String_impl

distrho/extra/Base64.hpp:88–143  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

86// --------------------------------------------------------------------------------------------------------------------
87
88static inline
89void d_getChunkFromBase64String_impl(std::vector<uint8_t>& vector, const char* const base64string)
90{
91 vector.clear();
92 DISTRHO_SAFE_ASSERT_RETURN(base64string != nullptr,);
93
94 uint i=0, j=0;
95 uint charArray3[3], charArray4[4];
96
97 vector.reserve(std::strlen(base64string)*3/4 + 4);
98
99 for (std::size_t l=0, len=std::strlen(base64string); l<len; ++l)
100 {
101 const char c = base64string[l];
102
103 if (c == '\0' || c == '=')
104 break;
105 if (c == ' ' || c == '\n')
106 continue;
107
108 DISTRHO_SAFE_ASSERT_CONTINUE(DistrhoBase64Helpers::isBase64Char(c));
109
110 charArray4[i++] = static_cast<uint>(c);
111
112 if (i == 4)
113 {
114 for (i=0; i<4; ++i)
115 charArray4[i] = DistrhoBase64Helpers::findBase64CharIndex(static_cast<char>(charArray4[i]));
116
117 charArray3[0] = (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4);
118 charArray3[1] = ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2);
119 charArray3[2] = ((charArray4[2] & 0x3) << 6) + charArray4[3];
120
121 for (i=0; i<3; ++i)
122 vector.push_back(static_cast<uint8_t>(charArray3[i]));
123
124 i = 0;
125 }
126 }
127
128 if (i != 0)
129 {
130 for (j=0; j<i && j<4; ++j)
131 charArray4[j] = DistrhoBase64Helpers::findBase64CharIndex(static_cast<char>(charArray4[j]));
132
133 for (j=i; j<4; ++j)
134 charArray4[j] = 0;
135
136 charArray3[0] = (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4);
137 charArray3[1] = ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2);
138 charArray3[2] = ((charArray4[2] & 0x3) << 6) + charArray4[3];
139
140 for (j=0; i>0 && j<i-1; j++)
141 vector.push_back(static_cast<uint8_t>(charArray3[j]));
142 }
143}
144
145static inline

Callers 1

Calls 3

isBase64CharFunction · 0.85
findBase64CharIndexFunction · 0.85
clearMethod · 0.45

Tested by

no test coverage detected