27
27
28
28
namespace jsoncons {
29
29
30
+ template <typename InputIt>
31
+ struct to_bytes_result
32
+ {
33
+ InputIt it;
34
+ conv_errc ec;
35
+ };
36
+
30
37
// Algorithms
31
38
32
39
namespace detail {
33
40
34
41
template <typename InputIt,typename Container>
35
42
typename std::enable_if<std::is_same<typename std::iterator_traits<InputIt>::value_type,uint8_t >::value,size_t >::type
36
- encode_base64_generic (InputIt first, InputIt last, const char alphabet[65 ], Container& result)
43
+ bytes_to_base64_generic (InputIt first, InputIt last, const char alphabet[65 ], Container& result)
37
44
{
38
45
std::size_t count = 0 ;
39
46
unsigned char a3[3 ];
@@ -92,8 +99,8 @@ namespace detail {
92
99
}
93
100
94
101
template <typename InputIt,typename F,typename Container>
95
- typename std::enable_if<ext_traits::is_back_insertable_byte_container<Container>::value,decode_result <InputIt>>::type
96
- decode_base64_generic (InputIt first, InputIt last,
102
+ typename std::enable_if<ext_traits::is_back_insertable_byte_container<Container>::value,to_bytes_result <InputIt>>::type
103
+ base64_to_bytes_generic (InputIt first, InputIt last,
97
104
const uint8_t reverse_alphabet[256 ],
98
105
F f,
99
106
Container& result)
@@ -106,7 +113,7 @@ namespace detail {
106
113
{
107
114
if (!f (*first))
108
115
{
109
- return decode_result <InputIt>{first, conv_errc::conversion_failed};
116
+ return to_bytes_result <InputIt>{first, conv_errc::conversion_failed};
110
117
}
111
118
112
119
a4[i++] = static_cast <uint8_t >(*first++);
@@ -144,14 +151,14 @@ namespace detail {
144
151
result.push_back (a3[j]);
145
152
}
146
153
}
147
- return decode_result <InputIt>{last, conv_errc::success};
154
+ return to_bytes_result <InputIt>{last, conv_errc::success};
148
155
}
149
156
150
157
} // namespace detail
151
158
152
159
template <typename InputIt,typename Container>
153
160
typename std::enable_if<std::is_same<typename std::iterator_traits<InputIt>::value_type,uint8_t >::value,size_t >::type
154
- encode_base16 (InputIt first, InputIt last, Container& result)
161
+ bytes_to_base16 (InputIt first, InputIt last, Container& result)
155
162
{
156
163
static constexpr char characters[] = " 0123456789ABCDEF" ;
157
164
@@ -166,24 +173,24 @@ namespace detail {
166
173
167
174
template <typename InputIt,typename Container>
168
175
typename std::enable_if<std::is_same<typename std::iterator_traits<InputIt>::value_type,uint8_t >::value,size_t >::type
169
- encode_base64url (InputIt first, InputIt last, Container& result)
176
+ bytes_to_base64url (InputIt first, InputIt last, Container& result)
170
177
{
171
178
static constexpr char alphabet[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"
172
179
" abcdefghijklmnopqrstuvwxyz"
173
180
" 0123456789-_"
174
181
" \0 " ;
175
- return detail::encode_base64_generic (first, last, alphabet, result);
182
+ return detail::bytes_to_base64_generic (first, last, alphabet, result);
176
183
}
177
184
178
185
template <typename InputIt,typename Container>
179
186
typename std::enable_if<std::is_same<typename std::iterator_traits<InputIt>::value_type,uint8_t >::value,size_t >::type
180
- encode_base64 (InputIt first, InputIt last, Container& result)
187
+ bytes_to_base64 (InputIt first, InputIt last, Container& result)
181
188
{
182
189
static constexpr char alphabet[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"
183
190
" abcdefghijklmnopqrstuvwxyz"
184
191
" 0123456789+/"
185
192
" =" ;
186
- return detail::encode_base64_generic (first, last, alphabet, result);
193
+ return detail::bytes_to_base64_generic (first, last, alphabet, result);
187
194
}
188
195
189
196
template <typename Char>
@@ -207,8 +214,8 @@ namespace detail {
207
214
// decode
208
215
209
216
template <typename InputIt,typename Container>
210
- typename std::enable_if<ext_traits::is_back_insertable_byte_container<Container>::value,decode_result <InputIt>>::type
211
- decode_base64url (InputIt first, InputIt last, Container& result)
217
+ typename std::enable_if<ext_traits::is_back_insertable_byte_container<Container>::value,to_bytes_result <InputIt>>::type
218
+ base64url_to_bytes (InputIt first, InputIt last, Container& result)
212
219
{
213
220
static constexpr uint8_t reverse_alphabet[256 ] = {
214
221
0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
@@ -228,15 +235,15 @@ namespace detail {
228
235
0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
229
236
0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff
230
237
};
231
- auto retval = jsoncons::detail::decode_base64_generic (first, last, reverse_alphabet,
238
+ auto retval = jsoncons::detail::base64_to_bytes_generic (first, last, reverse_alphabet,
232
239
is_base64url<typename std::iterator_traits<InputIt>::value_type>,
233
240
result);
234
- return retval.ec == conv_errc::success ? retval : decode_result <InputIt>{retval.it , conv_errc::not_base64url};
241
+ return retval.ec == conv_errc::success ? retval : to_bytes_result <InputIt>{retval.it , conv_errc::not_base64url};
235
242
}
236
243
237
244
template <typename InputIt,typename Container>
238
- typename std::enable_if<ext_traits::is_back_insertable_byte_container<Container>::value,decode_result <InputIt>>::type
239
- decode_base64 (InputIt first, InputIt last, Container& result)
245
+ typename std::enable_if<ext_traits::is_back_insertable_byte_container<Container>::value,to_bytes_result <InputIt>>::type
246
+ base64_to_bytes (InputIt first, InputIt last, Container& result)
240
247
{
241
248
static constexpr uint8_t reverse_alphabet[256 ] = {
242
249
0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
@@ -256,20 +263,20 @@ namespace detail {
256
263
0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
257
264
0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff
258
265
};
259
- auto retval = jsoncons::detail::decode_base64_generic (first, last, reverse_alphabet,
266
+ auto retval = jsoncons::detail::base64_to_bytes_generic (first, last, reverse_alphabet,
260
267
is_base64<typename std::iterator_traits<InputIt>::value_type>,
261
268
result);
262
- return retval.ec == conv_errc::success ? retval : decode_result <InputIt>{retval.it , conv_errc::not_base64};
269
+ return retval.ec == conv_errc::success ? retval : to_bytes_result <InputIt>{retval.it , conv_errc::not_base64};
263
270
}
264
271
265
272
template <typename InputIt,typename Container>
266
- typename std::enable_if<ext_traits::is_back_insertable_byte_container<Container>::value,decode_result <InputIt>>::type
267
- decode_base16 (InputIt first, InputIt last, Container& result)
273
+ typename std::enable_if<ext_traits::is_back_insertable_byte_container<Container>::value,to_bytes_result <InputIt>>::type
274
+ base16_to_bytes (InputIt first, InputIt last, Container& result)
268
275
{
269
276
std::size_t len = std::distance (first,last);
270
277
if (len & 1 )
271
278
{
272
- return decode_result <InputIt>{first, conv_errc::not_base16};
279
+ return to_bytes_result <InputIt>{first, conv_errc::not_base16};
273
280
}
274
281
275
282
InputIt it = first;
@@ -287,7 +294,7 @@ namespace detail {
287
294
}
288
295
else
289
296
{
290
- return decode_result <InputIt>{first, conv_errc::not_base16};
297
+ return to_bytes_result <InputIt>{first, conv_errc::not_base16};
291
298
}
292
299
293
300
auto b = *it++;
@@ -301,12 +308,12 @@ namespace detail {
301
308
}
302
309
else
303
310
{
304
- return decode_result <InputIt>{first, conv_errc::not_base16};
311
+ return to_bytes_result <InputIt>{first, conv_errc::not_base16};
305
312
}
306
313
307
314
result.push_back (val);
308
315
}
309
- return decode_result <InputIt>{last, conv_errc::success};
316
+ return to_bytes_result <InputIt>{last, conv_errc::success};
310
317
}
311
318
312
319
struct byte_traits
0 commit comments