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
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
|
|
44
44
|
#include "absl/base/attributes.h"
|
|
45
45
|
#include "absl/base/config.h"
|
|
46
|
-
#include "absl/base/internal/throw_delegate.h"
|
|
47
46
|
#include "absl/base/optimization.h"
|
|
47
|
+
#include "absl/base/throw_delegate.h"
|
|
48
48
|
#include "absl/container/flat_hash_set.h"
|
|
49
49
|
#include "absl/container/internal/common.h"
|
|
50
50
|
|
|
@@ -377,7 +377,7 @@ class linked_hash_map {
|
|
|
377
377
|
mapped_type& at(const key_arg<K>& key) {
|
|
378
378
|
auto it = find(key);
|
|
379
379
|
if (ABSL_PREDICT_FALSE(it == end())) {
|
|
380
|
-
|
|
380
|
+
ThrowStdOutOfRange("absl::linked_hash_map::at");
|
|
381
381
|
}
|
|
382
382
|
return it->second;
|
|
383
383
|
}
|
|
@@ -167,16 +167,28 @@ class ABSL_ATTRIBUTE_OWNER node_hash_map
|
|
|
167
167
|
// // Move is guaranteed efficient
|
|
168
168
|
// absl::node_hash_map<int, std::string> map5(std::move(map4));
|
|
169
169
|
//
|
|
170
|
+
// // After the move, map4 is in a valid but unspecified state. The only
|
|
171
|
+
// // operations guaranteed to be safe on a moved-from map are destruction,
|
|
172
|
+
// // assignment, and clear(). Any other operation (e.g. size(), empty(),
|
|
173
|
+
// // iteration) results in undefined behavior.
|
|
174
|
+
//
|
|
170
175
|
// * Move assignment operator
|
|
171
176
|
//
|
|
172
177
|
// // May be efficient if allocators are compatible
|
|
173
178
|
// absl::node_hash_map<int, std::string> map6;
|
|
174
179
|
// map6 = std::move(map5);
|
|
175
180
|
//
|
|
181
|
+
// // Same moved-from guarantees apply to map5 after this operation.
|
|
182
|
+
//
|
|
176
183
|
// * Range constructor
|
|
177
184
|
//
|
|
178
185
|
// std::vector<std::pair<int, std::string>> v = {{1, "a"}, {2, "b"}};
|
|
179
186
|
// absl::node_hash_map<int, std::string> map7(v.begin(), v.end());
|
|
187
|
+
//
|
|
188
|
+
// * from_range constructor (C++23)
|
|
189
|
+
//
|
|
190
|
+
// std::vector<std::pair<int, std::string>> v = {{1, "a"}, {2, "b"}};
|
|
191
|
+
// absl::node_hash_map<int, std::string> map8(std::from_range, v);
|
|
180
192
|
node_hash_map() {}
|
|
181
193
|
using Base::Base;
|
|
182
194
|
|
|
@@ -599,22 +611,22 @@ namespace container_internal {
|
|
|
599
611
|
// Erasure and/or insertion of elements in the function is not allowed.
|
|
600
612
|
template <typename K, typename V, typename H, typename E, typename A,
|
|
601
613
|
typename Function>
|
|
602
|
-
decay_t<Function> c_for_each_fast(const node_hash_map<K, V, H, E, A>& c,
|
|
603
|
-
|
|
614
|
+
std::decay_t<Function> c_for_each_fast(const node_hash_map<K, V, H, E, A>& c,
|
|
615
|
+
Function&& f) {
|
|
604
616
|
container_internal::ForEach(f, &c);
|
|
605
617
|
return f;
|
|
606
618
|
}
|
|
607
619
|
template <typename K, typename V, typename H, typename E, typename A,
|
|
608
620
|
typename Function>
|
|
609
|
-
decay_t<Function> c_for_each_fast(node_hash_map<K, V, H, E, A>& c,
|
|
610
|
-
|
|
621
|
+
std::decay_t<Function> c_for_each_fast(node_hash_map<K, V, H, E, A>& c,
|
|
622
|
+
Function&& f) {
|
|
611
623
|
container_internal::ForEach(f, &c);
|
|
612
624
|
return f;
|
|
613
625
|
}
|
|
614
626
|
template <typename K, typename V, typename H, typename E, typename A,
|
|
615
627
|
typename Function>
|
|
616
|
-
decay_t<Function> c_for_each_fast(node_hash_map<K, V, H, E, A>&& c,
|
|
617
|
-
|
|
628
|
+
std::decay_t<Function> c_for_each_fast(node_hash_map<K, V, H, E, A>&& c,
|
|
629
|
+
Function&& f) {
|
|
618
630
|
container_internal::ForEach(f, &c);
|
|
619
631
|
return f;
|
|
620
632
|
}
|
|
@@ -640,23 +652,22 @@ class NodeHashMapPolicy
|
|
|
640
652
|
|
|
641
653
|
template <class Allocator, class... Args>
|
|
642
654
|
static value_type* new_element(Allocator* alloc, Args&&... args) {
|
|
643
|
-
using PairAlloc = typename
|
|
655
|
+
using PairAlloc = typename std::allocator_traits<
|
|
644
656
|
Allocator>::template rebind_alloc<value_type>;
|
|
645
657
|
PairAlloc pair_alloc(*alloc);
|
|
646
|
-
value_type* res =
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
std::forward<Args>(args)...);
|
|
658
|
+
value_type* res = std::allocator_traits<PairAlloc>::allocate(pair_alloc, 1);
|
|
659
|
+
std::allocator_traits<PairAlloc>::construct(pair_alloc, res,
|
|
660
|
+
std::forward<Args>(args)...);
|
|
650
661
|
return res;
|
|
651
662
|
}
|
|
652
663
|
|
|
653
664
|
template <class Allocator>
|
|
654
665
|
static void delete_element(Allocator* alloc, value_type* pair) {
|
|
655
|
-
using PairAlloc = typename
|
|
666
|
+
using PairAlloc = typename std::allocator_traits<
|
|
656
667
|
Allocator>::template rebind_alloc<value_type>;
|
|
657
668
|
PairAlloc pair_alloc(*alloc);
|
|
658
|
-
|
|
659
|
-
|
|
669
|
+
std::allocator_traits<PairAlloc>::destroy(pair_alloc, pair);
|
|
670
|
+
std::allocator_traits<PairAlloc>::deallocate(pair_alloc, pair, 1);
|
|
660
671
|
}
|
|
661
672
|
|
|
662
673
|
template <class F, class... Args>
|
|
@@ -677,7 +688,8 @@ class NodeHashMapPolicy
|
|
|
677
688
|
template <class Hash, bool kIsDefault>
|
|
678
689
|
static constexpr HashSlotFn get_hash_slot_fn() {
|
|
679
690
|
return memory_internal::IsLayoutCompatible<Key, Value>::value
|
|
680
|
-
? &
|
|
691
|
+
? &TypeErasedDerefAndApplyToSlotFirstFn<Hash, value_type,
|
|
692
|
+
kIsDefault>
|
|
681
693
|
: nullptr;
|
|
682
694
|
}
|
|
683
695
|
};
|
|
@@ -32,6 +32,10 @@
|
|
|
32
32
|
#include "absl/container/internal/unordered_map_members_test.h"
|
|
33
33
|
#include "absl/container/internal/unordered_map_modifiers_test.h"
|
|
34
34
|
|
|
35
|
+
#if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
|
|
36
|
+
#include <ranges> // NOLINT(build/c++20)
|
|
37
|
+
#endif
|
|
38
|
+
|
|
35
39
|
namespace absl {
|
|
36
40
|
ABSL_NAMESPACE_BEGIN
|
|
37
41
|
namespace container_internal {
|
|
@@ -342,6 +346,36 @@ TEST(NodeHashMap, RecursiveTypeCompiles) {
|
|
|
342
346
|
t.m[0] = RecursiveType{};
|
|
343
347
|
}
|
|
344
348
|
|
|
349
|
+
#if defined(__cpp_lib_containers_ranges) && \
|
|
350
|
+
__cpp_lib_containers_ranges >= 202202L
|
|
351
|
+
TEST(NodeHashMap, FromRange) {
|
|
352
|
+
std::vector<std::pair<int, int>> v = {{1, 2}, {3, 4}, {5, 6}};
|
|
353
|
+
absl::node_hash_map<int, int> m(std::from_range, v);
|
|
354
|
+
EXPECT_THAT(m, UnorderedElementsAre(Pair(1, 2), Pair(3, 4), Pair(5, 6)));
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
TEST(NodeHashMap, FromRangeWithAllocator) {
|
|
358
|
+
std::vector<std::pair<int, int>> v = {{1, 2}, {3, 4}, {5, 6}};
|
|
359
|
+
absl::node_hash_map<int, int,
|
|
360
|
+
absl::container_internal::hash_default_hash<int>,
|
|
361
|
+
absl::container_internal::hash_default_eq<int>,
|
|
362
|
+
Alloc<std::pair<const int, int>>>
|
|
363
|
+
m(std::from_range, v, 0, Alloc<std::pair<const int, int>>());
|
|
364
|
+
EXPECT_THAT(m, UnorderedElementsAre(Pair(1, 2), Pair(3, 4), Pair(5, 6)));
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
TEST(NodeHashMap, FromRangeWithHasherAndAllocator) {
|
|
368
|
+
std::vector<std::pair<int, int>> v = {{1, 2}, {3, 4}, {5, 6}};
|
|
369
|
+
using TestingHash = absl::container_internal::StatefulTestingHash;
|
|
370
|
+
absl::node_hash_map<int, int, TestingHash,
|
|
371
|
+
absl::container_internal::hash_default_eq<int>,
|
|
372
|
+
Alloc<std::pair<const int, int>>>
|
|
373
|
+
m(std::from_range, v, 0, TestingHash{},
|
|
374
|
+
Alloc<std::pair<const int, int>>());
|
|
375
|
+
EXPECT_THAT(m, UnorderedElementsAre(Pair(1, 2), Pair(3, 4), Pair(5, 6)));
|
|
376
|
+
}
|
|
377
|
+
#endif
|
|
378
|
+
|
|
345
379
|
} // namespace
|
|
346
380
|
} // namespace container_internal
|
|
347
381
|
ABSL_NAMESPACE_END
|
|
@@ -161,16 +161,28 @@ class ABSL_ATTRIBUTE_OWNER node_hash_set
|
|
|
161
161
|
// // Move is guaranteed efficient
|
|
162
162
|
// absl::node_hash_set<std::string> set5(std::move(set4));
|
|
163
163
|
//
|
|
164
|
+
// // After the move, set4 is in a valid but unspecified state. The only
|
|
165
|
+
// // operations guaranteed to be safe on a moved-from set are destruction,
|
|
166
|
+
// // assignment, and clear(). Any other operation (e.g. size(), empty(),
|
|
167
|
+
// // iteration) results in undefined behavior.
|
|
168
|
+
//
|
|
164
169
|
// * Move assignment operator
|
|
165
170
|
//
|
|
166
171
|
// // May be efficient if allocators are compatible
|
|
167
172
|
// absl::node_hash_set<std::string> set6;
|
|
168
173
|
// set6 = std::move(set5);
|
|
169
174
|
//
|
|
175
|
+
// // Same moved-from guarantees apply to set5 after this operation.
|
|
176
|
+
//
|
|
170
177
|
// * Range constructor
|
|
171
178
|
//
|
|
172
179
|
// std::vector<std::string> v = {"a", "b"};
|
|
173
180
|
// absl::node_hash_set<std::string> set7(v.begin(), v.end());
|
|
181
|
+
//
|
|
182
|
+
// * from_range constructor (C++23)
|
|
183
|
+
//
|
|
184
|
+
// std::vector<std::string> v = {"a", "b"};
|
|
185
|
+
// absl::node_hash_set<std::string> set8(std::from_range, v);
|
|
174
186
|
node_hash_set() {}
|
|
175
187
|
using Base::Base;
|
|
176
188
|
|
|
@@ -507,18 +519,20 @@ namespace container_internal {
|
|
|
507
519
|
// There is no guarantees on the order of the function calls.
|
|
508
520
|
// Erasure and/or insertion of elements in the function is not allowed.
|
|
509
521
|
template <typename T, typename H, typename E, typename A, typename Function>
|
|
510
|
-
decay_t<Function> c_for_each_fast(const node_hash_set<T, H, E, A>& c,
|
|
511
|
-
|
|
522
|
+
std::decay_t<Function> c_for_each_fast(const node_hash_set<T, H, E, A>& c,
|
|
523
|
+
Function&& f) {
|
|
512
524
|
container_internal::ForEach(f, &c);
|
|
513
525
|
return f;
|
|
514
526
|
}
|
|
515
527
|
template <typename T, typename H, typename E, typename A, typename Function>
|
|
516
|
-
decay_t<Function> c_for_each_fast(node_hash_set<T, H, E, A>& c,
|
|
528
|
+
std::decay_t<Function> c_for_each_fast(node_hash_set<T, H, E, A>& c,
|
|
529
|
+
Function&& f) {
|
|
517
530
|
container_internal::ForEach(f, &c);
|
|
518
531
|
return f;
|
|
519
532
|
}
|
|
520
533
|
template <typename T, typename H, typename E, typename A, typename Function>
|
|
521
|
-
decay_t<Function> c_for_each_fast(node_hash_set<T, H, E, A>&& c,
|
|
534
|
+
std::decay_t<Function> c_for_each_fast(node_hash_set<T, H, E, A>&& c,
|
|
535
|
+
Function&& f) {
|
|
522
536
|
container_internal::ForEach(f, &c);
|
|
523
537
|
return f;
|
|
524
538
|
}
|
|
@@ -541,21 +555,21 @@ struct NodeHashSetPolicy
|
|
|
541
555
|
template <class Allocator, class... Args>
|
|
542
556
|
static T* new_element(Allocator* alloc, Args&&... args) {
|
|
543
557
|
using ValueAlloc =
|
|
544
|
-
typename
|
|
558
|
+
typename std::allocator_traits<Allocator>::template rebind_alloc<T>;
|
|
545
559
|
ValueAlloc value_alloc(*alloc);
|
|
546
|
-
T* res =
|
|
547
|
-
|
|
548
|
-
|
|
560
|
+
T* res = std::allocator_traits<ValueAlloc>::allocate(value_alloc, 1);
|
|
561
|
+
std::allocator_traits<ValueAlloc>::construct(value_alloc, res,
|
|
562
|
+
std::forward<Args>(args)...);
|
|
549
563
|
return res;
|
|
550
564
|
}
|
|
551
565
|
|
|
552
566
|
template <class Allocator>
|
|
553
567
|
static void delete_element(Allocator* alloc, T* elem) {
|
|
554
568
|
using ValueAlloc =
|
|
555
|
-
typename
|
|
569
|
+
typename std::allocator_traits<Allocator>::template rebind_alloc<T>;
|
|
556
570
|
ValueAlloc value_alloc(*alloc);
|
|
557
|
-
|
|
558
|
-
|
|
571
|
+
std::allocator_traits<ValueAlloc>::destroy(value_alloc, elem);
|
|
572
|
+
std::allocator_traits<ValueAlloc>::deallocate(value_alloc, elem, 1);
|
|
559
573
|
}
|
|
560
574
|
|
|
561
575
|
template <class F, class... Args>
|
|
@@ -31,6 +31,10 @@
|
|
|
31
31
|
#include "absl/container/internal/unordered_set_modifiers_test.h"
|
|
32
32
|
#include "absl/memory/memory.h"
|
|
33
33
|
|
|
34
|
+
#if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
|
|
35
|
+
#include <ranges> // NOLINT(build/c++20)
|
|
36
|
+
#endif
|
|
37
|
+
|
|
34
38
|
namespace absl {
|
|
35
39
|
ABSL_NAMESPACE_BEGIN
|
|
36
40
|
namespace container_internal {
|
|
@@ -71,11 +75,11 @@ TEST(NodeHashSet, MergeExtractInsert) {
|
|
|
71
75
|
}
|
|
72
76
|
};
|
|
73
77
|
absl::node_hash_set<std::unique_ptr<int>, Hash, Eq> set1, set2;
|
|
74
|
-
set1.insert(
|
|
75
|
-
set1.insert(
|
|
78
|
+
set1.insert(std::make_unique<int>(7));
|
|
79
|
+
set1.insert(std::make_unique<int>(17));
|
|
76
80
|
|
|
77
|
-
set2.insert(
|
|
78
|
-
set2.insert(
|
|
81
|
+
set2.insert(std::make_unique<int>(7));
|
|
82
|
+
set2.insert(std::make_unique<int>(19));
|
|
79
83
|
|
|
80
84
|
EXPECT_THAT(set1, UnorderedElementsAre(Pointee(7), Pointee(17)));
|
|
81
85
|
EXPECT_THAT(set2, UnorderedElementsAre(Pointee(7), Pointee(19)));
|
|
@@ -85,7 +89,7 @@ TEST(NodeHashSet, MergeExtractInsert) {
|
|
|
85
89
|
EXPECT_THAT(set1, UnorderedElementsAre(Pointee(7), Pointee(17), Pointee(19)));
|
|
86
90
|
EXPECT_THAT(set2, UnorderedElementsAre(Pointee(7)));
|
|
87
91
|
|
|
88
|
-
auto node = set1.extract(
|
|
92
|
+
auto node = set1.extract(std::make_unique<int>(7));
|
|
89
93
|
EXPECT_TRUE(node);
|
|
90
94
|
EXPECT_THAT(node.value(), Pointee(7));
|
|
91
95
|
EXPECT_THAT(set1, UnorderedElementsAre(Pointee(17), Pointee(19)));
|
|
@@ -99,12 +103,12 @@ TEST(NodeHashSet, MergeExtractInsert) {
|
|
|
99
103
|
EXPECT_NE(insert_result.position->get(), insert_result.node.value().get());
|
|
100
104
|
EXPECT_THAT(set2, UnorderedElementsAre(Pointee(7)));
|
|
101
105
|
|
|
102
|
-
node = set1.extract(
|
|
106
|
+
node = set1.extract(std::make_unique<int>(17));
|
|
103
107
|
EXPECT_TRUE(node);
|
|
104
108
|
EXPECT_THAT(node.value(), Pointee(17));
|
|
105
109
|
EXPECT_THAT(set1, UnorderedElementsAre(Pointee(19)));
|
|
106
110
|
|
|
107
|
-
node.value() =
|
|
111
|
+
node.value() = std::make_unique<int>(23);
|
|
108
112
|
|
|
109
113
|
insert_result = set2.insert(std::move(node));
|
|
110
114
|
EXPECT_FALSE(node);
|
|
@@ -182,6 +186,34 @@ TEST(NodeHashSet, CForEach) {
|
|
|
182
186
|
}
|
|
183
187
|
}
|
|
184
188
|
|
|
189
|
+
#if defined(__cpp_lib_containers_ranges) && \
|
|
190
|
+
__cpp_lib_containers_ranges >= 202202L
|
|
191
|
+
TEST(NodeHashSet, FromRange) {
|
|
192
|
+
std::vector<int> v = {1, 2, 3, 4, 5};
|
|
193
|
+
absl::node_hash_set<int> s(std::from_range, v);
|
|
194
|
+
EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3, 4, 5));
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
TEST(NodeHashSet, FromRangeWithAllocator) {
|
|
198
|
+
std::vector<int> v = {1, 2, 3, 4, 5};
|
|
199
|
+
absl::node_hash_set<int, absl::container_internal::hash_default_hash<int>,
|
|
200
|
+
absl::container_internal::hash_default_eq<int>,
|
|
201
|
+
Alloc<int>>
|
|
202
|
+
s(std::from_range, v, 0, Alloc<int>());
|
|
203
|
+
EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3, 4, 5));
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
TEST(NodeHashSet, FromRangeWithHasherAndAllocator) {
|
|
207
|
+
std::vector<int> v = {1, 2, 3, 4, 5};
|
|
208
|
+
using TestingHash = absl::container_internal::StatefulTestingHash;
|
|
209
|
+
absl::node_hash_set<int, TestingHash,
|
|
210
|
+
absl::container_internal::hash_default_eq<int>,
|
|
211
|
+
Alloc<int>>
|
|
212
|
+
s(std::from_range, v, 0, TestingHash{}, Alloc<int>());
|
|
213
|
+
EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3, 4, 5));
|
|
214
|
+
}
|
|
215
|
+
#endif
|
|
216
|
+
|
|
185
217
|
} // namespace
|
|
186
218
|
} // namespace container_internal
|
|
187
219
|
ABSL_NAMESPACE_END
|
|
@@ -57,12 +57,13 @@ void TestInlineElementSize(
|
|
|
57
57
|
tables.back().insert(values.begin(), values.end());
|
|
58
58
|
}
|
|
59
59
|
size_t new_count = 0;
|
|
60
|
-
sampler.Iterate([&](const HashtablezInfo& info) {
|
|
60
|
+
EXPECT_EQ(sampler.Iterate([&](const HashtablezInfo& info) {
|
|
61
61
|
if (preexisting_info.insert(&info).second) {
|
|
62
62
|
EXPECT_EQ(info.inline_element_size, expected_element_size);
|
|
63
63
|
++new_count;
|
|
64
64
|
}
|
|
65
|
-
})
|
|
65
|
+
}),
|
|
66
|
+
0);
|
|
66
67
|
// Make sure we actually did get a new hashtablez.
|
|
67
68
|
EXPECT_GT(new_count, 0);
|
|
68
69
|
}
|
|
@@ -99,8 +100,10 @@ TEST(FlatHashMap, SampleElementSize) {
|
|
|
99
100
|
// cannot be a flat_hash_set, however, since that would introduce a mutex
|
|
100
101
|
// deadlock.
|
|
101
102
|
std::unordered_set<const HashtablezInfo*> preexisting_info; // NOLINT
|
|
102
|
-
sampler.Iterate(
|
|
103
|
-
|
|
103
|
+
EXPECT_EQ(sampler.Iterate([&](const HashtablezInfo& info) {
|
|
104
|
+
preexisting_info.insert(&info);
|
|
105
|
+
}),
|
|
106
|
+
0);
|
|
104
107
|
TestInlineElementSize(sampler, preexisting_info, flat_map_tables, map_values,
|
|
105
108
|
sizeof(int) + sizeof(bigstruct));
|
|
106
109
|
TestInlineElementSize(sampler, preexisting_info, node_map_tables, map_values,
|
|
@@ -25,7 +25,6 @@ absl_cc_library(
|
|
|
25
25
|
DEPS
|
|
26
26
|
absl::base
|
|
27
27
|
absl::config
|
|
28
|
-
absl::optional
|
|
29
28
|
)
|
|
30
29
|
|
|
31
30
|
# Internal-only target, do not depend on directly.
|
|
@@ -43,13 +42,13 @@ absl_cc_library(
|
|
|
43
42
|
${ABSL_DEFAULT_COPTS}
|
|
44
43
|
DEPS
|
|
45
44
|
absl::crc_cpu_detect
|
|
45
|
+
absl::bits
|
|
46
46
|
absl::config
|
|
47
47
|
absl::core_headers
|
|
48
48
|
absl::endian
|
|
49
|
+
absl::memory
|
|
49
50
|
absl::prefetch
|
|
50
51
|
absl::raw_logging_internal
|
|
51
|
-
absl::memory
|
|
52
|
-
absl::bits
|
|
53
52
|
)
|
|
54
53
|
|
|
55
54
|
absl_cc_library(
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
+
#include <memory>
|
|
15
16
|
#include <string>
|
|
16
17
|
|
|
17
18
|
#include "absl/crc/crc32c.h"
|
|
@@ -144,7 +145,7 @@ void BM_Memcpy(benchmark::State& state) {
|
|
|
144
145
|
int string_len = state.range(0);
|
|
145
146
|
|
|
146
147
|
std::string source = TestString(string_len);
|
|
147
|
-
auto dest =
|
|
148
|
+
auto dest = std::make_unique<char[]>(string_len);
|
|
148
149
|
|
|
149
150
|
for (auto s : state) {
|
|
150
151
|
benchmark::DoNotOptimize(source);
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
#include "absl/crc/internal/cpu_detect.h"
|
|
16
16
|
|
|
17
17
|
#include <cstdint>
|
|
18
|
+
#include <optional> // IWYU pragma: keep
|
|
18
19
|
#include <string>
|
|
19
20
|
|
|
20
21
|
#include "absl/base/config.h"
|
|
21
|
-
#include "absl/types/optional.h" // IWYU pragma: keep
|
|
22
22
|
|
|
23
23
|
#if defined(__aarch64__) && defined(__linux__)
|
|
24
24
|
#include <asm/hwcap.h>
|
|
@@ -308,12 +308,12 @@ bool SupportsArmCRC32PMULL() {
|
|
|
308
308
|
CpuType GetCpuType() { return CpuType::kUnknown; }
|
|
309
309
|
|
|
310
310
|
template <typename T>
|
|
311
|
-
static
|
|
311
|
+
static std::optional<T> ReadSysctlByName(const char* name) {
|
|
312
312
|
T val;
|
|
313
313
|
size_t val_size = sizeof(T);
|
|
314
314
|
int ret = sysctlbyname(name, &val, &val_size, nullptr, 0);
|
|
315
315
|
if (ret == -1) {
|
|
316
|
-
return
|
|
316
|
+
return std::nullopt;
|
|
317
317
|
}
|
|
318
318
|
return val;
|
|
319
319
|
}
|
|
@@ -322,7 +322,7 @@ bool SupportsArmCRC32PMULL() {
|
|
|
322
322
|
// Newer XNU kernels support querying all capabilities in a single
|
|
323
323
|
// sysctlbyname.
|
|
324
324
|
#if defined(CAP_BIT_CRC32) && defined(CAP_BIT_FEAT_PMULL)
|
|
325
|
-
static const
|
|
325
|
+
static const std::optional<uint64_t> caps =
|
|
326
326
|
ReadSysctlByName<uint64_t>("hw.optional.arm.caps");
|
|
327
327
|
if (caps.has_value()) {
|
|
328
328
|
constexpr uint64_t kCrc32AndPmullCaps =
|
|
@@ -332,13 +332,13 @@ bool SupportsArmCRC32PMULL() {
|
|
|
332
332
|
#endif
|
|
333
333
|
|
|
334
334
|
// https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3915619
|
|
335
|
-
static const
|
|
335
|
+
static const std::optional<int> armv8_crc32 =
|
|
336
336
|
ReadSysctlByName<int>("hw.optional.armv8_crc32");
|
|
337
337
|
if (armv8_crc32.value_or(0) == 0) {
|
|
338
338
|
return false;
|
|
339
339
|
}
|
|
340
340
|
// https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3918855
|
|
341
|
-
static const
|
|
341
|
+
static const std::optional<int> feat_pmull =
|
|
342
342
|
ReadSysctlByName<int>("hw.optional.arm.FEAT_PMULL");
|
|
343
343
|
if (feat_pmull.value_or(0) == 0) {
|
|
344
344
|
return false;
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
#include "absl/base/internal/raw_logging.h"
|
|
48
48
|
#include "absl/base/prefetch.h"
|
|
49
49
|
#include "absl/crc/internal/crc_internal.h"
|
|
50
|
+
#include "absl/numeric/bits.h"
|
|
50
51
|
|
|
51
52
|
namespace absl {
|
|
52
53
|
ABSL_NAMESPACE_BEGIN
|
|
@@ -410,16 +411,13 @@ void CRC32::Scramble(uint32_t* crc) const {
|
|
|
410
411
|
// Rotate by near half the word size plus 1. See the scramble comment in
|
|
411
412
|
// crc_internal.h for an explanation.
|
|
412
413
|
constexpr int scramble_rotate = (32 / 2) + 1;
|
|
413
|
-
*crc =
|
|
414
|
-
32, scramble_rotate) &
|
|
415
|
-
MaskOfLength<uint32_t>(32);
|
|
414
|
+
*crc = absl::rotr(static_cast<uint32_t>(*crc + kScrambleLo), scramble_rotate);
|
|
416
415
|
}
|
|
417
416
|
|
|
418
417
|
void CRC32::Unscramble(uint32_t* crc) const {
|
|
419
418
|
constexpr int scramble_rotate = (32 / 2) + 1;
|
|
420
|
-
uint64_t rotated =
|
|
421
|
-
|
|
422
|
-
*crc = (rotated - kScrambleLo) & MaskOfLength<uint32_t>(32);
|
|
419
|
+
uint64_t rotated = absl::rotl(*crc, scramble_rotate);
|
|
420
|
+
*crc = static_cast<uint32_t>(rotated - kScrambleLo);
|
|
423
421
|
}
|
|
424
422
|
|
|
425
423
|
// Constructor and destructor for base class CRC.
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
#ifndef ABSL_CRC_INTERNAL_CRC32_X86_ARM_COMBINED_SIMD_H_
|
|
16
16
|
#define ABSL_CRC_INTERNAL_CRC32_X86_ARM_COMBINED_SIMD_H_
|
|
17
17
|
|
|
18
|
+
#include <array>
|
|
18
19
|
#include <cstdint>
|
|
19
20
|
|
|
20
21
|
#include "absl/base/config.h"
|
|
@@ -65,6 +66,13 @@ using V128 = uint64x2_t;
|
|
|
65
66
|
using V128 = __m128i;
|
|
66
67
|
#endif
|
|
67
68
|
|
|
69
|
+
#if defined(__AVX__)
|
|
70
|
+
using V256 = __m256i;
|
|
71
|
+
#else
|
|
72
|
+
// Placeholder for V256 when AVX is not available.
|
|
73
|
+
using V256 = std::array<uint64_t, 4>;
|
|
74
|
+
#endif
|
|
75
|
+
|
|
68
76
|
// Starting with the initial value in |crc|, accumulates a CRC32 value for
|
|
69
77
|
// unsigned integers of different sizes.
|
|
70
78
|
uint32_t CRC32_u8(uint32_t crc, uint8_t v);
|
|
@@ -119,6 +127,17 @@ int64_t V128_Low64(const V128 l);
|
|
|
119
127
|
// Add packed 64-bit integers in |l| and |r|.
|
|
120
128
|
V128 V128_Add64(const V128 l, const V128 r);
|
|
121
129
|
|
|
130
|
+
#if defined(__AVX__)
|
|
131
|
+
inline V256 V256_LoadU(const V256* src);
|
|
132
|
+
inline V256 V256_Broadcast128(const V128* src);
|
|
133
|
+
#else
|
|
134
|
+
template <typename T = V256>
|
|
135
|
+
T V256_LoadU(const T* src);
|
|
136
|
+
|
|
137
|
+
template <typename T = V256>
|
|
138
|
+
T V256_Broadcast128(const V128* src);
|
|
139
|
+
#endif
|
|
140
|
+
|
|
122
141
|
#endif
|
|
123
142
|
|
|
124
143
|
#if defined(ABSL_CRC_INTERNAL_HAVE_X86_SIMD)
|
|
@@ -271,6 +290,28 @@ inline V128 V128_Add64(const V128 l, const V128 r) { return vaddq_u64(l, r); }
|
|
|
271
290
|
|
|
272
291
|
#endif
|
|
273
292
|
|
|
293
|
+
#if defined(__AVX__) && defined(ABSL_CRC_INTERNAL_HAVE_X86_SIMD)
|
|
294
|
+
inline V256 V256_LoadU(const V256* src) { return _mm256_loadu_si256(src); }
|
|
295
|
+
|
|
296
|
+
inline V256 V256_Broadcast128(const V128* src) {
|
|
297
|
+
return _mm256_castps_si256(
|
|
298
|
+
_mm256_broadcast_ps(reinterpret_cast<const __m128*>(src)));
|
|
299
|
+
}
|
|
300
|
+
#elif defined(ABSL_CRC_INTERNAL_HAVE_X86_SIMD) || \
|
|
301
|
+
defined(ABSL_CRC_INTERNAL_HAVE_ARM_SIMD)
|
|
302
|
+
template <typename T>
|
|
303
|
+
inline T V256_LoadU(const T* src) {
|
|
304
|
+
(void)src;
|
|
305
|
+
return T{};
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
template <typename T>
|
|
309
|
+
inline T V256_Broadcast128(const V128* src) {
|
|
310
|
+
(void)src;
|
|
311
|
+
return T{};
|
|
312
|
+
}
|
|
313
|
+
#endif
|
|
314
|
+
|
|
274
315
|
} // namespace crc_internal
|
|
275
316
|
ABSL_NAMESPACE_END
|
|
276
317
|
} // namespace absl
|
|
@@ -137,22 +137,6 @@ class CRC32 : public CRCImpl {
|
|
|
137
137
|
|
|
138
138
|
// Helpers
|
|
139
139
|
|
|
140
|
-
// Return a bit mask containing len 1-bits.
|
|
141
|
-
// Requires 0 < len <= sizeof(T)
|
|
142
|
-
template <typename T>
|
|
143
|
-
T MaskOfLength(int len) {
|
|
144
|
-
// shift 2 by len-1 rather than 1 by len because shifts of wordsize
|
|
145
|
-
// are undefined.
|
|
146
|
-
return (T(2) << (len - 1)) - 1;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Rotate low-order "width" bits of "in" right by "r" bits,
|
|
150
|
-
// setting other bits in word to arbitrary values.
|
|
151
|
-
template <typename T>
|
|
152
|
-
T RotateRight(T in, int width, int r) {
|
|
153
|
-
return (in << (width - r)) | ((in >> r) & MaskOfLength<T>(width - r));
|
|
154
|
-
}
|
|
155
|
-
|
|
156
140
|
// RoundUp<N>(p) returns the lowest address >= p aligned to an N-byte
|
|
157
141
|
// boundary. Requires that N is a power of 2.
|
|
158
142
|
template <int alignment>
|