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
|
@@ -461,15 +461,6 @@ class PerTableSeed {
|
|
|
461
461
|
const uint16_t seed_;
|
|
462
462
|
};
|
|
463
463
|
|
|
464
|
-
// Returns next per-table seed.
|
|
465
|
-
inline uint16_t NextSeed() {
|
|
466
|
-
static_assert(PerTableSeed::kBitCount == 16);
|
|
467
|
-
thread_local uint16_t seed =
|
|
468
|
-
static_cast<uint16_t>(reinterpret_cast<uintptr_t>(&seed));
|
|
469
|
-
seed += uint16_t{0xad53};
|
|
470
|
-
return seed;
|
|
471
|
-
}
|
|
472
|
-
|
|
473
464
|
// The size and also has additionally
|
|
474
465
|
// 1) one bit that stores whether we have infoz.
|
|
475
466
|
// 2) PerTableSeed::kBitCount bits for the seed.
|
|
@@ -517,6 +508,9 @@ class HashtableSize {
|
|
|
517
508
|
|
|
518
509
|
void set_no_seed_for_testing() { data_ &= ~kSeedMask; }
|
|
519
510
|
|
|
511
|
+
// Returns next per-table seed.
|
|
512
|
+
static uint16_t NextSeed();
|
|
513
|
+
|
|
520
514
|
private:
|
|
521
515
|
void set_seed(uint16_t seed) {
|
|
522
516
|
data_ = (data_ & ~kSeedMask) | (seed | PerTableSeed::kSignBit);
|
|
@@ -1144,7 +1138,7 @@ class CommonFields : public CommonFieldsGenerationInfo {
|
|
|
1144
1138
|
HeapOrSoo heap_or_soo_;
|
|
1145
1139
|
};
|
|
1146
1140
|
|
|
1147
|
-
template <class Policy, class
|
|
1141
|
+
template <class Policy, class... Params>
|
|
1148
1142
|
class raw_hash_set;
|
|
1149
1143
|
|
|
1150
1144
|
// Returns the next valid capacity after `n`.
|
|
@@ -1474,81 +1468,11 @@ extern template size_t TryFindNewIndexWithoutProbing(size_t h1,
|
|
|
1474
1468
|
ctrl_t* new_ctrl,
|
|
1475
1469
|
size_t new_capacity);
|
|
1476
1470
|
|
|
1477
|
-
// Sets sanitizer poisoning for slot corresponding to control byte being set.
|
|
1478
|
-
inline void DoSanitizeOnSetCtrl(const CommonFields& c, size_t i, ctrl_t h,
|
|
1479
|
-
size_t slot_size) {
|
|
1480
|
-
ABSL_SWISSTABLE_ASSERT(i < c.capacity());
|
|
1481
|
-
auto* slot_i = static_cast<const char*>(c.slot_array()) + i * slot_size;
|
|
1482
|
-
if (IsFull(h)) {
|
|
1483
|
-
SanitizerUnpoisonMemoryRegion(slot_i, slot_size);
|
|
1484
|
-
} else {
|
|
1485
|
-
SanitizerPoisonMemoryRegion(slot_i, slot_size);
|
|
1486
|
-
}
|
|
1487
|
-
}
|
|
1488
|
-
|
|
1489
|
-
// Sets `ctrl[i]` to `h`.
|
|
1490
|
-
//
|
|
1491
|
-
// Unlike setting it directly, this function will perform bounds checks and
|
|
1492
|
-
// mirror the value to the cloned tail if necessary.
|
|
1493
|
-
inline void SetCtrl(const CommonFields& c, size_t i, ctrl_t h,
|
|
1494
|
-
size_t slot_size) {
|
|
1495
|
-
ABSL_SWISSTABLE_ASSERT(!c.is_small());
|
|
1496
|
-
DoSanitizeOnSetCtrl(c, i, h, slot_size);
|
|
1497
|
-
ctrl_t* ctrl = c.control();
|
|
1498
|
-
ctrl[i] = h;
|
|
1499
|
-
ctrl[((i - NumClonedBytes()) & c.capacity()) +
|
|
1500
|
-
(NumClonedBytes() & c.capacity())] = h;
|
|
1501
|
-
}
|
|
1502
|
-
// Overload for setting to an occupied `h2_t` rather than a special `ctrl_t`.
|
|
1503
|
-
inline void SetCtrl(const CommonFields& c, size_t i, h2_t h, size_t slot_size) {
|
|
1504
|
-
SetCtrl(c, i, static_cast<ctrl_t>(h), slot_size);
|
|
1505
|
-
}
|
|
1506
|
-
|
|
1507
|
-
// Like SetCtrl, but in a single group table, we can save some operations when
|
|
1508
|
-
// setting the cloned control byte.
|
|
1509
|
-
inline void SetCtrlInSingleGroupTable(const CommonFields& c, size_t i, ctrl_t h,
|
|
1510
|
-
size_t slot_size) {
|
|
1511
|
-
ABSL_SWISSTABLE_ASSERT(!c.is_small());
|
|
1512
|
-
ABSL_SWISSTABLE_ASSERT(is_single_group(c.capacity()));
|
|
1513
|
-
DoSanitizeOnSetCtrl(c, i, h, slot_size);
|
|
1514
|
-
ctrl_t* ctrl = c.control();
|
|
1515
|
-
ctrl[i] = h;
|
|
1516
|
-
ctrl[i + c.capacity() + 1] = h;
|
|
1517
|
-
}
|
|
1518
|
-
// Overload for setting to an occupied `h2_t` rather than a special `ctrl_t`.
|
|
1519
|
-
inline void SetCtrlInSingleGroupTable(const CommonFields& c, size_t i, h2_t h,
|
|
1520
|
-
size_t slot_size) {
|
|
1521
|
-
SetCtrlInSingleGroupTable(c, i, static_cast<ctrl_t>(h), slot_size);
|
|
1522
|
-
}
|
|
1523
|
-
|
|
1524
|
-
// Like SetCtrl, but in a table with capacity >= Group::kWidth - 1,
|
|
1525
|
-
// we can save some operations when setting the cloned control byte.
|
|
1526
|
-
inline void SetCtrlInLargeTable(const CommonFields& c, size_t i, ctrl_t h,
|
|
1527
|
-
size_t slot_size) {
|
|
1528
|
-
ABSL_SWISSTABLE_ASSERT(c.capacity() >= Group::kWidth - 1);
|
|
1529
|
-
DoSanitizeOnSetCtrl(c, i, h, slot_size);
|
|
1530
|
-
ctrl_t* ctrl = c.control();
|
|
1531
|
-
ctrl[i] = h;
|
|
1532
|
-
ctrl[((i - NumClonedBytes()) & c.capacity()) + NumClonedBytes()] = h;
|
|
1533
|
-
}
|
|
1534
|
-
// Overload for setting to an occupied `h2_t` rather than a special `ctrl_t`.
|
|
1535
|
-
inline void SetCtrlInLargeTable(const CommonFields& c, size_t i, h2_t h,
|
|
1536
|
-
size_t slot_size) {
|
|
1537
|
-
SetCtrlInLargeTable(c, i, static_cast<ctrl_t>(h), slot_size);
|
|
1538
|
-
}
|
|
1539
|
-
|
|
1540
1471
|
// growth_info (which is a size_t) is stored with the backing array.
|
|
1541
1472
|
constexpr size_t BackingArrayAlignment(size_t align_of_slot) {
|
|
1542
1473
|
return (std::max)(align_of_slot, alignof(GrowthInfo));
|
|
1543
1474
|
}
|
|
1544
1475
|
|
|
1545
|
-
// Returns the address of the ith slot in slots where each slot occupies
|
|
1546
|
-
// slot_size.
|
|
1547
|
-
inline void* SlotAddress(void* slot_array, size_t slot, size_t slot_size) {
|
|
1548
|
-
return static_cast<void*>(static_cast<char*>(slot_array) +
|
|
1549
|
-
(slot * slot_size));
|
|
1550
|
-
}
|
|
1551
|
-
|
|
1552
1476
|
// Iterates over all full slots and calls `cb(const ctrl_t*, void*)`.
|
|
1553
1477
|
// No insertion to the table is allowed during `cb` call.
|
|
1554
1478
|
// Erasure is allowed only for the element passed to the callback.
|
|
@@ -1568,10 +1492,12 @@ constexpr bool ShouldSampleHashtablezInfoForAlloc() {
|
|
|
1568
1492
|
|
|
1569
1493
|
// Allocates `n` bytes for a backing array.
|
|
1570
1494
|
template <size_t AlignOfBackingArray, typename Alloc>
|
|
1571
|
-
|
|
1495
|
+
void* AllocateBackingArray(void* alloc, size_t n) {
|
|
1572
1496
|
return Allocate<AlignOfBackingArray>(static_cast<Alloc*>(alloc), n);
|
|
1573
1497
|
}
|
|
1574
1498
|
|
|
1499
|
+
// Note: we mark this function as ABSL_ATTRIBUTE_NOINLINE because we don't want
|
|
1500
|
+
// it to be inlined into e.g. the destructor to save code size.
|
|
1575
1501
|
template <size_t AlignOfBackingArray, typename Alloc>
|
|
1576
1502
|
ABSL_ATTRIBUTE_NOINLINE void DeallocateBackingArray(
|
|
1577
1503
|
void* alloc, size_t capacity, ctrl_t* ctrl, size_t slot_size,
|
|
@@ -1804,29 +1730,44 @@ ABSL_ATTRIBUTE_NOINLINE void TransferNRelocatable(void*, void* dst, void* src,
|
|
|
1804
1730
|
// empty class cases.
|
|
1805
1731
|
void* GetRefForEmptyClass(CommonFields& common);
|
|
1806
1732
|
|
|
1807
|
-
// Given the hash of a value not currently in the table and the first
|
|
1808
|
-
// slot in the probe sequence, finds a viable slot index to insert it
|
|
1733
|
+
// Given the hash of a value not currently in the table and the first group with
|
|
1734
|
+
// an empty slot in the probe sequence, finds a viable slot index to insert it
|
|
1735
|
+
// at.
|
|
1809
1736
|
//
|
|
1810
1737
|
// In case there's no space left, the table can be resized or rehashed
|
|
1811
1738
|
// (for tables with deleted slots, see FindInsertPositionWithGrowthOrRehash).
|
|
1812
1739
|
//
|
|
1813
1740
|
// In the case of absence of deleted slots and positive growth_left, the element
|
|
1814
|
-
// can be inserted in the provided `
|
|
1741
|
+
// can be inserted in one of the empty slots in the provided `target_group`.
|
|
1815
1742
|
//
|
|
1816
1743
|
// When the table has deleted slots (according to GrowthInfo), the target
|
|
1817
1744
|
// position will be searched one more time using `find_first_non_full`.
|
|
1818
1745
|
//
|
|
1819
1746
|
// REQUIRES: `!common.is_small()`.
|
|
1820
1747
|
// REQUIRES: At least one non-full slot available.
|
|
1821
|
-
// REQUIRES: `
|
|
1748
|
+
// REQUIRES: `mask_empty` is a mask containing empty slots for the
|
|
1749
|
+
// `target_group`.
|
|
1750
|
+
// REQUIRES: `target_group` is a starting position for the group that has
|
|
1751
|
+
// at least one empty slot.
|
|
1822
1752
|
size_t PrepareInsertLarge(CommonFields& common, const PolicyFunctions& policy,
|
|
1823
|
-
size_t hash,
|
|
1753
|
+
size_t hash, Group::NonIterableBitMaskType mask_empty,
|
|
1754
|
+
FindInfo target_group);
|
|
1824
1755
|
|
|
1825
1756
|
// Same as above, but with generations enabled, we may end up changing the seed,
|
|
1826
1757
|
// which means we need to be able to recompute the hash.
|
|
1827
1758
|
size_t PrepareInsertLargeGenerationsEnabled(
|
|
1828
1759
|
CommonFields& common, const PolicyFunctions& policy, size_t hash,
|
|
1829
|
-
|
|
1760
|
+
Group::NonIterableBitMaskType mask_empty, FindInfo target_group,
|
|
1761
|
+
absl::FunctionRef<size_t(size_t)> recompute_hash);
|
|
1762
|
+
|
|
1763
|
+
template <typename Policy, typename Hash, typename Eq, typename Alloc>
|
|
1764
|
+
struct InstantiateRawHashSet {
|
|
1765
|
+
using type = typename ApplyWithoutDefaultSuffix<
|
|
1766
|
+
raw_hash_set,
|
|
1767
|
+
TypeList<void, typename Policy::DefaultHash, typename Policy::DefaultEq,
|
|
1768
|
+
typename Policy::DefaultAlloc>,
|
|
1769
|
+
TypeList<Policy, Hash, Eq, Alloc>>::type;
|
|
1770
|
+
};
|
|
1830
1771
|
|
|
1831
1772
|
// A SwissTable.
|
|
1832
1773
|
//
|
|
@@ -1834,26 +1775,47 @@ size_t PrepareInsertLargeGenerationsEnabled(
|
|
|
1834
1775
|
// the slots of the hashtable (see hash_policy_traits.h for the full interface
|
|
1835
1776
|
// of policy).
|
|
1836
1777
|
//
|
|
1778
|
+
// Params...: a variadic list of parameters that allows us to omit default
|
|
1779
|
+
// types. This reduces the mangled name of the class and the size of
|
|
1780
|
+
// debug strings like __PRETTY_FUNCTION__. Default types do not give
|
|
1781
|
+
// any new information.
|
|
1782
|
+
//
|
|
1837
1783
|
// Hash: a (possibly polymorphic) functor that hashes keys of the hashtable. The
|
|
1838
1784
|
// functor should accept a key and return size_t as hash. For best performance
|
|
1839
1785
|
// it is important that the hash function provides high entropy across all bits
|
|
1840
1786
|
// of the hash.
|
|
1787
|
+
// This is the first element in `Params...` if it exists, or Policy::DefaultHash
|
|
1788
|
+
// otherwise.
|
|
1841
1789
|
//
|
|
1842
1790
|
// Eq: a (possibly polymorphic) functor that compares two keys for equality. It
|
|
1843
1791
|
// should accept two (of possibly different type) keys and return a bool: true
|
|
1844
1792
|
// if they are equal, false if they are not. If two keys compare equal, then
|
|
1845
1793
|
// their hash values as defined by Hash MUST be equal.
|
|
1794
|
+
// This is the second element in `Params...` if it exists, or Policy::DefaultEq
|
|
1795
|
+
// otherwise.
|
|
1846
1796
|
//
|
|
1847
1797
|
// Allocator: an Allocator
|
|
1848
1798
|
// [https://en.cppreference.com/w/cpp/named_req/Allocator] with which
|
|
1849
1799
|
// the storage of the hashtable will be allocated and the elements will be
|
|
1850
1800
|
// constructed and destroyed.
|
|
1851
|
-
|
|
1801
|
+
// This is the third element in `Params...` if it exists, or
|
|
1802
|
+
// Policy::DefaultAlloc otherwise.
|
|
1803
|
+
template <class Policy, class... Params>
|
|
1852
1804
|
class raw_hash_set {
|
|
1853
1805
|
using PolicyTraits = hash_policy_traits<Policy>;
|
|
1806
|
+
using Hash = GetFromListOr<typename Policy::DefaultHash, 0, Params...>;
|
|
1807
|
+
using Eq = GetFromListOr<typename Policy::DefaultEq, 1, Params...>;
|
|
1808
|
+
using Alloc = GetFromListOr<typename Policy::DefaultAlloc, 2, Params...>;
|
|
1854
1809
|
using KeyArgImpl =
|
|
1855
1810
|
KeyArg<IsTransparent<Eq>::value && IsTransparent<Hash>::value>;
|
|
1856
1811
|
|
|
1812
|
+
static_assert(
|
|
1813
|
+
std::is_same_v<
|
|
1814
|
+
typename InstantiateRawHashSet<Policy, Hash, Eq, Alloc>::type,
|
|
1815
|
+
raw_hash_set>,
|
|
1816
|
+
"Redundant template parameters were passed. Use InstantiateRawHashSet<> "
|
|
1817
|
+
"instead");
|
|
1818
|
+
|
|
1857
1819
|
public:
|
|
1858
1820
|
using init_type = typename PolicyTraits::init_type;
|
|
1859
1821
|
using key_type = typename PolicyTraits::key_type;
|
|
@@ -2466,13 +2428,13 @@ class raw_hash_set {
|
|
|
2466
2428
|
// s.insert({"abc", 42});
|
|
2467
2429
|
std::pair<iterator, bool> insert(init_type&& value)
|
|
2468
2430
|
ABSL_ATTRIBUTE_LIFETIME_BOUND
|
|
2469
|
-
#if
|
|
2431
|
+
#if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
|
|
2470
2432
|
requires(!IsLifetimeBoundAssignmentFrom<init_type>::value)
|
|
2471
2433
|
#endif
|
|
2472
2434
|
{
|
|
2473
2435
|
return emplace(std::move(value));
|
|
2474
2436
|
}
|
|
2475
|
-
#if
|
|
2437
|
+
#if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
|
|
2476
2438
|
std::pair<iterator, bool> insert(
|
|
2477
2439
|
init_type&& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
|
|
2478
2440
|
ABSL_ATTRIBUTE_LIFETIME_BOUND
|
|
@@ -2515,17 +2477,17 @@ class raw_hash_set {
|
|
|
2515
2477
|
|
|
2516
2478
|
template <class InputIt>
|
|
2517
2479
|
void insert(InputIt first, InputIt last) {
|
|
2518
|
-
|
|
2480
|
+
insert_range(first, last);
|
|
2519
2481
|
}
|
|
2520
2482
|
|
|
2521
2483
|
template <class T, RequiresNotInit<T> = 0,
|
|
2522
2484
|
std::enable_if_t<Insertable<const T&>::value, int> = 0>
|
|
2523
2485
|
void insert(std::initializer_list<T> ilist) {
|
|
2524
|
-
|
|
2486
|
+
insert_range(ilist.begin(), ilist.end());
|
|
2525
2487
|
}
|
|
2526
2488
|
|
|
2527
2489
|
void insert(std::initializer_list<init_type> ilist) {
|
|
2528
|
-
|
|
2490
|
+
insert_range(ilist.begin(), ilist.end());
|
|
2529
2491
|
}
|
|
2530
2492
|
|
|
2531
2493
|
insert_return_type insert(node_type&& node) ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
|
@@ -2708,8 +2670,11 @@ class raw_hash_set {
|
|
|
2708
2670
|
|
|
2709
2671
|
// Moves elements from `src` into `this`.
|
|
2710
2672
|
// If the element already exists in `this`, it is left unmodified in `src`.
|
|
2711
|
-
template <
|
|
2712
|
-
|
|
2673
|
+
template <
|
|
2674
|
+
typename... Params2,
|
|
2675
|
+
typename = std::enable_if_t<std::is_same_v<
|
|
2676
|
+
Alloc, typename raw_hash_set<Policy, Params2...>::allocator_type>>>
|
|
2677
|
+
void merge(raw_hash_set<Policy, Params2...>& src) { // NOLINT
|
|
2713
2678
|
AssertNotDebugCapacity();
|
|
2714
2679
|
src.AssertNotDebugCapacity();
|
|
2715
2680
|
assert(this != &src);
|
|
@@ -2733,8 +2698,11 @@ class raw_hash_set {
|
|
|
2733
2698
|
}
|
|
2734
2699
|
}
|
|
2735
2700
|
|
|
2736
|
-
template <
|
|
2737
|
-
|
|
2701
|
+
template <
|
|
2702
|
+
typename... Params2,
|
|
2703
|
+
typename = std::enable_if_t<std::is_same_v<
|
|
2704
|
+
Alloc, typename raw_hash_set<Policy, Params2...>::allocator_type>>>
|
|
2705
|
+
void merge(raw_hash_set<Policy, Params2...>&& src) { // NOLINT
|
|
2738
2706
|
merge(src);
|
|
2739
2707
|
}
|
|
2740
2708
|
|
|
@@ -3243,6 +3211,7 @@ class raw_hash_set {
|
|
|
3243
3211
|
}
|
|
3244
3212
|
if (!empty()) {
|
|
3245
3213
|
if (equal_to(key, single_slot())) {
|
|
3214
|
+
common().infoz().RecordInsertHit();
|
|
3246
3215
|
return {single_iterator(), false};
|
|
3247
3216
|
}
|
|
3248
3217
|
}
|
|
@@ -3260,31 +3229,48 @@ class raw_hash_set {
|
|
|
3260
3229
|
auto seq = probe(common(), hash);
|
|
3261
3230
|
const h2_t h2 = H2(hash);
|
|
3262
3231
|
const ctrl_t* ctrl = control();
|
|
3263
|
-
|
|
3232
|
+
size_t index;
|
|
3233
|
+
bool inserted;
|
|
3234
|
+
// We use a lambda function to be able to exit from the nested loop without
|
|
3235
|
+
// duplicating generated code for the return statement (e.g. iterator_at).
|
|
3236
|
+
[&]() ABSL_ATTRIBUTE_ALWAYS_INLINE {
|
|
3237
|
+
while (true) {
|
|
3264
3238
|
#ifndef ABSL_HAVE_MEMORY_SANITIZER
|
|
3265
|
-
|
|
3239
|
+
absl::PrefetchToLocalCache(slot_array() + seq.offset());
|
|
3266
3240
|
#endif
|
|
3267
|
-
|
|
3268
|
-
|
|
3269
|
-
|
|
3270
|
-
|
|
3271
|
-
|
|
3272
|
-
|
|
3273
|
-
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
|
|
3277
|
-
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3283
|
-
|
|
3241
|
+
Group g{ctrl + seq.offset()};
|
|
3242
|
+
for (uint32_t i : g.Match(h2)) {
|
|
3243
|
+
if (ABSL_PREDICT_TRUE(equal_to(key, slot_array() + seq.offset(i)))) {
|
|
3244
|
+
index = seq.offset(i);
|
|
3245
|
+
inserted = false;
|
|
3246
|
+
common().infoz().RecordInsertHit();
|
|
3247
|
+
return;
|
|
3248
|
+
}
|
|
3249
|
+
}
|
|
3250
|
+
auto mask_empty = g.MaskEmpty();
|
|
3251
|
+
if (ABSL_PREDICT_TRUE(mask_empty)) {
|
|
3252
|
+
size_t target_group_offset = seq.offset();
|
|
3253
|
+
index = SwisstableGenerationsEnabled()
|
|
3254
|
+
? PrepareInsertLargeGenerationsEnabled(
|
|
3255
|
+
common(), GetPolicyFunctions(), hash, mask_empty,
|
|
3256
|
+
FindInfo{target_group_offset, seq.index()},
|
|
3257
|
+
HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})
|
|
3258
|
+
: PrepareInsertLarge(
|
|
3259
|
+
common(), GetPolicyFunctions(), hash, mask_empty,
|
|
3260
|
+
FindInfo{target_group_offset, seq.index()});
|
|
3261
|
+
inserted = true;
|
|
3262
|
+
return;
|
|
3263
|
+
}
|
|
3264
|
+
seq.next();
|
|
3265
|
+
ABSL_SWISSTABLE_ASSERT(seq.index() <= capacity() && "full table!");
|
|
3284
3266
|
}
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
3267
|
+
}();
|
|
3268
|
+
return {iterator_at(index), inserted};
|
|
3269
|
+
}
|
|
3270
|
+
|
|
3271
|
+
template <class InputIt>
|
|
3272
|
+
void insert_range(InputIt first, InputIt last) {
|
|
3273
|
+
for (; first != last; ++first) emplace(*first);
|
|
3288
3274
|
}
|
|
3289
3275
|
|
|
3290
3276
|
protected:
|
|
@@ -3672,19 +3658,19 @@ struct HashtableFreeFunctionsAccess {
|
|
|
3672
3658
|
};
|
|
3673
3659
|
|
|
3674
3660
|
// Erases all elements that satisfy the predicate `pred` from the container `c`.
|
|
3675
|
-
template <typename P, typename
|
|
3676
|
-
typename raw_hash_set<P,
|
|
3677
|
-
Predicate& pred, raw_hash_set<P,
|
|
3661
|
+
template <typename P, typename... Params, typename Predicate>
|
|
3662
|
+
typename raw_hash_set<P, Params...>::size_type EraseIf(
|
|
3663
|
+
Predicate& pred, raw_hash_set<P, Params...>* c) {
|
|
3678
3664
|
return HashtableFreeFunctionsAccess::EraseIf(pred, c);
|
|
3679
3665
|
}
|
|
3680
3666
|
|
|
3681
3667
|
// Calls `cb` for all elements in the container `c`.
|
|
3682
|
-
template <typename P, typename
|
|
3683
|
-
void ForEach(Callback& cb, raw_hash_set<P,
|
|
3668
|
+
template <typename P, typename... Params, typename Callback>
|
|
3669
|
+
void ForEach(Callback& cb, raw_hash_set<P, Params...>* c) {
|
|
3684
3670
|
return HashtableFreeFunctionsAccess::ForEach(cb, c);
|
|
3685
3671
|
}
|
|
3686
|
-
template <typename P, typename
|
|
3687
|
-
void ForEach(Callback& cb, const raw_hash_set<P,
|
|
3672
|
+
template <typename P, typename... Params, typename Callback>
|
|
3673
|
+
void ForEach(Callback& cb, const raw_hash_set<P, Params...>* c) {
|
|
3688
3674
|
return HashtableFreeFunctionsAccess::ForEach(cb, c);
|
|
3689
3675
|
}
|
|
3690
3676
|
|
|
@@ -3757,6 +3743,14 @@ extern template size_t GrowSooTableToNextCapacityAndPrepareInsert<16, true>(
|
|
|
3757
3743
|
bool);
|
|
3758
3744
|
#endif
|
|
3759
3745
|
|
|
3746
|
+
extern template void* AllocateBackingArray<
|
|
3747
|
+
BackingArrayAlignment(alignof(size_t)), std::allocator<char>>(void* alloc,
|
|
3748
|
+
size_t n);
|
|
3749
|
+
extern template void DeallocateBackingArray<
|
|
3750
|
+
BackingArrayAlignment(alignof(size_t)), std::allocator<char>>(
|
|
3751
|
+
void* alloc, size_t capacity, ctrl_t* ctrl, size_t slot_size,
|
|
3752
|
+
size_t slot_align, bool had_infoz);
|
|
3753
|
+
|
|
3760
3754
|
} // namespace container_internal
|
|
3761
3755
|
ABSL_NAMESPACE_END
|
|
3762
3756
|
} // namespace absl
|
|
@@ -142,6 +142,10 @@ struct Policy {
|
|
|
142
142
|
using init_type = Tracked<int32_t>;
|
|
143
143
|
using key_type = int32_t;
|
|
144
144
|
|
|
145
|
+
using DefaultHash = void;
|
|
146
|
+
using DefaultEq = void;
|
|
147
|
+
using DefaultAlloc = void;
|
|
148
|
+
|
|
145
149
|
template <class allocator_type, class... Args>
|
|
146
150
|
static void construct(allocator_type* alloc, slot_type* slot,
|
|
147
151
|
Args&&... args) {
|
|
@@ -51,6 +51,10 @@ struct IntPolicy {
|
|
|
51
51
|
using key_type = int64_t;
|
|
52
52
|
using init_type = int64_t;
|
|
53
53
|
|
|
54
|
+
using DefaultHash = void;
|
|
55
|
+
using DefaultEq = void;
|
|
56
|
+
using DefaultAlloc = void;
|
|
57
|
+
|
|
54
58
|
static void construct(void*, int64_t* slot, int64_t v) { *slot = v; }
|
|
55
59
|
static void destroy(void*, int64_t*) {}
|
|
56
60
|
static void transfer(void*, int64_t* new_slot, int64_t* old_slot) {
|
|
@@ -97,6 +101,10 @@ class StringPolicy {
|
|
|
97
101
|
using key_type = std::string;
|
|
98
102
|
using init_type = std::pair<std::string, std::string>;
|
|
99
103
|
|
|
104
|
+
using DefaultHash = void;
|
|
105
|
+
using DefaultEq = void;
|
|
106
|
+
using DefaultAlloc = void;
|
|
107
|
+
|
|
100
108
|
template <class allocator_type, class... Args>
|
|
101
109
|
static void construct(allocator_type* alloc, slot_type* slot, Args... args) {
|
|
102
110
|
std::allocator_traits<allocator_type>::construct(
|
|
@@ -15,8 +15,14 @@
|
|
|
15
15
|
// Generates probe length statistics for many combinations of key types and key
|
|
16
16
|
// distributions, all using the default hash function for swisstable.
|
|
17
17
|
|
|
18
|
+
#include <algorithm>
|
|
19
|
+
#include <cstddef>
|
|
20
|
+
#include <cstdint>
|
|
21
|
+
#include <limits>
|
|
18
22
|
#include <memory>
|
|
19
23
|
#include <regex> // NOLINT
|
|
24
|
+
#include <string>
|
|
25
|
+
#include <utility>
|
|
20
26
|
#include <vector>
|
|
21
27
|
|
|
22
28
|
#include "absl/base/no_destructor.h"
|
|
@@ -52,6 +58,10 @@ struct Policy {
|
|
|
52
58
|
using key_type = T;
|
|
53
59
|
using init_type = T;
|
|
54
60
|
|
|
61
|
+
using DefaultHash = void;
|
|
62
|
+
using DefaultEq = void;
|
|
63
|
+
using DefaultAlloc = void;
|
|
64
|
+
|
|
55
65
|
template <class allocator_type, class Arg>
|
|
56
66
|
static void construct(allocator_type* alloc, slot_type* slot,
|
|
57
67
|
const Arg& arg) {
|
|
@@ -227,24 +237,6 @@ Ptr<Align>* MakePtr(uintptr_t v) {
|
|
|
227
237
|
return reinterpret_cast<Ptr<Align>*>(v);
|
|
228
238
|
}
|
|
229
239
|
|
|
230
|
-
struct IntIdentity {
|
|
231
|
-
uint64_t i;
|
|
232
|
-
friend bool operator==(IntIdentity a, IntIdentity b) { return a.i == b.i; }
|
|
233
|
-
IntIdentity operator++(int) { return IntIdentity{i++}; }
|
|
234
|
-
};
|
|
235
|
-
|
|
236
|
-
template <int Align>
|
|
237
|
-
struct PtrIdentity {
|
|
238
|
-
explicit PtrIdentity(uintptr_t val = PointerForAlignment<Align>()) : i(val) {}
|
|
239
|
-
uintptr_t i;
|
|
240
|
-
friend bool operator==(PtrIdentity a, PtrIdentity b) { return a.i == b.i; }
|
|
241
|
-
PtrIdentity operator++(int) {
|
|
242
|
-
PtrIdentity p(i);
|
|
243
|
-
i += Align;
|
|
244
|
-
return p;
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
|
|
248
240
|
enum class StringSize { kSmall, kMedium, kLarge, kExtraLarge };
|
|
249
241
|
constexpr char kStringFormat[] = "%s/name-%07d-of-9999999.txt";
|
|
250
242
|
|
|
@@ -270,20 +262,6 @@ struct String {
|
|
|
270
262
|
}
|
|
271
263
|
};
|
|
272
264
|
|
|
273
|
-
template <>
|
|
274
|
-
struct DefaultHash<IntIdentity> {
|
|
275
|
-
struct type {
|
|
276
|
-
size_t operator()(IntIdentity t) const { return t.i; }
|
|
277
|
-
};
|
|
278
|
-
};
|
|
279
|
-
|
|
280
|
-
template <int Align>
|
|
281
|
-
struct DefaultHash<PtrIdentity<Align>> {
|
|
282
|
-
struct type {
|
|
283
|
-
size_t operator()(PtrIdentity<Align> t) const { return t.i; }
|
|
284
|
-
};
|
|
285
|
-
};
|
|
286
|
-
|
|
287
265
|
template <class T>
|
|
288
266
|
struct Sequential {
|
|
289
267
|
T operator()() const { return current++; }
|
|
@@ -389,20 +367,6 @@ struct Random<Ptr<Align>*, Dist> {
|
|
|
389
367
|
}
|
|
390
368
|
};
|
|
391
369
|
|
|
392
|
-
template <class Dist>
|
|
393
|
-
struct Random<IntIdentity, Dist> {
|
|
394
|
-
IntIdentity operator()() const {
|
|
395
|
-
return IntIdentity{Random<uint64_t, Dist>{}()};
|
|
396
|
-
}
|
|
397
|
-
};
|
|
398
|
-
|
|
399
|
-
template <class Dist, int Align>
|
|
400
|
-
struct Random<PtrIdentity<Align>, Dist> {
|
|
401
|
-
PtrIdentity<Align> operator()() const {
|
|
402
|
-
return PtrIdentity<Align>{Random<uintptr_t, Dist>{}() * Align};
|
|
403
|
-
}
|
|
404
|
-
};
|
|
405
|
-
|
|
406
370
|
template <class Dist, StringSize size>
|
|
407
371
|
struct Random<String<size>, Dist> {
|
|
408
372
|
std::string operator()() const {
|
|
@@ -423,18 +387,12 @@ std::string Name();
|
|
|
423
387
|
|
|
424
388
|
std::string Name(uint32_t*) { return "u32"; }
|
|
425
389
|
std::string Name(uint64_t*) { return "u64"; }
|
|
426
|
-
std::string Name(IntIdentity*) { return "IntIdentity"; }
|
|
427
390
|
|
|
428
391
|
template <int Align>
|
|
429
392
|
std::string Name(Ptr<Align>**) {
|
|
430
393
|
return absl::StrCat("Ptr", Align);
|
|
431
394
|
}
|
|
432
395
|
|
|
433
|
-
template <int Align>
|
|
434
|
-
std::string Name(PtrIdentity<Align>*) {
|
|
435
|
-
return absl::StrCat("PtrIdentity", Align);
|
|
436
|
-
}
|
|
437
|
-
|
|
438
396
|
template <StringSize size>
|
|
439
397
|
std::string Name(String<size>*) {
|
|
440
398
|
switch (size) {
|
|
@@ -558,15 +516,10 @@ int main(int argc, char** argv) {
|
|
|
558
516
|
|
|
559
517
|
std::vector<Result> results;
|
|
560
518
|
RunForType<uint64_t>(results);
|
|
561
|
-
RunForType<IntIdentity>(results);
|
|
562
519
|
RunForType<Ptr<8>*>(results);
|
|
563
520
|
RunForType<Ptr<16>*>(results);
|
|
564
521
|
RunForType<Ptr<32>*>(results);
|
|
565
522
|
RunForType<Ptr<64>*>(results);
|
|
566
|
-
RunForType<PtrIdentity<8>>(results);
|
|
567
|
-
RunForType<PtrIdentity<16>>(results);
|
|
568
|
-
RunForType<PtrIdentity<32>>(results);
|
|
569
|
-
RunForType<PtrIdentity<64>>(results);
|
|
570
523
|
RunForType<std::pair<uint32_t, uint32_t>>(results);
|
|
571
524
|
RunForType<String<StringSize::kSmall>>(results);
|
|
572
525
|
RunForType<String<StringSize::kMedium>>(results);
|
|
@@ -603,9 +556,11 @@ int main(int argc, char** argv) {
|
|
|
603
556
|
// Check the regex again. We might had have enabled only one of the
|
|
604
557
|
// stats for the benchmark.
|
|
605
558
|
if (!CanRunBenchmark(name)) return;
|
|
559
|
+
// Report at least 1, because benchy drops results with zero.
|
|
560
|
+
double reported_value = std::max(1e9 * result.ratios.*val, 1.0);
|
|
606
561
|
absl::PrintF(" %s{\n", comma);
|
|
607
|
-
absl::PrintF(" \"cpu_time\": %f,\n",
|
|
608
|
-
absl::PrintF(" \"real_time\": %f,\n",
|
|
562
|
+
absl::PrintF(" \"cpu_time\": %f,\n", reported_value);
|
|
563
|
+
absl::PrintF(" \"real_time\": %f,\n", reported_value);
|
|
609
564
|
absl::PrintF(" \"iterations\": 1,\n");
|
|
610
565
|
absl::PrintF(" \"name\": \"%s\",\n", name);
|
|
611
566
|
absl::PrintF(" \"time_unit\": \"ns\"\n");
|