re2 1.22.2 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -4
- package/binding.gyp +5 -1
- package/lib/addon.cc +4 -0
- package/lib/new.cc +1 -246
- package/lib/pattern.cc +252 -0
- package/lib/pattern.h +10 -0
- package/lib/set.cc +777 -0
- package/lib/wrapped_re2_set.h +42 -0
- package/package.json +21 -9
- package/re2.d.ts +46 -9
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
- package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
- package/vendor/abseil-cpp/CMake/README.md +2 -2
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/MODULE.bazel +6 -9
- package/vendor/abseil-cpp/README.md +6 -8
- package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
- package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
- package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
- package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
- package/vendor/abseil-cpp/absl/base/config.h +22 -129
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
- package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
- package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
- package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
- package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
- package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
- package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
- package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
- package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
- package/vendor/abseil-cpp/absl/base/options.h +3 -80
- package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
- package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
- package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
- package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
- package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
- package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
- package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
- package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
- package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
- package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
- package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
- package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
- package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
- package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
- package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
- package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
- package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
- package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
- package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
- package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
- package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
- package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
- package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
- package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
- package/vendor/abseil-cpp/absl/log/check.h +2 -1
- package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
- package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
- package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
- package/vendor/abseil-cpp/absl/log/globals.h +4 -5
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
- package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
- package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
- package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
- package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
- package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
- package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
- package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
- package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
- package/vendor/abseil-cpp/absl/log/log.h +48 -35
- package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
- package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
- package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
- package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
- package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
- package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
- package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
- package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
- package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
- package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
- package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
- package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
- package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
- package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
- package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
- package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
- package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
- package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
- package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
- package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
- package/vendor/abseil-cpp/absl/random/random.h +88 -53
- package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
- package/vendor/abseil-cpp/absl/status/status.cc +4 -8
- package/vendor/abseil-cpp/absl/status/status.h +8 -8
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
- package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
- package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
- package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
- package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
- package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
- package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
- package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
- package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
- package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
- package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
- package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
- package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
- package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
- package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
- package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
- package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
- package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
- package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
- package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
- package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
- package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
- package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
- package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
- package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
- package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
- package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
- package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
- package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
- package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
- package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
- package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
- package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
- package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
- package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
- package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
- package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
- package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
- package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
- package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
- package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
- package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
- package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
- package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
- package/vendor/abseil-cpp/absl/time/time.h +24 -18
- package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
- package/vendor/abseil-cpp/absl/types/any.h +9 -484
- package/vendor/abseil-cpp/absl/types/optional.h +7 -747
- package/vendor/abseil-cpp/absl/types/span.h +46 -19
- package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
- package/vendor/abseil-cpp/absl/types/variant.h +5 -784
- package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
- package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
- package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
- package/vendor/re2/.bazelrc +4 -4
- package/vendor/re2/.bcr/metadata.template.json +16 -0
- package/vendor/re2/.bcr/presubmit.yml +57 -0
- package/vendor/re2/.bcr/source.template.json +5 -0
- package/vendor/re2/.github/bazel.sh +1 -7
- package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
- package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
- package/vendor/re2/.github/workflows/ci.yml +5 -6
- package/vendor/re2/.github/workflows/pages.yml +3 -3
- package/vendor/re2/.github/workflows/python.yml +29 -24
- package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
- package/vendor/re2/.github/workflows/release.yml +15 -4
- package/vendor/re2/BUILD.bazel +25 -0
- package/vendor/re2/CMakeLists.txt +100 -85
- package/vendor/re2/CONTRIBUTING.md +0 -1
- package/vendor/re2/MODULE.bazel +10 -10
- package/vendor/re2/Makefile +1 -1
- package/vendor/re2/README.md +259 -0
- package/vendor/re2/python/BUILD.bazel +8 -0
- package/vendor/re2/python/re2.py +1 -1
- package/vendor/re2/python/re2_test.py +6 -0
- package/vendor/re2/python/setup.py +3 -3
- package/vendor/re2/re2/bitmap256.cc +3 -4
- package/vendor/re2/re2/bitstate.cc +15 -10
- package/vendor/re2/re2/dfa.cc +1 -2
- package/vendor/re2/re2/parse.cc +3 -4
- package/vendor/re2/re2/prog.cc +1 -2
- package/vendor/re2/re2/prog.h +1 -0
- package/vendor/re2/re2/re2.cc +5 -0
- package/vendor/re2/re2/re2.h +9 -9
- package/vendor/re2/re2/set.cc +6 -0
- package/vendor/re2/re2/set.h +5 -0
- package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
- package/vendor/re2/re2/testing/re2_test.cc +8 -0
- package/vendor/re2/re2/testing/set_test.cc +5 -0
- package/vendor/re2/re2/walker-inl.h +1 -1
- package/vendor/abseil-cpp/WORKSPACE +0 -76
- package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
- package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
- package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
- package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
- package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
- package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
- package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
- package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
- package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
- package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
- package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
- package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
- package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
- package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
- package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
- package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
- package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
- package/vendor/re2/.github/workflows/pr.yml +0 -34
- package/vendor/re2/README +0 -47
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// Copyright 2025 The Abseil Authors
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
// -----------------------------------------------------------------------------
|
|
16
|
+
// File: internal/iterator_traits.h
|
|
17
|
+
// -----------------------------------------------------------------------------
|
|
18
|
+
//
|
|
19
|
+
// Helpers for querying traits of iterators, for implementing containers, etc.
|
|
20
|
+
|
|
21
|
+
#ifndef ABSL_BASE_INTERNAL_ITERATOR_TRAITS_H_
|
|
22
|
+
#define ABSL_BASE_INTERNAL_ITERATOR_TRAITS_H_
|
|
23
|
+
|
|
24
|
+
#include <iterator>
|
|
25
|
+
#include <type_traits>
|
|
26
|
+
|
|
27
|
+
#include "absl/base/config.h"
|
|
28
|
+
#include "absl/meta/type_traits.h"
|
|
29
|
+
|
|
30
|
+
namespace absl {
|
|
31
|
+
ABSL_NAMESPACE_BEGIN
|
|
32
|
+
namespace base_internal {
|
|
33
|
+
|
|
34
|
+
template <typename Iterator, typename = void>
|
|
35
|
+
struct IteratorCategory {};
|
|
36
|
+
|
|
37
|
+
template <typename Iterator>
|
|
38
|
+
struct IteratorCategory<
|
|
39
|
+
Iterator,
|
|
40
|
+
absl::void_t<typename std::iterator_traits<Iterator>::iterator_category>> {
|
|
41
|
+
using type = typename std::iterator_traits<Iterator>::iterator_category;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
template <typename Iterator, typename = void>
|
|
45
|
+
struct IteratorConceptImpl : IteratorCategory<Iterator> {};
|
|
46
|
+
|
|
47
|
+
template <typename Iterator>
|
|
48
|
+
struct IteratorConceptImpl<
|
|
49
|
+
Iterator,
|
|
50
|
+
absl::void_t<typename std::iterator_traits<Iterator>::iterator_concept>> {
|
|
51
|
+
using type = typename std::iterator_traits<Iterator>::iterator_concept;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// The newer `std::iterator_traits<Iterator>::iterator_concept` if available,
|
|
55
|
+
// else `std::iterator_traits<Iterator>::iterator_category`.
|
|
56
|
+
template <typename Iterator>
|
|
57
|
+
using IteratorConcept = typename IteratorConceptImpl<Iterator>::type;
|
|
58
|
+
|
|
59
|
+
template <typename IteratorTag, typename Iterator>
|
|
60
|
+
using IsAtLeastIterator =
|
|
61
|
+
std::is_convertible<IteratorConcept<Iterator>, IteratorTag>;
|
|
62
|
+
|
|
63
|
+
template <typename Iterator>
|
|
64
|
+
using IsAtLeastForwardIterator =
|
|
65
|
+
IsAtLeastIterator<std::forward_iterator_tag, Iterator>;
|
|
66
|
+
|
|
67
|
+
} // namespace base_internal
|
|
68
|
+
ABSL_NAMESPACE_END
|
|
69
|
+
} // namespace absl
|
|
70
|
+
|
|
71
|
+
#endif // ABSL_BASE_INTERNAL_ITERATOR_TRAITS_H_
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// Copyright 2025 The Abseil Authors
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
|
|
15
|
+
#include "absl/base/internal/iterator_traits.h"
|
|
16
|
+
|
|
17
|
+
#include <forward_list>
|
|
18
|
+
#include <iterator>
|
|
19
|
+
#include <list>
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
#include "gtest/gtest.h"
|
|
23
|
+
#include "absl/base/config.h"
|
|
24
|
+
#include "absl/base/internal/iterator_traits_test_helper.h"
|
|
25
|
+
|
|
26
|
+
namespace absl {
|
|
27
|
+
ABSL_NAMESPACE_BEGIN
|
|
28
|
+
namespace base_internal {
|
|
29
|
+
namespace {
|
|
30
|
+
|
|
31
|
+
TEST(IsAtLeastIteratorTest, IsAtLeastIterator) {
|
|
32
|
+
EXPECT_TRUE((IsAtLeastIterator<std::input_iterator_tag, int*>()));
|
|
33
|
+
EXPECT_TRUE((IsAtLeastIterator<std::forward_iterator_tag, int*>()));
|
|
34
|
+
EXPECT_TRUE((IsAtLeastIterator<std::bidirectional_iterator_tag, int*>()));
|
|
35
|
+
EXPECT_TRUE((IsAtLeastIterator<std::random_access_iterator_tag, int*>()));
|
|
36
|
+
EXPECT_TRUE((IsAtLeastIterator<std::input_iterator_tag,
|
|
37
|
+
std::vector<int>::iterator>()));
|
|
38
|
+
EXPECT_TRUE((IsAtLeastIterator<std::forward_iterator_tag,
|
|
39
|
+
std::vector<int>::iterator>()));
|
|
40
|
+
EXPECT_TRUE((IsAtLeastIterator<std::bidirectional_iterator_tag,
|
|
41
|
+
std::vector<int>::iterator>()));
|
|
42
|
+
EXPECT_TRUE((IsAtLeastIterator<std::random_access_iterator_tag,
|
|
43
|
+
std::vector<int>::iterator>()));
|
|
44
|
+
|
|
45
|
+
EXPECT_TRUE(
|
|
46
|
+
(IsAtLeastIterator<std::input_iterator_tag, std::list<int>::iterator>()));
|
|
47
|
+
EXPECT_TRUE((IsAtLeastIterator<std::forward_iterator_tag,
|
|
48
|
+
std::list<int>::iterator>()));
|
|
49
|
+
EXPECT_TRUE((IsAtLeastIterator<std::bidirectional_iterator_tag,
|
|
50
|
+
std::list<int>::iterator>()));
|
|
51
|
+
EXPECT_FALSE((IsAtLeastIterator<std::random_access_iterator_tag,
|
|
52
|
+
std::list<int>::iterator>()));
|
|
53
|
+
|
|
54
|
+
EXPECT_TRUE((IsAtLeastIterator<std::input_iterator_tag,
|
|
55
|
+
std::forward_list<int>::iterator>()));
|
|
56
|
+
EXPECT_TRUE((IsAtLeastIterator<std::forward_iterator_tag,
|
|
57
|
+
std::forward_list<int>::iterator>()));
|
|
58
|
+
EXPECT_FALSE((IsAtLeastIterator<std::bidirectional_iterator_tag,
|
|
59
|
+
std::forward_list<int>::iterator>()));
|
|
60
|
+
EXPECT_FALSE((IsAtLeastIterator<std::random_access_iterator_tag,
|
|
61
|
+
std::forward_list<int>::iterator>()));
|
|
62
|
+
|
|
63
|
+
EXPECT_TRUE((IsAtLeastIterator<std::input_iterator_tag,
|
|
64
|
+
std::istream_iterator<int>>()));
|
|
65
|
+
EXPECT_FALSE((IsAtLeastIterator<std::forward_iterator_tag,
|
|
66
|
+
std::istream_iterator<int>>()));
|
|
67
|
+
EXPECT_FALSE((IsAtLeastIterator<std::bidirectional_iterator_tag,
|
|
68
|
+
std::istream_iterator<int>>()));
|
|
69
|
+
EXPECT_FALSE((IsAtLeastIterator<std::random_access_iterator_tag,
|
|
70
|
+
std::istream_iterator<int>>()));
|
|
71
|
+
|
|
72
|
+
EXPECT_TRUE((IsAtLeastIterator<std::input_iterator_tag,
|
|
73
|
+
Cpp20ForwardZipIterator<int*>>()));
|
|
74
|
+
EXPECT_TRUE((IsAtLeastIterator<std::forward_iterator_tag,
|
|
75
|
+
Cpp20ForwardZipIterator<int*>>()));
|
|
76
|
+
EXPECT_FALSE((IsAtLeastIterator<std::bidirectional_iterator_tag,
|
|
77
|
+
Cpp20ForwardZipIterator<int*>>()));
|
|
78
|
+
EXPECT_FALSE((IsAtLeastIterator<std::random_access_iterator_tag,
|
|
79
|
+
Cpp20ForwardZipIterator<int*>>()));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
} // namespace
|
|
83
|
+
} // namespace base_internal
|
|
84
|
+
ABSL_NAMESPACE_END
|
|
85
|
+
} // namespace absl
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// Copyright 2025 The Abseil Authors
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
|
|
15
|
+
#ifndef ABSL_BASE_INTERNAL_ITERATOR_TRAITS_TEST_HELPER_H_
|
|
16
|
+
#define ABSL_BASE_INTERNAL_ITERATOR_TRAITS_TEST_HELPER_H_
|
|
17
|
+
|
|
18
|
+
#include <iterator>
|
|
19
|
+
#include <utility>
|
|
20
|
+
|
|
21
|
+
#include "absl/base/config.h"
|
|
22
|
+
|
|
23
|
+
namespace absl {
|
|
24
|
+
ABSL_NAMESPACE_BEGIN
|
|
25
|
+
namespace base_internal {
|
|
26
|
+
|
|
27
|
+
// This would be a forward_iterator in C++20, but it's only an input iterator
|
|
28
|
+
// before that, since it has a non-reference `reference`.
|
|
29
|
+
template <typename Iterator>
|
|
30
|
+
class Cpp20ForwardZipIterator {
|
|
31
|
+
using IteratorReference = typename std::iterator_traits<Iterator>::reference;
|
|
32
|
+
|
|
33
|
+
public:
|
|
34
|
+
Cpp20ForwardZipIterator() = default;
|
|
35
|
+
explicit Cpp20ForwardZipIterator(Iterator left, Iterator right)
|
|
36
|
+
: left_(left), right_(right) {}
|
|
37
|
+
|
|
38
|
+
Cpp20ForwardZipIterator& operator++() {
|
|
39
|
+
++left_;
|
|
40
|
+
++right_;
|
|
41
|
+
return *this;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
Cpp20ForwardZipIterator operator++(int) {
|
|
45
|
+
Cpp20ForwardZipIterator tmp(*this);
|
|
46
|
+
++*this;
|
|
47
|
+
return *this;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
std::pair<IteratorReference, IteratorReference> operator*() const {
|
|
51
|
+
return {*left_, *right_};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// C++17 input iterators require `operator->`, but this isn't possible to
|
|
55
|
+
// implement. C++20 dropped the requirement.
|
|
56
|
+
|
|
57
|
+
friend bool operator==(const Cpp20ForwardZipIterator& lhs,
|
|
58
|
+
const Cpp20ForwardZipIterator& rhs) {
|
|
59
|
+
return lhs.left_ == rhs.left_ && lhs.right_ == rhs.right_;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
friend bool operator!=(const Cpp20ForwardZipIterator& lhs,
|
|
63
|
+
const Cpp20ForwardZipIterator& rhs) {
|
|
64
|
+
return !(lhs == rhs);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
private:
|
|
68
|
+
Iterator left_{};
|
|
69
|
+
Iterator right_{};
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
} // namespace base_internal
|
|
73
|
+
ABSL_NAMESPACE_END
|
|
74
|
+
} // namespace absl
|
|
75
|
+
|
|
76
|
+
template <typename Iterator>
|
|
77
|
+
struct std::iterator_traits<
|
|
78
|
+
absl::base_internal::Cpp20ForwardZipIterator<Iterator>> {
|
|
79
|
+
private:
|
|
80
|
+
using IteratorReference = typename std::iterator_traits<Iterator>::reference;
|
|
81
|
+
|
|
82
|
+
public:
|
|
83
|
+
using iterator_category = std::input_iterator_tag;
|
|
84
|
+
using iterator_concept = std::forward_iterator_tag;
|
|
85
|
+
using value_type = std::pair<IteratorReference, IteratorReference>;
|
|
86
|
+
using difference_type =
|
|
87
|
+
typename std::iterator_traits<Iterator>::difference_type;
|
|
88
|
+
using reference = value_type;
|
|
89
|
+
using pointer = void;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
#if defined(__cpp_lib_concepts)
|
|
93
|
+
static_assert(
|
|
94
|
+
std::forward_iterator<absl::base_internal::Cpp20ForwardZipIterator<int*>>);
|
|
95
|
+
#endif // defined(__cpp_lib_concepts)
|
|
96
|
+
|
|
97
|
+
#endif // ABSL_BASE_INTERNAL_ITERATOR_TRAITS_TEST_HELPER_H_
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
|
|
20
20
|
#include "absl/base/internal/low_level_alloc.h"
|
|
21
21
|
|
|
22
|
+
#include <stdint.h>
|
|
23
|
+
|
|
24
|
+
#include <optional>
|
|
22
25
|
#include <type_traits>
|
|
23
26
|
|
|
24
27
|
#include "absl/base/call_once.h"
|
|
@@ -219,6 +222,32 @@ struct LowLevelAlloc::Arena {
|
|
|
219
222
|
uint32_t random ABSL_GUARDED_BY(mu);
|
|
220
223
|
};
|
|
221
224
|
|
|
225
|
+
// ---------------------------------------------------------------
|
|
226
|
+
// An async-signal-safe arena for LowLevelAlloc
|
|
227
|
+
static std::atomic<base_internal::LowLevelAlloc::Arena *> g_sig_safe_arena;
|
|
228
|
+
|
|
229
|
+
base_internal::LowLevelAlloc::Arena *SigSafeArena() {
|
|
230
|
+
return g_sig_safe_arena.load(std::memory_order_acquire);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
void InitSigSafeArena() {
|
|
234
|
+
if (SigSafeArena() == nullptr) {
|
|
235
|
+
uint32_t flags = 0;
|
|
236
|
+
#ifndef ABSL_LOW_LEVEL_ALLOC_ASYNC_SIGNAL_SAFE_MISSING
|
|
237
|
+
flags |= base_internal::LowLevelAlloc::kAsyncSignalSafe;
|
|
238
|
+
#endif
|
|
239
|
+
base_internal::LowLevelAlloc::Arena *new_arena =
|
|
240
|
+
base_internal::LowLevelAlloc::NewArena(flags);
|
|
241
|
+
base_internal::LowLevelAlloc::Arena *old_value = nullptr;
|
|
242
|
+
if (!g_sig_safe_arena.compare_exchange_strong(old_value, new_arena,
|
|
243
|
+
std::memory_order_release,
|
|
244
|
+
std::memory_order_relaxed)) {
|
|
245
|
+
// We lost a race to allocate an arena; deallocate.
|
|
246
|
+
base_internal::LowLevelAlloc::DeleteArena(new_arena);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
222
251
|
namespace {
|
|
223
252
|
// Static storage space for the lazily-constructed, default global arena
|
|
224
253
|
// instances. We require this space because the whole point of LowLevelAlloc
|
|
@@ -289,11 +318,11 @@ class ABSL_SCOPED_LOCKABLE ArenaLock {
|
|
|
289
318
|
mask_valid_ = pthread_sigmask(SIG_BLOCK, &all, &mask_) == 0;
|
|
290
319
|
}
|
|
291
320
|
#endif
|
|
292
|
-
arena_->mu.
|
|
321
|
+
arena_->mu.lock();
|
|
293
322
|
}
|
|
294
323
|
~ArenaLock() { ABSL_RAW_CHECK(left_, "haven't left Arena region"); }
|
|
295
324
|
void Leave() ABSL_UNLOCK_FUNCTION() {
|
|
296
|
-
arena_->mu.
|
|
325
|
+
arena_->mu.unlock();
|
|
297
326
|
#ifndef ABSL_LOW_LEVEL_ALLOC_ASYNC_SIGNAL_SAFE_MISSING
|
|
298
327
|
if (mask_valid_) {
|
|
299
328
|
const int err = pthread_sigmask(SIG_SETMASK, &mask_, nullptr);
|
|
@@ -330,7 +359,7 @@ size_t GetPageSize() {
|
|
|
330
359
|
GetSystemInfo(&system_info);
|
|
331
360
|
return std::max(system_info.dwPageSize, system_info.dwAllocationGranularity);
|
|
332
361
|
#elif defined(__wasm__) || defined(__asmjs__) || defined(__hexagon__)
|
|
333
|
-
return getpagesize();
|
|
362
|
+
return static_cast<size_t>(getpagesize());
|
|
334
363
|
#else
|
|
335
364
|
return static_cast<size_t>(sysconf(_SC_PAGESIZE));
|
|
336
365
|
#endif
|
|
@@ -448,8 +477,8 @@ static inline uintptr_t RoundUp(uintptr_t addr, uintptr_t align) {
|
|
|
448
477
|
// that the freelist is in the correct order, that it
|
|
449
478
|
// consists of regions marked "unallocated", and that no two regions
|
|
450
479
|
// are adjacent in memory (they should have been coalesced).
|
|
451
|
-
|
|
452
|
-
|
|
480
|
+
static AllocList *Next(int i, AllocList *prev, LowLevelAlloc::Arena *arena)
|
|
481
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(arena->mu) {
|
|
453
482
|
ABSL_RAW_CHECK(i < prev->levels, "too few levels in Next()");
|
|
454
483
|
AllocList *next = prev->next[i];
|
|
455
484
|
if (next != nullptr) {
|
|
@@ -473,6 +502,7 @@ static void Coalesce(AllocList *a) {
|
|
|
473
502
|
if (n != nullptr && reinterpret_cast<char *>(a) + a->header.size ==
|
|
474
503
|
reinterpret_cast<char *>(n)) {
|
|
475
504
|
LowLevelAlloc::Arena *arena = a->header.arena;
|
|
505
|
+
arena->mu.AssertHeld();
|
|
476
506
|
a->header.size += n->header.size;
|
|
477
507
|
n->header.magic = 0;
|
|
478
508
|
n->header.arena = nullptr;
|
|
@@ -486,8 +516,8 @@ static void Coalesce(AllocList *a) {
|
|
|
486
516
|
}
|
|
487
517
|
|
|
488
518
|
// Adds block at location "v" to the free list
|
|
489
|
-
|
|
490
|
-
|
|
519
|
+
static void AddToFreelist(void *v, LowLevelAlloc::Arena *arena)
|
|
520
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(arena->mu) {
|
|
491
521
|
AllocList *f = reinterpret_cast<AllocList *>(reinterpret_cast<char *>(v) -
|
|
492
522
|
sizeof(f->header));
|
|
493
523
|
ABSL_RAW_CHECK(f->header.magic == Magic(kMagicAllocated, &f->header),
|
|
@@ -543,7 +573,7 @@ static void *DoAllocWithArena(size_t request, LowLevelAlloc::Arena *arena) {
|
|
|
543
573
|
}
|
|
544
574
|
// we unlock before mmap() both because mmap() may call a callback hook,
|
|
545
575
|
// and because it may be slow.
|
|
546
|
-
arena->mu.
|
|
576
|
+
arena->mu.unlock();
|
|
547
577
|
// mmap generous 64K chunks to decrease
|
|
548
578
|
// the chances/impact of fragmentation:
|
|
549
579
|
size_t new_pages_size = RoundUp(req_rnd, arena->pagesize * 16);
|
|
@@ -582,7 +612,7 @@ static void *DoAllocWithArena(size_t request, LowLevelAlloc::Arena *arena) {
|
|
|
582
612
|
#endif
|
|
583
613
|
#endif // __linux__
|
|
584
614
|
#endif // _WIN32
|
|
585
|
-
arena->mu.
|
|
615
|
+
arena->mu.lock();
|
|
586
616
|
s = reinterpret_cast<AllocList *>(new_pages);
|
|
587
617
|
s->header.size = new_pages_size;
|
|
588
618
|
// Pretend the block is allocated; call AddToFreelist() to free it.
|
|
@@ -120,6 +120,12 @@ class LowLevelAlloc {
|
|
|
120
120
|
LowLevelAlloc(); // no instances
|
|
121
121
|
};
|
|
122
122
|
|
|
123
|
+
// Returns a global async-signal-safe arena for LowLevelAlloc.
|
|
124
|
+
LowLevelAlloc::Arena *SigSafeArena();
|
|
125
|
+
|
|
126
|
+
// Ensures the global async-signal-safe arena for LowLevelAlloc is initialized.
|
|
127
|
+
void InitSigSafeArena();
|
|
128
|
+
|
|
123
129
|
} // namespace base_internal
|
|
124
130
|
ABSL_NAMESPACE_END
|
|
125
131
|
} // namespace absl
|
|
@@ -57,19 +57,20 @@ size_t GetPageSize() {
|
|
|
57
57
|
|
|
58
58
|
void* InitializePoisonedPointerInternal() {
|
|
59
59
|
const size_t block_size = GetPageSize();
|
|
60
|
+
void* data = nullptr;
|
|
60
61
|
#if defined(ABSL_HAVE_ADDRESS_SANITIZER)
|
|
61
|
-
|
|
62
|
+
data = malloc(block_size);
|
|
62
63
|
ASAN_POISON_MEMORY_REGION(data, block_size);
|
|
63
64
|
#elif defined(ABSL_HAVE_MEMORY_SANITIZER)
|
|
64
|
-
|
|
65
|
+
data = malloc(block_size);
|
|
65
66
|
__msan_poison(data, block_size);
|
|
66
67
|
#elif defined(ABSL_HAVE_MMAP)
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
data = DirectMmap(nullptr, block_size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS,
|
|
69
|
+
-1, 0);
|
|
69
70
|
if (data == MAP_FAILED) return GetBadPointerInternal();
|
|
70
71
|
#elif defined(_WIN32)
|
|
71
|
-
|
|
72
|
-
|
|
72
|
+
data = VirtualAlloc(nullptr, block_size, MEM_RESERVE | MEM_COMMIT,
|
|
73
|
+
PAGE_NOACCESS);
|
|
73
74
|
if (data == nullptr) return GetBadPointerInternal();
|
|
74
75
|
#else
|
|
75
76
|
return GetBadPointerInternal();
|
|
@@ -16,15 +16,18 @@
|
|
|
16
16
|
|
|
17
17
|
#include <algorithm>
|
|
18
18
|
#include <atomic>
|
|
19
|
+
#include <cstdint>
|
|
19
20
|
#include <limits>
|
|
20
21
|
|
|
21
22
|
#include "absl/base/attributes.h"
|
|
23
|
+
#include "absl/base/call_once.h"
|
|
22
24
|
#include "absl/base/config.h"
|
|
23
25
|
#include "absl/base/internal/atomic_hook.h"
|
|
24
26
|
#include "absl/base/internal/cycleclock.h"
|
|
27
|
+
#include "absl/base/internal/scheduling_mode.h"
|
|
25
28
|
#include "absl/base/internal/spinlock_wait.h"
|
|
26
29
|
#include "absl/base/internal/sysinfo.h" /* For NumCPUs() */
|
|
27
|
-
#include "absl/base/
|
|
30
|
+
#include "absl/base/internal/tsan_mutex_interface.h"
|
|
28
31
|
|
|
29
32
|
// Description of lock-word:
|
|
30
33
|
// 31..00: [............................3][2][1][0]
|
|
@@ -58,7 +61,7 @@ namespace absl {
|
|
|
58
61
|
ABSL_NAMESPACE_BEGIN
|
|
59
62
|
namespace base_internal {
|
|
60
63
|
|
|
61
|
-
ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES static
|
|
64
|
+
ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES static AtomicHook<void (*)(
|
|
62
65
|
const void *lock, int64_t wait_cycles)>
|
|
63
66
|
submit_profile_data;
|
|
64
67
|
|
|
@@ -67,21 +70,6 @@ void RegisterSpinLockProfiler(void (*fn)(const void *contendedlock,
|
|
|
67
70
|
submit_profile_data.Store(fn);
|
|
68
71
|
}
|
|
69
72
|
|
|
70
|
-
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
|
71
|
-
// Static member variable definitions.
|
|
72
|
-
constexpr uint32_t SpinLock::kSpinLockHeld;
|
|
73
|
-
constexpr uint32_t SpinLock::kSpinLockCooperative;
|
|
74
|
-
constexpr uint32_t SpinLock::kSpinLockDisabledScheduling;
|
|
75
|
-
constexpr uint32_t SpinLock::kSpinLockSleeper;
|
|
76
|
-
constexpr uint32_t SpinLock::kWaitTimeMask;
|
|
77
|
-
#endif
|
|
78
|
-
|
|
79
|
-
// Uncommon constructors.
|
|
80
|
-
SpinLock::SpinLock(base_internal::SchedulingMode mode)
|
|
81
|
-
: lockword_(IsCooperative(mode) ? kSpinLockCooperative : 0) {
|
|
82
|
-
ABSL_TSAN_MUTEX_CREATE(this, __tsan_mutex_not_static);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
73
|
// Monitor the lock to see if its value changes within some time period
|
|
86
74
|
// (adaptive_spin_count loop iterations). The last value read from the lock
|
|
87
75
|
// is returned from the method.
|
|
@@ -90,9 +78,8 @@ uint32_t SpinLock::SpinLoop() {
|
|
|
90
78
|
// adaptive_spin_count here.
|
|
91
79
|
ABSL_CONST_INIT static absl::once_flag init_adaptive_spin_count;
|
|
92
80
|
ABSL_CONST_INIT static int adaptive_spin_count = 0;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
});
|
|
81
|
+
LowLevelCallOnce(&init_adaptive_spin_count,
|
|
82
|
+
[]() { adaptive_spin_count = NumCPUs() > 1 ? 1000 : 1; });
|
|
96
83
|
|
|
97
84
|
int c = adaptive_spin_count;
|
|
98
85
|
uint32_t lock_value;
|
|
@@ -109,11 +96,11 @@ void SpinLock::SlowLock() {
|
|
|
109
96
|
return;
|
|
110
97
|
}
|
|
111
98
|
|
|
112
|
-
|
|
99
|
+
SchedulingMode scheduling_mode;
|
|
113
100
|
if ((lock_value & kSpinLockCooperative) != 0) {
|
|
114
|
-
scheduling_mode =
|
|
101
|
+
scheduling_mode = SCHEDULE_COOPERATIVE_AND_KERNEL;
|
|
115
102
|
} else {
|
|
116
|
-
scheduling_mode =
|
|
103
|
+
scheduling_mode = SCHEDULE_KERNEL_ONLY;
|
|
117
104
|
}
|
|
118
105
|
|
|
119
106
|
// The lock was not obtained initially, so this thread needs to wait for
|
|
@@ -143,7 +130,7 @@ void SpinLock::SlowLock() {
|
|
|
143
130
|
// new lock state will be the number of cycles this thread waited if
|
|
144
131
|
// this thread obtains the lock.
|
|
145
132
|
lock_value = TryLockInternal(lock_value, wait_cycles);
|
|
146
|
-
continue;
|
|
133
|
+
continue; // Skip the delay at the end of the loop.
|
|
147
134
|
} else if ((lock_value & kWaitTimeMask) == 0) {
|
|
148
135
|
// The lock is still held, without a waiter being marked, but something
|
|
149
136
|
// else about the lock word changed, causing our CAS to fail. For
|
|
@@ -159,8 +146,8 @@ void SpinLock::SlowLock() {
|
|
|
159
146
|
// synchronization there to avoid false positives.
|
|
160
147
|
ABSL_TSAN_MUTEX_PRE_DIVERT(this, 0);
|
|
161
148
|
// Wait for an OS specific delay.
|
|
162
|
-
|
|
163
|
-
|
|
149
|
+
SpinLockDelay(&lockword_, lock_value, ++lock_wait_call_count,
|
|
150
|
+
scheduling_mode);
|
|
164
151
|
ABSL_TSAN_MUTEX_POST_DIVERT(this, 0);
|
|
165
152
|
// Spin again after returning from the wait routine to give this thread
|
|
166
153
|
// some chance of obtaining the lock.
|
|
@@ -171,8 +158,8 @@ void SpinLock::SlowLock() {
|
|
|
171
158
|
}
|
|
172
159
|
|
|
173
160
|
void SpinLock::SlowUnlock(uint32_t lock_value) {
|
|
174
|
-
|
|
175
|
-
|
|
161
|
+
SpinLockWake(&lockword_,
|
|
162
|
+
false); // wake waiter if necessary
|
|
176
163
|
|
|
177
164
|
// If our acquisition was contended, collect contentionz profile info. We
|
|
178
165
|
// reserve a unitary wait time to represent that a waiter exists without our
|