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

Function parse_cbor_array

example/cbor.cpp:234–289  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

232}
233
234const unsigned char*
235parse_cbor_array(
236 const unsigned char* first, const unsigned char* last, unsigned char ch, value& v )
237{
238 std::uint64_t n;
239 first = parse_cbor_number( first, last, ch, n );
240
241 array & a = v.emplace_array();
242
243 a.resize( n );
244
245 std::size_t i = 0;
246
247 for( ; i < n; ++i ) // double[] fast path
248 {
249 ensure( 1, first, last );
250 unsigned char ch2 = *first;
251
252 if( ch2 != 0xFB ) break;
253
254 ++first;
255 ensure( 8, first, last );
256
257 double w = boost::endian::endian_load<double, 8, boost::endian::order::big>( first );
258 first += 8;
259
260 a[ i ] = w;
261 }
262
263 for( ; i < n; ++i ) // int[] fast path
264 {
265 ensure( 1, first, last );
266 unsigned char ch2 = *first;
267
268 if( ch2 >= 0x40 ) break;
269
270 ++first;
271
272 std::uint64_t m;
273 first = parse_cbor_number( first, last, ch2, m );
274
275 if( ch2 < 0x20 )
276 {
277 a[ i ] = m;
278 }
279 else
280 {
281 a[ i ] = static_cast<std::int64_t>( ~m );
282 }
283 }
284
285 for( ; i < n; ++i )
286 first = parse_cbor_value( first, last, a[ i ] );
287
288 return first;
289}
290
291const unsigned char*

Callers 1

parse_cbor_valueFunction · 0.85

Calls 4

parse_cbor_numberFunction · 0.85
ensureFunction · 0.85
parse_cbor_valueFunction · 0.85
resizeMethod · 0.80

Tested by

no test coverage detected