@zigc/lib 0.17.0-dev.135 → 0.17.0-dev.224
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/c/stdlib.zig +32 -22
- package/compiler/aro/aro/Compilation.zig +0 -3
- package/compiler/translate-c/ast.zig +5 -2
- package/compiler_rt/arm.zig +3 -3
- package/compiler_rt/trunctfhf2.zig +3 -0
- package/compiler_rt.zig +1 -22
- package/docs/wasm/markdown/Parser.zig +5 -9
- package/include/__clang_spirv_builtins.h +12 -12
- package/include/__float_float.h +176 -0
- package/include/__float_header_macro.h +12 -0
- package/include/__float_infinity_nan.h +20 -0
- package/include/amo.h +131 -0
- package/include/amxavx512intrin.h +215 -1
- package/include/amxintrin.h +0 -2
- package/include/arm_acle.h +37 -27
- package/include/arm_neon.h +218 -82
- package/include/arm_sme.h +8 -8
- package/include/arm_sve.h +4162 -3782
- package/include/avx10_2_512bf16intrin.h +19 -12
- package/include/avx10_2_512convertintrin.h +1 -1
- package/include/avx10_2_512niintrin.h +31 -31
- package/include/avx10_2_512satcvtdsintrin.h +1 -1
- package/include/avx10_2bf16intrin.h +54 -45
- package/include/avx10_2convertintrin.h +2 -2
- package/include/avx10_2copyintrin.h +1 -1
- package/include/avx10_2niintrin.h +14 -14
- package/include/avx10_2satcvtdsintrin.h +2 -2
- package/include/avx2intrin.h +275 -377
- package/include/avx512bf16intrin.h +25 -16
- package/include/avx512bitalgintrin.h +19 -30
- package/include/avx512bwintrin.h +386 -505
- package/include/avx512cdintrin.h +42 -55
- package/include/avx512dqintrin.h +132 -161
- package/include/avx512fintrin.h +1015 -1424
- package/include/avx512fp16intrin.h +112 -110
- package/include/avx512ifmaintrin.h +32 -34
- package/include/avx512ifmavlintrin.h +73 -46
- package/include/avx512vbmi2intrin.h +43 -32
- package/include/avx512vbmiintrin.h +19 -27
- package/include/avx512vbmivlintrin.h +35 -49
- package/include/avx512vlbf16intrin.h +32 -22
- package/include/avx512vlbitalgintrin.h +37 -53
- package/include/avx512vlbwintrin.h +470 -573
- package/include/avx512vlcdintrin.h +74 -102
- package/include/avx512vldqintrin.h +110 -127
- package/include/avx512vlfp16intrin.h +130 -111
- package/include/avx512vlintrin.h +945 -1299
- package/include/avx512vlvbmi2intrin.h +78 -63
- package/include/avx512vlvnniintrin.h +21 -18
- package/include/avx512vlvp2intersectintrin.h +2 -2
- package/include/avx512vnniintrin.h +10 -10
- package/include/avx512vp2intersectintrin.h +1 -2
- package/include/avx512vpopcntdqintrin.h +8 -10
- package/include/avx512vpopcntdqvlintrin.h +17 -15
- package/include/avxifmaintrin.h +16 -0
- package/include/avxintrin.h +165 -241
- package/include/avxvnniint16intrin.h +118 -99
- package/include/avxvnniint8intrin.h +56 -32
- package/include/avxvnniintrin.h +16 -8
- package/include/cpuid.h +101 -4
- package/include/emmintrin.h +168 -168
- package/include/f16cintrin.h +23 -9
- package/include/float.h +16 -155
- package/include/fma4intrin.h +98 -96
- package/include/fmaintrin.h +96 -66
- package/include/gfniintrin.h +21 -16
- package/include/hexagon_types.h +23 -20
- package/include/hvx_hexagon_protos.h +649 -860
- package/include/immintrin.h +0 -12
- package/include/intrin.h +4 -0
- package/include/lasxintrin.h +113 -0
- package/include/llvm_libc_wrappers/assert.h +3 -5
- package/include/llvm_libc_wrappers/ctype.h +3 -115
- package/include/llvm_libc_wrappers/inttypes.h +3 -5
- package/include/llvm_libc_wrappers/stdio.h +10 -38
- package/include/llvm_libc_wrappers/stdlib.h +3 -24
- package/include/llvm_libc_wrappers/string.h +2 -70
- package/include/llvm_libc_wrappers/time.h +4 -10
- package/include/mmintrin.h +188 -257
- package/include/module.modulemap +23 -4
- package/include/movrs_avx10_2_512intrin.h +2 -2
- package/include/movrs_avx10_2intrin.h +4 -4
- package/include/pmmintrin.h +12 -24
- package/include/ptrauth.h +16 -2
- package/include/riscv_mips.h +34 -0
- package/include/riscv_nds.h +89 -0
- package/include/sifive_vector.h +58 -2
- package/include/sm4evexintrin.h +2 -2
- package/include/smmintrin.h +77 -59
- package/include/spirvintrin.h +194 -0
- package/include/stddefer.h +19 -0
- package/include/tmmintrin.h +116 -147
- package/include/vaesintrin.h +1 -2
- package/include/xmmintrin.h +44 -70
- package/include/xopintrin.h +20 -10
- package/libcxx/include/__algorithm/all_of.h +11 -5
- package/libcxx/include/__algorithm/comp.h +4 -0
- package/libcxx/include/__algorithm/copy.h +28 -147
- package/libcxx/include/__algorithm/copy_backward.h +9 -24
- package/libcxx/include/__algorithm/copy_n.h +50 -16
- package/libcxx/include/__algorithm/count.h +2 -2
- package/libcxx/include/__algorithm/equal.h +43 -55
- package/libcxx/include/__algorithm/fill.h +26 -8
- package/libcxx/include/__algorithm/fill_n.h +32 -46
- package/libcxx/include/__algorithm/find.h +96 -39
- package/libcxx/include/__algorithm/find_end.h +105 -0
- package/libcxx/include/__algorithm/for_each.h +18 -24
- package/libcxx/include/__algorithm/for_each_n.h +20 -47
- package/libcxx/include/__algorithm/for_each_n_segment.h +1 -1
- package/libcxx/include/__algorithm/for_each_segment.h +26 -0
- package/libcxx/include/__algorithm/generate.h +4 -2
- package/libcxx/include/__algorithm/generate_n.h +19 -6
- package/libcxx/include/__algorithm/is_permutation.h +4 -4
- package/libcxx/include/__algorithm/iterator_operations.h +3 -0
- package/libcxx/include/__algorithm/lexicographical_compare.h +2 -2
- package/libcxx/include/__algorithm/lexicographical_compare_three_way.h +6 -6
- package/libcxx/include/__algorithm/make_heap.h +16 -4
- package/libcxx/include/__algorithm/mismatch.h +2 -2
- package/libcxx/include/__algorithm/move.h +8 -19
- package/libcxx/include/__algorithm/move_backward.h +9 -24
- package/libcxx/include/__algorithm/none_of.h +4 -4
- package/libcxx/include/__algorithm/partial_sort.h +1 -1
- package/libcxx/include/__algorithm/partial_sort_copy.h +1 -1
- package/libcxx/include/__algorithm/pstl.h +9 -9
- package/libcxx/include/__algorithm/radix_sort.h +27 -25
- package/libcxx/include/__algorithm/ranges_copy_n.h +3 -26
- package/libcxx/include/__algorithm/ranges_equal.h +17 -26
- package/libcxx/include/__algorithm/ranges_fill.h +7 -6
- package/libcxx/include/__algorithm/ranges_for_each.h +9 -1
- package/libcxx/include/__algorithm/ranges_generate_n.h +2 -6
- package/libcxx/include/__algorithm/ranges_search_n.h +2 -2
- package/libcxx/include/__algorithm/rotate.h +27 -44
- package/libcxx/include/__algorithm/search_n.h +49 -37
- package/libcxx/include/__algorithm/sift_down.h +19 -18
- package/libcxx/include/__algorithm/simd_utils.h +33 -4
- package/libcxx/include/__algorithm/specialized_algorithms.h +54 -0
- package/libcxx/include/__algorithm/stable_sort.h +1 -1
- package/libcxx/include/__assertion_handler +31 -4
- package/libcxx/include/__atomic/atomic.h +36 -60
- package/libcxx/include/__atomic/atomic_flag.h +19 -37
- package/libcxx/include/__atomic/atomic_ref.h +29 -12
- package/libcxx/include/__atomic/atomic_sync.h +127 -55
- package/libcxx/include/__atomic/atomic_sync_timed.h +144 -0
- package/libcxx/include/__atomic/atomic_waitable_traits.h +103 -0
- package/libcxx/include/__atomic/contention_t.h +27 -3
- package/libcxx/include/__atomic/floating_point_helper.h +55 -0
- package/libcxx/include/__bit/countl.h +1 -2
- package/libcxx/include/__bit/countr.h +1 -2
- package/libcxx/include/__bit/has_single_bit.h +1 -1
- package/libcxx/include/__bit/popcount.h +0 -1
- package/libcxx/include/__bit/rotate.h +15 -26
- package/libcxx/include/__bit_reference +207 -18
- package/libcxx/include/__charconv/from_chars_integral.h +1 -1
- package/libcxx/include/__charconv/from_chars_result.h +1 -1
- package/libcxx/include/__charconv/to_chars_integral.h +1 -0
- package/libcxx/include/__charconv/to_chars_result.h +1 -1
- package/libcxx/include/__charconv/traits.h +3 -24
- package/libcxx/include/__chrono/day.h +11 -0
- package/libcxx/include/__chrono/duration.h +58 -33
- package/libcxx/include/__chrono/file_clock.h +4 -2
- package/libcxx/include/__chrono/is_clock.h +72 -0
- package/libcxx/include/__chrono/leap_second.h +13 -0
- package/libcxx/include/__chrono/month.h +13 -0
- package/libcxx/include/__chrono/month_weekday.h +22 -0
- package/libcxx/include/__chrono/monthday.h +20 -0
- package/libcxx/include/__chrono/steady_clock.h +1 -1
- package/libcxx/include/__chrono/system_clock.h +3 -3
- package/libcxx/include/__chrono/time_point.h +37 -13
- package/libcxx/include/__chrono/weekday.h +25 -0
- package/libcxx/include/__chrono/year.h +11 -0
- package/libcxx/include/__chrono/year_month.h +13 -0
- package/libcxx/include/__chrono/year_month_day.h +23 -0
- package/libcxx/include/__chrono/year_month_weekday.h +26 -0
- package/libcxx/include/__chrono/zoned_time.h +16 -0
- package/libcxx/include/__compare/is_eq.h +6 -6
- package/libcxx/include/__compare/strong_order.h +12 -30
- package/libcxx/include/__compare/three_way_comparable.h +2 -2
- package/libcxx/include/__concepts/comparison_common_type.h +40 -0
- package/libcxx/include/__concepts/equality_comparable.h +2 -1
- package/libcxx/include/__condition_variable/condition_variable.h +1 -1
- package/libcxx/include/__config +63 -280
- package/libcxx/include/__configuration/abi.h +14 -24
- package/libcxx/include/__configuration/availability.h +65 -118
- package/libcxx/include/__configuration/compiler.h +6 -6
- package/libcxx/include/__configuration/experimental.h +38 -0
- package/libcxx/include/__configuration/hardening.h +215 -0
- package/libcxx/include/__configuration/language.h +3 -0
- package/libcxx/include/__configuration/platform.h +9 -16
- package/libcxx/include/__coroutine/coroutine_handle.h +9 -9
- package/libcxx/include/__coroutine/noop_coroutine_handle.h +11 -13
- package/libcxx/include/__debug_utils/strict_weak_ordering_check.h +1 -1
- package/libcxx/include/__exception/exception.h +6 -4
- package/libcxx/include/__exception/exception_ptr.h +27 -5
- package/libcxx/include/__exception/nested_exception.h +2 -2
- package/libcxx/include/__exception/operations.h +5 -5
- package/libcxx/include/__expected/bad_expected_access.h +8 -6
- package/libcxx/include/__expected/expected.h +62 -64
- package/libcxx/include/__expected/unexpected.h +4 -4
- package/libcxx/include/__filesystem/copy_options.h +4 -4
- package/libcxx/include/__filesystem/directory_entry.h +37 -33
- package/libcxx/include/__filesystem/directory_iterator.h +9 -11
- package/libcxx/include/__filesystem/directory_options.h +7 -4
- package/libcxx/include/__filesystem/file_status.h +3 -3
- package/libcxx/include/__filesystem/filesystem_error.h +9 -10
- package/libcxx/include/__filesystem/operations.h +97 -66
- package/libcxx/include/__filesystem/path.h +68 -64
- package/libcxx/include/__filesystem/path_iterator.h +1 -3
- package/libcxx/include/__filesystem/perm_options.h +4 -4
- package/libcxx/include/__filesystem/perms.h +4 -4
- package/libcxx/include/__filesystem/recursive_directory_iterator.h +9 -14
- package/libcxx/include/__filesystem/space_info.h +1 -1
- package/libcxx/include/__filesystem/u8path.h +12 -14
- package/libcxx/include/__flat_map/flat_map.h +88 -71
- package/libcxx/include/__flat_map/flat_multimap.h +251 -172
- package/libcxx/include/__flat_map/key_value_iterator.h +0 -1
- package/libcxx/include/__flat_map/utils.h +1 -0
- package/libcxx/include/__flat_set/flat_multiset.h +211 -143
- package/libcxx/include/__flat_set/flat_set.h +86 -68
- package/libcxx/include/__format/concepts.h +0 -14
- package/libcxx/include/__format/extended_grapheme_cluster_table.h +3 -2
- package/libcxx/include/__format/fmt_pair_like.h +42 -0
- package/libcxx/include/__format/format_arg.h +7 -10
- package/libcxx/include/__format/format_args.h +1 -1
- package/libcxx/include/__format/format_context.h +5 -5
- package/libcxx/include/__format/format_parse_context.h +2 -2
- package/libcxx/include/__format/formatter_output.h +30 -34
- package/libcxx/include/__format/indic_conjunct_break_table.h +3 -2
- package/libcxx/include/__format/range_default_formatter.h +2 -41
- package/libcxx/include/__format/range_format.h +71 -0
- package/libcxx/include/__format/range_formatter.h +1 -0
- package/libcxx/include/__format/width_estimation_table.h +4 -2
- package/libcxx/include/__functional/bind.h +10 -15
- package/libcxx/include/__functional/bind_back.h +1 -1
- package/libcxx/include/__functional/bind_front.h +1 -1
- package/libcxx/include/__functional/function.h +57 -75
- package/libcxx/include/__functional/hash.h +1 -10
- package/libcxx/include/__functional/identity.h +1 -1
- package/libcxx/include/__functional/is_transparent.h +8 -0
- package/libcxx/include/__functional/mem_fn.h +2 -1
- package/libcxx/include/__functional/operations.h +18 -0
- package/libcxx/include/__functional/ranges_operations.h +7 -0
- package/libcxx/include/__functional/reference_wrapper.h +7 -5
- package/libcxx/include/__functional/weak_result_type.h +14 -28
- package/libcxx/include/__fwd/ios.h +1 -1
- package/libcxx/include/__fwd/tuple.h +14 -0
- package/libcxx/include/__hash_table +371 -357
- package/libcxx/include/__ios/fpos.h +4 -4
- package/libcxx/include/__iterator/back_insert_iterator.h +1 -7
- package/libcxx/include/__iterator/bounded_iter.h +7 -8
- package/libcxx/include/__iterator/concepts.h +6 -9
- package/libcxx/include/__iterator/cpp17_iterator_concepts.h +13 -12
- package/libcxx/include/__iterator/distance.h +40 -18
- package/libcxx/include/__iterator/front_insert_iterator.h +1 -7
- package/libcxx/include/__iterator/insert_iterator.h +1 -7
- package/libcxx/include/__iterator/istream_iterator.h +6 -7
- package/libcxx/include/__iterator/istreambuf_iterator.h +6 -7
- package/libcxx/include/__iterator/iter_move.h +1 -1
- package/libcxx/include/__iterator/iterator.h +13 -0
- package/libcxx/include/__iterator/iterator_traits.h +13 -14
- package/libcxx/include/__iterator/ostream_iterator.h +1 -7
- package/libcxx/include/__iterator/ostreambuf_iterator.h +1 -7
- package/libcxx/include/__iterator/reverse_iterator.h +8 -13
- package/libcxx/include/__iterator/segmented_iterator.h +3 -8
- package/libcxx/include/__iterator/static_bounded_iter.h +3 -3
- package/libcxx/include/__iterator/wrap_iter.h +8 -6
- package/libcxx/include/__locale +3 -10
- package/libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h +0 -10
- package/libcxx/include/__locale_dir/locale_base_api.h +5 -28
- package/libcxx/include/__locale_dir/messages.h +1 -1
- package/libcxx/include/__locale_dir/money.h +2 -2
- package/libcxx/include/__locale_dir/num.h +190 -243
- package/libcxx/include/__locale_dir/pad_and_output.h +5 -6
- package/libcxx/include/__locale_dir/support/bsd_like.h +0 -20
- package/libcxx/include/__locale_dir/support/fuchsia.h +0 -7
- package/libcxx/include/__locale_dir/support/linux.h +0 -37
- package/libcxx/include/__locale_dir/support/netbsd.h +0 -2
- package/libcxx/include/__locale_dir/support/newlib.h +243 -0
- package/libcxx/include/__locale_dir/support/no_locale/characters.h +0 -4
- package/libcxx/include/__locale_dir/support/no_locale/strtonum.h +0 -9
- package/libcxx/include/__locale_dir/support/windows.h +0 -29
- package/libcxx/include/__locale_dir/time.h +3 -7
- package/libcxx/include/__math/hypot.h +1 -1
- package/libcxx/include/__math/logarithms.h +1 -1
- package/libcxx/include/__math/traits.h +80 -11
- package/libcxx/include/__mdspan/extents.h +7 -4
- package/libcxx/include/__mdspan/layout_stride.h +4 -5
- package/libcxx/include/__mdspan/mdspan.h +29 -23
- package/libcxx/include/__memory/addressof.h +7 -5
- package/libcxx/include/__memory/align.h +18 -1
- package/libcxx/include/__memory/allocate_at_least.h +15 -10
- package/libcxx/include/__memory/allocator.h +14 -26
- package/libcxx/include/__memory/allocator_traits.h +6 -4
- package/libcxx/include/__memory/compressed_pair.h +15 -9
- package/libcxx/include/__memory/construct_at.h +12 -23
- package/libcxx/include/__memory/inout_ptr.h +1 -1
- package/libcxx/include/__memory/is_sufficiently_aligned.h +1 -1
- package/libcxx/include/__memory/out_ptr.h +1 -1
- package/libcxx/include/__memory/pointer_traits.h +1 -1
- package/libcxx/include/__memory/raw_storage_iterator.h +3 -9
- package/libcxx/include/__memory/shared_count.h +9 -30
- package/libcxx/include/__memory/shared_ptr.h +100 -145
- package/libcxx/include/__memory/temp_value.h +1 -2
- package/libcxx/include/__memory/uninitialized_algorithms.h +44 -115
- package/libcxx/include/__memory/unique_ptr.h +14 -16
- package/libcxx/include/__memory/uses_allocator_construction.h +1 -0
- package/libcxx/include/__memory_resource/memory_resource.h +4 -2
- package/libcxx/include/__memory_resource/monotonic_buffer_resource.h +1 -1
- package/libcxx/include/__memory_resource/polymorphic_allocator.h +13 -8
- package/libcxx/include/__memory_resource/pool_options.h +1 -1
- package/libcxx/include/__memory_resource/synchronized_pool_resource.h +4 -2
- package/libcxx/include/__memory_resource/unsynchronized_pool_resource.h +1 -1
- package/libcxx/include/__mutex/mutex.h +2 -2
- package/libcxx/include/__mutex/once_flag.h +14 -11
- package/libcxx/include/__mutex/tag_types.h +3 -3
- package/libcxx/include/__mutex/unique_lock.h +8 -7
- package/libcxx/include/__new/align_val_t.h +6 -0
- package/libcxx/include/__new/allocate.h +1 -2
- package/libcxx/include/__new/exceptions.h +8 -2
- package/libcxx/include/__new/global_new_delete.h +4 -11
- package/libcxx/include/__new/interference_size.h +0 -4
- package/libcxx/include/__new/launder.h +3 -5
- package/libcxx/include/__new/nothrow_t.h +1 -1
- package/libcxx/include/__numeric/gcd_lcm.h +24 -34
- package/libcxx/include/__numeric/midpoint.h +9 -14
- package/libcxx/include/__numeric/pstl.h +2 -2
- package/libcxx/include/__numeric/saturation_arithmetic.h +13 -5
- package/libcxx/include/__ostream/basic_ostream.h +8 -8
- package/libcxx/include/__pstl/backends/default.h +14 -14
- package/libcxx/include/__pstl/backends/libdispatch.h +2 -2
- package/libcxx/include/__pstl/cpu_algos/find_if.h +1 -1
- package/libcxx/include/__pstl/cpu_algos/transform.h +5 -6
- package/libcxx/include/__pstl/cpu_algos/transform_reduce.h +5 -4
- package/libcxx/include/__random/binomial_distribution.h +10 -4
- package/libcxx/include/__random/mersenne_twister_engine.h +50 -154
- package/libcxx/include/__random/piecewise_constant_distribution.h +3 -2
- package/libcxx/include/__random/piecewise_linear_distribution.h +3 -2
- package/libcxx/include/__ranges/adjacent_transform_view.h +406 -0
- package/libcxx/include/__ranges/adjacent_view.h +419 -0
- package/libcxx/include/__ranges/as_rvalue_view.h +9 -9
- package/libcxx/include/__ranges/chunk_by_view.h +6 -6
- package/libcxx/include/__ranges/common_view.h +7 -7
- package/libcxx/include/__ranges/drop_view.h +8 -8
- package/libcxx/include/__ranges/drop_while_view.h +5 -5
- package/libcxx/include/__ranges/elements_of.h +49 -0
- package/libcxx/include/__ranges/empty_view.h +5 -5
- package/libcxx/include/__ranges/filter_view.h +10 -10
- package/libcxx/include/__ranges/iota_view.h +41 -22
- package/libcxx/include/__ranges/owning_view.h +15 -15
- package/libcxx/include/__ranges/ref_view.h +6 -6
- package/libcxx/include/__ranges/repeat_view.h +17 -10
- package/libcxx/include/__ranges/single_view.h +8 -8
- package/libcxx/include/__ranges/take_view.h +9 -9
- package/libcxx/include/__ranges/transform_view.h +1 -2
- package/libcxx/include/__ranges/view_interface.h +10 -10
- package/libcxx/include/__ranges/zip_transform_view.h +357 -0
- package/libcxx/include/__ranges/zip_view.h +20 -20
- package/libcxx/include/__split_buffer +612 -240
- package/libcxx/include/__stop_token/atomic_unique_lock.h +1 -1
- package/libcxx/include/__stop_token/stop_callback.h +2 -2
- package/libcxx/include/__stop_token/stop_source.h +1 -1
- package/libcxx/include/__stop_token/stop_state.h +4 -4
- package/libcxx/include/__stop_token/stop_token.h +1 -1
- package/libcxx/include/__string/char_traits.h +51 -31
- package/libcxx/include/__string/constexpr_c_functions.h +5 -5
- package/libcxx/include/__support/xlocale/__strtonum_fallback.h +0 -8
- package/libcxx/include/__system_error/error_category.h +8 -8
- package/libcxx/include/__system_error/error_code.h +5 -5
- package/libcxx/include/__system_error/error_condition.h +4 -4
- package/libcxx/include/__system_error/system_error.h +1 -1
- package/libcxx/include/__thread/id.h +1 -1
- package/libcxx/include/__thread/jthread.h +1 -1
- package/libcxx/include/__thread/poll_with_backoff.h +27 -8
- package/libcxx/include/__thread/support/c11.h +8 -8
- package/libcxx/include/__thread/support/pthread.h +8 -8
- package/libcxx/include/__thread/support/windows.h +8 -8
- package/libcxx/include/__thread/thread.h +13 -8
- package/libcxx/include/__thread/timed_backoff_policy.h +3 -2
- package/libcxx/include/__tree +849 -701
- package/libcxx/include/__tuple/sfinae_helpers.h +1 -44
- package/libcxx/include/__tuple/tuple_element.h +0 -12
- package/libcxx/include/__tuple/tuple_size.h +0 -4
- package/libcxx/include/__tuple/tuple_transform.h +45 -0
- package/libcxx/include/__type_traits/aligned_storage.h +13 -40
- package/libcxx/include/__type_traits/desugars_to.h +4 -0
- package/libcxx/include/__type_traits/invoke.h +8 -0
- package/libcxx/include/__type_traits/is_allocator.h +6 -7
- package/libcxx/include/__type_traits/is_array.h +26 -0
- package/libcxx/include/__type_traits/is_equality_comparable.h +16 -21
- package/libcxx/include/__type_traits/is_final.h +1 -1
- package/libcxx/include/__type_traits/is_floating_point.h +7 -6
- package/libcxx/include/__type_traits/is_generic_transparent_comparator.h +30 -0
- package/libcxx/include/__type_traits/is_specialization.h +2 -6
- package/libcxx/include/__type_traits/is_within_lifetime.h +29 -0
- package/libcxx/include/__type_traits/make_transparent.h +52 -0
- package/libcxx/include/__type_traits/reference_constructs_from_temporary.h +1 -7
- package/libcxx/include/__type_traits/reference_converts_from_temporary.h +1 -1
- package/libcxx/include/__utility/cmp.h +19 -7
- package/libcxx/include/__utility/default_three_way_comparator.h +70 -0
- package/libcxx/include/__utility/in_place.h +1 -1
- package/libcxx/include/__utility/integer_sequence.h +56 -41
- package/libcxx/include/__utility/lazy_synth_three_way_comparator.h +120 -0
- package/libcxx/include/__utility/pair.h +22 -25
- package/libcxx/include/__utility/scope_guard.h +2 -0
- package/libcxx/include/__utility/try_key_extraction.h +114 -0
- package/libcxx/include/__vector/vector.h +187 -160
- package/libcxx/include/__vector/vector_bool.h +76 -83
- package/libcxx/include/any +118 -155
- package/libcxx/include/array +88 -56
- package/libcxx/include/atomic +2 -0
- package/libcxx/include/barrier +20 -24
- package/libcxx/include/bitset +49 -30
- package/libcxx/include/ccomplex +3 -11
- package/libcxx/include/chrono +47 -0
- package/libcxx/include/ciso646 +3 -6
- package/libcxx/include/complex +77 -65
- package/libcxx/include/complex.h +10 -10
- package/libcxx/include/condition_variable +3 -3
- package/libcxx/include/cstdalign +3 -10
- package/libcxx/include/cstdbool +3 -10
- package/libcxx/include/ctgmath +2 -11
- package/libcxx/include/ctype.h +24 -24
- package/libcxx/include/cwchar +2 -2
- package/libcxx/include/deque +109 -225
- package/libcxx/include/errno.h +269 -269
- package/libcxx/include/exception +4 -1
- package/libcxx/include/ext/hash_map +7 -48
- package/libcxx/include/ext/hash_set +2 -8
- package/libcxx/include/fenv.h +43 -43
- package/libcxx/include/flat_map +663 -11
- package/libcxx/include/flat_set +543 -8
- package/libcxx/include/float.h +16 -16
- package/libcxx/include/forward_list +33 -53
- package/libcxx/include/fstream +57 -42
- package/libcxx/include/future +41 -51
- package/libcxx/include/initializer_list +9 -3
- package/libcxx/include/inttypes.h +16 -16
- package/libcxx/include/ios +28 -28
- package/libcxx/include/istream +19 -13
- package/libcxx/include/iterator +10 -0
- package/libcxx/include/latch +7 -5
- package/libcxx/include/limits +4 -4
- package/libcxx/include/list +61 -79
- package/libcxx/include/map +386 -274
- package/libcxx/include/math.h +19 -0
- package/libcxx/include/mdspan +1 -5
- package/libcxx/include/mutex +29 -19
- package/libcxx/include/optional +644 -149
- package/libcxx/include/print +9 -5
- package/libcxx/include/queue +39 -37
- package/libcxx/include/ranges +48 -0
- package/libcxx/include/regex +33 -31
- package/libcxx/include/scoped_allocator +16 -11
- package/libcxx/include/semaphore +15 -18
- package/libcxx/include/set +220 -192
- package/libcxx/include/shared_mutex +3 -8
- package/libcxx/include/span +53 -37
- package/libcxx/include/sstream +34 -28
- package/libcxx/include/stack +13 -15
- package/libcxx/include/stddef.h +10 -10
- package/libcxx/include/stdexcept +2 -2
- package/libcxx/include/stdio.h +20 -21
- package/libcxx/include/streambuf +59 -19
- package/libcxx/include/string +574 -573
- package/libcxx/include/string_view +113 -89
- package/libcxx/include/strstream +10 -10
- package/libcxx/include/syncstream +4 -4
- package/libcxx/include/tgmath.h +12 -12
- package/libcxx/include/tuple +242 -212
- package/libcxx/include/type_traits +8 -2
- package/libcxx/include/typeindex +5 -3
- package/libcxx/include/typeinfo +92 -89
- package/libcxx/include/unordered_map +179 -304
- package/libcxx/include/unordered_set +168 -195
- package/libcxx/include/utility +12 -0
- package/libcxx/include/valarray +106 -161
- package/libcxx/include/variant +25 -33
- package/libcxx/include/version +41 -24
- package/libcxx/include/wctype.h +29 -29
- package/libcxx/libc/hdr/errno_macros.h +3 -1
- package/libcxx/libc/hdr/stdint_proxy.h +18 -0
- package/libcxx/libc/hdr/types/wchar_t.h +23 -0
- package/libcxx/libc/hdr/wchar_overlay.h +69 -0
- package/libcxx/libc/include/llvm-libc-macros/cfloat128-macros.h +41 -0
- package/libcxx/libc/include/llvm-libc-macros/cfloat16-macros.h +20 -0
- package/libcxx/libc/include/llvm-libc-macros/wchar-macros.h +18 -0
- package/libcxx/libc/include/llvm-libc-types/cfloat128.h +11 -28
- package/libcxx/libc/include/llvm-libc-types/cfloat16.h +4 -7
- package/libcxx/libc/include/llvm-libc-types/wint_t.h +14 -0
- package/libcxx/libc/shared/libc_common.h +5 -0
- package/libcxx/libc/src/__support/CPP/bit.h +50 -12
- package/libcxx/libc/src/__support/CPP/type_traits/is_complex.h +7 -0
- package/libcxx/libc/src/__support/CPP/type_traits/is_destructible.h +2 -1
- package/libcxx/libc/src/__support/CPP/type_traits/is_unsigned.h +6 -0
- package/libcxx/libc/src/__support/CPP/utility/integer_sequence.h +10 -0
- package/libcxx/libc/src/__support/FPUtil/FPBits.h +6 -7
- package/libcxx/libc/src/__support/FPUtil/rounding_mode.h +50 -4
- package/libcxx/libc/src/__support/big_int.h +14 -14
- package/libcxx/libc/src/__support/common.h +3 -2
- package/libcxx/libc/src/__support/ctype_utils.h +19 -12
- package/libcxx/libc/src/__support/detailed_powers_of_ten.h +1 -2
- package/libcxx/libc/src/__support/high_precision_decimal.h +33 -14
- package/libcxx/libc/src/__support/libc_assert.h +2 -0
- package/libcxx/libc/src/__support/macros/attributes.h +44 -1
- package/libcxx/libc/src/__support/macros/config.h +23 -0
- package/libcxx/libc/src/__support/macros/null_check.h +1 -2
- package/libcxx/libc/src/__support/macros/optimization.h +3 -0
- package/libcxx/libc/src/__support/macros/properties/architectures.h +5 -1
- package/libcxx/libc/src/__support/macros/properties/compiler.h +8 -3
- package/libcxx/libc/src/__support/macros/properties/cpu_features.h +17 -1
- package/libcxx/libc/src/__support/macros/properties/types.h +2 -3
- package/libcxx/libc/src/__support/macros/sanitizer.h +0 -10
- package/libcxx/libc/src/__support/math_extras.h +20 -4
- package/libcxx/libc/src/__support/str_to_float.h +98 -125
- package/libcxx/libc/src/__support/str_to_integer.h +39 -27
- package/libcxx/libc/src/__support/wctype_utils.h +588 -0
- package/libcxx/src/any.cpp +4 -0
- package/libcxx/src/atomic.cpp +365 -80
- package/libcxx/src/barrier.cpp +4 -3
- package/libcxx/src/charconv.cpp +6 -3
- package/libcxx/src/condition_variable_destructor.cpp +1 -1
- package/libcxx/src/error_category.cpp +3 -1
- package/libcxx/src/exception.cpp +2 -10
- package/libcxx/src/experimental/time_zone.cpp +1 -1
- package/libcxx/src/experimental/tzdb.cpp +4 -1
- package/libcxx/src/filesystem/error.h +4 -22
- package/libcxx/src/filesystem/format_string.h +9 -18
- package/libcxx/src/filesystem/int128_builtins.cpp +2 -0
- package/libcxx/src/filesystem/operations.cpp +2 -9
- package/libcxx/src/filesystem/path.cpp +3 -1
- package/libcxx/src/include/aligned_alloc.h +65 -0
- package/libcxx/src/include/config_elast.h +1 -1
- package/libcxx/src/include/from_chars_floating_point.h +11 -7
- package/libcxx/src/include/overridable_function.h +8 -10
- package/libcxx/src/iostream.cpp +56 -37
- package/libcxx/src/locale.cpp +213 -196
- package/libcxx/src/memory.cpp +12 -14
- package/libcxx/src/mutex_destructor.cpp +1 -1
- package/libcxx/src/new.cpp +5 -5
- package/libcxx/src/optional.cpp +4 -0
- package/libcxx/src/print.cpp +9 -1
- package/libcxx/src/random.cpp +0 -26
- package/libcxx/src/string.cpp +10 -25
- package/libcxx/src/support/runtime/exception_fallback.ipp +2 -0
- package/libcxx/src/support/runtime/exception_glibcxx.ipp +3 -0
- package/libcxx/src/support/runtime/exception_libcxxabi.ipp +6 -2
- package/libcxx/src/support/runtime/exception_libcxxrt.ipp +2 -0
- package/libcxx/src/support/runtime/exception_msvc.ipp +2 -0
- package/libcxx/src/support/runtime/exception_pointer_cxxabi.ipp +9 -10
- package/libcxx/src/support/runtime/exception_pointer_glibcxx.ipp +2 -0
- package/libcxx/src/support/runtime/exception_pointer_msvc.ipp +1 -0
- package/libcxx/src/support/runtime/exception_pointer_unimplemented.ipp +1 -0
- package/libcxx/src/support/win32/locale_win32.cpp +1 -1
- package/libcxx/src/system_error.cpp +2 -0
- package/libcxx/src/thread.cpp +1 -3
- package/libcxx/src/valarray.cpp +1 -2
- package/libcxx/src/vector.cpp +2 -2
- package/libcxxabi/include/__cxxabi_config.h +42 -23
- package/libcxxabi/src/cxa_exception.cpp +4 -2
- package/libcxxabi/src/cxa_exception.h +16 -14
- package/libcxxabi/src/cxa_personality.cpp +126 -9
- package/libcxxabi/src/cxa_thread_atexit.cpp +2 -1
- package/libcxxabi/src/demangle/DemangleConfig.h +4 -0
- package/libcxxabi/src/demangle/ItaniumDemangle.h +9 -6
- package/libcxxabi/src/demangle/Utility.h +21 -7
- package/libcxxabi/src/fallback_malloc.cpp +1 -1
- package/libcxxabi/src/private_typeinfo.cpp +6 -0
- package/libcxxabi/src/stdlib_new_delete.cpp +5 -5
- package/libtsan/LICENSE.TXT +311 -0
- package/libtsan/builtins/assembly.h +41 -8
- package/libtsan/interception/interception_win.cpp +4 -0
- package/libtsan/sanitizer_common/sanitizer_allocator_primary32.h +1 -0
- package/libtsan/sanitizer_common/sanitizer_allocator_primary64.h +18 -0
- package/libtsan/sanitizer_common/sanitizer_common.h +15 -2
- package/libtsan/sanitizer_common/sanitizer_common_interceptors.inc +30 -4
- package/libtsan/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +4 -0
- package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S +2 -1
- package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S +2 -0
- package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S +2 -0
- package/libtsan/sanitizer_common/sanitizer_common_syscalls.inc +18 -0
- package/libtsan/sanitizer_common/sanitizer_file.cpp +40 -12
- package/libtsan/sanitizer_common/sanitizer_file.h +3 -0
- package/libtsan/sanitizer_common/sanitizer_flags.inc +7 -0
- package/libtsan/sanitizer_common/sanitizer_fuchsia.cpp +30 -3
- package/libtsan/sanitizer_common/sanitizer_haiku.cpp +2 -2
- package/libtsan/sanitizer_common/sanitizer_internal_defs.h +1 -1
- package/libtsan/sanitizer_common/sanitizer_libc.cpp +8 -0
- package/libtsan/sanitizer_common/sanitizer_libc.h +1 -0
- package/libtsan/sanitizer_common/sanitizer_linux.cpp +15 -7
- package/libtsan/sanitizer_common/sanitizer_linux.h +3 -3
- package/libtsan/sanitizer_common/sanitizer_linux_libcdep.cpp +1 -0
- package/libtsan/sanitizer_common/sanitizer_mac.cpp +255 -104
- package/libtsan/sanitizer_common/sanitizer_mac.h +5 -0
- package/libtsan/sanitizer_common/sanitizer_netbsd.cpp +2 -2
- package/libtsan/sanitizer_common/sanitizer_platform.h +27 -1
- package/libtsan/sanitizer_common/sanitizer_platform_interceptors.h +5 -4
- package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.cpp +15 -17
- package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.h +32 -6
- package/libtsan/sanitizer_common/sanitizer_posix.cpp +3 -12
- package/libtsan/sanitizer_common/sanitizer_posix.h +2 -1
- package/libtsan/sanitizer_common/sanitizer_posix_libcdep.cpp +19 -0
- package/libtsan/sanitizer_common/sanitizer_procmaps_mac.cpp +102 -37
- package/libtsan/sanitizer_common/sanitizer_redefine_builtins.h +1 -1
- package/libtsan/sanitizer_common/sanitizer_signal_interceptors.inc +40 -2
- package/libtsan/sanitizer_common/sanitizer_stoptheworld.h +1 -1
- package/libtsan/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp +83 -12
- package/libtsan/sanitizer_common/sanitizer_stoptheworld_mac.cpp +3 -3
- package/libtsan/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp +7 -7
- package/libtsan/sanitizer_common/sanitizer_stoptheworld_win.cpp +2 -2
- package/libtsan/sanitizer_common/sanitizer_symbolizer_internal.h +5 -1
- package/libtsan/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +11 -1
- package/libtsan/sanitizer_common/sanitizer_symbolizer_mac.cpp +86 -29
- package/libtsan/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +27 -16
- package/libtsan/sanitizer_common/sanitizer_thread_registry.cpp +5 -4
- package/libtsan/sanitizer_common/sanitizer_thread_registry.h +4 -4
- package/libtsan/sanitizer_common/sanitizer_win.cpp +1 -3
- package/libtsan/tsan_debugging.cpp +2 -2
- package/libtsan/tsan_flags.cpp +37 -0
- package/libtsan/tsan_flags.h +8 -0
- package/libtsan/tsan_flags.inc +12 -0
- package/libtsan/tsan_interceptors.h +9 -1
- package/libtsan/tsan_interceptors_mac.cpp +19 -0
- package/libtsan/tsan_interceptors_posix.cpp +78 -32
- package/libtsan/tsan_interface.h +3 -3
- package/libtsan/tsan_interface_ann.cpp +23 -9
- package/libtsan/tsan_mman.cpp +18 -4
- package/libtsan/tsan_platform.h +44 -7
- package/libtsan/tsan_platform_linux.cpp +42 -14
- package/libtsan/tsan_platform_mac.cpp +16 -3
- package/libtsan/tsan_report.h +14 -1
- package/libtsan/tsan_rtl.cpp +14 -0
- package/libtsan/tsan_rtl.h +7 -2
- package/libtsan/tsan_rtl_aarch64.S +3 -5
- package/libtsan/tsan_rtl_access.cpp +8 -3
- package/libtsan/tsan_rtl_amd64.S +2 -0
- package/libtsan/tsan_rtl_mutex.cpp +94 -49
- package/libtsan/tsan_rtl_report.cpp +132 -65
- package/libtsan/tsan_rtl_thread.cpp +31 -9
- package/libtsan/tsan_symbolize.cpp +1 -1
- package/libtsan/tsan_symbolize.h +1 -1
- package/libtsan/tsan_trace.h +1 -1
- package/libunwind/include/__libunwind_config.h +11 -2
- package/libunwind/include/libunwind.h +117 -11
- package/libunwind/include/unwind_arm_ehabi.h +4 -1
- package/libunwind/src/AddressSpace.hpp +42 -20
- package/libunwind/src/CompactUnwinder.hpp +16 -5
- package/libunwind/src/DwarfInstructions.hpp +24 -13
- package/libunwind/src/DwarfParser.hpp +62 -23
- package/libunwind/src/EHHeaderParser.hpp +7 -4
- package/libunwind/src/Registers.hpp +226 -22
- package/libunwind/src/Unwind-seh.cpp +6 -7
- package/libunwind/src/Unwind-wasm.c +7 -7
- package/libunwind/src/UnwindCursor.hpp +167 -49
- package/libunwind/src/UnwindLevel1.c +46 -17
- package/libunwind/src/UnwindRegistersRestore.S +46 -5
- package/libunwind/src/UnwindRegistersSave.S +86 -2
- package/libunwind/src/assembly.h +5 -1
- package/libunwind/src/config.h +9 -0
- package/libunwind/src/gcc_personality_v0.c +79 -6
- package/libunwind/src/libunwind.cpp +104 -4
- package/libunwind/src/libunwind_ext.h +7 -1
- package/libunwind/src/shadow_stack_unwind.h +2 -2
- package/lldb/pretty_printers.py +948 -0
- package/package.json +1 -1
- package/std/Build/Step/Compile.zig +18 -19
- package/std/Build/Step/Run.zig +13 -6
- package/std/Build/Step.zig +0 -3
- package/std/Io/Threaded.zig +3 -0
- package/std/Target/aarch64.zig +620 -77
- package/std/Target/amdgcn.zig +421 -21
- package/std/Target/arm.zig +40 -6
- package/std/Target/bpf.zig +6 -0
- package/std/Target/hexagon.zig +41 -6
- package/std/Target/loongarch.zig +18 -0
- package/std/Target/mips.zig +6 -0
- package/std/Target/nvptx.zig +58 -35
- package/std/Target/powerpc.zig +27 -19
- package/std/Target/riscv.zig +415 -177
- package/std/Target/sparc.zig +17 -0
- package/std/Target/wasm.zig +7 -0
- package/std/Target/x86.zig +200 -31
- package/std/Target/xtensa.zig +65 -0
- package/std/Target.zig +16 -8
- package/std/c.zig +7 -0
- package/std/crypto/ml_kem.zig +0 -15
- package/std/debug/Dwarf.zig +14 -11
- package/std/debug/Pdb.zig +24 -16
- package/std/hash/xxhash.zig +0 -6
- package/std/math/log10.zig +0 -2
- package/std/math/modf.zig +1 -2
- package/std/mem.zig +1 -2
- package/std/os/linux/x86.zig +2 -2
- package/std/os/windows.zig +130 -1
- package/std/simd.zig +4 -21
- package/std/start.zig +4 -3
- package/std/zig/Ast.zig +5 -7
- package/std/zig/AstGen.zig +20 -14
- package/std/zig/ErrorBundle.zig +6 -2
- package/std/zig/ZonGen.zig +13 -21
- package/std/zig/llvm/Builder.zig +2 -2
- package/std/zig/system/arm.zig +56 -2
- package/std/zig/system/windows.zig +34 -1
- package/std/zig/system/x86.zig +60 -16
- package/std/zig/system.zig +0 -10
- package/std/zig/target.zig +1 -2
- package/std/zon/parse.zig +1 -1
- package/include/amxbf16transposeintrin.h +0 -94
- package/include/amxcomplextransposeintrin.h +0 -303
- package/include/amxfp16transposeintrin.h +0 -94
- package/include/amxmovrstransposeintrin.h +0 -200
- package/include/amxtf32transposeintrin.h +0 -105
- package/include/amxtransposeintrin.h +0 -248
- package/libtsan/sanitizer_common/sanitizer_coverage_interface.inc +0 -43
- package/std/Build/Step/CheckObject.zig +0 -2764
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
#define LLVM_LIBC_SRC___SUPPORT_STR_TO_FLOAT_H
|
|
17
17
|
|
|
18
18
|
#include "hdr/errno_macros.h" // For ERANGE
|
|
19
|
+
#include "hdr/stdint_proxy.h"
|
|
19
20
|
#include "src/__support/CPP/bit.h"
|
|
20
21
|
#include "src/__support/CPP/limits.h"
|
|
21
22
|
#include "src/__support/CPP/optional.h"
|
|
@@ -32,8 +33,7 @@
|
|
|
32
33
|
#include "src/__support/str_to_integer.h"
|
|
33
34
|
#include "src/__support/str_to_num_result.h"
|
|
34
35
|
#include "src/__support/uint128.h"
|
|
35
|
-
|
|
36
|
-
#include <stdint.h>
|
|
36
|
+
#include "src/__support/wctype_utils.h"
|
|
37
37
|
|
|
38
38
|
namespace LIBC_NAMESPACE_DECL {
|
|
39
39
|
namespace internal {
|
|
@@ -335,9 +335,9 @@ constexpr int32_t NUM_POWERS_OF_TWO =
|
|
|
335
335
|
// the Eisel-Lemire algorithm fails, it's slower but more accurate. It's based
|
|
336
336
|
// on the Simple Decimal Conversion algorithm by Nigel Tao, described at this
|
|
337
337
|
// link: https://nigeltao.github.io/blog/2020/parse-number-f64-simple.html
|
|
338
|
-
template <
|
|
338
|
+
template <typename T, typename CharType>
|
|
339
339
|
LIBC_INLINE FloatConvertReturn<T> simple_decimal_conversion(
|
|
340
|
-
const
|
|
340
|
+
const CharType *__restrict numStart,
|
|
341
341
|
const size_t num_len = cpp::numeric_limits<size_t>::max(),
|
|
342
342
|
RoundDirection round = RoundDirection::Nearest) {
|
|
343
343
|
using FPBits = typename fputil::FPBits<T>;
|
|
@@ -677,12 +677,11 @@ template <> LIBC_INLINE constexpr int32_t get_lower_bound<double>() {
|
|
|
677
677
|
// Takes a mantissa and base 10 exponent and converts it into its closest
|
|
678
678
|
// floating point type T equivalient. First we try the Eisel-Lemire algorithm,
|
|
679
679
|
// then if that fails then we fall back to a more accurate algorithm for
|
|
680
|
-
// accuracy.
|
|
681
|
-
|
|
682
|
-
template <class T>
|
|
680
|
+
// accuracy.
|
|
681
|
+
template <typename T, typename CharType>
|
|
683
682
|
LIBC_INLINE FloatConvertReturn<T> decimal_exp_to_float(
|
|
684
683
|
ExpandedFloat<T> init_num, bool truncated, RoundDirection round,
|
|
685
|
-
const
|
|
684
|
+
const CharType *__restrict numStart,
|
|
686
685
|
const size_t num_len = cpp::numeric_limits<size_t>::max()) {
|
|
687
686
|
using FPBits = typename fputil::FPBits<T>;
|
|
688
687
|
using StorageType = typename FPBits::StorageType;
|
|
@@ -861,36 +860,42 @@ LIBC_INLINE FloatConvertReturn<T> binary_exp_to_float(ExpandedFloat<T> init_num,
|
|
|
861
860
|
return output;
|
|
862
861
|
}
|
|
863
862
|
|
|
864
|
-
//
|
|
863
|
+
// Checks if the first characters of the string pointer are the start of a
|
|
865
864
|
// hexadecimal floating point number. Does not advance the string pointer.
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
if (!(src[0]
|
|
865
|
+
template <typename CharType>
|
|
866
|
+
LIBC_INLINE static bool is_float_hex_start(const CharType *__restrict src) {
|
|
867
|
+
if (!is_char_or_wchar(src[0], '0', L'0') ||
|
|
868
|
+
!is_char_or_wchar(tolower(src[1]), 'x', L'x')) {
|
|
869
869
|
return false;
|
|
870
870
|
}
|
|
871
871
|
size_t first_digit = 2;
|
|
872
|
-
if (src[2] ==
|
|
872
|
+
if (src[2] == constants<CharType>::DECIMAL_POINT) {
|
|
873
873
|
++first_digit;
|
|
874
874
|
}
|
|
875
875
|
return isalnum(src[first_digit]) && b36_char_to_int(src[first_digit]) < 16;
|
|
876
876
|
}
|
|
877
877
|
|
|
878
|
-
//
|
|
879
|
-
//
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
878
|
+
// Verifies that first prefix_len characters of str, when lowercased, match the
|
|
879
|
+
// specified prefix.
|
|
880
|
+
template <typename CharType>
|
|
881
|
+
LIBC_INLINE static bool tolower_starts_with(const CharType *str,
|
|
882
|
+
size_t prefix_len,
|
|
883
|
+
const CharType *prefix) {
|
|
884
|
+
for (size_t i = 0; i < prefix_len; ++i) {
|
|
885
|
+
if (tolower(str[i]) != prefix[i])
|
|
886
|
+
return false;
|
|
887
|
+
}
|
|
888
|
+
return true;
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
// Attempts parsing a decimal floating point number at the start of the string.
|
|
892
|
+
template <typename T, typename CharType>
|
|
893
|
+
LIBC_INLINE static StrToNumResult<ExpandedFloat<T>>
|
|
894
|
+
decimal_string_to_float(const CharType *__restrict src, RoundDirection round) {
|
|
888
895
|
using FPBits = typename fputil::FPBits<T>;
|
|
889
896
|
using StorageType = typename FPBits::StorageType;
|
|
890
897
|
|
|
891
898
|
constexpr uint32_t BASE = 10;
|
|
892
|
-
constexpr char EXPONENT_MARKER = 'e';
|
|
893
|
-
|
|
894
899
|
bool truncated = false;
|
|
895
900
|
bool seen_digit = false;
|
|
896
901
|
bool after_decimal = false;
|
|
@@ -927,7 +932,7 @@ decimal_string_to_float(const char *__restrict src, const char DECIMAL_POINT,
|
|
|
927
932
|
++index;
|
|
928
933
|
continue;
|
|
929
934
|
}
|
|
930
|
-
if (src[index] == DECIMAL_POINT) {
|
|
935
|
+
if (src[index] == constants<CharType>::DECIMAL_POINT) {
|
|
931
936
|
if (after_decimal) {
|
|
932
937
|
break; // this means that src[index] points to a second decimal point,
|
|
933
938
|
// ending the number.
|
|
@@ -944,13 +949,10 @@ decimal_string_to_float(const char *__restrict src, const char DECIMAL_POINT,
|
|
|
944
949
|
return output;
|
|
945
950
|
|
|
946
951
|
// TODO: When adding max length argument, handle the case of a trailing
|
|
947
|
-
//
|
|
948
|
-
if (tolower(src[index]) ==
|
|
949
|
-
|
|
950
|
-
if (src[index + 1
|
|
951
|
-
has_sign = true;
|
|
952
|
-
}
|
|
953
|
-
if (isdigit(src[index + 1 + static_cast<size_t>(has_sign)])) {
|
|
952
|
+
// exponent marker, see scanf for more details.
|
|
953
|
+
if (tolower(src[index]) == constants<CharType>::DECIMAL_EXPONENT_MARKER) {
|
|
954
|
+
int sign = get_sign(src + index + 1);
|
|
955
|
+
if (isdigit(src[index + 1 + static_cast<size_t>(sign != 0)])) {
|
|
954
956
|
++index;
|
|
955
957
|
auto result = strtointeger<int32_t>(src + index, 10);
|
|
956
958
|
if (result.has_error())
|
|
@@ -986,22 +988,16 @@ decimal_string_to_float(const char *__restrict src, const char DECIMAL_POINT,
|
|
|
986
988
|
return output;
|
|
987
989
|
}
|
|
988
990
|
|
|
989
|
-
//
|
|
990
|
-
//
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
template <class T>
|
|
996
|
-
LIBC_INLINE StrToNumResult<ExpandedFloat<T>>
|
|
997
|
-
hexadecimal_string_to_float(const char *__restrict src,
|
|
998
|
-
const char DECIMAL_POINT, RoundDirection round) {
|
|
991
|
+
// Attempts parsing a hexadecimal floating point number at the start of the
|
|
992
|
+
// string.
|
|
993
|
+
template <typename T, typename CharType>
|
|
994
|
+
LIBC_INLINE static StrToNumResult<ExpandedFloat<T>>
|
|
995
|
+
hexadecimal_string_to_float(const CharType *__restrict src,
|
|
996
|
+
RoundDirection round) {
|
|
999
997
|
using FPBits = typename fputil::FPBits<T>;
|
|
1000
998
|
using StorageType = typename FPBits::StorageType;
|
|
1001
999
|
|
|
1002
1000
|
constexpr uint32_t BASE = 16;
|
|
1003
|
-
constexpr char EXPONENT_MARKER = 'p';
|
|
1004
|
-
|
|
1005
1001
|
bool truncated = false;
|
|
1006
1002
|
bool seen_digit = false;
|
|
1007
1003
|
bool after_decimal = false;
|
|
@@ -1039,7 +1035,7 @@ hexadecimal_string_to_float(const char *__restrict src,
|
|
|
1039
1035
|
++index;
|
|
1040
1036
|
continue;
|
|
1041
1037
|
}
|
|
1042
|
-
if (src[index] == DECIMAL_POINT) {
|
|
1038
|
+
if (src[index] == constants<CharType>::DECIMAL_POINT) {
|
|
1043
1039
|
if (after_decimal) {
|
|
1044
1040
|
break; // this means that src[index] points to a second decimal point,
|
|
1045
1041
|
// ending the number.
|
|
@@ -1058,12 +1054,9 @@ hexadecimal_string_to_float(const char *__restrict src,
|
|
|
1058
1054
|
// Convert the exponent from having a base of 16 to having a base of 2.
|
|
1059
1055
|
exponent *= 4;
|
|
1060
1056
|
|
|
1061
|
-
if (tolower(src[index]) ==
|
|
1062
|
-
|
|
1063
|
-
if (src[index + 1
|
|
1064
|
-
has_sign = true;
|
|
1065
|
-
}
|
|
1066
|
-
if (isdigit(src[index + 1 + static_cast<size_t>(has_sign)])) {
|
|
1057
|
+
if (tolower(src[index]) == constants<CharType>::HEX_EXPONENT_MARKER) {
|
|
1058
|
+
int sign = get_sign(src + index + 1);
|
|
1059
|
+
if (isdigit(src[index + 1 + static_cast<size_t>(sign != 0)])) {
|
|
1067
1060
|
++index;
|
|
1068
1061
|
auto result = strtointeger<int32_t>(src + index, 10);
|
|
1069
1062
|
if (result.has_error())
|
|
@@ -1099,21 +1092,21 @@ hexadecimal_string_to_float(const char *__restrict src,
|
|
|
1099
1092
|
return output;
|
|
1100
1093
|
}
|
|
1101
1094
|
|
|
1102
|
-
template <
|
|
1095
|
+
template <typename T, typename CharType>
|
|
1103
1096
|
LIBC_INLINE typename fputil::FPBits<T>::StorageType
|
|
1104
|
-
nan_mantissa_from_ncharseq(const
|
|
1097
|
+
nan_mantissa_from_ncharseq(const CharType *str, size_t len) {
|
|
1105
1098
|
using FPBits = typename fputil::FPBits<T>;
|
|
1106
1099
|
using StorageType = typename FPBits::StorageType;
|
|
1107
1100
|
|
|
1108
1101
|
StorageType nan_mantissa = 0;
|
|
1109
1102
|
|
|
1110
|
-
if (
|
|
1103
|
+
if (len > 0 && isdigit(str[0])) {
|
|
1111
1104
|
StrToNumResult<StorageType> strtoint_result =
|
|
1112
|
-
strtointeger<StorageType>(
|
|
1105
|
+
strtointeger<StorageType>(str, 0, len);
|
|
1113
1106
|
if (!strtoint_result.has_error())
|
|
1114
1107
|
nan_mantissa = strtoint_result.value;
|
|
1115
1108
|
|
|
1116
|
-
if (strtoint_result.parsed_len != static_cast<ptrdiff_t>(
|
|
1109
|
+
if (strtoint_result.parsed_len != static_cast<ptrdiff_t>(len))
|
|
1117
1110
|
nan_mantissa = 0;
|
|
1118
1111
|
}
|
|
1119
1112
|
|
|
@@ -1124,59 +1117,44 @@ nan_mantissa_from_ncharseq(const cpp::string_view ncharseq) {
|
|
|
1124
1117
|
// is used as the backend for all of the string to float functions.
|
|
1125
1118
|
// TODO: Add src_len member to match strtointeger.
|
|
1126
1119
|
// TODO: Next, move from char* and length to string_view
|
|
1127
|
-
template <
|
|
1128
|
-
LIBC_INLINE StrToNumResult<T>
|
|
1120
|
+
template <typename T, typename CharType>
|
|
1121
|
+
LIBC_INLINE StrToNumResult<T>
|
|
1122
|
+
strtofloatingpoint(const CharType *__restrict src) {
|
|
1129
1123
|
using FPBits = typename fputil::FPBits<T>;
|
|
1130
1124
|
using StorageType = typename FPBits::StorageType;
|
|
1131
1125
|
|
|
1132
1126
|
FPBits result = FPBits();
|
|
1133
1127
|
bool seen_digit = false;
|
|
1134
|
-
char sign = '+';
|
|
1135
|
-
|
|
1136
1128
|
int error = 0;
|
|
1137
1129
|
|
|
1138
1130
|
size_t index = first_non_whitespace(src);
|
|
1131
|
+
int sign = get_sign(src + index);
|
|
1132
|
+
bool is_positive = (sign >= 0);
|
|
1133
|
+
index += (sign != 0);
|
|
1139
1134
|
|
|
1140
|
-
if (
|
|
1141
|
-
sign = src[index];
|
|
1142
|
-
++index;
|
|
1143
|
-
}
|
|
1144
|
-
|
|
1145
|
-
if (sign == '-') {
|
|
1135
|
+
if (sign < 0) {
|
|
1146
1136
|
result.set_sign(Sign::NEG);
|
|
1147
1137
|
}
|
|
1148
1138
|
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
static const char *nan_string = "nan";
|
|
1152
|
-
|
|
1153
|
-
if (isdigit(src[index]) || src[index] == DECIMAL_POINT) { // regular number
|
|
1139
|
+
if (isdigit(src[index]) ||
|
|
1140
|
+
src[index] == constants<CharType>::DECIMAL_POINT) { // regular number
|
|
1154
1141
|
int base = 10;
|
|
1155
|
-
if (is_float_hex_start(src + index
|
|
1142
|
+
if (is_float_hex_start(src + index)) {
|
|
1156
1143
|
base = 16;
|
|
1157
1144
|
index += 2;
|
|
1158
1145
|
seen_digit = true;
|
|
1159
1146
|
}
|
|
1160
1147
|
|
|
1161
1148
|
RoundDirection round_direction = RoundDirection::Nearest;
|
|
1162
|
-
|
|
1163
1149
|
switch (fputil::quick_get_round()) {
|
|
1164
1150
|
case FE_TONEAREST:
|
|
1165
1151
|
round_direction = RoundDirection::Nearest;
|
|
1166
1152
|
break;
|
|
1167
1153
|
case FE_UPWARD:
|
|
1168
|
-
|
|
1169
|
-
round_direction = RoundDirection::Up;
|
|
1170
|
-
} else {
|
|
1171
|
-
round_direction = RoundDirection::Down;
|
|
1172
|
-
}
|
|
1154
|
+
round_direction = is_positive ? RoundDirection::Up : RoundDirection::Down;
|
|
1173
1155
|
break;
|
|
1174
1156
|
case FE_DOWNWARD:
|
|
1175
|
-
|
|
1176
|
-
round_direction = RoundDirection::Down;
|
|
1177
|
-
} else {
|
|
1178
|
-
round_direction = RoundDirection::Up;
|
|
1179
|
-
}
|
|
1157
|
+
round_direction = is_positive ? RoundDirection::Down : RoundDirection::Up;
|
|
1180
1158
|
break;
|
|
1181
1159
|
case FE_TOWARDZERO:
|
|
1182
1160
|
round_direction = RoundDirection::Down;
|
|
@@ -1185,58 +1163,53 @@ LIBC_INLINE StrToNumResult<T> strtofloatingpoint(const char *__restrict src) {
|
|
|
1185
1163
|
|
|
1186
1164
|
StrToNumResult<ExpandedFloat<T>> parse_result({0, 0});
|
|
1187
1165
|
if (base == 16) {
|
|
1188
|
-
parse_result =
|
|
1189
|
-
|
|
1166
|
+
parse_result =
|
|
1167
|
+
hexadecimal_string_to_float<T>(src + index, round_direction);
|
|
1190
1168
|
} else { // base is 10
|
|
1191
|
-
parse_result = decimal_string_to_float<T>(src + index,
|
|
1192
|
-
round_direction);
|
|
1169
|
+
parse_result = decimal_string_to_float<T>(src + index, round_direction);
|
|
1193
1170
|
}
|
|
1194
1171
|
seen_digit = parse_result.parsed_len != 0;
|
|
1195
1172
|
result.set_mantissa(parse_result.value.mantissa);
|
|
1196
1173
|
result.set_biased_exponent(parse_result.value.exponent);
|
|
1197
1174
|
index += parse_result.parsed_len;
|
|
1198
1175
|
error = parse_result.error;
|
|
1199
|
-
} else if (
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1176
|
+
} else if (tolower_starts_with(src + index, 3,
|
|
1177
|
+
constants<CharType>::NAN_STRING)) {
|
|
1178
|
+
// NAN
|
|
1179
|
+
seen_digit = true;
|
|
1180
|
+
index += 3;
|
|
1181
|
+
StorageType nan_mantissa = 0;
|
|
1182
|
+
// this handles the case of `NaN(n-character-sequence)`, where the
|
|
1183
|
+
// n-character-sequence is made of 0 or more letters, numbers, or
|
|
1184
|
+
// underscore characters in any order.
|
|
1185
|
+
if (is_char_or_wchar(src[index], '(', L'(')) {
|
|
1186
|
+
size_t left_paren = index;
|
|
1187
|
+
++index;
|
|
1188
|
+
while (isalnum(src[index]) || is_char_or_wchar(src[index], '_', L'_'))
|
|
1210
1189
|
++index;
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
nan_mantissa = nan_mantissa_from_ncharseq<T>(
|
|
1216
|
-
cpp::string_view(src + (left_paren + 1), index - left_paren - 2));
|
|
1217
|
-
} else {
|
|
1218
|
-
index = left_paren;
|
|
1219
|
-
}
|
|
1220
|
-
}
|
|
1221
|
-
result = FPBits(result.quiet_nan(result.sign(), nan_mantissa));
|
|
1222
|
-
}
|
|
1223
|
-
} else if (tolower(src[index]) == 'i') { // INF
|
|
1224
|
-
if (tolower(src[index + 1]) == inf_string[1] &&
|
|
1225
|
-
tolower(src[index + 2]) == inf_string[2]) {
|
|
1226
|
-
seen_digit = true;
|
|
1227
|
-
result = FPBits(result.inf(result.sign()));
|
|
1228
|
-
if (tolower(src[index + 3]) == inf_string[3] &&
|
|
1229
|
-
tolower(src[index + 4]) == inf_string[4] &&
|
|
1230
|
-
tolower(src[index + 5]) == inf_string[5] &&
|
|
1231
|
-
tolower(src[index + 6]) == inf_string[6] &&
|
|
1232
|
-
tolower(src[index + 7]) == inf_string[7]) {
|
|
1233
|
-
// if the string is "INFINITY" then consume 8 characters.
|
|
1234
|
-
index += 8;
|
|
1190
|
+
if (is_char_or_wchar(src[index], ')', L')')) {
|
|
1191
|
+
++index;
|
|
1192
|
+
nan_mantissa = nan_mantissa_from_ncharseq<T>(src + (left_paren + 1),
|
|
1193
|
+
index - left_paren - 2);
|
|
1235
1194
|
} else {
|
|
1236
|
-
index
|
|
1195
|
+
index = left_paren;
|
|
1237
1196
|
}
|
|
1238
1197
|
}
|
|
1198
|
+
result = FPBits(result.quiet_nan(result.sign(), nan_mantissa));
|
|
1199
|
+
} else if (tolower_starts_with(src + index, 8,
|
|
1200
|
+
constants<CharType>::INF_STRING)) {
|
|
1201
|
+
// INFINITY
|
|
1202
|
+
seen_digit = true;
|
|
1203
|
+
result = FPBits(result.inf(result.sign()));
|
|
1204
|
+
index += 8;
|
|
1205
|
+
} else if (tolower_starts_with(src + index, 3,
|
|
1206
|
+
constants<CharType>::INF_STRING)) {
|
|
1207
|
+
// INF
|
|
1208
|
+
seen_digit = true;
|
|
1209
|
+
result = FPBits(result.inf(result.sign()));
|
|
1210
|
+
index += 3;
|
|
1239
1211
|
}
|
|
1212
|
+
|
|
1240
1213
|
if (!seen_digit) { // If there is nothing to actually parse, then return 0.
|
|
1241
1214
|
return {T(0), 0, error};
|
|
1242
1215
|
}
|
|
@@ -1263,7 +1236,7 @@ template <class T> LIBC_INLINE StrToNumResult<T> strtonan(const char *arg) {
|
|
|
1263
1236
|
++index;
|
|
1264
1237
|
|
|
1265
1238
|
if (arg[index] == '\0')
|
|
1266
|
-
nan_mantissa = nan_mantissa_from_ncharseq<T>(
|
|
1239
|
+
nan_mantissa = nan_mantissa_from_ncharseq<T>(arg, index);
|
|
1267
1240
|
|
|
1268
1241
|
result = FPBits::quiet_nan(Sign::POS, nan_mantissa);
|
|
1269
1242
|
return {result.get_val(), 0, error};
|
|
@@ -25,36 +25,51 @@
|
|
|
25
25
|
#include "src/__support/macros/config.h"
|
|
26
26
|
#include "src/__support/str_to_num_result.h"
|
|
27
27
|
#include "src/__support/uint128.h"
|
|
28
|
+
#include "src/__support/wctype_utils.h"
|
|
28
29
|
|
|
29
30
|
namespace LIBC_NAMESPACE_DECL {
|
|
30
31
|
namespace internal {
|
|
31
32
|
|
|
32
33
|
// Returns the idx to the first character in src that is not a whitespace
|
|
33
34
|
// character (as determined by isspace())
|
|
35
|
+
template <typename CharType>
|
|
34
36
|
LIBC_INLINE size_t
|
|
35
|
-
first_non_whitespace(const
|
|
37
|
+
first_non_whitespace(const CharType *__restrict src,
|
|
36
38
|
size_t src_len = cpp::numeric_limits<size_t>::max()) {
|
|
37
39
|
size_t src_cur = 0;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
40
|
+
for (; src_cur < src_len && internal::isspace(src[src_cur]); ++src_cur)
|
|
41
|
+
;
|
|
41
42
|
return src_cur;
|
|
42
43
|
}
|
|
43
44
|
|
|
45
|
+
// Returns +1, -1, or 0 if 'src' starts with (respectively)
|
|
46
|
+
// plus sign, minus sign, or neither.
|
|
47
|
+
template <typename CharType>
|
|
48
|
+
LIBC_INLINE static int get_sign(const CharType *__restrict src) {
|
|
49
|
+
if (is_char_or_wchar(src[0], '+', L'+'))
|
|
50
|
+
return 1;
|
|
51
|
+
if (is_char_or_wchar(src[0], '-', L'-'))
|
|
52
|
+
return -1;
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
|
|
44
56
|
// checks if the next 3 characters of the string pointer are the start of a
|
|
45
57
|
// hexadecimal number. Does not advance the string pointer.
|
|
46
|
-
|
|
47
|
-
is_hex_start(const
|
|
48
|
-
|
|
58
|
+
template <typename CharType>
|
|
59
|
+
LIBC_INLINE static bool is_hex_start(const CharType *__restrict src,
|
|
60
|
+
size_t src_len) {
|
|
49
61
|
if (src_len < 3)
|
|
50
62
|
return false;
|
|
51
|
-
return
|
|
52
|
-
|
|
63
|
+
return is_char_or_wchar(src[0], '0', L'0') &&
|
|
64
|
+
is_char_or_wchar(tolower(src[1]), 'x', L'x') && isalnum(src[2]) &&
|
|
65
|
+
b36_char_to_int(src[2]) < 16;
|
|
53
66
|
}
|
|
54
67
|
|
|
55
68
|
// Takes the address of the string pointer and parses the base from the start of
|
|
56
69
|
// it.
|
|
57
|
-
|
|
70
|
+
template <typename CharType>
|
|
71
|
+
LIBC_INLINE static int infer_base(const CharType *__restrict src,
|
|
72
|
+
size_t src_len) {
|
|
58
73
|
// A hexadecimal number is defined as "the prefix 0x or 0X followed by a
|
|
59
74
|
// sequence of the decimal digits and the letters a (or A) through f (or F)
|
|
60
75
|
// with values 10 through 15 respectively." (C standard 6.4.4.1)
|
|
@@ -63,8 +78,9 @@ LIBC_INLINE int infer_base(const char *__restrict src, size_t src_len) {
|
|
|
63
78
|
// An octal number is defined as "the prefix 0 optionally followed by a
|
|
64
79
|
// sequence of the digits 0 through 7 only" (C standard 6.4.4.1) and so any
|
|
65
80
|
// number that starts with 0, including just 0, is an octal number.
|
|
66
|
-
if (src_len > 0 && src[0]
|
|
81
|
+
if (src_len > 0 && is_char_or_wchar(src[0], '0', L'0')) {
|
|
67
82
|
return 8;
|
|
83
|
+
}
|
|
68
84
|
// A decimal number is defined as beginning "with a nonzero digit and
|
|
69
85
|
// consist[ing] of a sequence of decimal digits." (C standard 6.4.4.1)
|
|
70
86
|
return 10;
|
|
@@ -77,32 +93,27 @@ LIBC_INLINE int infer_base(const char *__restrict src, size_t src_len) {
|
|
|
77
93
|
// -----------------------------------------------------------------------------
|
|
78
94
|
// Takes a pointer to a string and the base to convert to. This function is used
|
|
79
95
|
// as the backend for all of the string to int functions.
|
|
80
|
-
template <
|
|
96
|
+
template <typename T, typename CharType>
|
|
81
97
|
LIBC_INLINE StrToNumResult<T>
|
|
82
|
-
strtointeger(const
|
|
98
|
+
strtointeger(const CharType *__restrict src, int base,
|
|
83
99
|
const size_t src_len = cpp::numeric_limits<size_t>::max()) {
|
|
84
100
|
using ResultType = make_integral_or_big_int_unsigned_t<T>;
|
|
85
101
|
|
|
86
|
-
ResultType result = 0;
|
|
87
|
-
|
|
88
|
-
bool is_number = false;
|
|
89
|
-
size_t src_cur = 0;
|
|
90
|
-
int error_val = 0;
|
|
91
|
-
|
|
92
102
|
if (src_len == 0)
|
|
93
103
|
return {0, 0, 0};
|
|
94
104
|
|
|
95
105
|
if (base < 0 || base == 1 || base > 36)
|
|
96
106
|
return {0, 0, EINVAL};
|
|
97
107
|
|
|
98
|
-
src_cur = first_non_whitespace(src, src_len);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (src[src_cur] == '+' || src[src_cur] == '-') {
|
|
102
|
-
result_sign = src[src_cur];
|
|
103
|
-
++src_cur;
|
|
108
|
+
size_t src_cur = first_non_whitespace(src, src_len);
|
|
109
|
+
if (src_cur == src_len) {
|
|
110
|
+
return {0, 0, 0};
|
|
104
111
|
}
|
|
105
112
|
|
|
113
|
+
int sign = get_sign(src + src_cur);
|
|
114
|
+
bool is_positive = (sign >= 0);
|
|
115
|
+
src_cur += (sign != 0);
|
|
116
|
+
|
|
106
117
|
if (base == 0)
|
|
107
118
|
base = infer_base(src + src_cur, src_len - src_cur);
|
|
108
119
|
|
|
@@ -110,8 +121,6 @@ strtointeger(const char *__restrict src, int base,
|
|
|
110
121
|
src_cur = src_cur + 2;
|
|
111
122
|
|
|
112
123
|
constexpr bool IS_UNSIGNED = cpp::is_unsigned_v<T>;
|
|
113
|
-
const bool is_positive = (result_sign == '+');
|
|
114
|
-
|
|
115
124
|
ResultType constexpr NEGATIVE_MAX =
|
|
116
125
|
!IS_UNSIGNED ? static_cast<ResultType>(cpp::numeric_limits<T>::max()) + 1
|
|
117
126
|
: cpp::numeric_limits<T>::max();
|
|
@@ -120,6 +129,9 @@ strtointeger(const char *__restrict src, int base,
|
|
|
120
129
|
ResultType const abs_max_div_by_base =
|
|
121
130
|
abs_max / static_cast<ResultType>(base);
|
|
122
131
|
|
|
132
|
+
bool is_number = false;
|
|
133
|
+
int error_val = 0;
|
|
134
|
+
ResultType result = 0;
|
|
123
135
|
while (src_cur < src_len && isalnum(src[src_cur])) {
|
|
124
136
|
int cur_digit = b36_char_to_int(src[src_cur]);
|
|
125
137
|
if (cur_digit >= base)
|