re2 1.24.0 → 1.25.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/LICENSE +15 -20
- package/README.md +63 -4
- package/binding.gyp +1 -2
- package/lib/addon.cc +9 -5
- package/lib/exec.cc +4 -4
- package/lib/match.cc +4 -4
- package/lib/new.cc +6 -6
- package/lib/pattern.cc +148 -1
- package/lib/replace.cc +5 -4
- package/lib/search.cc +1 -1
- package/lib/set.cc +85 -10
- package/lib/test.cc +1 -1
- package/lib/unicode_properties.h +15840 -0
- package/lib/wrapped_re2.h +40 -4
- package/lib/wrapped_re2_set.h +3 -1
- package/llms-full.txt +497 -0
- package/llms.txt +135 -0
- package/package.json +19 -11
- package/re2.d.ts +2 -0
- package/re2.js +1 -0
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/FAQ.md +130 -79
- package/vendor/abseil-cpp/MODULE.bazel +6 -7
- package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
- package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
- package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
- package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
- package/vendor/abseil-cpp/absl/base/casts.h +8 -1
- package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
- package/vendor/abseil-cpp/absl/base/config.h +53 -9
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
- package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
- package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
- package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
- package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
- package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
- package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
- package/vendor/abseil-cpp/absl/base/macros.h +36 -20
- package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
- package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
- package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
- package/vendor/abseil-cpp/absl/base/options.h +55 -1
- package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
- package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
- package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
- package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
- package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
- package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
- package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
- package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
- package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
- package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
- package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
- package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
- package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
- package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
- package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
- package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
- package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
- package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
- package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
- package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
- package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
- package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
- package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
- package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
- package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
- package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
- package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
- package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
- package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
- package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
- package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
- package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
- package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
- package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
- package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
- package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
- package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
- package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
- package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
- package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
- package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
- package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
- package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
- package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
- package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
- package/vendor/abseil-cpp/absl/status/status.cc +62 -70
- package/vendor/abseil-cpp/absl/status/status.h +249 -23
- package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
- package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
- package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
- package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
- package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
- package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
- package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
- package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
- package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
- package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
- package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
- package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
- package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
- package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
- package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
- package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
- package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
- package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
- package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
- package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
- package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
- package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
- package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
- package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
- package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
- package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
- package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
- package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
- package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
- package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
- package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/time/clock.h +3 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
- package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
- package/vendor/abseil-cpp/absl/time/format.cc +3 -10
- package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
- package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
- package/vendor/abseil-cpp/absl/types/any.h +26 -4
- package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
- package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
- package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
- package/vendor/abseil-cpp/absl/types/compare.h +4 -4
- package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
- package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
- package/vendor/abseil-cpp/absl/types/optional.h +30 -3
- package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
- package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
- package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
- package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
- package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
- package/vendor/abseil-cpp/absl/types/span.h +19 -23
- package/vendor/abseil-cpp/absl/types/variant.h +75 -18
- package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
|
|
15
15
|
#include "absl/container/internal/compressed_tuple.h"
|
|
16
16
|
|
|
17
|
+
#include <any>
|
|
17
18
|
#include <memory>
|
|
19
|
+
#include <optional>
|
|
18
20
|
#include <set>
|
|
19
21
|
#include <string>
|
|
20
22
|
#include <type_traits>
|
|
@@ -25,8 +27,6 @@
|
|
|
25
27
|
#include "gtest/gtest.h"
|
|
26
28
|
#include "absl/container/internal/test_instance_tracker.h"
|
|
27
29
|
#include "absl/memory/memory.h"
|
|
28
|
-
#include "absl/types/any.h"
|
|
29
|
-
#include "absl/types/optional.h"
|
|
30
30
|
#include "absl/utility/utility.h"
|
|
31
31
|
|
|
32
32
|
// These are declared at global scope purely so that error messages
|
|
@@ -337,11 +337,11 @@ TEST(CompressedTupleTest, NoElements) {
|
|
|
337
337
|
|
|
338
338
|
TEST(CompressedTupleTest, MoveOnlyElements) {
|
|
339
339
|
CompressedTuple<std::unique_ptr<std::string>> str_tup(
|
|
340
|
-
|
|
340
|
+
std::make_unique<std::string>("str"));
|
|
341
341
|
|
|
342
342
|
CompressedTuple<CompressedTuple<std::unique_ptr<std::string>>,
|
|
343
343
|
std::unique_ptr<int>>
|
|
344
|
-
|
|
344
|
+
x(std::move(str_tup), std::make_unique<int>(5));
|
|
345
345
|
|
|
346
346
|
EXPECT_EQ(*x.get<0>().get<0>(), "str");
|
|
347
347
|
EXPECT_EQ(*x.get<1>(), 5);
|
|
@@ -355,7 +355,7 @@ TEST(CompressedTupleTest, MoveOnlyElements) {
|
|
|
355
355
|
|
|
356
356
|
TEST(CompressedTupleTest, MoveConstructionMoveOnlyElements) {
|
|
357
357
|
CompressedTuple<std::unique_ptr<std::string>> base(
|
|
358
|
-
|
|
358
|
+
std::make_unique<std::string>("str"));
|
|
359
359
|
EXPECT_EQ(*base.get<0>(), "str");
|
|
360
360
|
|
|
361
361
|
CompressedTuple<std::unique_ptr<std::string>> copy(std::move(base));
|
|
@@ -363,13 +363,13 @@ TEST(CompressedTupleTest, MoveConstructionMoveOnlyElements) {
|
|
|
363
363
|
}
|
|
364
364
|
|
|
365
365
|
TEST(CompressedTupleTest, AnyElements) {
|
|
366
|
-
any a(std::string("str"));
|
|
367
|
-
CompressedTuple<any, any&> x(any(5), a);
|
|
368
|
-
EXPECT_EQ(
|
|
369
|
-
EXPECT_EQ(
|
|
366
|
+
std::any a(std::string("str"));
|
|
367
|
+
CompressedTuple<std::any, std::any&> x(std::any(5), a);
|
|
368
|
+
EXPECT_EQ(std::any_cast<int>(x.get<0>()), 5);
|
|
369
|
+
EXPECT_EQ(std::any_cast<std::string>(x.get<1>()), "str");
|
|
370
370
|
|
|
371
371
|
a = 0.5f;
|
|
372
|
-
EXPECT_EQ(
|
|
372
|
+
EXPECT_EQ(std::any_cast<float>(x.get<1>()), 0.5);
|
|
373
373
|
}
|
|
374
374
|
|
|
375
375
|
TEST(CompressedTupleTest, Constexpr) {
|
|
@@ -418,15 +418,15 @@ TEST(CompressedTupleTest, Constexpr) {
|
|
|
418
418
|
EXPECT_EQ(trivial1, 0);
|
|
419
419
|
EXPECT_EQ(trivial2, 0);
|
|
420
420
|
|
|
421
|
-
constexpr CompressedTuple<Empty<0>, NonTrivialStruct,
|
|
421
|
+
constexpr CompressedTuple<Empty<0>, NonTrivialStruct, std::optional<int>>
|
|
422
422
|
non_trivial = {};
|
|
423
423
|
constexpr CallType non_trivial0 = non_trivial.get<0>().value();
|
|
424
424
|
constexpr int non_trivial1 = non_trivial.get<1>().value();
|
|
425
|
-
constexpr
|
|
425
|
+
constexpr std::optional<int> non_trivial2 = non_trivial.get<2>();
|
|
426
426
|
|
|
427
427
|
EXPECT_EQ(non_trivial0, CallType::kConstRef);
|
|
428
428
|
EXPECT_EQ(non_trivial1, 5);
|
|
429
|
-
EXPECT_EQ(non_trivial2,
|
|
429
|
+
EXPECT_EQ(non_trivial2, std::nullopt);
|
|
430
430
|
|
|
431
431
|
static constexpr char data[] = "DEF";
|
|
432
432
|
constexpr CompressedTuple<const char*> z(data);
|
|
@@ -63,8 +63,8 @@ void* Allocate(Alloc* alloc, size_t n) {
|
|
|
63
63
|
static_assert(Alignment > 0, "");
|
|
64
64
|
assert(n && "n must be positive");
|
|
65
65
|
using M = AlignedType<Alignment>;
|
|
66
|
-
using A = typename
|
|
67
|
-
using AT = typename
|
|
66
|
+
using A = typename std::allocator_traits<Alloc>::template rebind_alloc<M>;
|
|
67
|
+
using AT = typename std::allocator_traits<Alloc>::template rebind_traits<M>;
|
|
68
68
|
// On macOS, "mem_alloc" is a #define with one argument defined in
|
|
69
69
|
// rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
|
|
70
70
|
// with the "foo(bar)" syntax.
|
|
@@ -81,7 +81,7 @@ template <class Allocator, class ValueType>
|
|
|
81
81
|
constexpr auto IsDestructionTrivial() {
|
|
82
82
|
constexpr bool result =
|
|
83
83
|
std::is_trivially_destructible<ValueType>::value &&
|
|
84
|
-
std::is_same<typename
|
|
84
|
+
std::is_same<typename std::allocator_traits<
|
|
85
85
|
Allocator>::template rebind_alloc<char>,
|
|
86
86
|
std::allocator<char>>::value;
|
|
87
87
|
return std::integral_constant<bool, result>();
|
|
@@ -94,8 +94,8 @@ void Deallocate(Alloc* alloc, void* p, size_t n) {
|
|
|
94
94
|
static_assert(Alignment > 0, "");
|
|
95
95
|
assert(n && "n must be positive");
|
|
96
96
|
using M = AlignedType<Alignment>;
|
|
97
|
-
using A = typename
|
|
98
|
-
using AT = typename
|
|
97
|
+
using A = typename std::allocator_traits<Alloc>::template rebind_alloc<M>;
|
|
98
|
+
using AT = typename std::allocator_traits<Alloc>::template rebind_traits<M>;
|
|
99
99
|
// On macOS, "mem_alloc" is a #define with one argument defined in
|
|
100
100
|
// rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
|
|
101
101
|
// with the "foo(bar)" syntax.
|
|
@@ -110,8 +110,8 @@ namespace memory_internal {
|
|
|
110
110
|
// specified in the tuple.
|
|
111
111
|
template <class Alloc, class T, class Tuple, size_t... I>
|
|
112
112
|
void ConstructFromTupleImpl(Alloc* alloc, T* ptr, Tuple&& t,
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
std::index_sequence<I...>) {
|
|
114
|
+
std::allocator_traits<Alloc>::construct(
|
|
115
115
|
*alloc, ptr, std::get<I>(std::forward<Tuple>(t))...);
|
|
116
116
|
}
|
|
117
117
|
|
|
@@ -127,13 +127,13 @@ struct WithConstructedImplF {
|
|
|
127
127
|
|
|
128
128
|
template <class T, class Tuple, size_t... Is, class F>
|
|
129
129
|
decltype(std::declval<F>()(std::declval<T>())) WithConstructedImpl(
|
|
130
|
-
Tuple&& t,
|
|
130
|
+
Tuple&& t, std::index_sequence<Is...>, F&& f) {
|
|
131
131
|
return WithConstructedImplF<T, F>{std::forward<F>(f)}(
|
|
132
132
|
std::get<Is>(std::forward<Tuple>(t))...);
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
template <class T, size_t... Is>
|
|
136
|
-
auto TupleRefImpl(T&& t,
|
|
136
|
+
auto TupleRefImpl(T&& t, std::index_sequence<Is...>)
|
|
137
137
|
-> decltype(std::forward_as_tuple(std::get<Is>(std::forward<T>(t))...)) {
|
|
138
138
|
// NOLINTNEXTLINE(bugprone-use-after-move)
|
|
139
139
|
return std::forward_as_tuple(std::get<Is>(std::forward<T>(t))...);
|
|
@@ -144,11 +144,11 @@ auto TupleRefImpl(T&& t, absl::index_sequence<Is...>)
|
|
|
144
144
|
template <class T>
|
|
145
145
|
auto TupleRef(T&& t) -> decltype(TupleRefImpl(
|
|
146
146
|
std::forward<T>(t),
|
|
147
|
-
|
|
147
|
+
std::make_index_sequence<
|
|
148
148
|
std::tuple_size<typename std::decay<T>::type>::value>())) {
|
|
149
149
|
return TupleRefImpl(
|
|
150
150
|
std::forward<T>(t),
|
|
151
|
-
|
|
151
|
+
std::make_index_sequence<
|
|
152
152
|
std::tuple_size<typename std::decay<T>::type>::value>());
|
|
153
153
|
}
|
|
154
154
|
|
|
@@ -169,7 +169,7 @@ template <class Alloc, class T, class Tuple>
|
|
|
169
169
|
void ConstructFromTuple(Alloc* alloc, T* ptr, Tuple&& t) {
|
|
170
170
|
memory_internal::ConstructFromTupleImpl(
|
|
171
171
|
alloc, ptr, std::forward<Tuple>(t),
|
|
172
|
-
|
|
172
|
+
std::make_index_sequence<
|
|
173
173
|
std::tuple_size<typename std::decay<Tuple>::type>::value>());
|
|
174
174
|
}
|
|
175
175
|
|
|
@@ -180,7 +180,7 @@ decltype(std::declval<F>()(std::declval<T>())) WithConstructed(Tuple&& t,
|
|
|
180
180
|
F&& f) {
|
|
181
181
|
return memory_internal::WithConstructedImpl<T>(
|
|
182
182
|
std::forward<Tuple>(t),
|
|
183
|
-
|
|
183
|
+
std::make_index_sequence<
|
|
184
184
|
std::tuple_size<typename std::decay<Tuple>::type>::value>(),
|
|
185
185
|
std::forward<F>(f));
|
|
186
186
|
}
|
|
@@ -350,11 +350,11 @@ union map_slot_type {
|
|
|
350
350
|
~map_slot_type() = delete;
|
|
351
351
|
using value_type = std::pair<const K, V>;
|
|
352
352
|
using mutable_value_type =
|
|
353
|
-
std::pair<
|
|
353
|
+
std::pair<std::remove_const_t<K>, std::remove_const_t<V>>;
|
|
354
354
|
|
|
355
355
|
value_type value;
|
|
356
356
|
mutable_value_type mutable_value;
|
|
357
|
-
|
|
357
|
+
std::remove_const_t<K> key;
|
|
358
358
|
};
|
|
359
359
|
|
|
360
360
|
template <class K, class V>
|
|
@@ -362,7 +362,7 @@ struct map_slot_policy {
|
|
|
362
362
|
using slot_type = map_slot_type<K, V>;
|
|
363
363
|
using value_type = std::pair<const K, V>;
|
|
364
364
|
using mutable_value_type =
|
|
365
|
-
std::pair<
|
|
365
|
+
std::pair<std::remove_const_t<K>, std::remove_const_t<V>>;
|
|
366
366
|
|
|
367
367
|
private:
|
|
368
368
|
static void emplace(slot_type* slot) {
|
|
@@ -397,11 +397,11 @@ struct map_slot_policy {
|
|
|
397
397
|
static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
|
|
398
398
|
emplace(slot);
|
|
399
399
|
if (kMutableKeys::value) {
|
|
400
|
-
|
|
401
|
-
|
|
400
|
+
std::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
|
|
401
|
+
std::forward<Args>(args)...);
|
|
402
402
|
} else {
|
|
403
|
-
|
|
404
|
-
|
|
403
|
+
std::allocator_traits<Allocator>::construct(*alloc, &slot->value,
|
|
404
|
+
std::forward<Args>(args)...);
|
|
405
405
|
}
|
|
406
406
|
}
|
|
407
407
|
|
|
@@ -410,11 +410,11 @@ struct map_slot_policy {
|
|
|
410
410
|
static void construct(Allocator* alloc, slot_type* slot, slot_type* other) {
|
|
411
411
|
emplace(slot);
|
|
412
412
|
if (kMutableKeys::value) {
|
|
413
|
-
|
|
413
|
+
std::allocator_traits<Allocator>::construct(
|
|
414
414
|
*alloc, &slot->mutable_value, std::move(other->mutable_value));
|
|
415
415
|
} else {
|
|
416
|
-
|
|
417
|
-
|
|
416
|
+
std::allocator_traits<Allocator>::construct(*alloc, &slot->value,
|
|
417
|
+
std::move(other->value));
|
|
418
418
|
}
|
|
419
419
|
}
|
|
420
420
|
|
|
@@ -423,16 +423,16 @@ struct map_slot_policy {
|
|
|
423
423
|
static void construct(Allocator* alloc, slot_type* slot,
|
|
424
424
|
const slot_type* other) {
|
|
425
425
|
emplace(slot);
|
|
426
|
-
|
|
427
|
-
|
|
426
|
+
std::allocator_traits<Allocator>::construct(*alloc, &slot->value,
|
|
427
|
+
other->value);
|
|
428
428
|
}
|
|
429
429
|
|
|
430
430
|
template <class Allocator>
|
|
431
431
|
static auto destroy(Allocator* alloc, slot_type* slot) {
|
|
432
432
|
if (kMutableKeys::value) {
|
|
433
|
-
|
|
433
|
+
std::allocator_traits<Allocator>::destroy(*alloc, &slot->mutable_value);
|
|
434
434
|
} else {
|
|
435
|
-
|
|
435
|
+
std::allocator_traits<Allocator>::destroy(*alloc, &slot->value);
|
|
436
436
|
}
|
|
437
437
|
return IsDestructionTrivial<Allocator, value_type>();
|
|
438
438
|
}
|
|
@@ -460,11 +460,11 @@ struct map_slot_policy {
|
|
|
460
460
|
}
|
|
461
461
|
|
|
462
462
|
if (kMutableKeys::value) {
|
|
463
|
-
|
|
463
|
+
std::allocator_traits<Allocator>::construct(
|
|
464
464
|
*alloc, &new_slot->mutable_value, std::move(old_slot->mutable_value));
|
|
465
465
|
} else {
|
|
466
|
-
|
|
467
|
-
|
|
466
|
+
std::allocator_traits<Allocator>::construct(*alloc, &new_slot->value,
|
|
467
|
+
std::move(old_slot->value));
|
|
468
468
|
}
|
|
469
469
|
destroy(alloc, old_slot);
|
|
470
470
|
return is_relocatable;
|
|
@@ -550,10 +550,20 @@ template <class Fn, class T, bool kIsDefault>
|
|
|
550
550
|
size_t TypeErasedDerefAndApplyToSlotFn(const void* fn, void* slot_ptr,
|
|
551
551
|
size_t seed) {
|
|
552
552
|
const auto* f = static_cast<const Fn*>(fn);
|
|
553
|
-
const T* slot = *static_cast<
|
|
553
|
+
const T* slot = *static_cast<T**>(slot_ptr);
|
|
554
554
|
return HashElement<Fn, kIsDefault>{*f, seed}(*slot);
|
|
555
555
|
}
|
|
556
556
|
|
|
557
|
+
// Type erased function to apply `Fn` to data inside of the `slot_ptr->first`.
|
|
558
|
+
// The data is expected to have type `T`.
|
|
559
|
+
template <class Fn, class T, bool kIsDefault>
|
|
560
|
+
size_t TypeErasedDerefAndApplyToSlotFirstFn(const void* fn, void* slot_ptr,
|
|
561
|
+
size_t seed) {
|
|
562
|
+
const auto* f = static_cast<const Fn*>(fn);
|
|
563
|
+
const T* slot = *static_cast<T**>(slot_ptr);
|
|
564
|
+
return HashElement<Fn, kIsDefault>{*f, seed}(slot->first);
|
|
565
|
+
}
|
|
566
|
+
|
|
557
567
|
} // namespace container_internal
|
|
558
568
|
ABSL_NAMESPACE_END
|
|
559
569
|
} // namespace absl
|
|
@@ -199,14 +199,14 @@ template <typename T, typename E = void>
|
|
|
199
199
|
struct HasAbslContainerHash : std::false_type {};
|
|
200
200
|
|
|
201
201
|
template <typename T>
|
|
202
|
-
struct HasAbslContainerHash<T,
|
|
202
|
+
struct HasAbslContainerHash<T, std::void_t<typename T::absl_container_hash>>
|
|
203
203
|
: std::true_type {};
|
|
204
204
|
|
|
205
205
|
template <typename T, typename E = void>
|
|
206
206
|
struct HasAbslContainerEq : std::false_type {};
|
|
207
207
|
|
|
208
208
|
template <typename T>
|
|
209
|
-
struct HasAbslContainerEq<T,
|
|
209
|
+
struct HasAbslContainerEq<T, std::void_t<typename T::absl_container_eq>>
|
|
210
210
|
: std::true_type {};
|
|
211
211
|
|
|
212
212
|
template <typename T, typename E = void>
|
|
@@ -47,7 +47,7 @@ template <class Container, class = void>
|
|
|
47
47
|
struct IsMap : std::false_type {};
|
|
48
48
|
|
|
49
49
|
template <class Map>
|
|
50
|
-
struct IsMap<Map,
|
|
50
|
+
struct IsMap<Map, std::void_t<typename Map::mapped_type>> : std::true_type {};
|
|
51
51
|
|
|
52
52
|
} // namespace generator_internal
|
|
53
53
|
|
|
@@ -128,13 +128,13 @@ struct Generator<std::tuple<Ts...>> {
|
|
|
128
128
|
template <class T>
|
|
129
129
|
struct Generator<std::unique_ptr<T>> {
|
|
130
130
|
std::unique_ptr<T> operator()() const {
|
|
131
|
-
return
|
|
131
|
+
return std::make_unique<T>(Generator<T>()());
|
|
132
132
|
}
|
|
133
133
|
};
|
|
134
134
|
|
|
135
135
|
template <class U>
|
|
136
|
-
struct Generator<U,
|
|
137
|
-
|
|
136
|
+
struct Generator<U, std::void_t<decltype(std::declval<U&>().key()),
|
|
137
|
+
decltype(std::declval<U&>().value())>>
|
|
138
138
|
: Generator<std::pair<
|
|
139
139
|
typename std::decay<decltype(std::declval<U&>().key())>::type,
|
|
140
140
|
typename std::decay<decltype(std::declval<U&>().value())>::type>> {};
|
|
@@ -31,14 +31,14 @@ namespace container_internal {
|
|
|
31
31
|
|
|
32
32
|
// Defines how slots are initialized/destroyed/moved.
|
|
33
33
|
template <class Policy, class = void>
|
|
34
|
-
struct hash_policy_traits : common_policy_traits<Policy> {
|
|
34
|
+
struct hash_policy_traits : common_policy_traits<Policy> {
|
|
35
35
|
// The type of the keys stored in the hashtable.
|
|
36
36
|
using key_type = typename Policy::key_type;
|
|
37
37
|
|
|
38
38
|
private:
|
|
39
39
|
struct ReturnKey {
|
|
40
40
|
template <class Key,
|
|
41
|
-
|
|
41
|
+
std::enable_if_t<std::is_lvalue_reference<Key>::value, int> = 0>
|
|
42
42
|
static key_type& Impl(Key&& k, int) {
|
|
43
43
|
return *std::launder(
|
|
44
44
|
const_cast<key_type*>(std::addressof(std::forward<Key>(k))));
|
|
@@ -63,7 +63,7 @@ struct hash_policy_traits : common_policy_traits<Policy> {
|
|
|
63
63
|
struct ConstantIteratorsImpl : std::false_type {};
|
|
64
64
|
|
|
65
65
|
template <class P>
|
|
66
|
-
struct ConstantIteratorsImpl<P,
|
|
66
|
+
struct ConstantIteratorsImpl<P, std::void_t<typename P::constant_iterators>>
|
|
67
67
|
: P::constant_iterators {};
|
|
68
68
|
|
|
69
69
|
public:
|
|
@@ -84,7 +84,7 @@ class NonIterableBitMask {
|
|
|
84
84
|
public:
|
|
85
85
|
explicit NonIterableBitMask(T mask) : mask_(mask) {}
|
|
86
86
|
|
|
87
|
-
explicit operator bool() const { return
|
|
87
|
+
explicit operator bool() const { return mask_ != 0; }
|
|
88
88
|
|
|
89
89
|
// Returns the index of the lowest *abstract* bit set in `self`.
|
|
90
90
|
uint32_t LowestBitSet() const {
|
|
@@ -274,8 +274,12 @@ inline __m128i _mm_cmpgt_epi8_fixed(__m128i a, __m128i b) {
|
|
|
274
274
|
|
|
275
275
|
struct GroupSse2Impl {
|
|
276
276
|
static constexpr size_t kWidth = 16; // the number of slots per group
|
|
277
|
-
using
|
|
278
|
-
|
|
277
|
+
// There are only 16 bits, but using uint32_t instead of uint16_t allows for
|
|
278
|
+
// better codegen. In particular, there is no blsr instruction for a 16 bit
|
|
279
|
+
// register, but there is for a 32 bit register (used in BitMask::operator++).
|
|
280
|
+
using MaskInt = uint32_t;
|
|
281
|
+
using BitMaskType = BitMask<MaskInt, kWidth>;
|
|
282
|
+
using NonIterableBitMaskType = NonIterableBitMask<MaskInt, kWidth>;
|
|
279
283
|
|
|
280
284
|
explicit GroupSse2Impl(const ctrl_t* pos) {
|
|
281
285
|
ctrl = _mm_loadu_si128(reinterpret_cast<const __m128i*>(pos));
|
|
@@ -284,42 +288,35 @@ struct GroupSse2Impl {
|
|
|
284
288
|
// Returns a bitmask representing the positions of slots that match hash.
|
|
285
289
|
BitMaskType Match(h2_t hash) const {
|
|
286
290
|
auto match = _mm_set1_epi8(static_cast<char>(hash));
|
|
287
|
-
return BitMaskType(
|
|
288
|
-
static_cast<uint16_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
|
|
291
|
+
return BitMaskType(MoveMask(_mm_cmpeq_epi8(match, ctrl)));
|
|
289
292
|
}
|
|
290
293
|
|
|
291
294
|
// Returns a bitmask representing the positions of empty slots.
|
|
292
295
|
NonIterableBitMaskType MaskEmpty() const {
|
|
293
296
|
#ifdef ABSL_INTERNAL_HAVE_SSSE3
|
|
294
297
|
// This only works because ctrl_t::kEmpty is -128.
|
|
295
|
-
return NonIterableBitMaskType(
|
|
296
|
-
static_cast<uint16_t>(_mm_movemask_epi8(_mm_sign_epi8(ctrl, ctrl))));
|
|
298
|
+
return NonIterableBitMaskType(MoveMask(_mm_sign_epi8(ctrl, ctrl)));
|
|
297
299
|
#else
|
|
298
300
|
auto match = _mm_set1_epi8(static_cast<char>(ctrl_t::kEmpty));
|
|
299
|
-
return NonIterableBitMaskType(
|
|
300
|
-
static_cast<uint16_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
|
|
301
|
+
return NonIterableBitMaskType(MoveMask(_mm_cmpeq_epi8(match, ctrl)));
|
|
301
302
|
#endif
|
|
302
303
|
}
|
|
303
304
|
|
|
304
305
|
// Returns a bitmask representing the positions of full slots.
|
|
305
306
|
// Note: for `is_small()` tables group may contain the "same" slot twice:
|
|
306
307
|
// original and mirrored.
|
|
307
|
-
BitMaskType MaskFull() const {
|
|
308
|
-
return BitMaskType(static_cast<uint16_t>(_mm_movemask_epi8(ctrl) ^ 0xffff));
|
|
309
|
-
}
|
|
308
|
+
BitMaskType MaskFull() const { return BitMaskType(MoveMask(ctrl) ^ 0xffff); }
|
|
310
309
|
|
|
311
310
|
// Returns a bitmask representing the positions of non full slots.
|
|
312
311
|
// Note: this includes: kEmpty, kDeleted, kSentinel.
|
|
313
312
|
// It is useful in contexts when kSentinel is not present.
|
|
314
|
-
auto MaskNonFull() const {
|
|
315
|
-
return BitMaskType(static_cast<uint16_t>(_mm_movemask_epi8(ctrl)));
|
|
316
|
-
}
|
|
313
|
+
auto MaskNonFull() const { return BitMaskType(MoveMask(ctrl)); }
|
|
317
314
|
|
|
318
315
|
// Returns a bitmask representing the positions of empty or deleted slots.
|
|
319
316
|
NonIterableBitMaskType MaskEmptyOrDeleted() const {
|
|
320
317
|
auto special = _mm_set1_epi8(static_cast<char>(ctrl_t::kSentinel));
|
|
321
|
-
return NonIterableBitMaskType(
|
|
322
|
-
|
|
318
|
+
return NonIterableBitMaskType(
|
|
319
|
+
MoveMask(_mm_cmpgt_epi8_fixed(special, ctrl)));
|
|
323
320
|
}
|
|
324
321
|
|
|
325
322
|
// Returns a bitmask representing the positions of full or sentinel slots.
|
|
@@ -327,8 +324,8 @@ struct GroupSse2Impl {
|
|
|
327
324
|
// original and mirrored.
|
|
328
325
|
NonIterableBitMaskType MaskFullOrSentinel() const {
|
|
329
326
|
auto special = _mm_set1_epi8(static_cast<char>(ctrl_t::kSentinel) - 1);
|
|
330
|
-
return NonIterableBitMaskType(
|
|
331
|
-
|
|
327
|
+
return NonIterableBitMaskType(
|
|
328
|
+
MoveMask(_mm_cmpgt_epi8_fixed(ctrl, special)));
|
|
332
329
|
}
|
|
333
330
|
|
|
334
331
|
void ConvertSpecialToEmptyAndFullToDeleted(ctrl_t* dst) const {
|
|
@@ -344,6 +341,17 @@ struct GroupSse2Impl {
|
|
|
344
341
|
_mm_storeu_si128(reinterpret_cast<__m128i*>(dst), res);
|
|
345
342
|
}
|
|
346
343
|
|
|
344
|
+
static MaskInt MoveMask(__m128i xmm) {
|
|
345
|
+
auto mask = static_cast<MaskInt>(_mm_movemask_epi8(xmm));
|
|
346
|
+
#ifdef __clang__
|
|
347
|
+
// TODO(b/472522597): Without the inline asm, clang ends up generating an
|
|
348
|
+
// unnecessary movzx to zero the upper bits of the output, but those bits
|
|
349
|
+
// are already zero. See https://godbolt.org/z/G6xW1Ecbx.
|
|
350
|
+
asm("" : "+r"(mask)); // NOLINT
|
|
351
|
+
#endif
|
|
352
|
+
return mask;
|
|
353
|
+
}
|
|
354
|
+
|
|
347
355
|
__m128i ctrl;
|
|
348
356
|
};
|
|
349
357
|
#endif // ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
#include <cstdint>
|
|
23
23
|
#include <functional>
|
|
24
24
|
#include <limits>
|
|
25
|
+
#include <utility>
|
|
25
26
|
|
|
26
27
|
#include "absl/base/attributes.h"
|
|
27
28
|
#include "absl/base/config.h"
|
|
@@ -81,7 +82,6 @@ void HashtablezInfo::PrepareForSampling(int64_t stride,
|
|
|
81
82
|
capacity.store(0, std::memory_order_relaxed);
|
|
82
83
|
size.store(0, std::memory_order_relaxed);
|
|
83
84
|
num_erases.store(0, std::memory_order_relaxed);
|
|
84
|
-
num_insert_hits.store(0, std::memory_order_relaxed);
|
|
85
85
|
num_rehashes.store(0, std::memory_order_relaxed);
|
|
86
86
|
max_probe_length.store(0, std::memory_order_relaxed);
|
|
87
87
|
total_probe_length.store(0, std::memory_order_relaxed);
|
|
@@ -148,7 +148,7 @@ HashtablezInfo* SampleSlow(SamplingState& next_sample,
|
|
|
148
148
|
size_t value_size, uint16_t soo_capacity) {
|
|
149
149
|
if (ABSL_PREDICT_FALSE(ShouldForceSampling())) {
|
|
150
150
|
next_sample.next_sample = 1;
|
|
151
|
-
const int64_t old_stride = exchange(next_sample.sample_stride, 1);
|
|
151
|
+
const int64_t old_stride = std::exchange(next_sample.sample_stride, 1);
|
|
152
152
|
HashtablezInfo* result = GlobalHashtablezSampler().Register(
|
|
153
153
|
old_stride, inline_element_size, key_size, value_size, soo_capacity);
|
|
154
154
|
return result;
|
|
@@ -82,7 +82,6 @@ struct HashtablezInfo : public profiling_internal::Sample<HashtablezInfo> {
|
|
|
82
82
|
std::atomic<size_t> capacity;
|
|
83
83
|
std::atomic<size_t> size;
|
|
84
84
|
std::atomic<size_t> num_erases;
|
|
85
|
-
std::atomic<size_t> num_insert_hits;
|
|
86
85
|
std::atomic<size_t> num_rehashes;
|
|
87
86
|
std::atomic<size_t> max_probe_length;
|
|
88
87
|
std::atomic<size_t> total_probe_length;
|
|
@@ -111,16 +110,6 @@ struct HashtablezInfo : public profiling_internal::Sample<HashtablezInfo> {
|
|
|
111
110
|
|
|
112
111
|
void RecordRehashSlow(HashtablezInfo* info, size_t total_probe_length);
|
|
113
112
|
|
|
114
|
-
// This is inline to avoid calling convention overhead for an otherwise
|
|
115
|
-
// lightweight operation.
|
|
116
|
-
inline void RecordInsertHitSlow(HashtablezInfo* info) {
|
|
117
|
-
// We avoid fetch_add since no other thread should be mutating the table
|
|
118
|
-
// simultaneously without synchronization.
|
|
119
|
-
info->num_insert_hits.store(
|
|
120
|
-
info->num_insert_hits.load(std::memory_order_relaxed) + 1,
|
|
121
|
-
std::memory_order_relaxed);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
113
|
void RecordReservationSlow(HashtablezInfo* info, size_t target_capacity);
|
|
125
114
|
|
|
126
115
|
void RecordClearedReservationSlow(HashtablezInfo* info);
|
|
@@ -194,11 +183,6 @@ class HashtablezInfoHandle {
|
|
|
194
183
|
RecordEraseSlow(info_);
|
|
195
184
|
}
|
|
196
185
|
|
|
197
|
-
inline void RecordInsertHit() {
|
|
198
|
-
if (ABSL_PREDICT_TRUE(info_ == nullptr)) return;
|
|
199
|
-
RecordInsertHitSlow(info_);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
186
|
friend inline void swap(HashtablezInfoHandle& lhs,
|
|
203
187
|
HashtablezInfoHandle& rhs) {
|
|
204
188
|
std::swap(lhs.info_, rhs.info_);
|
|
@@ -225,7 +209,6 @@ class HashtablezInfoHandle {
|
|
|
225
209
|
inline void RecordInsertMiss(size_t /*hash*/,
|
|
226
210
|
size_t /*distance_from_desired*/) {}
|
|
227
211
|
inline void RecordErase() {}
|
|
228
|
-
inline void RecordInsertHit() {}
|
|
229
212
|
|
|
230
213
|
friend inline void swap(HashtablezInfoHandle& /*lhs*/,
|
|
231
214
|
HashtablezInfoHandle& /*rhs*/) {}
|
|
@@ -63,9 +63,10 @@ using ::testing::UnorderedElementsAre;
|
|
|
63
63
|
|
|
64
64
|
std::vector<size_t> GetSizes(HashtablezSampler* s) {
|
|
65
65
|
std::vector<size_t> res;
|
|
66
|
-
s->Iterate([&](const HashtablezInfo& info) {
|
|
66
|
+
EXPECT_EQ(s->Iterate([&](const HashtablezInfo& info) {
|
|
67
67
|
res.push_back(info.size.load(std::memory_order_acquire));
|
|
68
|
-
})
|
|
68
|
+
}),
|
|
69
|
+
0);
|
|
69
70
|
return res;
|
|
70
71
|
}
|
|
71
72
|
|
|
@@ -99,7 +100,6 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
|
|
|
99
100
|
EXPECT_EQ(info.capacity.load(), 0);
|
|
100
101
|
EXPECT_EQ(info.size.load(), 0);
|
|
101
102
|
EXPECT_EQ(info.num_erases.load(), 0);
|
|
102
|
-
EXPECT_EQ(info.num_insert_hits.load(), 0);
|
|
103
103
|
EXPECT_EQ(info.num_rehashes.load(), 0);
|
|
104
104
|
EXPECT_EQ(info.max_probe_length.load(), 0);
|
|
105
105
|
EXPECT_EQ(info.total_probe_length.load(), 0);
|
|
@@ -116,7 +116,6 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
|
|
|
116
116
|
info.capacity.store(1, std::memory_order_relaxed);
|
|
117
117
|
info.size.store(1, std::memory_order_relaxed);
|
|
118
118
|
info.num_erases.store(1, std::memory_order_relaxed);
|
|
119
|
-
info.num_insert_hits.store(1, std::memory_order_relaxed);
|
|
120
119
|
info.max_probe_length.store(1, std::memory_order_relaxed);
|
|
121
120
|
info.total_probe_length.store(1, std::memory_order_relaxed);
|
|
122
121
|
info.hashes_bitwise_or.store(1, std::memory_order_relaxed);
|
|
@@ -131,7 +130,6 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
|
|
|
131
130
|
EXPECT_EQ(info.capacity.load(), 0);
|
|
132
131
|
EXPECT_EQ(info.size.load(), 0);
|
|
133
132
|
EXPECT_EQ(info.num_erases.load(), 0);
|
|
134
|
-
EXPECT_EQ(info.num_insert_hits.load(), 0);
|
|
135
133
|
EXPECT_EQ(info.num_rehashes.load(), 0);
|
|
136
134
|
EXPECT_EQ(info.max_probe_length.load(), 0);
|
|
137
135
|
EXPECT_EQ(info.total_probe_length.load(), 0);
|
|
@@ -218,25 +216,6 @@ TEST(HashtablezInfoTest, RecordErase) {
|
|
|
218
216
|
EXPECT_EQ(info.soo_capacity, 1);
|
|
219
217
|
}
|
|
220
218
|
|
|
221
|
-
TEST(HashtablezInfoTest, RecordInsertHit) {
|
|
222
|
-
const int64_t test_stride = 31;
|
|
223
|
-
const size_t test_element_size = 29;
|
|
224
|
-
const size_t test_key_size = 27;
|
|
225
|
-
const size_t test_value_size = 25;
|
|
226
|
-
|
|
227
|
-
HashtablezInfo info;
|
|
228
|
-
absl::MutexLock l(info.init_mu);
|
|
229
|
-
info.PrepareForSampling(test_stride, test_element_size,
|
|
230
|
-
/*key_size=*/test_key_size,
|
|
231
|
-
/*value_size=*/test_value_size,
|
|
232
|
-
/*soo_capacity_value=*/1);
|
|
233
|
-
EXPECT_EQ(info.num_insert_hits.load(), 0);
|
|
234
|
-
RecordInsertHitSlow(&info);
|
|
235
|
-
EXPECT_EQ(info.num_insert_hits.load(), 1);
|
|
236
|
-
RecordInsertHitSlow(&info);
|
|
237
|
-
EXPECT_EQ(info.num_insert_hits.load(), 2);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
219
|
TEST(HashtablezInfoTest, RecordRehash) {
|
|
241
220
|
const int64_t test_stride = 33;
|
|
242
221
|
const size_t test_element_size = 31;
|
|
@@ -381,19 +360,20 @@ TEST(HashtablezSamplerTest, Handle) {
|
|
|
381
360
|
info->hashes_bitwise_and.store(0x12345678, std::memory_order_relaxed);
|
|
382
361
|
|
|
383
362
|
bool found = false;
|
|
384
|
-
sampler.Iterate([&](const HashtablezInfo& h) {
|
|
363
|
+
EXPECT_EQ(sampler.Iterate([&](const HashtablezInfo& h) {
|
|
385
364
|
if (&h == info) {
|
|
386
365
|
EXPECT_EQ(h.weight, test_stride);
|
|
387
366
|
EXPECT_EQ(h.hashes_bitwise_and.load(), 0x12345678);
|
|
388
367
|
found = true;
|
|
389
368
|
}
|
|
390
|
-
})
|
|
369
|
+
}),
|
|
370
|
+
0);
|
|
391
371
|
EXPECT_TRUE(found);
|
|
392
372
|
|
|
393
373
|
h.Unregister();
|
|
394
374
|
h = HashtablezInfoHandle();
|
|
395
375
|
found = false;
|
|
396
|
-
sampler.Iterate([&](const HashtablezInfo& h) {
|
|
376
|
+
EXPECT_EQ(sampler.Iterate([&](const HashtablezInfo& h) {
|
|
397
377
|
if (&h == info) {
|
|
398
378
|
// this will only happen if some other thread has resurrected the info
|
|
399
379
|
// the old handle was using.
|
|
@@ -401,7 +381,8 @@ TEST(HashtablezSamplerTest, Handle) {
|
|
|
401
381
|
found = true;
|
|
402
382
|
}
|
|
403
383
|
}
|
|
404
|
-
})
|
|
384
|
+
}),
|
|
385
|
+
0);
|
|
405
386
|
EXPECT_FALSE(found);
|
|
406
387
|
}
|
|
407
388
|
#endif
|
|
@@ -487,9 +468,10 @@ TEST(HashtablezSamplerTest, MultiThreaded) {
|
|
|
487
468
|
}
|
|
488
469
|
case 2: {
|
|
489
470
|
absl::Duration oldest = absl::ZeroDuration();
|
|
490
|
-
sampler.Iterate([&](const HashtablezInfo& info) {
|
|
471
|
+
EXPECT_EQ(sampler.Iterate([&](const HashtablezInfo& info) {
|
|
491
472
|
oldest = std::max(oldest, absl::Now() - info.create_time);
|
|
492
|
-
})
|
|
473
|
+
}),
|
|
474
|
+
0);
|
|
493
475
|
ASSERT_GE(oldest, absl::ZeroDuration());
|
|
494
476
|
break;
|
|
495
477
|
}
|