Niels Lohmann
81ca04f3ec
Accumulate number digits while scanning them
...
The contiguous number fast path validated a token byte by byte, copied it
into token_buffer, and then converted it in out-of-line functions that
scanned the digits a second time: parse_float_native() called
parse_float_significand(), which returned its result through memory and
called std::any_of (out of line with GCC) twice per number, and
parse_integer_signed() divided by ten on every digit for its overflow check.
scan_number_bulk_contiguous() now accumulates the significand while it
validates the digits, eight at a time where at least eight bytes remain
(is_eight_digits() and parse_eight_digits(), after fast_float). Floats with
at most 19 digits go straight to decimal_to_float(); integers with at most
18 digits are stored without an overflow check (a narrower number type
still rejects values that do not round-trip). Longer tokens take the
existing path. has_nonzero_digit() is a plain loop and
parse_float_significand() is always inlined, which helps that path.
Signed-off-by: Niels Lohmann <mail@nlohmann.me >
2026-10-17 08:29:48 +02:00
..
2026-10-17 08:28:28 +02:00
2026-10-11 08:24:31 +02:00
2026-10-11 08:24:31 +02:00
2026-10-14 17:38:36 +02:00
2026-10-15 20:04:57 +02:00
2026-01-01 20:00:39 +01:00
2026-10-15 20:04:57 +02:00
2026-10-15 20:04:57 +02:00
2026-10-15 20:04:57 +02:00
2026-10-15 20:04:57 +02:00
2026-10-15 20:04:57 +02:00
2026-10-15 20:04:57 +02:00
2026-10-15 20:04:57 +02:00
2026-01-01 20:00:39 +01:00
2026-10-01 07:33:07 +02:00
2026-10-01 07:33:07 +02:00
2026-10-11 08:21:13 +02:00
2026-09-16 20:15:46 +02:00
2026-10-06 22:53:03 +02:00
2026-10-01 07:33:07 +02:00
2026-10-15 20:01:20 +02:00
2026-10-08 16:11:16 +02:00
2026-10-06 22:33:29 +02:00
2026-10-01 07:37:47 +02:00
2026-10-14 17:38:37 +02:00
2026-10-09 17:05:36 +02:00
2026-10-04 17:18:19 +02:00
2026-10-01 07:37:47 +02:00
2026-10-17 08:28:28 +02:00
2026-10-17 08:28:28 +02:00
2026-10-17 08:28:28 +02:00
2026-10-11 08:22:00 +02:00
2026-10-07 07:39:05 +02:00
2026-10-09 16:56:14 +02:00
2026-09-16 20:15:46 +02:00
2026-10-01 07:37:47 +02:00
2026-10-10 00:05:02 +02:00
2026-09-27 14:19:22 +02:00
2026-01-01 20:00:39 +01:00
2026-10-17 08:29:48 +02:00
2026-10-11 08:21:13 +02:00
2026-10-15 20:01:21 +02:00
2026-01-01 20:00:39 +01:00
2026-09-30 20:07:52 +02:00
2026-10-16 19:16:21 +02:00
2026-09-11 08:22:50 +02:00
2026-10-04 17:18:19 +02:00
2026-10-06 07:22:55 +02:00
2026-10-08 16:11:16 +02:00
2026-10-09 16:56:14 +02:00
2026-10-13 17:16:52 +02:00
2026-10-11 08:24:31 +02:00
2026-10-11 08:24:31 +02:00
2026-10-11 08:24:31 +02:00
2026-10-11 08:24:31 +02:00
2026-10-11 08:24:31 +02:00
2026-10-10 00:05:02 +02:00
2026-10-08 16:11:16 +02:00
2026-10-06 07:22:55 +02:00
2026-10-13 17:16:52 +02:00
2026-09-30 21:36:04 +02:00
2026-10-07 16:37:19 +02:00
2026-10-16 19:16:21 +02:00
2026-09-30 20:53:56 +02:00
2026-10-04 17:18:19 +02:00
2026-09-30 20:07:06 +02:00
2026-10-11 08:21:41 +02:00
2026-10-04 17:54:05 +02:00
2026-10-04 17:54:05 +02:00
2026-09-27 16:56:21 +02:00
2026-10-17 08:29:47 +02:00
2026-07-02 15:59:36 +02:00
2026-10-08 16:11:16 +02:00
2026-01-01 20:00:39 +01:00
2026-09-09 09:52:58 +02:00
2026-10-04 22:11:34 +02:00
2026-10-16 19:16:21 +02:00
2026-10-01 07:33:07 +02:00
2026-01-01 20:00:39 +01:00
2026-10-15 20:01:22 +02:00
2026-10-16 19:16:21 +02:00
2026-10-17 08:28:28 +02:00
2026-10-17 08:28:28 +02:00
2026-10-17 08:28:28 +02:00
2026-10-14 17:38:36 +02:00
2026-10-12 09:33:43 +02:00
2026-10-01 07:37:47 +02:00
2026-01-01 20:00:39 +01:00
2026-10-04 17:18:19 +02:00
2026-10-06 22:53:03 +02:00
2026-10-10 00:05:02 +02:00
2026-09-30 20:08:17 +02:00
2026-09-16 20:15:46 +02:00
2026-09-09 09:48:17 +02:00
2026-09-16 20:15:46 +02:00
2026-10-02 17:25:17 +02:00
2026-10-09 16:56:14 +02:00
2026-10-04 11:46:25 +02:00
2026-10-04 17:18:19 +02:00
2026-10-02 11:23:55 +02:00
2026-10-17 08:29:45 +02:00
2026-10-01 07:33:07 +02:00
2026-01-01 20:00:39 +01:00
2026-10-08 16:11:16 +02:00
2026-10-08 16:11:16 +02:00
2026-10-13 17:16:52 +02:00
2026-10-15 20:04:42 +02:00
2026-10-16 19:16:21 +02:00
2026-09-27 14:19:22 +02:00
2026-10-17 08:29:47 +02:00
2026-10-16 19:16:21 +02:00
2026-10-16 19:16:21 +02:00
2026-10-15 20:08:12 +02:00
2026-10-15 22:42:46 +02:00
2026-10-04 11:50:42 +02:00
2026-10-07 08:50:12 +02:00
2026-01-01 20:00:39 +01:00
2026-09-25 20:44:30 +02:00
2026-10-06 22:33:29 +02:00
2026-10-07 19:17:57 +02:00
2026-10-01 07:37:47 +02:00
2026-01-01 20:00:39 +01:00
2026-10-04 17:18:19 +02:00
2026-09-30 22:49:24 +02:00
2026-10-01 07:37:47 +02:00