re2 1.22.2 → 1.23.0
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 +60 -4
- package/binding.gyp +5 -1
- package/lib/addon.cc +4 -0
- package/lib/new.cc +1 -246
- package/lib/pattern.cc +252 -0
- package/lib/pattern.h +10 -0
- package/lib/set.cc +777 -0
- package/lib/wrapped_re2_set.h +42 -0
- package/package.json +21 -9
- package/re2.d.ts +46 -9
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
- package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
- package/vendor/abseil-cpp/CMake/README.md +2 -2
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/MODULE.bazel +6 -9
- package/vendor/abseil-cpp/README.md +6 -8
- package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
- package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
- package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
- package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
- package/vendor/abseil-cpp/absl/base/config.h +22 -129
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
- package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
- package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
- package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
- package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
- package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
- package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
- package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
- package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
- package/vendor/abseil-cpp/absl/base/options.h +3 -80
- package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
- package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
- package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
- package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
- package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
- package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
- package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
- package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
- package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
- package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
- package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
- package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
- package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
- package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
- package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
- package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
- package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
- package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
- package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
- package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
- package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
- package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
- package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
- package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
- package/vendor/abseil-cpp/absl/log/check.h +2 -1
- package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
- package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
- package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
- package/vendor/abseil-cpp/absl/log/globals.h +4 -5
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
- package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
- package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
- package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
- package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
- package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
- package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
- package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
- package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
- package/vendor/abseil-cpp/absl/log/log.h +48 -35
- package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
- package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
- package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
- package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
- package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
- package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
- package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
- package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
- package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
- package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
- package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
- package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
- package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
- package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
- package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
- package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
- package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
- package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
- package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
- package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
- package/vendor/abseil-cpp/absl/random/random.h +88 -53
- package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
- package/vendor/abseil-cpp/absl/status/status.cc +4 -8
- package/vendor/abseil-cpp/absl/status/status.h +8 -8
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
- package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
- package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
- package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
- package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
- package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
- package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
- package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
- package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
- package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
- package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
- package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
- package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
- package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
- package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
- package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
- package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
- package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
- package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
- package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
- package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
- package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
- package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
- package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
- package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
- package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
- package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
- package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
- package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
- package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
- package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
- package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
- package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
- package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
- package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
- package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
- package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
- package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
- package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
- package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
- package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
- package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
- package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
- package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
- package/vendor/abseil-cpp/absl/time/time.h +24 -18
- package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
- package/vendor/abseil-cpp/absl/types/any.h +9 -484
- package/vendor/abseil-cpp/absl/types/optional.h +7 -747
- package/vendor/abseil-cpp/absl/types/span.h +46 -19
- package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
- package/vendor/abseil-cpp/absl/types/variant.h +5 -784
- package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
- package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
- package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
- package/vendor/re2/.bazelrc +4 -4
- package/vendor/re2/.bcr/metadata.template.json +16 -0
- package/vendor/re2/.bcr/presubmit.yml +57 -0
- package/vendor/re2/.bcr/source.template.json +5 -0
- package/vendor/re2/.github/bazel.sh +1 -7
- package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
- package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
- package/vendor/re2/.github/workflows/ci.yml +5 -6
- package/vendor/re2/.github/workflows/pages.yml +3 -3
- package/vendor/re2/.github/workflows/python.yml +29 -24
- package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
- package/vendor/re2/.github/workflows/release.yml +15 -4
- package/vendor/re2/BUILD.bazel +25 -0
- package/vendor/re2/CMakeLists.txt +100 -85
- package/vendor/re2/CONTRIBUTING.md +0 -1
- package/vendor/re2/MODULE.bazel +10 -10
- package/vendor/re2/Makefile +1 -1
- package/vendor/re2/README.md +259 -0
- package/vendor/re2/python/BUILD.bazel +8 -0
- package/vendor/re2/python/re2.py +1 -1
- package/vendor/re2/python/re2_test.py +6 -0
- package/vendor/re2/python/setup.py +3 -3
- package/vendor/re2/re2/bitmap256.cc +3 -4
- package/vendor/re2/re2/bitstate.cc +15 -10
- package/vendor/re2/re2/dfa.cc +1 -2
- package/vendor/re2/re2/parse.cc +3 -4
- package/vendor/re2/re2/prog.cc +1 -2
- package/vendor/re2/re2/prog.h +1 -0
- package/vendor/re2/re2/re2.cc +5 -0
- package/vendor/re2/re2/re2.h +9 -9
- package/vendor/re2/re2/set.cc +6 -0
- package/vendor/re2/re2/set.h +5 -0
- package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
- package/vendor/re2/re2/testing/re2_test.cc +8 -0
- package/vendor/re2/re2/testing/set_test.cc +5 -0
- package/vendor/re2/re2/walker-inl.h +1 -1
- package/vendor/abseil-cpp/WORKSPACE +0 -76
- package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
- package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
- package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
- package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
- package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
- package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
- package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
- package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
- package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
- package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
- package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
- package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
- package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
- package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
- package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
- package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
- package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
- package/vendor/re2/.github/workflows/pr.yml +0 -34
- package/vendor/re2/README +0 -47
|
@@ -0,0 +1,259 @@
|
|
|
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
|
+
#include "absl/container/internal/hashtable_control_bytes.h"
|
|
16
|
+
|
|
17
|
+
#include <array>
|
|
18
|
+
#include <cstddef>
|
|
19
|
+
#include <cstdint>
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
#include "gmock/gmock.h"
|
|
23
|
+
#include "gtest/gtest.h"
|
|
24
|
+
#include "absl/base/config.h"
|
|
25
|
+
|
|
26
|
+
namespace absl {
|
|
27
|
+
ABSL_NAMESPACE_BEGIN
|
|
28
|
+
namespace container_internal {
|
|
29
|
+
namespace {
|
|
30
|
+
|
|
31
|
+
using ::testing::ElementsAre;
|
|
32
|
+
using ::testing::ElementsAreArray;
|
|
33
|
+
|
|
34
|
+
// Convenience function to static cast to ctrl_t.
|
|
35
|
+
ctrl_t CtrlT(int i) { return static_cast<ctrl_t>(i); }
|
|
36
|
+
|
|
37
|
+
TEST(BitMask, Smoke) {
|
|
38
|
+
EXPECT_FALSE((BitMask<uint8_t, 8>(0)));
|
|
39
|
+
EXPECT_TRUE((BitMask<uint8_t, 8>(5)));
|
|
40
|
+
|
|
41
|
+
EXPECT_THAT((BitMask<uint8_t, 8>(0)), ElementsAre());
|
|
42
|
+
EXPECT_THAT((BitMask<uint8_t, 8>(0x1)), ElementsAre(0));
|
|
43
|
+
EXPECT_THAT((BitMask<uint8_t, 8>(0x2)), ElementsAre(1));
|
|
44
|
+
EXPECT_THAT((BitMask<uint8_t, 8>(0x3)), ElementsAre(0, 1));
|
|
45
|
+
EXPECT_THAT((BitMask<uint8_t, 8>(0x4)), ElementsAre(2));
|
|
46
|
+
EXPECT_THAT((BitMask<uint8_t, 8>(0x5)), ElementsAre(0, 2));
|
|
47
|
+
EXPECT_THAT((BitMask<uint8_t, 8>(0x55)), ElementsAre(0, 2, 4, 6));
|
|
48
|
+
EXPECT_THAT((BitMask<uint8_t, 8>(0xAA)), ElementsAre(1, 3, 5, 7));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
TEST(BitMask, WithShift_MatchPortable) {
|
|
52
|
+
// See the non-SSE version of Group for details on what this math is for.
|
|
53
|
+
uint64_t ctrl = 0x1716151413121110;
|
|
54
|
+
uint64_t hash = 0x12;
|
|
55
|
+
constexpr uint64_t lsbs = 0x0101010101010101ULL;
|
|
56
|
+
auto x = ctrl ^ (lsbs * hash);
|
|
57
|
+
uint64_t mask = (x - lsbs) & ~x & kMsbs8Bytes;
|
|
58
|
+
EXPECT_EQ(0x0000000080800000, mask);
|
|
59
|
+
|
|
60
|
+
BitMask<uint64_t, 8, 3> b(mask);
|
|
61
|
+
EXPECT_EQ(*b, 2);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
constexpr uint64_t kSome8BytesMask = /* */ 0x8000808080008000ULL;
|
|
65
|
+
constexpr uint64_t kSome8BytesMaskAllOnes = 0xff00ffffff00ff00ULL;
|
|
66
|
+
constexpr auto kSome8BytesMaskBits = std::array<int, 5>{1, 3, 4, 5, 7};
|
|
67
|
+
|
|
68
|
+
TEST(BitMask, WithShift_FullMask) {
|
|
69
|
+
EXPECT_THAT((BitMask<uint64_t, 8, 3>(kMsbs8Bytes)),
|
|
70
|
+
ElementsAre(0, 1, 2, 3, 4, 5, 6, 7));
|
|
71
|
+
EXPECT_THAT(
|
|
72
|
+
(BitMask<uint64_t, 8, 3, /*NullifyBitsOnIteration=*/true>(kMsbs8Bytes)),
|
|
73
|
+
ElementsAre(0, 1, 2, 3, 4, 5, 6, 7));
|
|
74
|
+
EXPECT_THAT(
|
|
75
|
+
(BitMask<uint64_t, 8, 3, /*NullifyBitsOnIteration=*/true>(~uint64_t{0})),
|
|
76
|
+
ElementsAre(0, 1, 2, 3, 4, 5, 6, 7));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
TEST(BitMask, WithShift_EmptyMask) {
|
|
80
|
+
EXPECT_THAT((BitMask<uint64_t, 8, 3>(0)), ElementsAre());
|
|
81
|
+
EXPECT_THAT((BitMask<uint64_t, 8, 3, /*NullifyBitsOnIteration=*/true>(0)),
|
|
82
|
+
ElementsAre());
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
TEST(BitMask, WithShift_SomeMask) {
|
|
86
|
+
EXPECT_THAT((BitMask<uint64_t, 8, 3>(kSome8BytesMask)),
|
|
87
|
+
ElementsAreArray(kSome8BytesMaskBits));
|
|
88
|
+
EXPECT_THAT((BitMask<uint64_t, 8, 3, /*NullifyBitsOnIteration=*/true>(
|
|
89
|
+
kSome8BytesMask)),
|
|
90
|
+
ElementsAreArray(kSome8BytesMaskBits));
|
|
91
|
+
EXPECT_THAT((BitMask<uint64_t, 8, 3, /*NullifyBitsOnIteration=*/true>(
|
|
92
|
+
kSome8BytesMaskAllOnes)),
|
|
93
|
+
ElementsAreArray(kSome8BytesMaskBits));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
TEST(BitMask, WithShift_SomeMaskExtraBitsForNullify) {
|
|
97
|
+
// Verify that adding extra bits into non zero bytes is fine.
|
|
98
|
+
uint64_t extra_bits = 77;
|
|
99
|
+
for (int i = 0; i < 100; ++i) {
|
|
100
|
+
// Add extra bits, but keep zero bytes untouched.
|
|
101
|
+
uint64_t extra_mask = extra_bits & kSome8BytesMaskAllOnes;
|
|
102
|
+
EXPECT_THAT((BitMask<uint64_t, 8, 3, /*NullifyBitsOnIteration=*/true>(
|
|
103
|
+
kSome8BytesMask | extra_mask)),
|
|
104
|
+
ElementsAreArray(kSome8BytesMaskBits))
|
|
105
|
+
<< i << " " << extra_mask;
|
|
106
|
+
extra_bits = (extra_bits + 1) * 3;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
TEST(BitMask, LeadingTrailing) {
|
|
111
|
+
EXPECT_EQ((BitMask<uint32_t, 16>(0x00001a40).LeadingZeros()), 3);
|
|
112
|
+
EXPECT_EQ((BitMask<uint32_t, 16>(0x00001a40).TrailingZeros()), 6);
|
|
113
|
+
|
|
114
|
+
EXPECT_EQ((BitMask<uint32_t, 16>(0x00000001).LeadingZeros()), 15);
|
|
115
|
+
EXPECT_EQ((BitMask<uint32_t, 16>(0x00000001).TrailingZeros()), 0);
|
|
116
|
+
|
|
117
|
+
EXPECT_EQ((BitMask<uint32_t, 16>(0x00008000).LeadingZeros()), 0);
|
|
118
|
+
EXPECT_EQ((BitMask<uint32_t, 16>(0x00008000).TrailingZeros()), 15);
|
|
119
|
+
|
|
120
|
+
EXPECT_EQ((BitMask<uint64_t, 8, 3>(0x0000008080808000).LeadingZeros()), 3);
|
|
121
|
+
EXPECT_EQ((BitMask<uint64_t, 8, 3>(0x0000008080808000).TrailingZeros()), 1);
|
|
122
|
+
|
|
123
|
+
EXPECT_EQ((BitMask<uint64_t, 8, 3>(0x0000000000000080).LeadingZeros()), 7);
|
|
124
|
+
EXPECT_EQ((BitMask<uint64_t, 8, 3>(0x0000000000000080).TrailingZeros()), 0);
|
|
125
|
+
|
|
126
|
+
EXPECT_EQ((BitMask<uint64_t, 8, 3>(0x8000000000000000).LeadingZeros()), 0);
|
|
127
|
+
EXPECT_EQ((BitMask<uint64_t, 8, 3>(0x8000000000000000).TrailingZeros()), 7);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
template <class GroupTypeParam>
|
|
131
|
+
class GroupTest : public testing::Test {};
|
|
132
|
+
using GroupTypes =
|
|
133
|
+
::testing::Types<Group, GroupPortableImpl, GroupFullEmptyOrDeleted>;
|
|
134
|
+
TYPED_TEST_SUITE(GroupTest, GroupTypes);
|
|
135
|
+
|
|
136
|
+
TYPED_TEST(GroupTest, Match) {
|
|
137
|
+
using GroupType = TypeParam;
|
|
138
|
+
if (GroupType::kWidth == 16) {
|
|
139
|
+
ctrl_t group[] = {ctrl_t::kEmpty, CtrlT(1), ctrl_t::kDeleted, CtrlT(3),
|
|
140
|
+
ctrl_t::kEmpty, CtrlT(5), ctrl_t::kSentinel, CtrlT(7),
|
|
141
|
+
CtrlT(7), CtrlT(5), CtrlT(3), CtrlT(1),
|
|
142
|
+
CtrlT(1), CtrlT(1), CtrlT(1), CtrlT(1)};
|
|
143
|
+
EXPECT_THAT(GroupType{group}.Match(0), ElementsAre());
|
|
144
|
+
EXPECT_THAT(GroupType{group}.Match(1), ElementsAre(1, 11, 12, 13, 14, 15));
|
|
145
|
+
EXPECT_THAT(GroupType{group}.Match(3), ElementsAre(3, 10));
|
|
146
|
+
EXPECT_THAT(GroupType{group}.Match(5), ElementsAre(5, 9));
|
|
147
|
+
EXPECT_THAT(GroupType{group}.Match(7), ElementsAre(7, 8));
|
|
148
|
+
} else if (GroupType::kWidth == 8) {
|
|
149
|
+
ctrl_t group[] = {ctrl_t::kEmpty, CtrlT(1), CtrlT(2),
|
|
150
|
+
ctrl_t::kDeleted, CtrlT(2), CtrlT(1),
|
|
151
|
+
ctrl_t::kSentinel, CtrlT(1)};
|
|
152
|
+
EXPECT_THAT(GroupType{group}.Match(0), ElementsAre());
|
|
153
|
+
EXPECT_THAT(GroupType{group}.Match(1), ElementsAre(1, 5, 7));
|
|
154
|
+
EXPECT_THAT(GroupType{group}.Match(2), ElementsAre(2, 4));
|
|
155
|
+
} else {
|
|
156
|
+
FAIL() << "No test coverage for Group::kWidth==" << GroupType::kWidth;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
TYPED_TEST(GroupTest, MaskEmpty) {
|
|
161
|
+
using GroupType = TypeParam;
|
|
162
|
+
if (GroupType::kWidth == 16) {
|
|
163
|
+
ctrl_t group[] = {ctrl_t::kEmpty, CtrlT(1), ctrl_t::kDeleted, CtrlT(3),
|
|
164
|
+
ctrl_t::kEmpty, CtrlT(5), ctrl_t::kSentinel, CtrlT(7),
|
|
165
|
+
CtrlT(7), CtrlT(5), CtrlT(3), CtrlT(1),
|
|
166
|
+
CtrlT(1), CtrlT(1), CtrlT(1), CtrlT(1)};
|
|
167
|
+
EXPECT_THAT(GroupType{group}.MaskEmpty().LowestBitSet(), 0);
|
|
168
|
+
} else if (GroupType::kWidth == 8) {
|
|
169
|
+
ctrl_t group[] = {ctrl_t::kEmpty, CtrlT(1), CtrlT(2),
|
|
170
|
+
ctrl_t::kDeleted, CtrlT(2), CtrlT(1),
|
|
171
|
+
ctrl_t::kSentinel, CtrlT(1)};
|
|
172
|
+
EXPECT_THAT(GroupType{group}.MaskEmpty().LowestBitSet(), 0);
|
|
173
|
+
} else {
|
|
174
|
+
FAIL() << "No test coverage for Group::kWidth==" << GroupType::kWidth;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
TYPED_TEST(GroupTest, MaskFull) {
|
|
179
|
+
using GroupType = TypeParam;
|
|
180
|
+
if (GroupType::kWidth == 16) {
|
|
181
|
+
ctrl_t group[] = {
|
|
182
|
+
ctrl_t::kEmpty, CtrlT(1), ctrl_t::kDeleted, CtrlT(3),
|
|
183
|
+
ctrl_t::kEmpty, CtrlT(5), ctrl_t::kSentinel, CtrlT(7),
|
|
184
|
+
CtrlT(7), CtrlT(5), ctrl_t::kDeleted, CtrlT(1),
|
|
185
|
+
CtrlT(1), ctrl_t::kSentinel, ctrl_t::kEmpty, CtrlT(1)};
|
|
186
|
+
EXPECT_THAT(GroupType{group}.MaskFull(),
|
|
187
|
+
ElementsAre(1, 3, 5, 7, 8, 9, 11, 12, 15));
|
|
188
|
+
} else if (GroupType::kWidth == 8) {
|
|
189
|
+
ctrl_t group[] = {ctrl_t::kEmpty, CtrlT(1), ctrl_t::kEmpty,
|
|
190
|
+
ctrl_t::kDeleted, CtrlT(2), ctrl_t::kSentinel,
|
|
191
|
+
ctrl_t::kSentinel, CtrlT(1)};
|
|
192
|
+
EXPECT_THAT(GroupType{group}.MaskFull(), ElementsAre(1, 4, 7));
|
|
193
|
+
} else {
|
|
194
|
+
FAIL() << "No test coverage for Group::kWidth==" << GroupType::kWidth;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
TYPED_TEST(GroupTest, MaskNonFull) {
|
|
199
|
+
using GroupType = TypeParam;
|
|
200
|
+
if (GroupType::kWidth == 16) {
|
|
201
|
+
ctrl_t group[] = {
|
|
202
|
+
ctrl_t::kEmpty, CtrlT(1), ctrl_t::kDeleted, CtrlT(3),
|
|
203
|
+
ctrl_t::kEmpty, CtrlT(5), ctrl_t::kSentinel, CtrlT(7),
|
|
204
|
+
CtrlT(7), CtrlT(5), ctrl_t::kDeleted, CtrlT(1),
|
|
205
|
+
CtrlT(1), ctrl_t::kSentinel, ctrl_t::kEmpty, CtrlT(1)};
|
|
206
|
+
EXPECT_THAT(GroupType{group}.MaskNonFull(),
|
|
207
|
+
ElementsAre(0, 2, 4, 6, 10, 13, 14));
|
|
208
|
+
} else if (GroupType::kWidth == 8) {
|
|
209
|
+
ctrl_t group[] = {ctrl_t::kEmpty, CtrlT(1), ctrl_t::kEmpty,
|
|
210
|
+
ctrl_t::kDeleted, CtrlT(2), ctrl_t::kSentinel,
|
|
211
|
+
ctrl_t::kSentinel, CtrlT(1)};
|
|
212
|
+
EXPECT_THAT(GroupType{group}.MaskNonFull(), ElementsAre(0, 2, 3, 5, 6));
|
|
213
|
+
} else {
|
|
214
|
+
FAIL() << "No test coverage for Group::kWidth==" << GroupType::kWidth;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
TYPED_TEST(GroupTest, MaskEmptyOrDeleted) {
|
|
219
|
+
using GroupType = TypeParam;
|
|
220
|
+
if (GroupType::kWidth == 16) {
|
|
221
|
+
ctrl_t group[] = {ctrl_t::kEmpty, CtrlT(1), ctrl_t::kEmpty, CtrlT(3),
|
|
222
|
+
ctrl_t::kDeleted, CtrlT(5), ctrl_t::kSentinel, CtrlT(7),
|
|
223
|
+
CtrlT(7), CtrlT(5), CtrlT(3), CtrlT(1),
|
|
224
|
+
CtrlT(1), CtrlT(1), CtrlT(1), CtrlT(1)};
|
|
225
|
+
EXPECT_THAT(GroupType{group}.MaskEmptyOrDeleted().LowestBitSet(), 0);
|
|
226
|
+
} else if (GroupType::kWidth == 8) {
|
|
227
|
+
ctrl_t group[] = {ctrl_t::kEmpty, CtrlT(1), CtrlT(2),
|
|
228
|
+
ctrl_t::kDeleted, CtrlT(2), CtrlT(1),
|
|
229
|
+
ctrl_t::kSentinel, CtrlT(1)};
|
|
230
|
+
EXPECT_THAT(GroupType{group}.MaskEmptyOrDeleted().LowestBitSet(), 0);
|
|
231
|
+
} else {
|
|
232
|
+
FAIL() << "No test coverage for Group::kWidth==" << GroupType::kWidth;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
TYPED_TEST(GroupTest, MaskFullOrSentinel) {
|
|
237
|
+
using GroupType = TypeParam;
|
|
238
|
+
if (GroupType::kWidth == 16) {
|
|
239
|
+
ctrl_t group[] = {
|
|
240
|
+
ctrl_t::kEmpty, ctrl_t::kDeleted, ctrl_t::kEmpty, CtrlT(3),
|
|
241
|
+
ctrl_t::kDeleted, CtrlT(5), ctrl_t::kSentinel, ctrl_t::kEmpty,
|
|
242
|
+
ctrl_t::kEmpty, ctrl_t::kDeleted, ctrl_t::kDeleted, ctrl_t::kDeleted,
|
|
243
|
+
ctrl_t::kEmpty, ctrl_t::kDeleted, ctrl_t::kDeleted, ctrl_t::kDeleted,
|
|
244
|
+
};
|
|
245
|
+
EXPECT_THAT(GroupType{group}.MaskFullOrSentinel().LowestBitSet(), 3);
|
|
246
|
+
} else if (GroupType::kWidth == 8) {
|
|
247
|
+
ctrl_t group[] = {ctrl_t::kEmpty, ctrl_t::kDeleted, CtrlT(2),
|
|
248
|
+
ctrl_t::kDeleted, CtrlT(2), ctrl_t::kSentinel,
|
|
249
|
+
ctrl_t::kDeleted, ctrl_t::kEmpty};
|
|
250
|
+
EXPECT_THAT(GroupType{group}.MaskFullOrSentinel().LowestBitSet(), 2);
|
|
251
|
+
} else {
|
|
252
|
+
FAIL() << "No test coverage for Group::kWidth==" << GroupType::kWidth;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
} // namespace
|
|
257
|
+
} // namespace container_internal
|
|
258
|
+
ABSL_NAMESPACE_END
|
|
259
|
+
} // namespace absl
|
|
@@ -42,10 +42,6 @@ namespace absl {
|
|
|
42
42
|
ABSL_NAMESPACE_BEGIN
|
|
43
43
|
namespace container_internal {
|
|
44
44
|
|
|
45
|
-
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
|
46
|
-
constexpr int HashtablezInfo::kMaxStackDepth;
|
|
47
|
-
#endif
|
|
48
|
-
|
|
49
45
|
namespace {
|
|
50
46
|
ABSL_CONST_INIT std::atomic<bool> g_hashtablez_enabled{
|
|
51
47
|
false
|
|
@@ -98,8 +94,9 @@ void HashtablezInfo::PrepareForSampling(int64_t stride,
|
|
|
98
94
|
// The inliner makes hardcoded skip_count difficult (especially when combined
|
|
99
95
|
// with LTO). We use the ability to exclude stacks by regex when encoding
|
|
100
96
|
// instead.
|
|
101
|
-
depth =
|
|
102
|
-
|
|
97
|
+
depth = static_cast<unsigned>(
|
|
98
|
+
absl::GetStackTrace(stack, HashtablezInfo::kMaxStackDepth,
|
|
99
|
+
/* skip_count= */ 0));
|
|
103
100
|
inline_element_size = inline_element_size_value;
|
|
104
101
|
key_size = key_size_value;
|
|
105
102
|
value_size = value_size_value;
|
|
@@ -126,6 +123,26 @@ static bool ShouldForceSampling() {
|
|
|
126
123
|
return state == kForce;
|
|
127
124
|
}
|
|
128
125
|
|
|
126
|
+
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
|
127
|
+
HashtablezInfoHandle ForcedTrySample(size_t inline_element_size,
|
|
128
|
+
size_t key_size, size_t value_size,
|
|
129
|
+
uint16_t soo_capacity) {
|
|
130
|
+
return HashtablezInfoHandle(SampleSlow(global_next_sample,
|
|
131
|
+
inline_element_size, key_size,
|
|
132
|
+
value_size, soo_capacity));
|
|
133
|
+
}
|
|
134
|
+
void TestOnlyRefreshSamplingStateForCurrentThread() {
|
|
135
|
+
global_next_sample.next_sample =
|
|
136
|
+
g_hashtablez_sample_parameter.load(std::memory_order_relaxed);
|
|
137
|
+
global_next_sample.sample_stride = global_next_sample.next_sample;
|
|
138
|
+
}
|
|
139
|
+
#else
|
|
140
|
+
HashtablezInfoHandle ForcedTrySample(size_t, size_t, size_t, uint16_t) {
|
|
141
|
+
return HashtablezInfoHandle{nullptr};
|
|
142
|
+
}
|
|
143
|
+
void TestOnlyRefreshSamplingStateForCurrentThread() {}
|
|
144
|
+
#endif // ABSL_INTERNAL_HASHTABLEZ_SAMPLE
|
|
145
|
+
|
|
129
146
|
HashtablezInfo* SampleSlow(SamplingState& next_sample,
|
|
130
147
|
size_t inline_element_size, size_t key_size,
|
|
131
148
|
size_t value_size, uint16_t soo_capacity) {
|
|
@@ -97,7 +97,7 @@ struct HashtablezInfo : public profiling_internal::Sample<HashtablezInfo> {
|
|
|
97
97
|
// the lock.
|
|
98
98
|
static constexpr int kMaxStackDepth = 64;
|
|
99
99
|
absl::Time create_time;
|
|
100
|
-
|
|
100
|
+
uint32_t depth;
|
|
101
101
|
// The SOO capacity for this table in elements (not bytes). Note that sampled
|
|
102
102
|
// tables are never SOO because we need to store the infoz handle on the heap.
|
|
103
103
|
// Tables that would be SOO if not sampled should have: soo_capacity > 0 &&
|
|
@@ -219,22 +219,41 @@ class HashtablezInfoHandle {
|
|
|
219
219
|
extern ABSL_PER_THREAD_TLS_KEYWORD SamplingState global_next_sample;
|
|
220
220
|
#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
|
221
221
|
|
|
222
|
-
// Returns
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
ABSL_ATTRIBUTE_UNUSED uint16_t soo_capacity) {
|
|
222
|
+
// Returns true if the next table should be sampled.
|
|
223
|
+
// This function updates the global state.
|
|
224
|
+
// If the function returns true, actual sampling should be done by calling
|
|
225
|
+
// ForcedTrySample().
|
|
226
|
+
inline bool ShouldSampleNextTable() {
|
|
228
227
|
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
|
229
228
|
if (ABSL_PREDICT_TRUE(--global_next_sample.next_sample > 0)) {
|
|
230
|
-
return
|
|
229
|
+
return false;
|
|
231
230
|
}
|
|
232
|
-
return
|
|
233
|
-
inline_element_size, key_size,
|
|
234
|
-
value_size, soo_capacity));
|
|
231
|
+
return true;
|
|
235
232
|
#else
|
|
236
|
-
return
|
|
237
|
-
#endif //
|
|
233
|
+
return false;
|
|
234
|
+
#endif // ABSL_INTERNAL_HASHTABLEZ_SAMPLE
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Returns a sampling handle.
|
|
238
|
+
// Must be called only if HashSetShouldBeSampled() returned true.
|
|
239
|
+
// Returned handle still can be unsampled if sampling is not possible.
|
|
240
|
+
HashtablezInfoHandle ForcedTrySample(size_t inline_element_size,
|
|
241
|
+
size_t key_size, size_t value_size,
|
|
242
|
+
uint16_t soo_capacity);
|
|
243
|
+
|
|
244
|
+
// In case sampling needs to be disabled and re-enabled in tests, this function
|
|
245
|
+
// can be used to reset the sampling state for the current thread.
|
|
246
|
+
// It is useful to avoid sampling attempts and sampling delays in tests.
|
|
247
|
+
void TestOnlyRefreshSamplingStateForCurrentThread();
|
|
248
|
+
|
|
249
|
+
// Returns a sampling handle.
|
|
250
|
+
inline HashtablezInfoHandle Sample(size_t inline_element_size, size_t key_size,
|
|
251
|
+
size_t value_size, uint16_t soo_capacity) {
|
|
252
|
+
if (ABSL_PREDICT_TRUE(!ShouldSampleNextTable())) {
|
|
253
|
+
return HashtablezInfoHandle(nullptr);
|
|
254
|
+
}
|
|
255
|
+
return ForcedTrySample(inline_element_size, key_size, value_size,
|
|
256
|
+
soo_capacity);
|
|
238
257
|
}
|
|
239
258
|
|
|
240
259
|
using HashtablezSampler =
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
#include "absl/base/attributes.h"
|
|
28
28
|
#include "absl/base/config.h"
|
|
29
29
|
#include "absl/profiling/internal/sample_recorder.h"
|
|
30
|
+
#include "absl/random/random.h"
|
|
30
31
|
#include "absl/synchronization/blocking_counter.h"
|
|
31
32
|
#include "absl/synchronization/internal/thread_pool.h"
|
|
32
33
|
#include "absl/synchronization/mutex.h"
|
|
@@ -89,7 +90,7 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
|
|
|
89
90
|
const size_t test_value_size = 13;
|
|
90
91
|
|
|
91
92
|
HashtablezInfo info;
|
|
92
|
-
absl::MutexLock l(
|
|
93
|
+
absl::MutexLock l(info.init_mu);
|
|
93
94
|
info.PrepareForSampling(test_stride, test_element_size,
|
|
94
95
|
/*key_size=*/test_key_size,
|
|
95
96
|
/*value_size=*/test_value_size,
|
|
@@ -147,7 +148,7 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
|
|
|
147
148
|
|
|
148
149
|
TEST(HashtablezInfoTest, RecordStorageChanged) {
|
|
149
150
|
HashtablezInfo info;
|
|
150
|
-
absl::MutexLock l(
|
|
151
|
+
absl::MutexLock l(info.init_mu);
|
|
151
152
|
const int64_t test_stride = 21;
|
|
152
153
|
const size_t test_element_size = 19;
|
|
153
154
|
const size_t test_key_size = 17;
|
|
@@ -167,7 +168,7 @@ TEST(HashtablezInfoTest, RecordStorageChanged) {
|
|
|
167
168
|
|
|
168
169
|
TEST(HashtablezInfoTest, RecordInsert) {
|
|
169
170
|
HashtablezInfo info;
|
|
170
|
-
absl::MutexLock l(
|
|
171
|
+
absl::MutexLock l(info.init_mu);
|
|
171
172
|
const int64_t test_stride = 25;
|
|
172
173
|
const size_t test_element_size = 23;
|
|
173
174
|
const size_t test_key_size = 21;
|
|
@@ -202,7 +203,7 @@ TEST(HashtablezInfoTest, RecordErase) {
|
|
|
202
203
|
const size_t test_value_size = 25;
|
|
203
204
|
|
|
204
205
|
HashtablezInfo info;
|
|
205
|
-
absl::MutexLock l(
|
|
206
|
+
absl::MutexLock l(info.init_mu);
|
|
206
207
|
info.PrepareForSampling(test_stride, test_element_size,
|
|
207
208
|
/*key_size=*/test_key_size,
|
|
208
209
|
/*value_size=*/test_value_size,
|
|
@@ -226,7 +227,7 @@ TEST(HashtablezInfoTest, RecordRehash) {
|
|
|
226
227
|
const size_t test_key_size = 29;
|
|
227
228
|
const size_t test_value_size = 27;
|
|
228
229
|
HashtablezInfo info;
|
|
229
|
-
absl::MutexLock l(
|
|
230
|
+
absl::MutexLock l(info.init_mu);
|
|
230
231
|
info.PrepareForSampling(test_stride, test_element_size,
|
|
231
232
|
/*key_size=*/test_key_size,
|
|
232
233
|
/*value_size=*/test_value_size,
|
|
@@ -258,7 +259,7 @@ TEST(HashtablezInfoTest, RecordRehash) {
|
|
|
258
259
|
|
|
259
260
|
TEST(HashtablezInfoTest, RecordReservation) {
|
|
260
261
|
HashtablezInfo info;
|
|
261
|
-
absl::MutexLock l(
|
|
262
|
+
absl::MutexLock l(info.init_mu);
|
|
262
263
|
const int64_t test_stride = 35;
|
|
263
264
|
const size_t test_element_size = 33;
|
|
264
265
|
const size_t test_key_size = 31;
|
|
@@ -439,8 +440,7 @@ TEST(HashtablezSamplerTest, MultiThreaded) {
|
|
|
439
440
|
const size_t value_size = 13 + i % 5;
|
|
440
441
|
pool.Schedule([&sampler, &stop, sampling_stride, elt_size, key_size,
|
|
441
442
|
value_size]() {
|
|
442
|
-
|
|
443
|
-
std::mt19937 gen(rd());
|
|
443
|
+
absl::InsecureBitGen gen;
|
|
444
444
|
|
|
445
445
|
std::vector<HashtablezInfo*> infoz;
|
|
446
446
|
while (!stop.HasBeenNotified()) {
|
|
@@ -73,11 +73,6 @@ using ConstReverseIterator = typename std::reverse_iterator<ConstIterator<A>>;
|
|
|
73
73
|
template <typename A>
|
|
74
74
|
using MoveIterator = typename std::move_iterator<Iterator<A>>;
|
|
75
75
|
|
|
76
|
-
template <typename Iterator>
|
|
77
|
-
using IsAtLeastForwardIterator = std::is_convertible<
|
|
78
|
-
typename std::iterator_traits<Iterator>::iterator_category,
|
|
79
|
-
std::forward_iterator_tag>;
|
|
80
|
-
|
|
81
76
|
template <typename A>
|
|
82
77
|
using IsMoveAssignOk = std::is_move_assignable<ValueType<A>>;
|
|
83
78
|
template <typename A>
|
|
@@ -234,7 +229,7 @@ class AllocationTransaction {
|
|
|
234
229
|
return result.data;
|
|
235
230
|
}
|
|
236
231
|
|
|
237
|
-
|
|
232
|
+
[[nodiscard]] Allocation<A> Release() && {
|
|
238
233
|
Allocation<A> result = {GetData(), GetCapacity()};
|
|
239
234
|
Reset();
|
|
240
235
|
return result;
|
|
@@ -548,7 +543,7 @@ class Storage {
|
|
|
548
543
|
(std::max)(N, sizeof(Allocated) / sizeof(ValueType<A>));
|
|
549
544
|
|
|
550
545
|
struct Inlined {
|
|
551
|
-
alignas(ValueType<A>) char inlined_data[sizeof(
|
|
546
|
+
alignas(ValueType<A>) unsigned char inlined_data[sizeof(
|
|
552
547
|
ValueType<A>[kOptimalInlinedSize])];
|
|
553
548
|
};
|
|
554
549
|
|
|
@@ -192,7 +192,6 @@
|
|
|
192
192
|
#include <typeinfo>
|
|
193
193
|
#include <utility>
|
|
194
194
|
|
|
195
|
-
#include "absl/base/attributes.h"
|
|
196
195
|
#include "absl/base/config.h"
|
|
197
196
|
#include "absl/debugging/internal/demangle.h"
|
|
198
197
|
#include "absl/meta/type_traits.h"
|
|
@@ -316,9 +315,6 @@ std::string TypeName() {
|
|
|
316
315
|
|
|
317
316
|
} // namespace adl_barrier
|
|
318
317
|
|
|
319
|
-
template <bool C>
|
|
320
|
-
using EnableIf = typename std::enable_if<C, int>::type;
|
|
321
|
-
|
|
322
318
|
// Can `T` be a template argument of `Layout`?
|
|
323
319
|
template <class T>
|
|
324
320
|
using IsLegalElementType = std::integral_constant<
|
|
@@ -418,17 +414,16 @@ class LayoutImpl<
|
|
|
418
414
|
// assert(x.Offset<1>() == 16); // The doubles starts from 16.
|
|
419
415
|
//
|
|
420
416
|
// Requires: `N <= NumSizes && N < sizeof...(Ts)`.
|
|
421
|
-
template <size_t N
|
|
422
|
-
constexpr size_t Offset() const {
|
|
423
|
-
return 0;
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
template <size_t N, EnableIf<N != 0> = 0>
|
|
417
|
+
template <size_t N>
|
|
427
418
|
constexpr size_t Offset() const {
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
419
|
+
if constexpr (N == 0) {
|
|
420
|
+
return 0;
|
|
421
|
+
} else {
|
|
422
|
+
static_assert(N < NumOffsets, "Index out of bounds");
|
|
423
|
+
return adl_barrier::Align(
|
|
424
|
+
Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * Size<N - 1>(),
|
|
425
|
+
ElementAlignment<N>::value);
|
|
426
|
+
}
|
|
432
427
|
}
|
|
433
428
|
|
|
434
429
|
// Offset in bytes of the array with the specified element type. There must
|
|
@@ -457,15 +452,14 @@ class LayoutImpl<
|
|
|
457
452
|
// assert(x.Size<1>() == 4);
|
|
458
453
|
//
|
|
459
454
|
// Requires: `N < NumSizes`.
|
|
460
|
-
template <size_t N
|
|
461
|
-
constexpr size_t Size() const {
|
|
462
|
-
return kStaticSizes[N];
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
template <size_t N, EnableIf<(N >= NumStaticSizes)> = 0>
|
|
455
|
+
template <size_t N>
|
|
466
456
|
constexpr size_t Size() const {
|
|
467
|
-
|
|
468
|
-
|
|
457
|
+
if constexpr (N < NumStaticSizes) {
|
|
458
|
+
return kStaticSizes[N];
|
|
459
|
+
} else {
|
|
460
|
+
static_assert(N < NumSizes, "Index out of bounds");
|
|
461
|
+
return size_[N - NumStaticSizes];
|
|
462
|
+
}
|
|
469
463
|
}
|
|
470
464
|
|
|
471
465
|
// The number of elements in the array with the specified element type.
|
|
@@ -596,10 +590,10 @@ class LayoutImpl<
|
|
|
596
590
|
//
|
|
597
591
|
// Requires: `p` is aligned to `Alignment()`.
|
|
598
592
|
//
|
|
599
|
-
// Note: We mark the parameter as
|
|
600
|
-
// when `SizeSeq` is empty [-Werror=unused-but-set-parameter].
|
|
593
|
+
// Note: We mark the parameter as maybe_unused because GCC detects it is not
|
|
594
|
+
// used when `SizeSeq` is empty [-Werror=unused-but-set-parameter].
|
|
601
595
|
template <class Char>
|
|
602
|
-
auto Slices(
|
|
596
|
+
auto Slices([[maybe_unused]] Char* p) const {
|
|
603
597
|
return std::tuple<SliceType<CopyConst<Char, ElementType<SizeSeq>>>...>(
|
|
604
598
|
Slice<SizeSeq>(p)...);
|
|
605
599
|
}
|
|
@@ -624,15 +618,13 @@ class LayoutImpl<
|
|
|
624
618
|
// `Char` must be `[const] [signed|unsigned] char`.
|
|
625
619
|
//
|
|
626
620
|
// Requires: `p` is aligned to `Alignment()`.
|
|
627
|
-
template <class Char, size_t N = NumOffsets - 1
|
|
628
|
-
void PoisonPadding(const Char* p) const {
|
|
629
|
-
Pointer<0>(p); // verify the requirements on `Char` and `p`
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
template <class Char, size_t N = NumOffsets - 1, EnableIf<N != 0> = 0>
|
|
621
|
+
template <class Char, size_t N = NumOffsets - 1>
|
|
633
622
|
void PoisonPadding(const Char* p) const {
|
|
634
|
-
|
|
635
|
-
|
|
623
|
+
if constexpr (N == 0) {
|
|
624
|
+
Pointer<0>(p); // verify the requirements on `Char` and `p`
|
|
625
|
+
} else {
|
|
626
|
+
static_assert(N < NumOffsets, "Index out of bounds");
|
|
627
|
+
(void)p;
|
|
636
628
|
#ifdef ABSL_HAVE_ADDRESS_SANITIZER
|
|
637
629
|
PoisonPadding<Char, N - 1>(p);
|
|
638
630
|
// The `if` is an optimization. It doesn't affect the observable behaviour.
|
|
@@ -642,6 +634,7 @@ class LayoutImpl<
|
|
|
642
634
|
ASAN_POISON_MEMORY_REGION(p + start, Offset<N>() - start);
|
|
643
635
|
}
|
|
644
636
|
#endif
|
|
637
|
+
}
|
|
645
638
|
}
|
|
646
639
|
|
|
647
640
|
// Human-readable description of the memory layout. Useful for debugging.
|
|
@@ -692,15 +685,6 @@ class LayoutImpl<
|
|
|
692
685
|
size_t size_[NumRuntimeSizes > 0 ? NumRuntimeSizes : 1];
|
|
693
686
|
};
|
|
694
687
|
|
|
695
|
-
// Defining a constexpr static class member variable is redundant and deprecated
|
|
696
|
-
// in C++17, but required in C++14.
|
|
697
|
-
template <class... Elements, size_t... StaticSizeSeq, size_t... RuntimeSizeSeq,
|
|
698
|
-
size_t... SizeSeq, size_t... OffsetSeq>
|
|
699
|
-
constexpr std::array<size_t, sizeof...(StaticSizeSeq)> LayoutImpl<
|
|
700
|
-
std::tuple<Elements...>, absl::index_sequence<StaticSizeSeq...>,
|
|
701
|
-
absl::index_sequence<RuntimeSizeSeq...>, absl::index_sequence<SizeSeq...>,
|
|
702
|
-
absl::index_sequence<OffsetSeq...>>::kStaticSizes;
|
|
703
|
-
|
|
704
688
|
template <class StaticSizeSeq, size_t NumRuntimeSizes, class... Ts>
|
|
705
689
|
using LayoutType = LayoutImpl<
|
|
706
690
|
std::tuple<Ts...>, StaticSizeSeq,
|