@zigc/lib 0.17.0-dev.27 → 0.17.0-dev.296
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/fcntl.zig +6 -1
- package/c/inttypes.zig +0 -10
- package/c/math.zig +52 -112
- package/c/pthread.zig +57 -0
- package/c/search.zig +1 -27
- package/c/stdlib/drand48.zig +0 -57
- package/c/stdlib.zig +31 -121
- package/c/string.zig +20 -7
- package/c/strings.zig +0 -38
- package/c/unistd.zig +27 -26
- package/c/wchar.zig +10 -0
- package/c.zig +2 -2
- package/compiler/aro/aro/CodeGen.zig +7 -8
- package/compiler/aro/aro/Compilation.zig +17 -17
- package/compiler/aro/aro/Driver.zig +14 -13
- package/compiler/aro/aro/Parser.zig +20 -15
- package/compiler/aro/aro/Pragma.zig +3 -2
- package/compiler/aro/aro/Preprocessor.zig +9 -6
- package/compiler/aro/aro/pragmas/message.zig +3 -2
- package/compiler/aro/aro/text_literal.zig +3 -2
- package/compiler/aro/assembly_backend/x86_64.zig +4 -4
- package/compiler/build_runner.zig +2 -4
- package/compiler/reduce/Walk.zig +8 -13
- package/compiler/resinator/compile.zig +1 -1
- package/compiler/resinator/cvtres.zig +4 -4
- package/compiler/resinator/errors.zig +7 -7
- package/compiler/resinator/ico.zig +4 -4
- package/compiler/resinator/parse.zig +2 -2
- package/compiler/resinator/res.zig +1 -1
- package/compiler/std-docs.zig +1 -1
- package/compiler/test_runner.zig +1 -1
- package/compiler/translate-c/MacroTranslator.zig +1 -1
- package/compiler/translate-c/Translator.zig +6 -2
- package/compiler/translate-c/ast.zig +16 -23
- package/compiler/translate-c/main.zig +1 -1
- package/compiler_rt/addf3.zig +1 -1
- package/compiler_rt/arm.zig +3 -3
- package/compiler_rt/atomics.zig +1 -1
- package/compiler_rt/comparef.zig +3 -3
- package/compiler_rt/cos.zig +1 -3
- package/compiler_rt/count0bits.zig +1 -1
- package/compiler_rt/divdf3.zig +2 -2
- package/compiler_rt/divsf3.zig +1 -1
- package/compiler_rt/divtf3.zig +1 -1
- package/compiler_rt/divxf3.zig +1 -1
- package/compiler_rt/exp.zig +0 -2
- package/compiler_rt/exp2.zig +0 -2
- package/compiler_rt/extendf.zig +5 -5
- package/compiler_rt/fabs.zig +1 -3
- package/compiler_rt/float_from_int.zig +3 -4
- package/compiler_rt/fma.zig +0 -2
- package/compiler_rt/fmax.zig +1 -3
- package/compiler_rt/fmin.zig +1 -3
- package/compiler_rt/fmod.zig +2 -4
- package/compiler_rt/limb64.zig +3 -2
- package/compiler_rt/log.zig +0 -2
- package/compiler_rt/log10.zig +0 -2
- package/compiler_rt/log2.zig +0 -2
- package/compiler_rt/mulf3.zig +2 -2
- package/compiler_rt/rem_pio2l.zig +1 -1
- package/compiler_rt/round.zig +0 -2
- package/compiler_rt/sin.zig +1 -3
- package/compiler_rt/sincos.zig +1 -3
- package/compiler_rt/sqrt.zig +0 -2
- package/compiler_rt/ssp.zig +2 -2
- package/compiler_rt/tan.zig +1 -3
- package/compiler_rt/trunc.zig +0 -2
- package/compiler_rt/truncf.zig +3 -3
- package/compiler_rt/trunctfhf2.zig +3 -0
- package/compiler_rt.zig +5 -26
- package/docs/wasm/Walk.zig +1 -3
- package/docs/wasm/html_render.zig +1 -2
- package/docs/wasm/markdown/Parser.zig +16 -20
- package/fuzzer.zig +2 -0
- 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/libc/include/aarch64-linux-any/asm/hwcap.h +1 -0
- package/libc/include/aarch64-linux-any/asm/unistd_64.h +1 -0
- package/libc/include/any-linux-any/asm-generic/errno.h +2 -0
- package/libc/include/any-linux-any/asm-generic/unistd.h +4 -1
- package/libc/include/any-linux-any/drm/amdgpu_drm.h +20 -6
- package/libc/include/any-linux-any/drm/amdxdna_accel.h +8 -0
- package/libc/include/any-linux-any/drm/drm_fourcc.h +6 -6
- package/libc/include/any-linux-any/drm/panfrost_drm.h +75 -1
- package/libc/include/any-linux-any/drm/panthor_drm.h +154 -3
- package/libc/include/any-linux-any/drm/rocket_accel.h +74 -24
- package/libc/include/any-linux-any/drm/xe_drm.h +89 -6
- package/libc/include/any-linux-any/linux/android/binder.h +1 -1
- package/libc/include/any-linux-any/linux/bpf.h +28 -0
- package/libc/include/any-linux-any/linux/btrfs.h +1 -0
- package/libc/include/any-linux-any/linux/btrfs_tree.h +32 -2
- package/libc/include/any-linux-any/linux/dma-buf.h +1 -0
- package/libc/include/any-linux-any/linux/dpll.h +1 -0
- package/libc/include/any-linux-any/linux/elf.h +2 -0
- package/libc/include/any-linux-any/linux/ethtool.h +21 -5
- package/libc/include/any-linux-any/linux/fs.h +1 -0
- package/libc/include/any-linux-any/linux/hyperv.h +1 -1
- package/libc/include/any-linux-any/linux/idxd.h +134 -134
- package/libc/include/any-linux-any/linux/if_alg.h +1 -1
- package/libc/include/any-linux-any/linux/if_link.h +1 -0
- package/libc/include/any-linux-any/linux/input-event-codes.h +4 -0
- package/libc/include/any-linux-any/linux/io_uring/bpf_filter.h +68 -0
- package/libc/include/any-linux-any/linux/io_uring/query.h +5 -1
- package/libc/include/any-linux-any/linux/io_uring.h +33 -2
- package/libc/include/any-linux-any/linux/iommufd.h +39 -0
- package/libc/include/any-linux-any/linux/kfd_ioctl.h +13 -3
- package/libc/include/any-linux-any/linux/kfd_sysfs.h +2 -1
- package/libc/include/any-linux-any/linux/kvm.h +30 -6
- package/libc/include/any-linux-any/linux/landlock.h +22 -8
- package/libc/include/any-linux-any/linux/magic.h +1 -0
- package/libc/include/any-linux-any/linux/mempolicy.h +3 -0
- package/libc/include/any-linux-any/linux/mount.h +11 -2
- package/libc/include/any-linux-any/linux/mptcp_pm.h +1 -1
- package/libc/include/any-linux-any/linux/mshv.h +2 -0
- package/libc/include/any-linux-any/linux/netfilter_bridge.h +5 -4
- package/libc/include/any-linux-any/linux/netfilter_ipv4.h +4 -5
- package/libc/include/any-linux-any/linux/netfilter_ipv6.h +3 -4
- package/libc/include/any-linux-any/linux/nfs.h +1 -1
- package/libc/include/any-linux-any/linux/nfsd_netlink.h +1 -0
- package/libc/include/any-linux-any/linux/nilfs2_api.h +2 -2
- package/libc/include/any-linux-any/linux/nilfs2_ondisk.h +97 -66
- package/libc/include/any-linux-any/linux/nl80211.h +104 -3
- package/libc/include/any-linux-any/linux/pci.h +7 -0
- package/libc/include/any-linux-any/linux/pci_regs.h +65 -6
- package/libc/include/any-linux-any/linux/pcitest.h +1 -0
- package/libc/include/any-linux-any/linux/perf_event.h +24 -3
- package/libc/include/any-linux-any/linux/pkt_sched.h +1 -0
- package/libc/include/any-linux-any/linux/prctl.h +30 -0
- package/libc/include/any-linux-any/linux/rseq.h +62 -5
- package/libc/include/any-linux-any/linux/shm.h +0 -1
- package/libc/include/any-linux-any/linux/stddef.h +4 -0
- package/libc/include/any-linux-any/linux/sysctl.h +1 -2
- package/libc/include/any-linux-any/linux/taskstats.h +12 -1
- package/libc/include/any-linux-any/linux/tcp.h +23 -3
- package/libc/include/any-linux-any/linux/typelimits.h +8 -0
- package/libc/include/any-linux-any/linux/ublk_cmd.h +120 -1
- package/libc/include/any-linux-any/linux/v4l2-controls.h +63 -0
- package/libc/include/any-linux-any/linux/vbox_vmmdev_types.h +2 -2
- package/libc/include/any-linux-any/linux/vduse.h +80 -5
- package/libc/include/any-linux-any/linux/version.h +3 -3
- package/libc/include/any-linux-any/linux/vfio.h +4 -0
- package/libc/include/any-linux-any/linux/videodev2.h +3 -0
- package/libc/include/any-linux-any/linux/virtio_ring.h +1 -2
- package/libc/include/any-linux-any/linux/vmclock-abi.h +20 -0
- package/libc/include/any-linux-any/rdma/bnxt_re-abi.h +16 -0
- package/libc/include/any-linux-any/rdma/ib_user_ioctl_cmds.h +16 -0
- package/libc/include/any-linux-any/rdma/mana-abi.h +3 -0
- package/libc/include/any-linux-any/scsi/scsi_bsg_ufs.h +8 -9
- package/libc/include/any-linux-any/sound/sof/tokens.h +6 -0
- package/libc/include/arc-linux-any/asm/swab.h +0 -63
- package/libc/include/arc-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/arm-linux-any/asm/ptrace.h +0 -9
- package/libc/include/arm-linux-any/asm/unistd-eabi.h +1 -0
- package/libc/include/arm-linux-any/asm/unistd-oabi.h +1 -0
- package/libc/include/csky-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/hexagon-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/loongarch-linux-any/asm/hwcap.h +1 -0
- package/libc/include/loongarch-linux-any/asm/kvm.h +1 -0
- package/libc/include/loongarch-linux-any/asm/kvm_para.h +1 -0
- package/libc/include/loongarch-linux-any/asm/unistd_32.h +2 -0
- package/libc/include/loongarch-linux-any/asm/unistd_64.h +2 -0
- package/libc/include/m68k-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/mips-linux-any/asm/errno.h +2 -0
- package/libc/include/mips-linux-any/asm/unistd_n32.h +1 -0
- package/libc/include/mips-linux-any/asm/unistd_n64.h +1 -0
- package/libc/include/mips-linux-any/asm/unistd_o32.h +1 -0
- package/libc/include/powerpc-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/powerpc-linux-any/asm/unistd_64.h +1 -0
- package/libc/include/riscv-linux-any/asm/hwprobe.h +4 -0
- package/libc/include/riscv-linux-any/asm/kvm.h +3 -0
- package/libc/include/riscv-linux-any/asm/ptrace.h +37 -0
- package/libc/include/riscv-linux-any/asm/sigcontext.h +1 -0
- package/libc/include/riscv-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/riscv-linux-any/asm/unistd_64.h +1 -0
- package/libc/include/s390x-linux-any/asm/unistd_64.h +1 -0
- package/libc/include/sparc-linux-any/asm/errno.h +2 -0
- package/libc/include/sparc-linux-any/asm/ioctls.h +4 -4
- package/libc/include/sparc-linux-any/asm/unistd_32.h +2 -0
- package/libc/include/sparc-linux-any/asm/unistd_64.h +2 -0
- package/libc/include/x86-linux-any/asm/auxvec.h +0 -4
- package/libc/include/x86-linux-any/asm/kvm.h +13 -8
- package/libc/include/x86-linux-any/asm/svm.h +16 -16
- package/libc/include/x86-linux-any/asm/unistd_32.h +1 -0
- package/libc/include/x86-linux-any/asm/unistd_64.h +1 -0
- package/libc/include/x86-linux-any/asm/unistd_x32.h +1 -0
- package/libc/include/xtensa-linux-any/asm/unistd_32.h +1 -0
- package/libc/musl/arch/mipsn32/syscall_arch.h +35 -32
- 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/Cache/Path.zig +1 -1
- package/std/Build/Cache.zig +6 -6
- package/std/Build/Step/Compile.zig +18 -20
- package/std/Build/Step/ConfigHeader.zig +1 -1
- package/std/Build/Step/Run.zig +15 -8
- package/std/Build/Step.zig +3 -7
- package/std/Build/Watch/FsEvents.zig +1 -1
- package/std/Build/WebServer.zig +2 -2
- package/std/Build/abi.zig +1 -1
- package/std/Build.zig +0 -3
- package/std/Io/Dir.zig +9 -4
- package/std/Io/Dispatch.zig +8 -18
- package/std/Io/File/Writer.zig +8 -6
- package/std/Io/File.zig +0 -9
- package/std/Io/Kqueue.zig +3 -3
- package/std/Io/Reader.zig +8 -14
- package/std/Io/Semaphore.zig +112 -17
- package/std/Io/Terminal.zig +1 -1
- package/std/Io/Threaded.zig +183 -46
- package/std/Io/Uring.zig +18 -20
- package/std/Io/Writer.zig +10 -7
- package/std/Io/net/HostName.zig +11 -6
- package/std/Io/net.zig +11 -11
- package/std/Io.zig +104 -38
- package/std/Random/ChaCha.zig +2 -2
- package/std/Random/benchmark.zig +2 -2
- package/std/Random.zig +6 -6
- package/std/SemanticVersion.zig +1 -1
- package/std/Target/Query.zig +2 -2
- 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 +67 -14
- package/std/Thread.zig +5 -2
- package/std/array_hash_map.zig +103 -57
- package/std/array_list.zig +10 -31
- package/std/base64.zig +5 -5
- package/std/bit_set.zig +86 -69
- package/std/c/haiku.zig +3 -0
- package/std/c/serenity.zig +1 -6
- package/std/c.zig +123 -32
- package/std/compress/flate/Decompress.zig +3 -4
- package/std/compress/zstd/Decompress.zig +7 -9
- package/std/crypto/25519/curve25519.zig +2 -2
- package/std/crypto/25519/edwards25519.zig +3 -3
- package/std/crypto/25519/ristretto255.zig +2 -2
- package/std/crypto/25519/scalar.zig +6 -6
- package/std/crypto/25519/x25519.zig +1 -1
- package/std/crypto/Certificate.zig +14 -2
- package/std/crypto/Sha1.zig +1 -1
- package/std/crypto/aegis.zig +45 -39
- package/std/crypto/aes_ccm.zig +22 -22
- package/std/crypto/aes_gcm.zig +10 -12
- package/std/crypto/aes_ocb.zig +9 -9
- package/std/crypto/argon2.zig +15 -15
- package/std/crypto/ascon.zig +75 -33
- package/std/crypto/bcrypt.zig +20 -10
- package/std/crypto/benchmark.zig +7 -7
- package/std/crypto/blake2.zig +100 -64
- package/std/crypto/cbc_mac.zig +1 -1
- package/std/crypto/chacha20.zig +10 -10
- package/std/crypto/cmac.zig +3 -3
- package/std/crypto/codecs/asn1/Oid.zig +12 -1
- package/std/crypto/codecs/asn1/der/Encoder.zig +1 -1
- package/std/crypto/codecs/asn1.zig +1 -1
- package/std/crypto/codecs/base64_hex_ct.zig +3 -5
- package/std/crypto/ecdsa.zig +9 -9
- package/std/crypto/ff.zig +4 -5
- package/std/crypto/ghash_polyval.zig +4 -4
- package/std/crypto/hkdf.zig +1 -1
- package/std/crypto/isap.zig +3 -3
- package/std/crypto/kangarootwelve.zig +1 -1
- package/std/crypto/keccak_p.zig +8 -8
- package/std/crypto/md5.zig +1 -1
- package/std/crypto/ml_dsa.zig +39 -39
- package/std/crypto/ml_kem.zig +12 -34
- package/std/crypto/modes.zig +2 -2
- package/std/crypto/pbkdf2.zig +1 -1
- package/std/crypto/pcurves/common.zig +4 -5
- package/std/crypto/pcurves/p256/scalar.zig +3 -3
- package/std/crypto/pcurves/p384/scalar.zig +2 -2
- package/std/crypto/pcurves/secp256k1/scalar.zig +3 -3
- package/std/crypto/pcurves/tests/p256.zig +5 -5
- package/std/crypto/pcurves/tests/p384.zig +5 -5
- package/std/crypto/pcurves/tests/secp256k1.zig +3 -3
- package/std/crypto/salsa20.zig +8 -8
- package/std/crypto/sha2.zig +2 -2
- package/std/crypto/sha3.zig +2 -2
- package/std/crypto/siphash.zig +1 -1
- package/std/crypto/timing_safe.zig +10 -9
- package/std/crypto/tls/Client.zig +89 -13
- package/std/crypto/tls.zig +1 -1
- package/std/crypto.zig +4 -3
- package/std/debug/Dwarf.zig +15 -12
- package/std/debug/Pdb.zig +25 -17
- package/std/debug.zig +14 -8
- package/std/deque.zig +1 -1
- package/std/elf.zig +1 -1
- package/std/enums.zig +8 -8
- package/std/fmt/parse_float/decimal.zig +1 -1
- package/std/fmt/parse_float.zig +1 -1
- package/std/fmt.zig +14 -10
- package/std/fs/path.zig +7 -5
- package/std/hash/Adler32.zig +3 -3
- package/std/hash/benchmark.zig +2 -2
- package/std/hash/wyhash.zig +2 -2
- package/std/hash/xxhash.zig +0 -6
- package/std/hash_map.zig +20 -1
- package/std/heap/BufferFirstAllocator.zig +165 -0
- package/std/heap/debug_allocator.zig +2 -2
- package/std/heap/memory_pool.zig +34 -197
- package/std/heap.zig +2 -133
- package/std/http/Client.zig +21 -24
- package/std/http.zig +4 -5
- package/std/json/Scanner.zig +2 -2
- package/std/json/static.zig +2 -2
- package/std/{builtin.zig → lang.zig} +5 -1
- package/std/leb128.zig +2 -2
- package/std/math/big/int.zig +5 -5
- package/std/math/big.zig +4 -4
- package/std/math/copysign.zig +1 -1
- package/std/math/float.zig +62 -0
- package/std/math/frexp.zig +4 -4
- package/std/math/ilogb.zig +1 -1
- package/std/math/isfinite.zig +1 -1
- package/std/math/isinf.zig +1 -1
- package/std/math/isnan.zig +1 -2
- package/std/math/isnormal.zig +2 -2
- package/std/math/iszero.zig +2 -2
- package/std/math/ldexp.zig +2 -2
- package/std/math/log10.zig +0 -2
- package/std/math/modf.zig +1 -2
- package/std/math/nextafter.zig +3 -4
- package/std/math/pow.zig +1 -1
- package/std/math/powi.zig +2 -3
- package/std/math/signbit.zig +0 -1
- package/std/math.zig +21 -26
- package/std/mem/Allocator.zig +0 -6
- package/std/mem.zig +31 -31
- package/std/meta/trailer_flags.zig +1 -1
- package/std/meta.zig +4 -36
- package/std/multi_array_list.zig +24 -0
- package/std/os/emscripten.zig +7 -6
- package/std/os/linux/IoUring.zig +2 -0
- package/std/os/linux/aarch64.zig +41 -12
- package/std/os/linux/arc.zig +41 -12
- package/std/os/linux/arm.zig +41 -12
- package/std/os/linux/bpf.zig +6 -0
- package/std/os/linux/hexagon.zig +33 -11
- package/std/os/linux/ioctl.zig +2 -2
- package/std/os/linux/loongarch32.zig +41 -13
- package/std/os/linux/loongarch64.zig +41 -12
- package/std/os/linux/m68k.zig +41 -13
- package/std/os/linux/mips.zig +67 -36
- package/std/os/linux/mips64.zig +60 -29
- package/std/os/linux/mipsn32.zig +60 -29
- package/std/os/linux/or1k.zig +41 -12
- package/std/os/linux/powerpc.zig +41 -12
- package/std/os/linux/powerpc64.zig +41 -12
- package/std/os/linux/riscv32.zig +41 -12
- package/std/os/linux/riscv64.zig +41 -12
- package/std/os/linux/s390x.zig +44 -7
- package/std/os/linux/sparc64.zig +83 -52
- package/std/os/linux/syscalls.zig +26 -1
- package/std/os/linux/thumb.zig +52 -36
- package/std/os/linux/x32.zig +41 -12
- package/std/os/linux/x86.zig +44 -15
- package/std/os/linux/x86_64.zig +41 -12
- package/std/os/linux.zig +416 -450
- package/std/os/plan9.zig +1 -1
- package/std/os/uefi/hii.zig +1 -1
- package/std/os/uefi/tables/boot_services.zig +9 -8
- package/std/os/uefi/tables/runtime_services.zig +1 -1
- package/std/os/windows.zig +130 -1
- package/std/os.zig +41 -0
- package/std/posix.zig +1 -1
- package/std/process/Environ.zig +1 -1
- package/std/process.zig +5 -4
- package/std/simd.zig +4 -21
- package/std/sort.zig +3 -3
- package/std/start.zig +17 -4
- package/std/std.zig +8 -1
- package/std/tar/Writer.zig +39 -33
- package/std/tar.zig +8 -4
- package/std/testing.zig +2 -2
- package/std/unicode.zig +13 -8
- package/std/zig/Ast/Render.zig +6 -30
- package/std/zig/Ast.zig +12 -37
- package/std/zig/AstGen.zig +175 -332
- package/std/zig/AstRlAnnotate.zig +1 -22
- package/std/zig/AstSmith.zig +5 -11
- package/std/zig/BuiltinFn.zig +0 -32
- package/std/zig/ErrorBundle.zig +6 -2
- package/std/zig/LibCDirs.zig +15 -6
- package/std/zig/LibCInstallation.zig +34 -12
- package/std/zig/Parse.zig +11 -76
- package/std/zig/TokenSmith.zig +0 -6
- package/std/zig/WindowsSdk.zig +18 -18
- package/std/zig/Zir.zig +65 -132
- package/std/zig/ZonGen.zig +19 -27
- package/std/zig/llvm/Builder.zig +39 -33
- package/std/zig/llvm/bitcode_writer.zig +3 -3
- package/std/zig/llvm/ir.zig +8 -8
- 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 -4
- package/std/zig/tokenizer.zig +4 -43
- package/std/zig.zig +3 -14
- package/std/zip.zig +5 -5
- package/std/zon/parse.zig +1 -1
- package/zig.h +340 -1
- package/compiler_rt/long_double.zig +0 -37
- 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/libc/include/hexagon-linux-any/asm/signal.h +0 -29
- package/libc/include/s390x-linux-any/asm/tape390.h +0 -103
- package/libc/mingw/math/lrintl.c +0 -18
- package/libc/mingw/math/rintl.c +0 -16
- package/libc/mingw/winpthreads/spinlock.c +0 -82
- package/libc/musl/src/linux/tee.c +0 -8
- package/libc/musl/src/math/i386/lrintl.c +0 -8
- package/libc/musl/src/math/i386/rintl.c +0 -7
- package/libc/musl/src/math/lrintl.c +0 -36
- package/libc/musl/src/math/rintl.c +0 -29
- package/libc/musl/src/math/s390x/rintl.c +0 -15
- package/libc/musl/src/math/x32/lrintl.s +0 -7
- package/libc/musl/src/math/x32/rintl.s +0 -6
- package/libc/musl/src/math/x86_64/lrintl.c +0 -8
- package/libc/musl/src/math/x86_64/rintl.c +0 -7
- package/libc/musl/src/string/strdup.c +0 -10
- package/libc/musl/src/string/strndup.c +0 -12
- package/libc/musl/src/string/wcsdup.c +0 -10
- package/libc/musl/src/thread/pthread_spin_destroy.c +0 -6
- package/libc/musl/src/thread/pthread_spin_init.c +0 -6
- package/libc/musl/src/thread/pthread_spin_lock.c +0 -8
- package/libc/musl/src/thread/pthread_spin_trylock.c +0 -7
- package/libc/musl/src/thread/pthread_spin_unlock.c +0 -7
- package/libc/musl/src/unistd/dup2.c +0 -20
- package/libc/musl/src/unistd/dup3.c +0 -26
- package/libc/wasi/thread-stub/pthread_spin_lock.c +0 -8
- package/libc/wasi/thread-stub/pthread_spin_trylock.c +0 -8
- package/libc/wasi/thread-stub/pthread_spin_unlock.c +0 -7
- package/libtsan/sanitizer_common/sanitizer_coverage_interface.inc +0 -43
- package/std/Build/Step/CheckObject.zig +0 -2764
- /package/std/{builtin → lang}/assembly.zig +0 -0
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
#ifndef _LIBCPP___HASH_TABLE
|
|
11
11
|
#define _LIBCPP___HASH_TABLE
|
|
12
12
|
|
|
13
|
+
#include <__algorithm/fill_n.h>
|
|
13
14
|
#include <__algorithm/max.h>
|
|
14
15
|
#include <__algorithm/min.h>
|
|
15
16
|
#include <__assert>
|
|
@@ -28,7 +29,6 @@
|
|
|
28
29
|
#include <__memory/swap_allocator.h>
|
|
29
30
|
#include <__memory/unique_ptr.h>
|
|
30
31
|
#include <__new/launder.h>
|
|
31
|
-
#include <__type_traits/can_extract_key.h>
|
|
32
32
|
#include <__type_traits/copy_cvref.h>
|
|
33
33
|
#include <__type_traits/enable_if.h>
|
|
34
34
|
#include <__type_traits/invoke.h>
|
|
@@ -44,7 +44,9 @@
|
|
|
44
44
|
#include <__utility/forward.h>
|
|
45
45
|
#include <__utility/move.h>
|
|
46
46
|
#include <__utility/pair.h>
|
|
47
|
+
#include <__utility/scope_guard.h>
|
|
47
48
|
#include <__utility/swap.h>
|
|
49
|
+
#include <__utility/try_key_extraction.h>
|
|
48
50
|
#include <limits>
|
|
49
51
|
|
|
50
52
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
|
@@ -81,18 +83,6 @@ struct __hash_node_base {
|
|
|
81
83
|
typedef _NodePtr __node_pointer;
|
|
82
84
|
typedef __node_base_pointer __next_pointer;
|
|
83
85
|
|
|
84
|
-
// TODO(LLVM 22): Remove this check
|
|
85
|
-
#ifndef _LIBCPP_ABI_FIX_UNORDERED_NODE_POINTER_UB
|
|
86
|
-
static_assert(sizeof(__node_base_pointer) == sizeof(__node_pointer) && _LIBCPP_ALIGNOF(__node_base_pointer) ==
|
|
87
|
-
_LIBCPP_ALIGNOF(__node_pointer),
|
|
88
|
-
"It looks like you are using std::__hash_table (an implementation detail for the unordered containers) "
|
|
89
|
-
"with a fancy pointer type that thas a different representation depending on whether it points to a "
|
|
90
|
-
"__hash_table base pointer or a __hash_table node pointer (both of which are implementation details of "
|
|
91
|
-
"the standard library). This means that your ABI is being broken between LLVM 19 and LLVM 20. If you "
|
|
92
|
-
"don't care about your ABI being broken, define the _LIBCPP_ABI_TREE_REMOVE_NODE_POINTER_UB macro to "
|
|
93
|
-
"silence this diagnostic.");
|
|
94
|
-
#endif
|
|
95
|
-
|
|
96
86
|
__next_pointer __next_;
|
|
97
87
|
|
|
98
88
|
_LIBCPP_HIDE_FROM_ABI __next_pointer __ptr() _NOEXCEPT {
|
|
@@ -122,6 +112,19 @@ struct __get_hash_node_value_type<__hash_value_type<_Key, _Tp> > {
|
|
|
122
112
|
template <class _Tp>
|
|
123
113
|
using __get_hash_node_value_type_t _LIBCPP_NODEBUG = typename __get_hash_node_value_type<_Tp>::type;
|
|
124
114
|
|
|
115
|
+
template <class _Tp>
|
|
116
|
+
struct __get_hash_node_key_type {
|
|
117
|
+
using type _LIBCPP_NODEBUG = _Tp;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
template <class _Key, class _Tp>
|
|
121
|
+
struct __get_hash_node_key_type<__hash_value_type<_Key, _Tp> > {
|
|
122
|
+
using type _LIBCPP_NODEBUG = _Key;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
template <class _Tp>
|
|
126
|
+
using __get_hash_node_key_type_t _LIBCPP_NODEBUG = typename __get_hash_node_key_type<_Tp>::type;
|
|
127
|
+
|
|
125
128
|
template <class _Tp, class _VoidPtr>
|
|
126
129
|
struct __hash_node : public __hash_node_base< __rebind_pointer_t<_VoidPtr, __hash_node<_Tp, _VoidPtr> > > {
|
|
127
130
|
using __node_value_type _LIBCPP_NODEBUG = __get_hash_node_value_type_t<_Tp>;
|
|
@@ -152,7 +155,12 @@ public:
|
|
|
152
155
|
}
|
|
153
156
|
#endif
|
|
154
157
|
|
|
155
|
-
|
|
158
|
+
template <class _Alloc, class... _Args>
|
|
159
|
+
_LIBCPP_HIDE_FROM_ABI explicit __hash_node(size_t __hash, _Alloc& __na, _Args&&... __args)
|
|
160
|
+
: _Base(nullptr), __hash_(__hash) {
|
|
161
|
+
allocator_traits<_Alloc>::construct(__na, std::addressof(__get_value()), std::forward<_Args>(__args)...);
|
|
162
|
+
}
|
|
163
|
+
|
|
156
164
|
_LIBCPP_HIDE_FROM_ABI ~__hash_node() {}
|
|
157
165
|
};
|
|
158
166
|
|
|
@@ -182,85 +190,16 @@ class __hash_map_iterator;
|
|
|
182
190
|
template <class _HashIterator>
|
|
183
191
|
class __hash_map_const_iterator;
|
|
184
192
|
|
|
185
|
-
template <class _Tp>
|
|
186
|
-
struct __hash_key_value_types {
|
|
187
|
-
static_assert(!is_reference<_Tp>::value && !is_const<_Tp>::value, "");
|
|
188
|
-
typedef _Tp key_type;
|
|
189
|
-
typedef _Tp __node_value_type;
|
|
190
|
-
typedef _Tp __container_value_type;
|
|
191
|
-
static const bool __is_map = false;
|
|
192
|
-
|
|
193
|
-
_LIBCPP_HIDE_FROM_ABI static key_type const& __get_key(_Tp const& __v) { return __v; }
|
|
194
|
-
_LIBCPP_HIDE_FROM_ABI static __container_value_type const& __get_value(__node_value_type const& __v) { return __v; }
|
|
195
|
-
_LIBCPP_HIDE_FROM_ABI static __container_value_type* __get_ptr(__node_value_type& __n) { return std::addressof(__n); }
|
|
196
|
-
_LIBCPP_HIDE_FROM_ABI static __container_value_type&& __move(__node_value_type& __v) { return std::move(__v); }
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
template <class _Key, class _Tp>
|
|
200
|
-
struct __hash_key_value_types<__hash_value_type<_Key, _Tp> > {
|
|
201
|
-
typedef _Key key_type;
|
|
202
|
-
typedef _Tp mapped_type;
|
|
203
|
-
typedef __hash_value_type<_Key, _Tp> __node_value_type;
|
|
204
|
-
typedef pair<const _Key, _Tp> __container_value_type;
|
|
205
|
-
typedef __container_value_type __map_value_type;
|
|
206
|
-
static const bool __is_map = true;
|
|
207
|
-
|
|
208
|
-
_LIBCPP_HIDE_FROM_ABI static key_type const& __get_key(__container_value_type const& __v) { return __v.first; }
|
|
209
|
-
|
|
210
|
-
template <class _Up, __enable_if_t<is_same<__remove_cvref_t<_Up>, __node_value_type>::value, int> = 0>
|
|
211
|
-
_LIBCPP_HIDE_FROM_ABI static __container_value_type const& __get_value(_Up& __t) {
|
|
212
|
-
return __t.__get_value();
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
template <class _Up, __enable_if_t<is_same<__remove_cvref_t<_Up>, __container_value_type>::value, int> = 0>
|
|
216
|
-
_LIBCPP_HIDE_FROM_ABI static __container_value_type const& __get_value(_Up& __t) {
|
|
217
|
-
return __t;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
_LIBCPP_HIDE_FROM_ABI static __container_value_type* __get_ptr(__container_value_type& __n) {
|
|
221
|
-
return std::addressof(__n);
|
|
222
|
-
}
|
|
223
|
-
_LIBCPP_HIDE_FROM_ABI static pair<key_type&&, mapped_type&&> __move(__node_value_type& __v) { return __v.__move(); }
|
|
224
|
-
};
|
|
225
|
-
|
|
226
|
-
template <class _Tp, class _AllocPtr, class _KVTypes = __hash_key_value_types<_Tp>, bool = _KVTypes::__is_map>
|
|
227
|
-
struct __hash_map_pointer_types {};
|
|
228
|
-
|
|
229
|
-
template <class _Tp, class _AllocPtr, class _KVTypes>
|
|
230
|
-
struct __hash_map_pointer_types<_Tp, _AllocPtr, _KVTypes, true> {
|
|
231
|
-
typedef typename _KVTypes::__map_value_type _Mv;
|
|
232
|
-
typedef __rebind_pointer_t<_AllocPtr, _Mv> __map_value_type_pointer;
|
|
233
|
-
typedef __rebind_pointer_t<_AllocPtr, const _Mv> __const_map_value_type_pointer;
|
|
234
|
-
};
|
|
235
|
-
|
|
236
193
|
template <class _NodePtr, class _NodeT = typename pointer_traits<_NodePtr>::element_type>
|
|
237
194
|
struct __hash_node_types;
|
|
238
195
|
|
|
239
196
|
template <class _NodePtr, class _Tp, class _VoidPtr>
|
|
240
|
-
struct __hash_node_types<_NodePtr, __hash_node<_Tp, _VoidPtr> >
|
|
241
|
-
: public __hash_key_value_types<_Tp>,
|
|
242
|
-
__hash_map_pointer_types<_Tp, _VoidPtr>
|
|
243
|
-
|
|
244
|
-
{
|
|
245
|
-
typedef __hash_key_value_types<_Tp> __base;
|
|
246
|
-
|
|
247
|
-
public:
|
|
248
|
-
typedef ptrdiff_t difference_type;
|
|
249
|
-
typedef size_t size_type;
|
|
250
|
-
|
|
251
|
-
typedef __rebind_pointer_t<_NodePtr, void> __void_pointer;
|
|
252
|
-
|
|
197
|
+
struct __hash_node_types<_NodePtr, __hash_node<_Tp, _VoidPtr> > {
|
|
253
198
|
typedef typename pointer_traits<_NodePtr>::element_type __node_type;
|
|
254
|
-
typedef _NodePtr __node_pointer;
|
|
255
199
|
|
|
256
|
-
typedef __hash_node_base<
|
|
257
|
-
typedef __rebind_pointer_t<_NodePtr, __node_base_type> __node_base_pointer;
|
|
258
|
-
|
|
259
|
-
typedef typename __node_base_type::__next_pointer __next_pointer;
|
|
200
|
+
typedef typename __hash_node_base<_NodePtr>::__next_pointer __next_pointer;
|
|
260
201
|
|
|
261
202
|
using __node_value_type _LIBCPP_NODEBUG = __get_hash_node_value_type_t<_Tp>;
|
|
262
|
-
typedef __rebind_pointer_t<_VoidPtr, __node_value_type> __node_value_type_pointer;
|
|
263
|
-
typedef __rebind_pointer_t<_VoidPtr, const __node_value_type> __const_node_value_type_pointer;
|
|
264
203
|
|
|
265
204
|
private:
|
|
266
205
|
static_assert(!is_const<__node_type>::value, "_NodePtr should never be a pointer to const");
|
|
@@ -281,13 +220,6 @@ struct __hash_node_types_from_iterator<__hash_local_iterator<_NodePtr> > : __has
|
|
|
281
220
|
template <class _NodePtr>
|
|
282
221
|
struct __hash_node_types_from_iterator<__hash_const_local_iterator<_NodePtr> > : __hash_node_types<_NodePtr> {};
|
|
283
222
|
|
|
284
|
-
template <class _NodeValueTp, class _VoidPtr>
|
|
285
|
-
struct __make_hash_node_types {
|
|
286
|
-
typedef __hash_node<_NodeValueTp, _VoidPtr> _NodeTp;
|
|
287
|
-
typedef __rebind_pointer_t<_VoidPtr, _NodeTp> _NodePtr;
|
|
288
|
-
typedef __hash_node_types<_NodePtr> type;
|
|
289
|
-
};
|
|
290
|
-
|
|
291
223
|
template <class _NodePtr>
|
|
292
224
|
class __hash_iterator {
|
|
293
225
|
typedef __hash_node_types<_NodePtr> _NodeTypes;
|
|
@@ -299,9 +231,9 @@ class __hash_iterator {
|
|
|
299
231
|
public:
|
|
300
232
|
typedef forward_iterator_tag iterator_category;
|
|
301
233
|
typedef typename _NodeTypes::__node_value_type value_type;
|
|
302
|
-
|
|
234
|
+
using difference_type = ptrdiff_t;
|
|
303
235
|
typedef value_type& reference;
|
|
304
|
-
|
|
236
|
+
using pointer = __rebind_pointer_t<_NodePtr, value_type>;
|
|
305
237
|
|
|
306
238
|
_LIBCPP_HIDE_FROM_ABI __hash_iterator() _NOEXCEPT : __node_(nullptr) {}
|
|
307
239
|
|
|
@@ -366,9 +298,9 @@ public:
|
|
|
366
298
|
|
|
367
299
|
typedef forward_iterator_tag iterator_category;
|
|
368
300
|
typedef typename _NodeTypes::__node_value_type value_type;
|
|
369
|
-
|
|
301
|
+
using difference_type = ptrdiff_t;
|
|
370
302
|
typedef const value_type& reference;
|
|
371
|
-
|
|
303
|
+
using pointer = __rebind_pointer_t<_NodePtr, const value_type>;
|
|
372
304
|
|
|
373
305
|
_LIBCPP_HIDE_FROM_ABI __hash_const_iterator() _NOEXCEPT : __node_(nullptr) {}
|
|
374
306
|
|
|
@@ -431,9 +363,9 @@ class __hash_local_iterator {
|
|
|
431
363
|
public:
|
|
432
364
|
typedef forward_iterator_tag iterator_category;
|
|
433
365
|
typedef typename _NodeTypes::__node_value_type value_type;
|
|
434
|
-
|
|
366
|
+
using difference_type = ptrdiff_t;
|
|
435
367
|
typedef value_type& reference;
|
|
436
|
-
|
|
368
|
+
using pointer = __rebind_pointer_t<_NodePtr, value_type>;
|
|
437
369
|
|
|
438
370
|
_LIBCPP_HIDE_FROM_ABI __hash_local_iterator() _NOEXCEPT : __node_(nullptr) {}
|
|
439
371
|
|
|
@@ -509,9 +441,9 @@ public:
|
|
|
509
441
|
|
|
510
442
|
typedef forward_iterator_tag iterator_category;
|
|
511
443
|
typedef typename _NodeTypes::__node_value_type value_type;
|
|
512
|
-
|
|
444
|
+
using difference_type = ptrdiff_t;
|
|
513
445
|
typedef const value_type& reference;
|
|
514
|
-
|
|
446
|
+
using pointer = __rebind_pointer_t<_ConstNodePtr, const value_type>;
|
|
515
447
|
|
|
516
448
|
_LIBCPP_HIDE_FROM_ABI __hash_const_local_iterator() _NOEXCEPT : __node_(nullptr) {}
|
|
517
449
|
|
|
@@ -617,8 +549,6 @@ public:
|
|
|
617
549
|
typedef typename __alloc_traits::pointer pointer;
|
|
618
550
|
|
|
619
551
|
private:
|
|
620
|
-
typedef __hash_node_types<pointer> _NodeTypes;
|
|
621
|
-
|
|
622
552
|
allocator_type& __na_;
|
|
623
553
|
|
|
624
554
|
public:
|
|
@@ -633,7 +563,7 @@ public:
|
|
|
633
563
|
|
|
634
564
|
_LIBCPP_HIDE_FROM_ABI void operator()(pointer __p) _NOEXCEPT {
|
|
635
565
|
if (__value_constructed) {
|
|
636
|
-
__alloc_traits::destroy(__na_,
|
|
566
|
+
__alloc_traits::destroy(__na_, std::addressof(__p->__get_value()));
|
|
637
567
|
std::__destroy_at(std::addressof(*__p));
|
|
638
568
|
}
|
|
639
569
|
if (__p)
|
|
@@ -684,18 +614,16 @@ template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
|
684
614
|
class __hash_table {
|
|
685
615
|
public:
|
|
686
616
|
using value_type = __get_hash_node_value_type_t<_Tp>;
|
|
617
|
+
using key_type = __get_hash_node_key_type_t<_Tp>;
|
|
618
|
+
|
|
687
619
|
typedef _Hash hasher;
|
|
688
620
|
typedef _Equal key_equal;
|
|
689
621
|
typedef _Alloc allocator_type;
|
|
690
622
|
|
|
691
623
|
private:
|
|
692
624
|
typedef allocator_traits<allocator_type> __alloc_traits;
|
|
693
|
-
typedef typename __make_hash_node_types<_Tp, typename __alloc_traits::void_pointer>::type _NodeTypes;
|
|
694
625
|
|
|
695
626
|
public:
|
|
696
|
-
typedef typename _NodeTypes::__node_value_type __node_value_type;
|
|
697
|
-
typedef typename _NodeTypes::__container_value_type __container_value_type;
|
|
698
|
-
typedef typename _NodeTypes::key_type key_type;
|
|
699
627
|
typedef value_type& reference;
|
|
700
628
|
typedef const value_type& const_reference;
|
|
701
629
|
typedef typename __alloc_traits::pointer pointer;
|
|
@@ -703,22 +631,23 @@ public:
|
|
|
703
631
|
#ifndef _LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE
|
|
704
632
|
typedef typename __alloc_traits::size_type size_type;
|
|
705
633
|
#else
|
|
706
|
-
|
|
634
|
+
using size_type = size_t;
|
|
707
635
|
#endif
|
|
708
|
-
|
|
636
|
+
using difference_type = ptrdiff_t;
|
|
709
637
|
|
|
710
638
|
public:
|
|
711
639
|
// Create __node
|
|
712
640
|
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
641
|
+
using __void_pointer _LIBCPP_NODEBUG = typename __alloc_traits::void_pointer;
|
|
642
|
+
|
|
643
|
+
using __node _LIBCPP_NODEBUG = __hash_node<_Tp, __void_pointer>;
|
|
644
|
+
using __node_allocator _LIBCPP_NODEBUG = __rebind_alloc<__alloc_traits, __node>;
|
|
645
|
+
using __node_traits _LIBCPP_NODEBUG = allocator_traits<__node_allocator>;
|
|
646
|
+
using __node_pointer _LIBCPP_NODEBUG = __rebind_pointer_t<__void_pointer, __node>;
|
|
647
|
+
|
|
648
|
+
using __first_node _LIBCPP_NODEBUG = __hash_node_base<__node_pointer>;
|
|
649
|
+
using __node_base_pointer _LIBCPP_NODEBUG = __rebind_pointer_t<__void_pointer, __first_node>;
|
|
650
|
+
using __next_pointer _LIBCPP_NODEBUG = __node_base_pointer;
|
|
722
651
|
|
|
723
652
|
private:
|
|
724
653
|
// check for sane allocator pointer rebinding semantics. Rebinding the
|
|
@@ -747,6 +676,38 @@ private:
|
|
|
747
676
|
|
|
748
677
|
_LIBCPP_HIDE_FROM_ABI size_type& size() _NOEXCEPT { return __size_; }
|
|
749
678
|
|
|
679
|
+
_LIBCPP_HIDE_FROM_ABI void
|
|
680
|
+
__copy_construct(__next_pointer __other_iter, __next_pointer __own_iter, size_t __current_chash) {
|
|
681
|
+
auto __bucket_count = bucket_count();
|
|
682
|
+
|
|
683
|
+
for (; __other_iter; __other_iter = __other_iter->__next_) {
|
|
684
|
+
__node_holder __new_node = __construct_node_hash(__other_iter->__hash(), __other_iter->__upcast()->__get_value());
|
|
685
|
+
|
|
686
|
+
size_t __new_chash = std::__constrain_hash(__new_node->__hash(), __bucket_count);
|
|
687
|
+
if (__new_chash != __current_chash) {
|
|
688
|
+
__bucket_list_[__new_chash] = __own_iter;
|
|
689
|
+
__current_chash = __new_chash;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
__own_iter->__next_ = static_cast<__next_pointer>(__new_node.release());
|
|
693
|
+
__own_iter = __own_iter->__next_;
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
_LIBCPP_HIDE_FROM_ABI void __copy_construct(__next_pointer __other_iter) {
|
|
698
|
+
__next_pointer __own_iter = __first_node_.__ptr();
|
|
699
|
+
{
|
|
700
|
+
__node_holder __new_node = __construct_node_hash(__other_iter->__hash(), __other_iter->__upcast()->__get_value());
|
|
701
|
+
__own_iter->__next_ = static_cast<__next_pointer>(__new_node.release());
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
size_t __current_chash = std::__constrain_hash(__own_iter->__next_->__hash(), bucket_count());
|
|
705
|
+
__bucket_list_[__current_chash] = __own_iter;
|
|
706
|
+
__other_iter = __other_iter->__next_;
|
|
707
|
+
__own_iter = __own_iter->__next_;
|
|
708
|
+
__copy_construct(__other_iter, __own_iter, __current_chash);
|
|
709
|
+
}
|
|
710
|
+
|
|
750
711
|
public:
|
|
751
712
|
_LIBCPP_HIDE_FROM_ABI size_type size() const _NOEXCEPT { return __size_; }
|
|
752
713
|
|
|
@@ -811,40 +772,66 @@ public:
|
|
|
811
772
|
_LIBCPP_HIDE_FROM_ABI iterator __node_insert_multi(__node_pointer __nd);
|
|
812
773
|
_LIBCPP_HIDE_FROM_ABI iterator __node_insert_multi(const_iterator __p, __node_pointer __nd);
|
|
813
774
|
|
|
814
|
-
template <class _Key, class... _Args>
|
|
815
|
-
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique_key_args(_Key const& __k, _Args&&... __args);
|
|
816
|
-
|
|
817
|
-
template <class... _Args>
|
|
818
|
-
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique_impl(_Args&&... __args);
|
|
819
|
-
|
|
820
|
-
template <class _Pp>
|
|
821
|
-
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique(_Pp&& __x) {
|
|
822
|
-
return __emplace_unique_extract_key(std::forward<_Pp>(__x), __can_extract_key<_Pp, key_type>());
|
|
823
|
-
}
|
|
824
|
-
|
|
825
|
-
template <class _First,
|
|
826
|
-
class _Second,
|
|
827
|
-
__enable_if_t<__can_extract_map_key<_First, key_type, __container_value_type>::value, int> = 0>
|
|
828
|
-
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique(_First&& __f, _Second&& __s) {
|
|
829
|
-
return __emplace_unique_key_args(__f, std::forward<_First>(__f), std::forward<_Second>(__s));
|
|
830
|
-
}
|
|
831
|
-
|
|
832
775
|
template <class... _Args>
|
|
833
776
|
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __emplace_unique(_Args&&... __args) {
|
|
834
|
-
return
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
777
|
+
return std::__try_key_extraction<key_type>(
|
|
778
|
+
[this](const key_type& __key, _Args&&... __args2) {
|
|
779
|
+
size_t __hash = hash_function()(__key);
|
|
780
|
+
size_type __bc = bucket_count();
|
|
781
|
+
bool __inserted = false;
|
|
782
|
+
__next_pointer __nd;
|
|
783
|
+
size_t __chash;
|
|
784
|
+
if (__bc != 0) {
|
|
785
|
+
__chash = std::__constrain_hash(__hash, __bc);
|
|
786
|
+
__nd = __bucket_list_[__chash];
|
|
787
|
+
if (__nd != nullptr) {
|
|
788
|
+
for (__nd = __nd->__next_;
|
|
789
|
+
__nd != nullptr &&
|
|
790
|
+
(__nd->__hash() == __hash || std::__constrain_hash(__nd->__hash(), __bc) == __chash);
|
|
791
|
+
__nd = __nd->__next_) {
|
|
792
|
+
if ((__nd->__hash() == __hash) && key_eq()(__nd->__upcast()->__get_value(), __key))
|
|
793
|
+
goto __done;
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
{
|
|
798
|
+
__node_holder __h = __construct_node_hash(__hash, std::forward<_Args>(__args2)...);
|
|
799
|
+
if (size() + 1 > __bc * max_load_factor()) {
|
|
800
|
+
__rehash_unique(std::max<size_type>(2 * __bc + !std::__is_hash_power2(__bc),
|
|
801
|
+
size_type(__math::ceil(float(size() + 1) / max_load_factor()))));
|
|
802
|
+
__bc = bucket_count();
|
|
803
|
+
__chash = std::__constrain_hash(__hash, __bc);
|
|
804
|
+
}
|
|
805
|
+
// insert_after __bucket_list_[__chash], or __first_node if bucket is null
|
|
806
|
+
__next_pointer __pn = __bucket_list_[__chash];
|
|
807
|
+
if (__pn == nullptr) {
|
|
808
|
+
__pn = __first_node_.__ptr();
|
|
809
|
+
__h->__next_ = __pn->__next_;
|
|
810
|
+
__pn->__next_ = __h.get()->__ptr();
|
|
811
|
+
// fix up __bucket_list_
|
|
812
|
+
__bucket_list_[__chash] = __pn;
|
|
813
|
+
if (__h->__next_ != nullptr)
|
|
814
|
+
__bucket_list_[std::__constrain_hash(__h->__next_->__hash(), __bc)] = __h.get()->__ptr();
|
|
815
|
+
} else {
|
|
816
|
+
__h->__next_ = __pn->__next_;
|
|
817
|
+
__pn->__next_ = static_cast<__next_pointer>(__h.get());
|
|
818
|
+
}
|
|
819
|
+
__nd = static_cast<__next_pointer>(__h.release());
|
|
820
|
+
// increment size
|
|
821
|
+
++size();
|
|
822
|
+
__inserted = true;
|
|
823
|
+
}
|
|
824
|
+
__done:
|
|
825
|
+
return pair<iterator, bool>(iterator(__nd), __inserted);
|
|
826
|
+
},
|
|
827
|
+
[this](_Args&&... __args2) {
|
|
828
|
+
__node_holder __h = __construct_node(std::forward<_Args>(__args2)...);
|
|
829
|
+
pair<iterator, bool> __r = __node_insert_unique(__h.get());
|
|
830
|
+
if (__r.second)
|
|
831
|
+
__h.release();
|
|
832
|
+
return __r;
|
|
833
|
+
},
|
|
834
|
+
std::forward<_Args>(__args)...);
|
|
848
835
|
}
|
|
849
836
|
|
|
850
837
|
template <class... _Args>
|
|
@@ -854,9 +841,7 @@ public:
|
|
|
854
841
|
|
|
855
842
|
template <class _ValueT = _Tp, __enable_if_t<__is_hash_value_type<_ValueT>::value, int> = 0>
|
|
856
843
|
_LIBCPP_HIDE_FROM_ABI void __insert_unique_from_orphaned_node(value_type&& __value) {
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
__node_holder __h = __construct_node(const_cast<__key_type&&>(__value.first), std::move(__value.second));
|
|
844
|
+
__node_holder __h = __construct_node(const_cast<key_type&&>(__value.first), std::move(__value.second));
|
|
860
845
|
__node_insert_unique(__h.get());
|
|
861
846
|
__h.release();
|
|
862
847
|
}
|
|
@@ -870,9 +855,7 @@ public:
|
|
|
870
855
|
|
|
871
856
|
template <class _ValueT = _Tp, __enable_if_t<__is_hash_value_type<_ValueT>::value, int> = 0>
|
|
872
857
|
_LIBCPP_HIDE_FROM_ABI void __insert_multi_from_orphaned_node(value_type&& __value) {
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
__node_holder __h = __construct_node(const_cast<__key_type&&>(__value.first), std::move(__value.second));
|
|
858
|
+
__node_holder __h = __construct_node(const_cast<key_type&&>(__value.first), std::move(__value.second));
|
|
876
859
|
__node_insert_multi(__h.get());
|
|
877
860
|
__h.release();
|
|
878
861
|
}
|
|
@@ -1017,8 +1000,8 @@ private:
|
|
|
1017
1000
|
template <class... _Args>
|
|
1018
1001
|
_LIBCPP_HIDE_FROM_ABI __node_holder __construct_node(_Args&&... __args);
|
|
1019
1002
|
|
|
1020
|
-
template <class
|
|
1021
|
-
_LIBCPP_HIDE_FROM_ABI __node_holder __construct_node_hash(size_t __hash,
|
|
1003
|
+
template <class... _Args>
|
|
1004
|
+
_LIBCPP_HIDE_FROM_ABI __node_holder __construct_node_hash(size_t __hash, _Args&&... __args);
|
|
1022
1005
|
|
|
1023
1006
|
_LIBCPP_HIDE_FROM_ABI void __copy_assign_alloc(const __hash_table& __u) {
|
|
1024
1007
|
__copy_assign_alloc(__u, integral_constant<bool, __node_traits::propagate_on_container_copy_assignment::value>());
|
|
@@ -1042,17 +1025,29 @@ private:
|
|
|
1042
1025
|
}
|
|
1043
1026
|
_LIBCPP_HIDE_FROM_ABI void __move_assign_alloc(__hash_table&, false_type) _NOEXCEPT {}
|
|
1044
1027
|
|
|
1045
|
-
_LIBCPP_HIDE_FROM_ABI void __deallocate_node(
|
|
1028
|
+
_LIBCPP_HIDE_FROM_ABI void __deallocate_node(__node_pointer __nd) _NOEXCEPT {
|
|
1029
|
+
auto& __alloc = __node_alloc();
|
|
1030
|
+
__node_traits::destroy(__alloc, std::addressof(__nd->__get_value()));
|
|
1031
|
+
std::__destroy_at(std::__to_address(__nd));
|
|
1032
|
+
__node_traits::deallocate(__alloc, __nd, 1);
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
_LIBCPP_HIDE_FROM_ABI void __deallocate_node_list(__next_pointer __np) _NOEXCEPT {
|
|
1036
|
+
while (__np != nullptr) {
|
|
1037
|
+
__next_pointer __next = __np->__next_;
|
|
1038
|
+
__deallocate_node(__np->__upcast());
|
|
1039
|
+
__np = __next;
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1046
1043
|
_LIBCPP_HIDE_FROM_ABI __next_pointer __detach() _NOEXCEPT;
|
|
1047
1044
|
|
|
1048
1045
|
template <class _From, class _ValueT = _Tp, __enable_if_t<__is_hash_value_type<_ValueT>::value, int> = 0>
|
|
1049
1046
|
_LIBCPP_HIDE_FROM_ABI void __assign_value(__get_hash_node_value_type_t<_Tp>& __lhs, _From&& __rhs) {
|
|
1050
|
-
using __key_type = typename _NodeTypes::key_type;
|
|
1051
|
-
|
|
1052
1047
|
// This is technically UB, since the object was constructed as `const`.
|
|
1053
1048
|
// Clang doesn't optimize on this currently though.
|
|
1054
|
-
const_cast<
|
|
1055
|
-
__lhs.second
|
|
1049
|
+
const_cast<key_type&>(__lhs.first) = const_cast<__copy_cvref_t<_From, key_type>&&>(__rhs.first);
|
|
1050
|
+
__lhs.second = std::forward<_From>(__rhs).second;
|
|
1056
1051
|
}
|
|
1057
1052
|
|
|
1058
1053
|
template <class _From, class _ValueT = _Tp, __enable_if_t<!__is_hash_value_type<_ValueT>::value, int> = 0>
|
|
@@ -1101,16 +1096,29 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(const allocator_type& __a
|
|
|
1101
1096
|
__max_load_factor_(1.0f) {}
|
|
1102
1097
|
|
|
1103
1098
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
1104
|
-
__hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(const __hash_table&
|
|
1099
|
+
__hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(const __hash_table& __other)
|
|
1105
1100
|
: __bucket_list_(nullptr,
|
|
1106
|
-
__bucket_list_deleter(
|
|
1107
|
-
|
|
1101
|
+
__bucket_list_deleter(__pointer_alloc_traits::select_on_container_copy_construction(
|
|
1102
|
+
__other.__bucket_list_.get_deleter().__alloc()),
|
|
1108
1103
|
0)),
|
|
1109
|
-
__node_alloc_(
|
|
1104
|
+
__node_alloc_(__node_traits::select_on_container_copy_construction(__other.__node_alloc())),
|
|
1110
1105
|
__size_(0),
|
|
1111
|
-
__hasher_(
|
|
1112
|
-
__max_load_factor_(
|
|
1113
|
-
__key_eq_(
|
|
1106
|
+
__hasher_(__other.hash_function()),
|
|
1107
|
+
__max_load_factor_(__other.__max_load_factor_),
|
|
1108
|
+
__key_eq_(__other.__key_eq_) {
|
|
1109
|
+
if (__other.size() == 0)
|
|
1110
|
+
return;
|
|
1111
|
+
|
|
1112
|
+
auto& __bucket_list_del = __bucket_list_.get_deleter();
|
|
1113
|
+
auto __bucket_count = __other.bucket_count();
|
|
1114
|
+
__bucket_list_.reset(__pointer_alloc_traits::allocate(__bucket_list_del.__alloc(), __bucket_count));
|
|
1115
|
+
__bucket_list_del.size() = __bucket_count;
|
|
1116
|
+
|
|
1117
|
+
std::fill_n(__bucket_list_.get(), __bucket_count, nullptr);
|
|
1118
|
+
|
|
1119
|
+
__copy_construct(__other.__first_node_.__next_);
|
|
1120
|
+
__size_ = __other.size();
|
|
1121
|
+
}
|
|
1114
1122
|
|
|
1115
1123
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
1116
1124
|
__hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(const __hash_table& __u, const allocator_type& __a)
|
|
@@ -1169,7 +1177,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::~__hash_table() {
|
|
|
1169
1177
|
static_assert(is_copy_constructible<hasher>::value, "Hasher must be copy-constructible.");
|
|
1170
1178
|
#endif
|
|
1171
1179
|
|
|
1172
|
-
|
|
1180
|
+
__deallocate_node_list(__first_node_.__next_);
|
|
1173
1181
|
}
|
|
1174
1182
|
|
|
1175
1183
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
@@ -1184,28 +1192,76 @@ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__copy_assign_alloc(const __hash_
|
|
|
1184
1192
|
}
|
|
1185
1193
|
|
|
1186
1194
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
1187
|
-
__hash_table<_Tp, _Hash, _Equal, _Alloc>&
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1195
|
+
__hash_table<_Tp, _Hash, _Equal, _Alloc>&
|
|
1196
|
+
__hash_table<_Tp, _Hash, _Equal, _Alloc>::operator=(const __hash_table& __other) {
|
|
1197
|
+
if (this == std::addressof(__other))
|
|
1198
|
+
return *this;
|
|
1199
|
+
|
|
1200
|
+
__copy_assign_alloc(__other);
|
|
1201
|
+
hash_function() = __other.hash_function();
|
|
1202
|
+
key_eq() = __other.key_eq();
|
|
1203
|
+
max_load_factor() = __other.max_load_factor();
|
|
1204
|
+
|
|
1205
|
+
if (__other.size() == 0) {
|
|
1206
|
+
clear();
|
|
1207
|
+
return *this;
|
|
1194
1208
|
}
|
|
1195
|
-
return *this;
|
|
1196
|
-
}
|
|
1197
1209
|
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1210
|
+
auto __bucket_count = __other.bucket_count();
|
|
1211
|
+
if (__bucket_count != bucket_count()) {
|
|
1212
|
+
auto& __bucket_list_del = __bucket_list_.get_deleter();
|
|
1213
|
+
__bucket_list_.reset(__pointer_alloc_traits::allocate(__bucket_list_del.__alloc(), __bucket_count));
|
|
1214
|
+
__bucket_list_del.size() = __bucket_count;
|
|
1215
|
+
}
|
|
1216
|
+
std::fill_n(__bucket_list_.get(), __bucket_count, nullptr);
|
|
1217
|
+
|
|
1218
|
+
if (!__first_node_.__next_) {
|
|
1219
|
+
__copy_construct(__other.__first_node_.__next_);
|
|
1220
|
+
__size_ = __other.size();
|
|
1221
|
+
return *this;
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
__next_pointer __other_iter = __other.__first_node_.__next_;
|
|
1225
|
+
__next_pointer __own_iter = __first_node_.__ptr();
|
|
1226
|
+
{
|
|
1227
|
+
__node_pointer __next = __own_iter->__next_->__upcast();
|
|
1228
|
+
__assign_value(__next->__get_value(), __other_iter->__upcast()->__get_value());
|
|
1229
|
+
__next->__hash_ = __other_iter->__hash();
|
|
1230
|
+
}
|
|
1231
|
+
size_t __current_chash = std::__constrain_hash(__own_iter->__next_->__hash(), __bucket_count);
|
|
1232
|
+
__bucket_list_[__current_chash] = __own_iter;
|
|
1233
|
+
__other_iter = __other_iter->__next_;
|
|
1234
|
+
__own_iter = __own_iter->__next_;
|
|
1235
|
+
|
|
1236
|
+
// Go through the nodes of the incoming hash table and copy then into the destination hash table, reusing as many
|
|
1237
|
+
// existing nodes as posssible in the destination.
|
|
1238
|
+
while (__other_iter && __own_iter->__next_) {
|
|
1239
|
+
__node_pointer __next = __own_iter->__next_->__upcast();
|
|
1240
|
+
__assign_value(__next->__get_value(), __other_iter->__upcast()->__get_value());
|
|
1241
|
+
__next->__hash_ = __other_iter->__hash();
|
|
1242
|
+
|
|
1243
|
+
size_t __new_chash = std::__constrain_hash(__next->__hash_, __bucket_count);
|
|
1244
|
+
if (__new_chash != __current_chash) {
|
|
1245
|
+
__bucket_list_[__new_chash] = __own_iter;
|
|
1246
|
+
__current_chash = __new_chash;
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
__other_iter = __other_iter->__next_;
|
|
1250
|
+
__own_iter = __own_iter->__next_;
|
|
1208
1251
|
}
|
|
1252
|
+
|
|
1253
|
+
// At this point we either have consumed the whole incoming hash table, or we don't have any more nodes to reuse in
|
|
1254
|
+
// the destination. Either continue with constructing new nodes, or deallocate the left over nodes.
|
|
1255
|
+
if (__own_iter->__next_) {
|
|
1256
|
+
__deallocate_node_list(__own_iter->__next_);
|
|
1257
|
+
__own_iter->__next_ = nullptr;
|
|
1258
|
+
} else {
|
|
1259
|
+
__copy_construct(__other_iter, __own_iter, __current_chash);
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
__size_ = __other.size();
|
|
1263
|
+
|
|
1264
|
+
return *this;
|
|
1209
1265
|
}
|
|
1210
1266
|
|
|
1211
1267
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
@@ -1251,23 +1307,14 @@ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__move_assign(__hash_table& __u,
|
|
|
1251
1307
|
max_load_factor() = __u.max_load_factor();
|
|
1252
1308
|
if (bucket_count() != 0) {
|
|
1253
1309
|
__next_pointer __cache = __detach();
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
__node_insert_multi(__cache->__upcast());
|
|
1262
|
-
__cache = __next;
|
|
1263
|
-
}
|
|
1264
|
-
#if _LIBCPP_HAS_EXCEPTIONS
|
|
1265
|
-
} catch (...) {
|
|
1266
|
-
__deallocate_node(__cache);
|
|
1267
|
-
throw;
|
|
1310
|
+
auto __guard = std::__make_scope_guard([&] { __deallocate_node_list(__cache); });
|
|
1311
|
+
const_iterator __i = __u.begin();
|
|
1312
|
+
while (__cache != nullptr && __u.size() != 0) {
|
|
1313
|
+
__assign_value(__cache->__upcast()->__get_value(), std::move(__u.remove(__i++)->__get_value()));
|
|
1314
|
+
__next_pointer __next = __cache->__next_;
|
|
1315
|
+
__node_insert_multi(__cache->__upcast());
|
|
1316
|
+
__cache = __next;
|
|
1268
1317
|
}
|
|
1269
|
-
#endif // _LIBCPP_HAS_EXCEPTIONS
|
|
1270
|
-
__deallocate_node(__cache);
|
|
1271
1318
|
}
|
|
1272
1319
|
const_iterator __i = __u.begin();
|
|
1273
1320
|
while (__u.size() != 0)
|
|
@@ -1290,27 +1337,18 @@ template <class _InputIterator>
|
|
|
1290
1337
|
void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__assign_unique(_InputIterator __first, _InputIterator __last) {
|
|
1291
1338
|
typedef iterator_traits<_InputIterator> _ITraits;
|
|
1292
1339
|
typedef typename _ITraits::value_type _ItValueType;
|
|
1293
|
-
static_assert(
|
|
1294
|
-
|
|
1340
|
+
static_assert(
|
|
1341
|
+
is_same<_ItValueType, value_type>::value, "__assign_unique may only be called with the containers value type");
|
|
1295
1342
|
|
|
1296
1343
|
if (bucket_count() != 0) {
|
|
1297
1344
|
__next_pointer __cache = __detach();
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
__node_insert_unique(__cache->__upcast());
|
|
1305
|
-
__cache = __next;
|
|
1306
|
-
}
|
|
1307
|
-
#if _LIBCPP_HAS_EXCEPTIONS
|
|
1308
|
-
} catch (...) {
|
|
1309
|
-
__deallocate_node(__cache);
|
|
1310
|
-
throw;
|
|
1345
|
+
auto __guard = std::__make_scope_guard([&] { __deallocate_node_list(__cache); });
|
|
1346
|
+
for (; __cache != nullptr && __first != __last; ++__first) {
|
|
1347
|
+
__assign_value(__cache->__upcast()->__get_value(), *__first);
|
|
1348
|
+
__next_pointer __next = __cache->__next_;
|
|
1349
|
+
__node_insert_unique(__cache->__upcast());
|
|
1350
|
+
__cache = __next;
|
|
1311
1351
|
}
|
|
1312
|
-
#endif // _LIBCPP_HAS_EXCEPTIONS
|
|
1313
|
-
__deallocate_node(__cache);
|
|
1314
1352
|
}
|
|
1315
1353
|
for (; __first != __last; ++__first)
|
|
1316
1354
|
__emplace_unique(*__first);
|
|
@@ -1321,31 +1359,20 @@ template <class _InputIterator>
|
|
|
1321
1359
|
void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__assign_multi(_InputIterator __first, _InputIterator __last) {
|
|
1322
1360
|
typedef iterator_traits<_InputIterator> _ITraits;
|
|
1323
1361
|
typedef typename _ITraits::value_type _ItValueType;
|
|
1324
|
-
static_assert(
|
|
1325
|
-
|
|
1326
|
-
"__assign_multi may only be called with the containers value type"
|
|
1327
|
-
" or the nodes value type");
|
|
1362
|
+
static_assert(is_same<_ItValueType, value_type>::value,
|
|
1363
|
+
"__assign_multi may only be called with the containers value type or the nodes value type");
|
|
1328
1364
|
if (bucket_count() != 0) {
|
|
1329
1365
|
__next_pointer __cache = __detach();
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
__node_insert_multi(__cache->__upcast());
|
|
1337
|
-
__cache = __next;
|
|
1338
|
-
}
|
|
1339
|
-
#if _LIBCPP_HAS_EXCEPTIONS
|
|
1340
|
-
} catch (...) {
|
|
1341
|
-
__deallocate_node(__cache);
|
|
1342
|
-
throw;
|
|
1366
|
+
auto __guard = std::__make_scope_guard([&] { __deallocate_node_list(__cache); });
|
|
1367
|
+
for (; __cache != nullptr && __first != __last; ++__first) {
|
|
1368
|
+
__assign_value(__cache->__upcast()->__get_value(), *__first);
|
|
1369
|
+
__next_pointer __next = __cache->__next_;
|
|
1370
|
+
__node_insert_multi(__cache->__upcast());
|
|
1371
|
+
__cache = __next;
|
|
1343
1372
|
}
|
|
1344
|
-
#endif // _LIBCPP_HAS_EXCEPTIONS
|
|
1345
|
-
__deallocate_node(__cache);
|
|
1346
1373
|
}
|
|
1347
1374
|
for (; __first != __last; ++__first)
|
|
1348
|
-
__emplace_multi(
|
|
1375
|
+
__emplace_multi(*__first);
|
|
1349
1376
|
}
|
|
1350
1377
|
|
|
1351
1378
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
@@ -1375,7 +1402,7 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::end() const _NOEXCEPT {
|
|
|
1375
1402
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
1376
1403
|
void __hash_table<_Tp, _Hash, _Equal, _Alloc>::clear() _NOEXCEPT {
|
|
1377
1404
|
if (size() > 0) {
|
|
1378
|
-
|
|
1405
|
+
__deallocate_node_list(__first_node_.__next_);
|
|
1379
1406
|
__first_node_.__next_ = nullptr;
|
|
1380
1407
|
size_type __bc = bucket_count();
|
|
1381
1408
|
for (size_type __i = 0; __i < __bc; ++__i)
|
|
@@ -1561,69 +1588,6 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_insert_multi(const_iterator __p
|
|
|
1561
1588
|
return __node_insert_multi(__cp);
|
|
1562
1589
|
}
|
|
1563
1590
|
|
|
1564
|
-
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
1565
|
-
template <class _Key, class... _Args>
|
|
1566
|
-
pair<typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator, bool>
|
|
1567
|
-
__hash_table<_Tp, _Hash, _Equal, _Alloc>::__emplace_unique_key_args(_Key const& __k, _Args&&... __args) {
|
|
1568
|
-
size_t __hash = hash_function()(__k);
|
|
1569
|
-
size_type __bc = bucket_count();
|
|
1570
|
-
bool __inserted = false;
|
|
1571
|
-
__next_pointer __nd;
|
|
1572
|
-
size_t __chash;
|
|
1573
|
-
if (__bc != 0) {
|
|
1574
|
-
__chash = std::__constrain_hash(__hash, __bc);
|
|
1575
|
-
__nd = __bucket_list_[__chash];
|
|
1576
|
-
if (__nd != nullptr) {
|
|
1577
|
-
for (__nd = __nd->__next_;
|
|
1578
|
-
__nd != nullptr && (__nd->__hash() == __hash || std::__constrain_hash(__nd->__hash(), __bc) == __chash);
|
|
1579
|
-
__nd = __nd->__next_) {
|
|
1580
|
-
if ((__nd->__hash() == __hash) && key_eq()(__nd->__upcast()->__get_value(), __k))
|
|
1581
|
-
goto __done;
|
|
1582
|
-
}
|
|
1583
|
-
}
|
|
1584
|
-
}
|
|
1585
|
-
{
|
|
1586
|
-
__node_holder __h = __construct_node_hash(__hash, std::forward<_Args>(__args)...);
|
|
1587
|
-
if (size() + 1 > __bc * max_load_factor() || __bc == 0) {
|
|
1588
|
-
__rehash_unique(std::max<size_type>(
|
|
1589
|
-
2 * __bc + !std::__is_hash_power2(__bc), size_type(__math::ceil(float(size() + 1) / max_load_factor()))));
|
|
1590
|
-
__bc = bucket_count();
|
|
1591
|
-
__chash = std::__constrain_hash(__hash, __bc);
|
|
1592
|
-
}
|
|
1593
|
-
// insert_after __bucket_list_[__chash], or __first_node if bucket is null
|
|
1594
|
-
__next_pointer __pn = __bucket_list_[__chash];
|
|
1595
|
-
if (__pn == nullptr) {
|
|
1596
|
-
__pn = __first_node_.__ptr();
|
|
1597
|
-
__h->__next_ = __pn->__next_;
|
|
1598
|
-
__pn->__next_ = __h.get()->__ptr();
|
|
1599
|
-
// fix up __bucket_list_
|
|
1600
|
-
__bucket_list_[__chash] = __pn;
|
|
1601
|
-
if (__h->__next_ != nullptr)
|
|
1602
|
-
__bucket_list_[std::__constrain_hash(__h->__next_->__hash(), __bc)] = __h.get()->__ptr();
|
|
1603
|
-
} else {
|
|
1604
|
-
__h->__next_ = __pn->__next_;
|
|
1605
|
-
__pn->__next_ = static_cast<__next_pointer>(__h.get());
|
|
1606
|
-
}
|
|
1607
|
-
__nd = static_cast<__next_pointer>(__h.release());
|
|
1608
|
-
// increment size
|
|
1609
|
-
++size();
|
|
1610
|
-
__inserted = true;
|
|
1611
|
-
}
|
|
1612
|
-
__done:
|
|
1613
|
-
return pair<iterator, bool>(iterator(__nd), __inserted);
|
|
1614
|
-
}
|
|
1615
|
-
|
|
1616
|
-
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
1617
|
-
template <class... _Args>
|
|
1618
|
-
pair<typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator, bool>
|
|
1619
|
-
__hash_table<_Tp, _Hash, _Equal, _Alloc>::__emplace_unique_impl(_Args&&... __args) {
|
|
1620
|
-
__node_holder __h = __construct_node(std::forward<_Args>(__args)...);
|
|
1621
|
-
pair<iterator, bool> __r = __node_insert_unique(__h.get());
|
|
1622
|
-
if (__r.second)
|
|
1623
|
-
__h.release();
|
|
1624
|
-
return __r;
|
|
1625
|
-
}
|
|
1626
|
-
|
|
1627
1591
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
1628
1592
|
template <class... _Args>
|
|
1629
1593
|
typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator
|
|
@@ -1764,41 +1728,45 @@ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__rehash(size_type __n) _LIBCPP_D
|
|
|
1764
1728
|
|
|
1765
1729
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
1766
1730
|
template <bool _UniqueKeys>
|
|
1767
|
-
void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__do_rehash(size_type
|
|
1768
|
-
__pointer_allocator&
|
|
1769
|
-
__bucket_list_.reset(
|
|
1770
|
-
__bucket_list_.get_deleter().size() =
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1731
|
+
void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__do_rehash(size_type __bucket_count) {
|
|
1732
|
+
__pointer_allocator& __ptr_alloc = __bucket_list_.get_deleter().__alloc();
|
|
1733
|
+
__bucket_list_.reset(__bucket_count > 0 ? __pointer_alloc_traits::allocate(__ptr_alloc, __bucket_count) : nullptr);
|
|
1734
|
+
__bucket_list_.get_deleter().size() = __bucket_count;
|
|
1735
|
+
|
|
1736
|
+
if (__bucket_count == 0)
|
|
1737
|
+
return;
|
|
1738
|
+
|
|
1739
|
+
for (size_type __i = 0; __i < __bucket_count; ++__i)
|
|
1740
|
+
__bucket_list_[__i] = nullptr;
|
|
1741
|
+
__next_pointer __pp = __first_node_.__ptr();
|
|
1742
|
+
__next_pointer __cp = __pp->__next_;
|
|
1743
|
+
|
|
1744
|
+
if (!__cp)
|
|
1745
|
+
return;
|
|
1746
|
+
|
|
1747
|
+
size_type __chash = std::__constrain_hash(__cp->__hash(), __bucket_count);
|
|
1748
|
+
__bucket_list_[__chash] = __pp;
|
|
1749
|
+
size_type __phash = __chash;
|
|
1750
|
+
for (__pp = __cp, void(), __cp = __cp->__next_; __cp != nullptr; __cp = __pp->__next_) {
|
|
1751
|
+
__chash = std::__constrain_hash(__cp->__hash(), __bucket_count);
|
|
1752
|
+
if (__chash == __phash)
|
|
1753
|
+
__pp = __cp;
|
|
1754
|
+
else {
|
|
1755
|
+
if (__bucket_list_[__chash] == nullptr) {
|
|
1756
|
+
__bucket_list_[__chash] = __pp;
|
|
1757
|
+
__pp = __cp;
|
|
1758
|
+
__phash = __chash;
|
|
1759
|
+
} else {
|
|
1760
|
+
__next_pointer __np = __cp;
|
|
1761
|
+
if _LIBCPP_CONSTEXPR (!_UniqueKeys) {
|
|
1762
|
+
for (; __np->__next_ != nullptr &&
|
|
1763
|
+
key_eq()(__cp->__upcast()->__get_value(), __np->__next_->__upcast()->__get_value());
|
|
1764
|
+
__np = __np->__next_)
|
|
1765
|
+
;
|
|
1801
1766
|
}
|
|
1767
|
+
__pp->__next_ = __np->__next_;
|
|
1768
|
+
__np->__next_ = __bucket_list_[__chash]->__next_;
|
|
1769
|
+
__bucket_list_[__chash]->__next_ = __cp;
|
|
1802
1770
|
}
|
|
1803
1771
|
}
|
|
1804
1772
|
}
|
|
@@ -1854,16 +1822,13 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__construct_node(_Args&&... __args) {
|
|
|
1854
1822
|
__node_allocator& __na = __node_alloc();
|
|
1855
1823
|
__node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
|
|
1856
1824
|
|
|
1857
|
-
// Begin the lifetime of the node itself
|
|
1858
|
-
// held inside the node, since we need to use the allocator's construct() method for that.
|
|
1825
|
+
// Begin the lifetime of the node itself and the value_type contained within.
|
|
1859
1826
|
//
|
|
1860
1827
|
// We don't use the allocator's construct() method to construct the node itself since the
|
|
1861
1828
|
// Cpp17FooInsertable named requirements don't require the allocator's construct() method
|
|
1862
1829
|
// to work on anything other than the value_type.
|
|
1863
|
-
std::__construct_at(std::addressof(*__h), /*
|
|
1830
|
+
std::__construct_at(std::addressof(*__h), /* hash = */ 0, __na, std::forward<_Args>(__args)...);
|
|
1864
1831
|
|
|
1865
|
-
// Now construct the value_type using the allocator's construct() method.
|
|
1866
|
-
__node_traits::construct(__na, _NodeTypes::__get_ptr(__h->__get_value()), std::forward<_Args>(__args)...);
|
|
1867
1832
|
__h.get_deleter().__value_constructed = true;
|
|
1868
1833
|
|
|
1869
1834
|
__h->__hash_ = hash_function()(__h->__get_value());
|
|
@@ -1871,15 +1836,13 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::__construct_node(_Args&&... __args) {
|
|
|
1871
1836
|
}
|
|
1872
1837
|
|
|
1873
1838
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
1874
|
-
template <class
|
|
1839
|
+
template <class... _Args>
|
|
1875
1840
|
typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_holder
|
|
1876
|
-
__hash_table<_Tp, _Hash, _Equal, _Alloc>::__construct_node_hash(size_t __hash,
|
|
1877
|
-
static_assert(!__is_hash_value_type<
|
|
1841
|
+
__hash_table<_Tp, _Hash, _Equal, _Alloc>::__construct_node_hash(size_t __hash, _Args&&... __args) {
|
|
1842
|
+
static_assert(!__is_hash_value_type<_Args...>::value, "Construct cannot be called with a hash value type");
|
|
1878
1843
|
__node_allocator& __na = __node_alloc();
|
|
1879
1844
|
__node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
|
|
1880
|
-
std::__construct_at(std::addressof(*__h), /*
|
|
1881
|
-
__node_traits::construct(
|
|
1882
|
-
__na, _NodeTypes::__get_ptr(__h->__get_value()), std::forward<_First>(__f), std::forward<_Rest>(__rest)...);
|
|
1845
|
+
std::__construct_at(std::addressof(*__h), /* hash = */ __hash, __na, std::forward<_Args>(__args)...);
|
|
1883
1846
|
__h.get_deleter().__value_constructed = true;
|
|
1884
1847
|
return __h;
|
|
1885
1848
|
}
|
|
@@ -1899,12 +1862,63 @@ __hash_table<_Tp, _Hash, _Equal, _Alloc>::erase(const_iterator __p) {
|
|
|
1899
1862
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
|
1900
1863
|
typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator
|
|
1901
1864
|
__hash_table<_Tp, _Hash, _Equal, _Alloc>::erase(const_iterator __first, const_iterator __last) {
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1865
|
+
if (__first == __last)
|
|
1866
|
+
return iterator(__last.__node_);
|
|
1867
|
+
|
|
1868
|
+
// current node
|
|
1869
|
+
__next_pointer __current = __first.__node_;
|
|
1870
|
+
size_type __bucket_count = bucket_count();
|
|
1871
|
+
size_t __chash = std::__constrain_hash(__current->__hash(), __bucket_count);
|
|
1872
|
+
// find previous node
|
|
1873
|
+
__next_pointer __before_first = __bucket_list_[__chash];
|
|
1874
|
+
for (; __before_first->__next_ != __current; __before_first = __before_first->__next_)
|
|
1875
|
+
;
|
|
1876
|
+
|
|
1877
|
+
__next_pointer __last_node = __last.__node_;
|
|
1878
|
+
|
|
1879
|
+
// If __before_first is in the same bucket (i.e. the first element we erase is not the first in the bucket), clear
|
|
1880
|
+
// this bucket first without re-linking it
|
|
1881
|
+
if (__before_first != __first_node_.__ptr() &&
|
|
1882
|
+
std::__constrain_hash(__before_first->__hash(), __bucket_count) == __chash) {
|
|
1883
|
+
while (__current != __last_node) {
|
|
1884
|
+
auto __next = __current->__next_;
|
|
1885
|
+
__deallocate_node(__current->__upcast());
|
|
1886
|
+
__current = __next;
|
|
1887
|
+
--__size_;
|
|
1888
|
+
|
|
1889
|
+
if (__next) {
|
|
1890
|
+
if (auto __next_chash = std::__constrain_hash(__next->__hash(), __bucket_count); __next_chash != __chash) {
|
|
1891
|
+
__bucket_list_[__next_chash] = __before_first;
|
|
1892
|
+
__chash = __next_chash;
|
|
1893
|
+
break;
|
|
1894
|
+
}
|
|
1895
|
+
}
|
|
1896
|
+
}
|
|
1905
1897
|
}
|
|
1906
|
-
|
|
1907
|
-
|
|
1898
|
+
|
|
1899
|
+
while (__current != __last_node) {
|
|
1900
|
+
auto __next = __current->__next_;
|
|
1901
|
+
__deallocate_node(__current->__upcast());
|
|
1902
|
+
__current = __next;
|
|
1903
|
+
--__size_;
|
|
1904
|
+
|
|
1905
|
+
// When switching buckets, set the old bucket to be empty and update the next bucket to have __before_first as its
|
|
1906
|
+
// before-first element
|
|
1907
|
+
if (__next) {
|
|
1908
|
+
if (auto __next_chash = std::__constrain_hash(__next->__hash(), __bucket_count); __next_chash != __chash) {
|
|
1909
|
+
__bucket_list_[__chash] = nullptr;
|
|
1910
|
+
__bucket_list_[__next_chash] = __before_first;
|
|
1911
|
+
__chash = __next_chash;
|
|
1912
|
+
}
|
|
1913
|
+
} else { // When __next is a nullptr we've fully erased the last bucket. Update the bucket list accordingly.
|
|
1914
|
+
__bucket_list_[__chash] = nullptr;
|
|
1915
|
+
}
|
|
1916
|
+
}
|
|
1917
|
+
|
|
1918
|
+
// re-link __before_first with __last
|
|
1919
|
+
__before_first->__next_ = __current;
|
|
1920
|
+
|
|
1921
|
+
return iterator(__last.__node_);
|
|
1908
1922
|
}
|
|
1909
1923
|
|
|
1910
1924
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|