재욱 1d35d26b48 Make digit separator / prefix support performance-neutral
Re-implements the optional digit-separator and base-prefix parsing
(originally PR #369) on top of the current store_spans hot-path
architecture, with the goal of zero overhead when the features are not
used.

Key changes vs. the original PR:

- has_separator is now a *compile-time* template parameter on
  parse_number_string, dispatched once (from_chars_advanced ->
  parse_number_string_options) based on options.digit_separator. The
  has_separator==false instantiation that every default caller uses is
  byte-for-byte the separator-free parser: no separator comparison ever
  enters a digit loop and the SIMD eight-digit fast path is preserved.
  The separator-aware code lives only in the cold true instantiation.

- The store_spans no-span hot path (added to main after the original PR
  was branched) is preserved.

- parse_options_t fields are ordered so the two new single-byte fields
  (digit_separator, format_options) fall into the existing padding for
  UC == char. sizeof(parse_options_t<char>) stays 16 bytes, so the
  struct is still register-passed and the call boundary is unchanged.

Result: for the default (no separator, no prefix) path, the generated
assembly of from_chars<double> is identical to main, and benchmarks show
no measurable regression (the original PR was 5-10% slower).

Adds basictest coverage for digit separators (including the >19-digit
overflow re-scan paths) and prefix skipping.
2026-06-18 09:34:43 +09:00
..
bloat_analysis harmonize files to use "east const" 2024-11-23 09:46:18 +01:00
build_tests formatted code 2024-12-01 16:39:28 +01:00
installation_tests harmonize files to use "east const" 2024-11-23 09:46:18 +01:00
basictest.cpp Make digit separator / prefix support performance-neutral 2026-06-18 09:34:43 +09:00
BUILD.bazel add char8_t test 2024-11-25 15:43:51 +01:00
CMakeLists.txt tests: parallelize the exhaustive midpoint sweep across hardware threads 2026-06-01 13:01:10 +01:00
example_comma_test.cpp harmonize files to use "east const" 2024-11-23 09:46:18 +01:00
example_integer_times_pow10.cpp fixed copy&paste error and minor mess 2025-09-29 19:54:25 +03:00
example_test.cpp make it build 2024-12-03 23:23:34 +01:00
exhaustive32_64.cpp tests: parallelize exhaustive32 and exhaustive32_64 sweeps too 2026-06-01 21:09:46 +01:00
exhaustive32_midpoint.cpp tests: parallelize the exhaustive midpoint sweep across hardware threads 2026-06-01 13:01:10 +01:00
exhaustive32.cpp tests: parallelize exhaustive32 and exhaustive32_64 sweeps too 2026-06-01 21:09:46 +01:00
fast_int.cpp updating visual studio 2026-06-13 21:41:53 -04:00
fixedwidthtest.cpp Remove an unreachable return statement 2026-06-09 03:37:58 -04:00
fortran.cpp harmonize files to use "east const" 2024-11-23 09:46:18 +01:00
ipv4_test.cpp lint 2025-12-25 03:06:22 +05:30
json_fmt.cpp Make digit separator / prefix support performance-neutral 2026-06-18 09:34:43 +09:00
long_exhaustive32_64.cpp Remove an else if statement that is always false 2026-06-09 03:48:54 -04:00
long_exhaustive32.cpp harmonize files to use "east const" 2024-11-23 09:46:18 +01:00
long_random64.cpp harmonize files to use "east const" 2024-11-23 09:46:18 +01:00
long_test.cpp init 2026-03-10 11:53:45 -04:00
p2497.cpp lint 2025-05-19 18:16:14 -04:00
powersoffive_hardround.cpp formatted code 2024-12-01 16:39:28 +01:00
random64.cpp harmonize files to use "east const" 2024-11-23 09:46:18 +01:00
random_string.cpp formatted code 2024-12-01 16:39:28 +01:00
rcppfastfloat_test.cpp harmonize files to use "east const" 2024-11-23 09:46:18 +01:00
short_random_string.cpp formatted code 2024-12-01 16:39:28 +01:00
string_test.cpp init 2026-03-10 11:53:45 -04:00
supported_chars_test.cpp add char8_t test 2024-11-25 15:43:51 +01:00
wide_char_test.cpp add failing test for wide chars 2024-11-21 00:08:55 +01:00