File tree 1 file changed +25
-8
lines changed
include/boost/json/detail
1 file changed +25
-8
lines changed Original file line number Diff line number Diff line change @@ -315,17 +315,34 @@ inline int count_digits( char const* p ) noexcept
315
315
316
316
inline uint64_t parse_unsigned ( uint64_t r, char const * p, std::size_t n ) noexcept
317
317
{
318
- constexpr int N = 4 ;
319
- auto const e = p + n;
320
- for ( ; (e - p) >= N; p += N )
318
+ while ( n >= 4 )
321
319
{
322
- for ( auto i = 0 ; i < N; ++i )
323
- r = r * 10 + p[i] - ' 0' ;
324
- }
320
+ r = r * 10 + p[0 ] - ' 0' ;
321
+ r = r * 10 + p[1 ] - ' 0' ;
322
+ r = r * 10 + p[2 ] - ' 0' ;
323
+ r = r * 10 + p[3 ] - ' 0' ;
325
324
326
- for ( ; p != e; ++p )
327
- r = r * 10 + *p - ' 0' ;
325
+ p += 4 ;
326
+ n -= 4 ;
327
+ }
328
328
329
+ switch ( n )
330
+ {
331
+ case 0 :
332
+ break ;
333
+ case 1 :
334
+ r = r * 10 + p[0 ] - ' 0' ;
335
+ break ;
336
+ case 2 :
337
+ r = r * 10 + p[0 ] - ' 0' ;
338
+ r = r * 10 + p[1 ] - ' 0' ;
339
+ break ;
340
+ case 3 :
341
+ r = r * 10 + p[0 ] - ' 0' ;
342
+ r = r * 10 + p[1 ] - ' 0' ;
343
+ r = r * 10 + p[2 ] - ' 0' ;
344
+ break ;
345
+ }
329
346
return r;
330
347
}
331
348
You can’t perform that action at this time.
0 commit comments