re2 1.23.0 → 1.23.2
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/README.md +2 -0
- package/binding.gyp +3 -2
- package/package.json +5 -5
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +25 -4
- package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +6 -1
- package/vendor/abseil-cpp/CMakeLists.txt +2 -2
- package/vendor/abseil-cpp/MODULE.bazel +2 -2
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +0 -1
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +0 -2
- package/vendor/abseil-cpp/absl/algorithm/container.h +191 -140
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +818 -0
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +44 -5
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +42 -3
- package/vendor/abseil-cpp/absl/base/attributes.h +5 -1
- package/vendor/abseil-cpp/absl/base/call_once_test.cc +10 -10
- package/vendor/abseil-cpp/absl/base/casts.cc +61 -0
- package/vendor/abseil-cpp/absl/base/casts.h +128 -2
- package/vendor/abseil-cpp/absl/base/casts_test.cc +151 -0
- package/vendor/abseil-cpp/absl/base/config.h +13 -37
- package/vendor/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +4 -0
- package/vendor/abseil-cpp/absl/base/internal/nullability_traits.h +71 -0
- package/vendor/abseil-cpp/absl/base/internal/nullability_traits_test.cc +98 -0
- package/vendor/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
- package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +13 -7
- package/vendor/abseil-cpp/absl/base/internal/spinlock.h +16 -11
- package/vendor/abseil-cpp/absl/base/internal/strerror_test.cc +2 -1
- package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +0 -9
- package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +0 -6
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -1
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
- package/vendor/abseil-cpp/absl/base/macros.h +40 -17
- package/vendor/abseil-cpp/absl/base/nullability.h +1 -1
- package/vendor/abseil-cpp/absl/base/optimization.h +1 -3
- package/vendor/abseil-cpp/absl/base/options.h +1 -27
- package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +5 -8
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +4 -0
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +195 -2
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +136 -2
- package/vendor/abseil-cpp/absl/container/btree_map.h +56 -6
- package/vendor/abseil-cpp/absl/container/btree_set.h +52 -6
- package/vendor/abseil-cpp/absl/container/btree_test.cc +107 -1
- package/vendor/abseil-cpp/absl/container/chunked_queue.h +755 -0
- package/vendor/abseil-cpp/absl/container/chunked_queue_benchmark.cc +386 -0
- package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +768 -0
- package/vendor/abseil-cpp/absl/container/fixed_array.h +4 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +16 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +1 -2
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +16 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +0 -2
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +12 -4
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +21 -0
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +14 -5
- package/vendor/abseil-cpp/absl/container/internal/chunked_queue.h +173 -0
- package/vendor/abseil-cpp/absl/container/internal/common.h +51 -0
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +7 -1
- package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +11 -0
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +0 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +1 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +0 -14
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +11 -8
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +3 -4
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +23 -6
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +31 -15
- package/vendor/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +80 -0
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +4 -12
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +35 -10
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +149 -23
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +120 -126
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +4 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +8 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +14 -59
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +111 -22
- package/vendor/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h +53 -112
- package/vendor/abseil-cpp/absl/container/internal/unordered_map_lookup_test.h +10 -15
- package/vendor/abseil-cpp/absl/container/internal/unordered_map_members_test.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/unordered_map_modifiers_test.h +45 -61
- package/vendor/abseil-cpp/absl/container/internal/unordered_set_constructor_test.h +53 -112
- package/vendor/abseil-cpp/absl/container/internal/unordered_set_lookup_test.h +6 -9
- package/vendor/abseil-cpp/absl/container/internal/unordered_set_members_test.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/unordered_set_modifiers_test.h +25 -31
- package/vendor/abseil-cpp/absl/container/linked_hash_map.h +666 -0
- package/vendor/abseil-cpp/absl/container/linked_hash_map_benchmark.cc +140 -0
- package/vendor/abseil-cpp/absl/container/linked_hash_map_test.cc +987 -0
- package/vendor/abseil-cpp/absl/container/linked_hash_set.h +527 -0
- package/vendor/abseil-cpp/absl/container/linked_hash_set_benchmark.cc +84 -0
- package/vendor/abseil-cpp/absl/container/linked_hash_set_test.cc +947 -0
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +17 -6
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +16 -5
- package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +1 -2
- package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +79 -0
- package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +79 -0
- package/vendor/abseil-cpp/absl/copts/copts.py +17 -4
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +67 -13
- package/vendor/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +31 -0
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +34 -0
- package/vendor/abseil-cpp/absl/debugging/failure_signal_handler.cc +2 -2
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +118 -0
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +71 -0
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +97 -0
- package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
- package/vendor/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -0
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +0 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +2 -1
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +2 -2
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +35 -67
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +3 -0
- package/vendor/abseil-cpp/absl/debugging/stacktrace_benchmark.cc +24 -1
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +39 -15
- package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
- package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +25 -40
- package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/flags/declare.h +9 -0
- package/vendor/abseil-cpp/absl/flags/flag.h +2 -1
- package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +3 -2
- package/vendor/abseil-cpp/absl/flags/marshalling.cc +1 -16
- package/vendor/abseil-cpp/absl/flags/parse.cc +4 -2
- package/vendor/abseil-cpp/absl/flags/parse_test.cc +1 -1
- package/vendor/abseil-cpp/absl/flags/reflection.cc +4 -3
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +3 -1
- package/vendor/abseil-cpp/absl/functional/function_ref.h +125 -20
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +122 -9
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +13 -2
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +42 -4
- package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +11 -0
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +5 -2
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +184 -53
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +116 -10
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +43 -4
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +35 -1
- package/vendor/abseil-cpp/absl/log/check_test_impl.inc +59 -4
- package/vendor/abseil-cpp/absl/log/die_if_null.cc +3 -1
- package/vendor/abseil-cpp/absl/log/die_if_null.h +24 -3
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +31 -1
- package/vendor/abseil-cpp/absl/log/internal/check_impl.h +2 -1
- package/vendor/abseil-cpp/absl/log/internal/check_op.cc +3 -1
- package/vendor/abseil-cpp/absl/log/internal/check_op.h +44 -18
- package/vendor/abseil-cpp/absl/log/internal/conditions.h +38 -35
- package/vendor/abseil-cpp/absl/log/internal/container.h +312 -0
- package/vendor/abseil-cpp/absl/log/internal/container_test.cc +254 -0
- package/vendor/abseil-cpp/absl/log/internal/log_impl.h +108 -110
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -2
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +5 -1
- package/vendor/abseil-cpp/absl/log/internal/strip.h +30 -31
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +19 -19
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
- package/vendor/abseil-cpp/absl/log/log.h +2 -2
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +51 -0
- package/vendor/abseil-cpp/absl/meta/CMakeLists.txt +46 -0
- package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing.h +73 -0
- package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing_test.cc +40 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires.h +67 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires_test.cc +66 -0
- package/vendor/abseil-cpp/absl/meta/type_traits.h +42 -1
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +14 -0
- package/vendor/abseil-cpp/absl/numeric/int128.h +41 -21
- package/vendor/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
- package/vendor/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +52 -5
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +18 -7
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +1 -0
- package/vendor/abseil-cpp/absl/random/internal/fastmath_test.cc +3 -5
- package/vendor/abseil-cpp/absl/random/internal/platform.h +0 -13
- package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +0 -1
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +1 -27
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +17 -0
- package/vendor/abseil-cpp/absl/status/CMakeLists.txt +16 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +4 -2
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +2 -2
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +2 -1
- package/vendor/abseil-cpp/absl/status/status.cc +4 -0
- package/vendor/abseil-cpp/absl/status/status.h +5 -0
- package/vendor/abseil-cpp/absl/status/status_matchers.h +48 -0
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +27 -0
- package/vendor/abseil-cpp/absl/status/status_test.cc +1 -0
- package/vendor/abseil-cpp/absl/status/statusor.h +1 -1
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +101 -21
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +99 -5
- package/vendor/abseil-cpp/absl/strings/ascii.h +9 -4
- package/vendor/abseil-cpp/absl/strings/cord.cc +15 -10
- package/vendor/abseil-cpp/absl/strings/cord.h +1 -1
- package/vendor/abseil-cpp/absl/strings/escaping.cc +126 -94
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite_test.cc +95 -0
- package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +2 -0
- package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree_test.cc +8 -8
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +24 -18
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +10 -16
- package/vendor/abseil-cpp/absl/strings/internal/escaping.h +9 -7
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer.cc +107 -0
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer.h +115 -0
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +423 -0
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +685 -0
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +0 -12
- package/vendor/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +21 -7
- package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +495 -8
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -15
- package/vendor/abseil-cpp/absl/strings/numbers.cc +71 -8
- package/vendor/abseil-cpp/absl/strings/numbers.h +25 -12
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +70 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +194 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite_test.cc +154 -0
- package/vendor/abseil-cpp/absl/strings/str_cat.cc +96 -91
- package/vendor/abseil-cpp/absl/strings/str_cat.h +17 -12
- package/vendor/abseil-cpp/absl/strings/str_format_test.cc +4 -4
- package/vendor/abseil-cpp/absl/strings/str_split.h +1 -1
- package/vendor/abseil-cpp/absl/strings/str_split_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/string_view.h +8 -718
- package/vendor/abseil-cpp/absl/strings/string_view_test.cc +1 -1265
- package/vendor/abseil-cpp/absl/strings/substitute.cc +24 -24
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +2 -3
- package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
- package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout_test.cc +15 -5
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +2 -1
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +47 -23
- package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/time/civil_time_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/time/civil_time_test.cc +58 -103
- package/vendor/abseil-cpp/absl/time/clock.cc +18 -16
- package/vendor/abseil-cpp/absl/time/clock_test.cc +2 -2
- package/vendor/abseil-cpp/absl/time/duration_benchmark.cc +144 -0
- package/vendor/abseil-cpp/absl/time/duration_test.cc +26 -29
- package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +7 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +4 -2
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +186 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ensenada +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santa_Isabel +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tijuana +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaNorte +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab +9 -9
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +12 -12
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +47 -47
- package/vendor/abseil-cpp/absl/time/time.cc +4 -4
- package/vendor/abseil-cpp/absl/time/time.h +10 -10
- package/vendor/abseil-cpp/absl/time/time_test.cc +1 -0
- package/vendor/abseil-cpp/absl/types/compare.h +62 -61
- package/vendor/abseil-cpp/absl/types/compare_test.cc +3 -3
- package/vendor/abseil-cpp/absl/types/internal/span.h +1 -0
- package/vendor/abseil-cpp/absl/types/optional.h +2 -2
- package/vendor/abseil-cpp/absl/types/span.h +10 -2
- package/vendor/abseil-cpp/absl/utility/utility.h +13 -0
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +0 -1
- package/vendor/abseil-cpp/ci/cmake_common.sh +1 -1
- package/vendor/abseil-cpp/ci/cmake_install_test.sh +6 -0
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +1 -0
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +2 -0
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +1 -0
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +1 -0
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +1 -0
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +1 -0
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +1 -0
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +6 -0
- package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +6 -0
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +3 -2
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +5 -0
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -0
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -0
- package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +6 -1
- package/vendor/abseil-cpp/absl/base/internal/identity.h +0 -39
- package/vendor/abseil-cpp/absl/strings/string_view.cc +0 -257
- package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +0 -380
|
@@ -81,12 +81,12 @@ void HashtablezInfo::PrepareForSampling(int64_t stride,
|
|
|
81
81
|
capacity.store(0, std::memory_order_relaxed);
|
|
82
82
|
size.store(0, std::memory_order_relaxed);
|
|
83
83
|
num_erases.store(0, std::memory_order_relaxed);
|
|
84
|
+
num_insert_hits.store(0, std::memory_order_relaxed);
|
|
84
85
|
num_rehashes.store(0, std::memory_order_relaxed);
|
|
85
86
|
max_probe_length.store(0, std::memory_order_relaxed);
|
|
86
87
|
total_probe_length.store(0, std::memory_order_relaxed);
|
|
87
88
|
hashes_bitwise_or.store(0, std::memory_order_relaxed);
|
|
88
89
|
hashes_bitwise_and.store(~size_t{}, std::memory_order_relaxed);
|
|
89
|
-
hashes_bitwise_xor.store(0, std::memory_order_relaxed);
|
|
90
90
|
max_reserve.store(0, std::memory_order_relaxed);
|
|
91
91
|
|
|
92
92
|
create_time = absl::Now();
|
|
@@ -230,8 +230,8 @@ void RecordStorageChangedSlow(HashtablezInfo* info, size_t size,
|
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
232
|
|
|
233
|
-
void
|
|
234
|
-
|
|
233
|
+
void RecordInsertMissSlow(HashtablezInfo* info, size_t hash,
|
|
234
|
+
size_t distance_from_desired) {
|
|
235
235
|
// SwissTables probe in groups of 16, so scale this to count items probes and
|
|
236
236
|
// not offset from desired.
|
|
237
237
|
size_t probe_length = distance_from_desired;
|
|
@@ -243,7 +243,6 @@ void RecordInsertSlow(HashtablezInfo* info, size_t hash,
|
|
|
243
243
|
|
|
244
244
|
info->hashes_bitwise_and.fetch_and(hash, std::memory_order_relaxed);
|
|
245
245
|
info->hashes_bitwise_or.fetch_or(hash, std::memory_order_relaxed);
|
|
246
|
-
info->hashes_bitwise_xor.fetch_xor(hash, std::memory_order_relaxed);
|
|
247
246
|
info->max_probe_length.store(
|
|
248
247
|
std::max(info->max_probe_length.load(std::memory_order_relaxed),
|
|
249
248
|
probe_length),
|
|
@@ -82,12 +82,12 @@ struct HashtablezInfo : public profiling_internal::Sample<HashtablezInfo> {
|
|
|
82
82
|
std::atomic<size_t> capacity;
|
|
83
83
|
std::atomic<size_t> size;
|
|
84
84
|
std::atomic<size_t> num_erases;
|
|
85
|
+
std::atomic<size_t> num_insert_hits;
|
|
85
86
|
std::atomic<size_t> num_rehashes;
|
|
86
87
|
std::atomic<size_t> max_probe_length;
|
|
87
88
|
std::atomic<size_t> total_probe_length;
|
|
88
89
|
std::atomic<size_t> hashes_bitwise_or;
|
|
89
90
|
std::atomic<size_t> hashes_bitwise_and;
|
|
90
|
-
std::atomic<size_t> hashes_bitwise_xor;
|
|
91
91
|
std::atomic<size_t> max_reserve;
|
|
92
92
|
|
|
93
93
|
// All of the fields below are set by `PrepareForSampling`, they must not be
|
|
@@ -111,6 +111,16 @@ struct HashtablezInfo : public profiling_internal::Sample<HashtablezInfo> {
|
|
|
111
111
|
|
|
112
112
|
void RecordRehashSlow(HashtablezInfo* info, size_t total_probe_length);
|
|
113
113
|
|
|
114
|
+
// This is inline to avoid calling convention overhead for an otherwise
|
|
115
|
+
// lightweight operation.
|
|
116
|
+
inline void RecordInsertHitSlow(HashtablezInfo* info) {
|
|
117
|
+
// We avoid fetch_add since no other thread should be mutating the table
|
|
118
|
+
// simultaneously without synchronization.
|
|
119
|
+
info->num_insert_hits.store(
|
|
120
|
+
info->num_insert_hits.load(std::memory_order_relaxed) + 1,
|
|
121
|
+
std::memory_order_relaxed);
|
|
122
|
+
}
|
|
123
|
+
|
|
114
124
|
void RecordReservationSlow(HashtablezInfo* info, size_t target_capacity);
|
|
115
125
|
|
|
116
126
|
void RecordClearedReservationSlow(HashtablezInfo* info);
|
|
@@ -118,8 +128,8 @@ void RecordClearedReservationSlow(HashtablezInfo* info);
|
|
|
118
128
|
void RecordStorageChangedSlow(HashtablezInfo* info, size_t size,
|
|
119
129
|
size_t capacity);
|
|
120
130
|
|
|
121
|
-
void
|
|
122
|
-
|
|
131
|
+
void RecordInsertMissSlow(HashtablezInfo* info, size_t hash,
|
|
132
|
+
size_t distance_from_desired);
|
|
123
133
|
|
|
124
134
|
void RecordEraseSlow(HashtablezInfo* info);
|
|
125
135
|
|
|
@@ -174,9 +184,9 @@ class HashtablezInfoHandle {
|
|
|
174
184
|
RecordClearedReservationSlow(info_);
|
|
175
185
|
}
|
|
176
186
|
|
|
177
|
-
inline void
|
|
187
|
+
inline void RecordInsertMiss(size_t hash, size_t distance_from_desired) {
|
|
178
188
|
if (ABSL_PREDICT_TRUE(info_ == nullptr)) return;
|
|
179
|
-
|
|
189
|
+
RecordInsertMissSlow(info_, hash, distance_from_desired);
|
|
180
190
|
}
|
|
181
191
|
|
|
182
192
|
inline void RecordErase() {
|
|
@@ -184,6 +194,11 @@ class HashtablezInfoHandle {
|
|
|
184
194
|
RecordEraseSlow(info_);
|
|
185
195
|
}
|
|
186
196
|
|
|
197
|
+
inline void RecordInsertHit() {
|
|
198
|
+
if (ABSL_PREDICT_TRUE(info_ == nullptr)) return;
|
|
199
|
+
RecordInsertHitSlow(info_);
|
|
200
|
+
}
|
|
201
|
+
|
|
187
202
|
friend inline void swap(HashtablezInfoHandle& lhs,
|
|
188
203
|
HashtablezInfoHandle& rhs) {
|
|
189
204
|
std::swap(lhs.info_, rhs.info_);
|
|
@@ -207,8 +222,10 @@ class HashtablezInfoHandle {
|
|
|
207
222
|
inline void RecordRehash(size_t /*total_probe_length*/) {}
|
|
208
223
|
inline void RecordReservation(size_t /*target_capacity*/) {}
|
|
209
224
|
inline void RecordClearedReservation() {}
|
|
210
|
-
inline void
|
|
225
|
+
inline void RecordInsertMiss(size_t /*hash*/,
|
|
226
|
+
size_t /*distance_from_desired*/) {}
|
|
211
227
|
inline void RecordErase() {}
|
|
228
|
+
inline void RecordInsertHit() {}
|
|
212
229
|
|
|
213
230
|
friend inline void swap(HashtablezInfoHandle& /*lhs*/,
|
|
214
231
|
HashtablezInfoHandle& /*rhs*/) {}
|
|
@@ -99,12 +99,12 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
|
|
|
99
99
|
EXPECT_EQ(info.capacity.load(), 0);
|
|
100
100
|
EXPECT_EQ(info.size.load(), 0);
|
|
101
101
|
EXPECT_EQ(info.num_erases.load(), 0);
|
|
102
|
+
EXPECT_EQ(info.num_insert_hits.load(), 0);
|
|
102
103
|
EXPECT_EQ(info.num_rehashes.load(), 0);
|
|
103
104
|
EXPECT_EQ(info.max_probe_length.load(), 0);
|
|
104
105
|
EXPECT_EQ(info.total_probe_length.load(), 0);
|
|
105
106
|
EXPECT_EQ(info.hashes_bitwise_or.load(), 0);
|
|
106
107
|
EXPECT_EQ(info.hashes_bitwise_and.load(), ~size_t{});
|
|
107
|
-
EXPECT_EQ(info.hashes_bitwise_xor.load(), 0);
|
|
108
108
|
EXPECT_EQ(info.max_reserve.load(), 0);
|
|
109
109
|
EXPECT_GE(info.create_time, test_start);
|
|
110
110
|
EXPECT_EQ(info.weight, test_stride);
|
|
@@ -116,11 +116,11 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
|
|
|
116
116
|
info.capacity.store(1, std::memory_order_relaxed);
|
|
117
117
|
info.size.store(1, std::memory_order_relaxed);
|
|
118
118
|
info.num_erases.store(1, std::memory_order_relaxed);
|
|
119
|
+
info.num_insert_hits.store(1, std::memory_order_relaxed);
|
|
119
120
|
info.max_probe_length.store(1, std::memory_order_relaxed);
|
|
120
121
|
info.total_probe_length.store(1, std::memory_order_relaxed);
|
|
121
122
|
info.hashes_bitwise_or.store(1, std::memory_order_relaxed);
|
|
122
123
|
info.hashes_bitwise_and.store(1, std::memory_order_relaxed);
|
|
123
|
-
info.hashes_bitwise_xor.store(1, std::memory_order_relaxed);
|
|
124
124
|
info.max_reserve.store(1, std::memory_order_relaxed);
|
|
125
125
|
info.create_time = test_start - absl::Hours(20);
|
|
126
126
|
|
|
@@ -131,12 +131,12 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
|
|
|
131
131
|
EXPECT_EQ(info.capacity.load(), 0);
|
|
132
132
|
EXPECT_EQ(info.size.load(), 0);
|
|
133
133
|
EXPECT_EQ(info.num_erases.load(), 0);
|
|
134
|
+
EXPECT_EQ(info.num_insert_hits.load(), 0);
|
|
134
135
|
EXPECT_EQ(info.num_rehashes.load(), 0);
|
|
135
136
|
EXPECT_EQ(info.max_probe_length.load(), 0);
|
|
136
137
|
EXPECT_EQ(info.total_probe_length.load(), 0);
|
|
137
138
|
EXPECT_EQ(info.hashes_bitwise_or.load(), 0);
|
|
138
139
|
EXPECT_EQ(info.hashes_bitwise_and.load(), ~size_t{});
|
|
139
|
-
EXPECT_EQ(info.hashes_bitwise_xor.load(), 0);
|
|
140
140
|
EXPECT_EQ(info.max_reserve.load(), 0);
|
|
141
141
|
EXPECT_EQ(info.weight, 2 * test_stride);
|
|
142
142
|
EXPECT_EQ(info.inline_element_size, test_element_size);
|
|
@@ -166,7 +166,7 @@ TEST(HashtablezInfoTest, RecordStorageChanged) {
|
|
|
166
166
|
EXPECT_EQ(info.capacity.load(), 20);
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
TEST(HashtablezInfoTest,
|
|
169
|
+
TEST(HashtablezInfoTest, RecordInsertMiss) {
|
|
170
170
|
HashtablezInfo info;
|
|
171
171
|
absl::MutexLock l(info.init_mu);
|
|
172
172
|
const int64_t test_stride = 25;
|
|
@@ -179,21 +179,18 @@ TEST(HashtablezInfoTest, RecordInsert) {
|
|
|
179
179
|
/*value_size=*/test_value_size,
|
|
180
180
|
/*soo_capacity_value=*/0);
|
|
181
181
|
EXPECT_EQ(info.max_probe_length.load(), 0);
|
|
182
|
-
|
|
182
|
+
RecordInsertMissSlow(&info, 0x0000FF00, 6 * kProbeLength);
|
|
183
183
|
EXPECT_EQ(info.max_probe_length.load(), 6);
|
|
184
184
|
EXPECT_EQ(info.hashes_bitwise_and.load(), 0x0000FF00);
|
|
185
185
|
EXPECT_EQ(info.hashes_bitwise_or.load(), 0x0000FF00);
|
|
186
|
-
|
|
187
|
-
RecordInsertSlow(&info, 0x000FF000, 4 * kProbeLength);
|
|
186
|
+
RecordInsertMissSlow(&info, 0x000FF000, 4 * kProbeLength);
|
|
188
187
|
EXPECT_EQ(info.max_probe_length.load(), 6);
|
|
189
188
|
EXPECT_EQ(info.hashes_bitwise_and.load(), 0x0000F000);
|
|
190
189
|
EXPECT_EQ(info.hashes_bitwise_or.load(), 0x000FFF00);
|
|
191
|
-
|
|
192
|
-
RecordInsertSlow(&info, 0x00FF0000, 12 * kProbeLength);
|
|
190
|
+
RecordInsertMissSlow(&info, 0x00FF0000, 12 * kProbeLength);
|
|
193
191
|
EXPECT_EQ(info.max_probe_length.load(), 12);
|
|
194
192
|
EXPECT_EQ(info.hashes_bitwise_and.load(), 0x00000000);
|
|
195
193
|
EXPECT_EQ(info.hashes_bitwise_or.load(), 0x00FFFF00);
|
|
196
|
-
EXPECT_EQ(info.hashes_bitwise_xor.load(), 0x00F00F00);
|
|
197
194
|
}
|
|
198
195
|
|
|
199
196
|
TEST(HashtablezInfoTest, RecordErase) {
|
|
@@ -210,7 +207,7 @@ TEST(HashtablezInfoTest, RecordErase) {
|
|
|
210
207
|
/*soo_capacity_value=*/1);
|
|
211
208
|
EXPECT_EQ(info.num_erases.load(), 0);
|
|
212
209
|
EXPECT_EQ(info.size.load(), 0);
|
|
213
|
-
|
|
210
|
+
RecordInsertMissSlow(&info, 0x0000FF00, 6 * kProbeLength);
|
|
214
211
|
EXPECT_EQ(info.size.load(), 1);
|
|
215
212
|
RecordEraseSlow(&info);
|
|
216
213
|
EXPECT_EQ(info.size.load(), 0);
|
|
@@ -221,6 +218,25 @@ TEST(HashtablezInfoTest, RecordErase) {
|
|
|
221
218
|
EXPECT_EQ(info.soo_capacity, 1);
|
|
222
219
|
}
|
|
223
220
|
|
|
221
|
+
TEST(HashtablezInfoTest, RecordInsertHit) {
|
|
222
|
+
const int64_t test_stride = 31;
|
|
223
|
+
const size_t test_element_size = 29;
|
|
224
|
+
const size_t test_key_size = 27;
|
|
225
|
+
const size_t test_value_size = 25;
|
|
226
|
+
|
|
227
|
+
HashtablezInfo info;
|
|
228
|
+
absl::MutexLock l(info.init_mu);
|
|
229
|
+
info.PrepareForSampling(test_stride, test_element_size,
|
|
230
|
+
/*key_size=*/test_key_size,
|
|
231
|
+
/*value_size=*/test_value_size,
|
|
232
|
+
/*soo_capacity_value=*/1);
|
|
233
|
+
EXPECT_EQ(info.num_insert_hits.load(), 0);
|
|
234
|
+
RecordInsertHitSlow(&info);
|
|
235
|
+
EXPECT_EQ(info.num_insert_hits.load(), 1);
|
|
236
|
+
RecordInsertHitSlow(&info);
|
|
237
|
+
EXPECT_EQ(info.num_insert_hits.load(), 2);
|
|
238
|
+
}
|
|
239
|
+
|
|
224
240
|
TEST(HashtablezInfoTest, RecordRehash) {
|
|
225
241
|
const int64_t test_stride = 33;
|
|
226
242
|
const size_t test_element_size = 31;
|
|
@@ -233,10 +249,10 @@ TEST(HashtablezInfoTest, RecordRehash) {
|
|
|
233
249
|
/*value_size=*/test_value_size,
|
|
234
250
|
|
|
235
251
|
/*soo_capacity_value=*/0);
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
252
|
+
RecordInsertMissSlow(&info, 0x1, 0);
|
|
253
|
+
RecordInsertMissSlow(&info, 0x2, kProbeLength);
|
|
254
|
+
RecordInsertMissSlow(&info, 0x4, kProbeLength);
|
|
255
|
+
RecordInsertMissSlow(&info, 0x8, 2 * kProbeLength);
|
|
240
256
|
EXPECT_EQ(info.size.load(), 4);
|
|
241
257
|
EXPECT_EQ(info.total_probe_length.load(), 4);
|
|
242
258
|
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// Copyright 2025 The Abseil Authors.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
|
|
15
|
+
#ifndef ABSL_CONTAINER_INTERNAL_HETEROGENEOUS_LOOKUP_TESTING_H_
|
|
16
|
+
#define ABSL_CONTAINER_INTERNAL_HETEROGENEOUS_LOOKUP_TESTING_H_
|
|
17
|
+
|
|
18
|
+
#include <cstddef>
|
|
19
|
+
#include <ostream>
|
|
20
|
+
|
|
21
|
+
#include "gmock/gmock.h"
|
|
22
|
+
#include "absl/base/config.h"
|
|
23
|
+
#include "absl/container/internal/test_instance_tracker.h"
|
|
24
|
+
|
|
25
|
+
namespace absl {
|
|
26
|
+
ABSL_NAMESPACE_BEGIN
|
|
27
|
+
namespace container_internal {
|
|
28
|
+
|
|
29
|
+
// An expensive class that is convertible to CheapType to demonstrate
|
|
30
|
+
// heterogeneous lookups.
|
|
31
|
+
class ExpensiveType : public absl::test_internal::CopyableMovableInstance {
|
|
32
|
+
public:
|
|
33
|
+
explicit ExpensiveType(int value)
|
|
34
|
+
: absl::test_internal::CopyableMovableInstance(value) {}
|
|
35
|
+
|
|
36
|
+
friend std::ostream& operator<<(std::ostream& os, const ExpensiveType& a) {
|
|
37
|
+
return os << a.value();
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
class CheapType {
|
|
42
|
+
public:
|
|
43
|
+
explicit CheapType(const int value) : value_(value) {}
|
|
44
|
+
|
|
45
|
+
explicit operator ExpensiveType() const { return ExpensiveType(value_); }
|
|
46
|
+
|
|
47
|
+
int value() const { return value_; }
|
|
48
|
+
|
|
49
|
+
private:
|
|
50
|
+
int value_;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
struct HeterogeneousHash {
|
|
54
|
+
using is_transparent = void;
|
|
55
|
+
size_t operator()(const ExpensiveType& a) const { return a.value(); }
|
|
56
|
+
size_t operator()(const CheapType& a) const { return a.value(); }
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
struct HeterogeneousEqual {
|
|
60
|
+
using is_transparent = void;
|
|
61
|
+
bool operator()(const ExpensiveType& a, const ExpensiveType& b) const {
|
|
62
|
+
return a.value() == b.value();
|
|
63
|
+
}
|
|
64
|
+
bool operator()(const ExpensiveType& a, const CheapType& b) const {
|
|
65
|
+
return a.value() == b.value();
|
|
66
|
+
}
|
|
67
|
+
bool operator()(const CheapType& a, const ExpensiveType& b) const {
|
|
68
|
+
return a.value() == b.value();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
MATCHER_P(HasExpensiveValue, n, "") {
|
|
73
|
+
return ::testing::ExplainMatchResult(n, arg.value(), result_listener);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
} // namespace container_internal
|
|
77
|
+
ABSL_NAMESPACE_END
|
|
78
|
+
} // namespace absl
|
|
79
|
+
|
|
80
|
+
#endif // ABSL_CONTAINER_INTERNAL_HETEROGENEOUS_LOOKUP_TESTING_H_
|
|
@@ -27,7 +27,6 @@
|
|
|
27
27
|
|
|
28
28
|
#include "absl/base/attributes.h"
|
|
29
29
|
#include "absl/base/config.h"
|
|
30
|
-
#include "absl/base/internal/identity.h"
|
|
31
30
|
#include "absl/base/macros.h"
|
|
32
31
|
#include "absl/container/internal/compressed_tuple.h"
|
|
33
32
|
#include "absl/memory/memory.h"
|
|
@@ -127,7 +126,7 @@ struct MallocAdapter {
|
|
|
127
126
|
};
|
|
128
127
|
|
|
129
128
|
template <typename A, typename ValueAdapter>
|
|
130
|
-
void ConstructElements(absl::
|
|
129
|
+
void ConstructElements(absl::type_identity_t<A>& allocator,
|
|
131
130
|
Pointer<A> construct_first, ValueAdapter& values,
|
|
132
131
|
SizeType<A> construct_size) {
|
|
133
132
|
for (SizeType<A> i = 0; i < construct_size; ++i) {
|
|
@@ -796,16 +795,9 @@ auto Storage<T, N, A>::Insert(ConstIterator<A> pos, ValueAdapter values,
|
|
|
796
795
|
move_construction_values,
|
|
797
796
|
move_construction.size());
|
|
798
797
|
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
source = move_assignment_values + move_assignment.size();
|
|
803
|
-
;) {
|
|
804
|
-
--destination;
|
|
805
|
-
--source;
|
|
806
|
-
if (destination < last_destination) break;
|
|
807
|
-
*destination = std::move(*source);
|
|
808
|
-
}
|
|
798
|
+
std::move_backward(move_assignment_values,
|
|
799
|
+
move_assignment_values + move_assignment.size(),
|
|
800
|
+
move_assignment.data() + move_assignment.size());
|
|
809
801
|
|
|
810
802
|
AssignElements<A>(insert_assignment.data(), values,
|
|
811
803
|
insert_assignment.size());
|
|
@@ -31,8 +31,20 @@ namespace absl {
|
|
|
31
31
|
ABSL_NAMESPACE_BEGIN
|
|
32
32
|
namespace container_internal {
|
|
33
33
|
|
|
34
|
-
template <class Policy, class
|
|
35
|
-
class raw_hash_map
|
|
34
|
+
template <class Policy, class... Params>
|
|
35
|
+
class raw_hash_map;
|
|
36
|
+
|
|
37
|
+
template <typename Policy, typename Hash, typename Eq, typename Alloc>
|
|
38
|
+
struct InstantiateRawHashMap {
|
|
39
|
+
using type = typename ApplyWithoutDefaultSuffix<
|
|
40
|
+
raw_hash_map,
|
|
41
|
+
TypeList<int, typename Policy::DefaultHash, typename Policy::DefaultEq,
|
|
42
|
+
typename Policy::DefaultAlloc>,
|
|
43
|
+
TypeList<Policy, Hash, Eq, Alloc>>::type;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
template <class Policy, class... Params>
|
|
47
|
+
class raw_hash_map : public raw_hash_set<Policy, Params...> {
|
|
36
48
|
// P is Policy. It's passed as a template argument to support maps that have
|
|
37
49
|
// incomplete types as values, as in unordered_map<K, IncompleteType>.
|
|
38
50
|
// MappedReference<> may be a non-reference type.
|
|
@@ -45,6 +57,10 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
|
|
|
45
57
|
using MappedConstReference = decltype(P::value(
|
|
46
58
|
std::addressof(std::declval<typename raw_hash_map::const_reference>())));
|
|
47
59
|
|
|
60
|
+
using Hash = typename raw_hash_map::raw_hash_set::hasher;
|
|
61
|
+
using Eq = typename raw_hash_map::raw_hash_set::key_equal;
|
|
62
|
+
using Alloc = typename raw_hash_map::raw_hash_set::allocator_type;
|
|
63
|
+
|
|
48
64
|
template <class K>
|
|
49
65
|
using key_arg =
|
|
50
66
|
typename KeyArg<IsTransparent<Eq>::value && IsTransparent<Hash>::value>::
|
|
@@ -205,7 +221,8 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
|
|
|
205
221
|
!std::is_convertible<K, const_iterator>::value, int>::type = 0>
|
|
206
222
|
std::pair<iterator, bool> try_emplace(key_arg<K> &&k, Args &&...args)
|
|
207
223
|
ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
208
|
-
return try_emplace_impl(std::forward<K
|
|
224
|
+
return try_emplace_impl(std::forward<key_arg<K>>(k),
|
|
225
|
+
std::forward<Args>(args)...);
|
|
209
226
|
}
|
|
210
227
|
|
|
211
228
|
template <class K = key_type, class... Args,
|
|
@@ -215,7 +232,7 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
|
|
|
215
232
|
std::pair<iterator, bool> try_emplace(
|
|
216
233
|
key_arg<K> &&k ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
|
|
217
234
|
Args &&...args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
218
|
-
return this->template try_emplace<K, 0>(std::forward<K
|
|
235
|
+
return this->template try_emplace<K, 0>(std::forward<key_arg<K>>(k),
|
|
219
236
|
std::forward<Args>(args)...);
|
|
220
237
|
}
|
|
221
238
|
|
|
@@ -241,14 +258,15 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
|
|
|
241
258
|
class... Args>
|
|
242
259
|
iterator try_emplace(const_iterator, key_arg<K> &&k,
|
|
243
260
|
Args &&...args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
244
|
-
return try_emplace(std::forward<K
|
|
261
|
+
return try_emplace(std::forward<key_arg<K>>(k), std::forward<Args>(args)...)
|
|
262
|
+
.first;
|
|
245
263
|
}
|
|
246
264
|
template <class K = key_type, class... Args,
|
|
247
265
|
EnableIf<LifetimeBoundK<K, true, K *>> = 0>
|
|
248
266
|
iterator try_emplace(const_iterator hint,
|
|
249
267
|
key_arg<K> &&k ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
|
|
250
268
|
Args &&...args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
251
|
-
return this->template try_emplace<K, 0>(hint, std::forward<K
|
|
269
|
+
return this->template try_emplace<K, 0>(hint, std::forward<key_arg<K>>(k),
|
|
252
270
|
std::forward<Args>(args)...);
|
|
253
271
|
}
|
|
254
272
|
|
|
@@ -264,7 +282,7 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
|
|
|
264
282
|
const key_arg<K> &k
|
|
265
283
|
ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
|
|
266
284
|
Args &&...args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
267
|
-
return this->template try_emplace<K, 0>(hint,
|
|
285
|
+
return this->template try_emplace<K, 0>(hint, k,
|
|
268
286
|
std::forward<Args>(args)...);
|
|
269
287
|
}
|
|
270
288
|
|
|
@@ -296,15 +314,15 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
|
|
|
296
314
|
// It is safe to use unchecked_deref here because try_emplace
|
|
297
315
|
// will always return an iterator pointing to a valid item in the table,
|
|
298
316
|
// since it inserts if nothing is found for the given key.
|
|
299
|
-
return Policy::value(
|
|
300
|
-
|
|
317
|
+
return Policy::value(&this->unchecked_deref(
|
|
318
|
+
try_emplace(std::forward<key_arg<K>>(key)).first));
|
|
301
319
|
}
|
|
302
320
|
template <class K = key_type, class P = Policy, int &...,
|
|
303
321
|
EnableIf<LifetimeBoundK<K, true, K *>> = 0>
|
|
304
322
|
MappedReference<P> operator[](
|
|
305
323
|
key_arg<K> &&key ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
|
|
306
324
|
ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
307
|
-
return this->template operator[]<K, P, 0>(std::forward<K
|
|
325
|
+
return this->template operator[]<K, P, 0>(std::forward<key_arg<K>>(key));
|
|
308
326
|
}
|
|
309
327
|
|
|
310
328
|
template <class K = key_type, class P = Policy,
|
|
@@ -325,6 +343,13 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
|
|
|
325
343
|
}
|
|
326
344
|
|
|
327
345
|
private:
|
|
346
|
+
static_assert(
|
|
347
|
+
std::is_same_v<
|
|
348
|
+
typename InstantiateRawHashMap<Policy, Hash, Eq, Alloc>::type,
|
|
349
|
+
raw_hash_map>,
|
|
350
|
+
"Redundant template parameters were passed. Use InstantiateRawHashMap<> "
|
|
351
|
+
"instead");
|
|
352
|
+
|
|
328
353
|
template <class K, class V>
|
|
329
354
|
std::pair<iterator, bool> insert_or_assign_impl(K&& k, V&& v)
|
|
330
355
|
ABSL_ATTRIBUTE_LIFETIME_BOUND {
|