File tree Expand file tree Collapse file tree 1 file changed +25
-8
lines changed
include/boost/json/detail Expand file tree Collapse file tree 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
315315
316316inline uint64_t parse_unsigned ( uint64_t r, char const * p, std::size_t n ) noexcept
317317{
318- constexpr int N = 4 ;
319- auto const e = p + n;
320- for ( ; (e - p) >= N; p += N )
318+ while ( n >= 4 )
321319 {
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' ;
325324
326- for ( ; p != e; ++p )
327- r = r * 10 + *p - ' 0' ;
325+ p += 4 ;
326+ n -= 4 ;
327+ }
328328
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+ }
329346 return r;
330347}
331348
You can’t perform that action at this time.
0 commit comments