MCPcopy Create free account
hub / github.com/boostorg/json / decode

Function decode

test/basic_parser.cpp:88–130  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

86}
87
88std::pair<std::size_t, std::size_t>
89decode(void* dest, char const* src, std::size_t len)
90{
91 char* out = static_cast<char*>(dest);
92 auto in = reinterpret_cast<unsigned char const*>(src);
93 unsigned char c3[3], c4[4];
94 int i = 0;
95 int j = 0;
96
97 auto const inverse = base64::get_inverse();
98
99 while(len-- && *in != '=')
100 {
101 auto const v = inverse[*in];
102 if(v == -1)
103 break;
104 ++in;
105 c4[i] = v;
106 if(++i == 4)
107 {
108 c3[0] = (c4[0] << 2) + ((c4[1] & 0x30) >> 4);
109 c3[1] = ((c4[1] & 0xf) << 4) + ((c4[2] & 0x3c) >> 2);
110 c3[2] = ((c4[2] & 0x3) << 6) + c4[3];
111
112 for(i = 0; i < 3; i++)
113 *out++ = c3[i];
114 i = 0;
115 }
116 }
117
118 if(i)
119 {
120 c3[0] = ( c4[0] << 2) + ((c4[1] & 0x30) >> 4);
121 c3[1] = ((c4[1] & 0xf) << 4) + ((c4[2] & 0x3c) >> 2);
122 c3[2] = ((c4[2] & 0x3) << 6) + c4[3];
123
124 for(j = 0; j < i - 1; j++)
125 *out++ = c3[j];
126 }
127
128 return {out - static_cast<char*>(dest),
129 in - reinterpret_cast<unsigned char const*>(src)};
130}
131
132} // base64
133

Callers 1

testIssue20Function · 0.85

Calls 1

get_inverseFunction · 0.85

Tested by

no test coverage detected