2727
2828namespace jsoncons {
2929
30+ template <typename InputIt>
31+ struct to_bytes_result
32+ {
33+ InputIt it;
34+ conv_errc ec;
35+ };
36+
3037 // Algorithms
3138
3239namespace detail {
3340
3441 template <typename InputIt,typename Container>
3542 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)
3744 {
3845 std::size_t count = 0 ;
3946 unsigned char a3[3 ];
@@ -92,8 +99,8 @@ namespace detail {
9299 }
93100
94101 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,
97104 const uint8_t reverse_alphabet[256 ],
98105 F f,
99106 Container& result)
@@ -106,7 +113,7 @@ namespace detail {
106113 {
107114 if (!f (*first))
108115 {
109- return decode_result <InputIt>{first, conv_errc::conversion_failed};
116+ return to_bytes_result <InputIt>{first, conv_errc::conversion_failed};
110117 }
111118
112119 a4[i++] = static_cast <uint8_t >(*first++);
@@ -144,14 +151,14 @@ namespace detail {
144151 result.push_back (a3[j]);
145152 }
146153 }
147- return decode_result <InputIt>{last, conv_errc::success};
154+ return to_bytes_result <InputIt>{last, conv_errc::success};
148155 }
149156
150157} // namespace detail
151158
152159 template <typename InputIt,typename Container>
153160 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)
155162 {
156163 static constexpr char characters[] = " 0123456789ABCDEF" ;
157164
@@ -166,24 +173,24 @@ namespace detail {
166173
167174 template <typename InputIt,typename Container>
168175 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)
170177 {
171178 static constexpr char alphabet[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"
172179 " abcdefghijklmnopqrstuvwxyz"
173180 " 0123456789-_"
174181 " \0 " ;
175- return detail::encode_base64_generic (first, last, alphabet, result);
182+ return detail::bytes_to_base64_generic (first, last, alphabet, result);
176183 }
177184
178185 template <typename InputIt,typename Container>
179186 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)
181188 {
182189 static constexpr char alphabet[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"
183190 " abcdefghijklmnopqrstuvwxyz"
184191 " 0123456789+/"
185192 " =" ;
186- return detail::encode_base64_generic (first, last, alphabet, result);
193+ return detail::bytes_to_base64_generic (first, last, alphabet, result);
187194 }
188195
189196 template <typename Char>
@@ -207,8 +214,8 @@ namespace detail {
207214 // decode
208215
209216 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)
212219 {
213220 static constexpr uint8_t reverse_alphabet[256 ] = {
214221 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
@@ -228,15 +235,15 @@ namespace detail {
228235 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
229236 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff
230237 };
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,
232239 is_base64url<typename std::iterator_traits<InputIt>::value_type>,
233240 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};
235242 }
236243
237244 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)
240247 {
241248 static constexpr uint8_t reverse_alphabet[256 ] = {
242249 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
@@ -256,20 +263,20 @@ namespace detail {
256263 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
257264 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff
258265 };
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,
260267 is_base64<typename std::iterator_traits<InputIt>::value_type>,
261268 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};
263270 }
264271
265272 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)
268275 {
269276 std::size_t len = std::distance (first,last);
270277 if (len & 1 )
271278 {
272- return decode_result <InputIt>{first, conv_errc::not_base16};
279+ return to_bytes_result <InputIt>{first, conv_errc::not_base16};
273280 }
274281
275282 InputIt it = first;
@@ -287,7 +294,7 @@ namespace detail {
287294 }
288295 else
289296 {
290- return decode_result <InputIt>{first, conv_errc::not_base16};
297+ return to_bytes_result <InputIt>{first, conv_errc::not_base16};
291298 }
292299
293300 auto b = *it++;
@@ -301,12 +308,12 @@ namespace detail {
301308 }
302309 else
303310 {
304- return decode_result <InputIt>{first, conv_errc::not_base16};
311+ return to_bytes_result <InputIt>{first, conv_errc::not_base16};
305312 }
306313
307314 result.push_back (val);
308315 }
309- return decode_result <InputIt>{last, conv_errc::success};
316+ return to_bytes_result <InputIt>{last, conv_errc::success};
310317 }
311318
312319 struct byte_traits
0 commit comments