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
|
@@ -70,6 +70,7 @@
|
|
|
70
70
|
#include "absl/base/internal/low_level_alloc.h"
|
|
71
71
|
#include "absl/base/internal/thread_identity.h"
|
|
72
72
|
#include "absl/base/internal/tsan_mutex_interface.h"
|
|
73
|
+
#include "absl/base/nullability.h"
|
|
73
74
|
#include "absl/base/port.h"
|
|
74
75
|
#include "absl/base/thread_annotations.h"
|
|
75
76
|
#include "absl/synchronization/internal/kernel_timeout.h"
|
|
@@ -91,10 +92,10 @@ struct SynchWaitParams;
|
|
|
91
92
|
// invariants. Proper usage of mutexes prevents concurrent access by different
|
|
92
93
|
// threads to the same resource.
|
|
93
94
|
//
|
|
94
|
-
// A `Mutex` has two basic operations: `Mutex::
|
|
95
|
-
// The `
|
|
96
|
-
// *exclusive* -- or *write* -- lock), and the `
|
|
97
|
-
// Mutex. During the span of time between the
|
|
95
|
+
// A `Mutex` has two basic operations: `Mutex::lock()` and `Mutex::unlock()`.
|
|
96
|
+
// The `lock()` operation *acquires* a `Mutex` (in a state known as an
|
|
97
|
+
// *exclusive* -- or *write* -- lock), and the `unlock()` operation *releases* a
|
|
98
|
+
// Mutex. During the span of time between the lock() and unlock() operations,
|
|
98
99
|
// a mutex is said to be *held*. By design, all mutexes support exclusive/write
|
|
99
100
|
// locks, as this is the most common way to use a mutex.
|
|
100
101
|
//
|
|
@@ -105,23 +106,23 @@ struct SynchWaitParams;
|
|
|
105
106
|
//
|
|
106
107
|
// The `Mutex` state machine for basic lock/unlock operations is quite simple:
|
|
107
108
|
//
|
|
108
|
-
// | |
|
|
109
|
+
// | | lock() | unlock() |
|
|
109
110
|
// |----------------+------------------------+----------|
|
|
110
111
|
// | Free | Exclusive | invalid |
|
|
111
112
|
// | Exclusive | blocks, then exclusive | Free |
|
|
112
113
|
//
|
|
113
114
|
// The full conditions are as follows.
|
|
114
115
|
//
|
|
115
|
-
// * Calls to `
|
|
116
|
-
// same thread that performed the corresponding `
|
|
116
|
+
// * Calls to `unlock()` require that the mutex be held, and must be made in the
|
|
117
|
+
// same thread that performed the corresponding `lock()` operation which
|
|
117
118
|
// acquired the mutex; otherwise the call is invalid.
|
|
118
119
|
//
|
|
119
120
|
// * The mutex being non-reentrant (or non-recursive) means that a call to
|
|
120
|
-
// `
|
|
121
|
-
// mutex; such a call is invalid.
|
|
121
|
+
// `lock()` or `try_lock()` must not be made in a thread that already holds
|
|
122
|
+
// the mutex; such a call is invalid.
|
|
122
123
|
//
|
|
123
124
|
// * In other words, the state of being "held" has both a temporal component
|
|
124
|
-
// (from `
|
|
125
|
+
// (from `lock()` until `unlock()`) as well as a thread identity component:
|
|
125
126
|
// the mutex is held *by a particular thread*.
|
|
126
127
|
//
|
|
127
128
|
// An "invalid" operation has undefined behavior. The `Mutex` implementation
|
|
@@ -173,24 +174,32 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
|
|
|
173
174
|
|
|
174
175
|
~Mutex();
|
|
175
176
|
|
|
176
|
-
// Mutex::
|
|
177
|
+
// Mutex::lock()
|
|
177
178
|
//
|
|
178
179
|
// Blocks the calling thread, if necessary, until this `Mutex` is free, and
|
|
179
180
|
// then acquires it exclusively. (This lock is also known as a "write lock.")
|
|
180
|
-
void
|
|
181
|
+
void lock() ABSL_EXCLUSIVE_LOCK_FUNCTION();
|
|
181
182
|
|
|
182
|
-
|
|
183
|
+
inline void Lock() ABSL_EXCLUSIVE_LOCK_FUNCTION() { lock(); }
|
|
184
|
+
|
|
185
|
+
// Mutex::unlock()
|
|
183
186
|
//
|
|
184
187
|
// Releases this `Mutex` and returns it from the exclusive/write state to the
|
|
185
188
|
// free state. Calling thread must hold the `Mutex` exclusively.
|
|
186
|
-
void
|
|
189
|
+
void unlock() ABSL_UNLOCK_FUNCTION();
|
|
190
|
+
|
|
191
|
+
inline void Unlock() ABSL_UNLOCK_FUNCTION() { unlock(); }
|
|
187
192
|
|
|
188
|
-
// Mutex::
|
|
193
|
+
// Mutex::try_lock()
|
|
189
194
|
//
|
|
190
195
|
// If the mutex can be acquired without blocking, does so exclusively and
|
|
191
196
|
// returns `true`. Otherwise, returns `false`. Returns `true` with high
|
|
192
197
|
// probability if the `Mutex` was free.
|
|
193
|
-
|
|
198
|
+
[[nodiscard]] bool try_lock() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true);
|
|
199
|
+
|
|
200
|
+
[[nodiscard]] bool TryLock() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
|
|
201
|
+
return try_lock();
|
|
202
|
+
}
|
|
194
203
|
|
|
195
204
|
// Mutex::AssertHeld()
|
|
196
205
|
//
|
|
@@ -210,19 +219,19 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
|
|
|
210
219
|
// Neither read-locks nor write-locks are reentrant/recursive to avoid
|
|
211
220
|
// potential client programming errors.
|
|
212
221
|
//
|
|
213
|
-
// The Mutex API provides `Writer*()` aliases for the existing `
|
|
214
|
-
// `
|
|
215
|
-
// reader/writer locks. Using
|
|
222
|
+
// The Mutex API provides `Writer*()` aliases for the existing `lock()`,
|
|
223
|
+
// `unlock()` and `try_lock()` methods for use within applications mixing
|
|
224
|
+
// reader/writer locks. Using `*_shared()` and `Writer*()` operations in this
|
|
216
225
|
// manner can make locking behavior clearer when mixing read and write modes.
|
|
217
226
|
//
|
|
218
227
|
// Introducing reader locks necessarily complicates the `Mutex` state
|
|
219
228
|
// machine somewhat. The table below illustrates the allowed state transitions
|
|
220
|
-
// of a mutex in such cases. Note that
|
|
221
|
-
// is held in shared mode; this occurs when another thread is blocked on
|
|
222
|
-
// call to
|
|
229
|
+
// of a mutex in such cases. Note that lock_shared() may block even if the
|
|
230
|
+
// lock is held in shared mode; this occurs when another thread is blocked on
|
|
231
|
+
// a call to lock().
|
|
223
232
|
//
|
|
224
233
|
// ---------------------------------------------------------------------------
|
|
225
|
-
// Operation:
|
|
234
|
+
// Operation: lock() unlock() lock_shared() unlock_shared()
|
|
226
235
|
// ---------------------------------------------------------------------------
|
|
227
236
|
// State
|
|
228
237
|
// ---------------------------------------------------------------------------
|
|
@@ -234,28 +243,35 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
|
|
|
234
243
|
//
|
|
235
244
|
// In comments below, "shared" refers to a state of Shared(n) for any n > 0.
|
|
236
245
|
|
|
237
|
-
// Mutex::
|
|
246
|
+
// Mutex::lock_shared()
|
|
238
247
|
//
|
|
239
248
|
// Blocks the calling thread, if necessary, until this `Mutex` is either free,
|
|
240
249
|
// or in shared mode, and then acquires a share of it. Note that
|
|
241
|
-
// `
|
|
242
|
-
// on the mutex.
|
|
250
|
+
// `lock_shared()` will block if some other thread has an exclusive/writer
|
|
251
|
+
// lock on the mutex.
|
|
252
|
+
void lock_shared() ABSL_SHARED_LOCK_FUNCTION();
|
|
243
253
|
|
|
244
|
-
void ReaderLock() ABSL_SHARED_LOCK_FUNCTION();
|
|
254
|
+
void ReaderLock() ABSL_SHARED_LOCK_FUNCTION() { lock_shared(); }
|
|
245
255
|
|
|
246
|
-
// Mutex::
|
|
256
|
+
// Mutex::unlock_shared()
|
|
247
257
|
//
|
|
248
|
-
// Releases a read share of this `Mutex`. `
|
|
249
|
-
// the free state if this thread holds the last reader lock on the mutex.
|
|
250
|
-
// that you cannot call `
|
|
251
|
-
void
|
|
258
|
+
// Releases a read share of this `Mutex`. `unlock_shared` may return a mutex
|
|
259
|
+
// to the free state if this thread holds the last reader lock on the mutex.
|
|
260
|
+
// Note that you cannot call `unlock_shared()` on a mutex held in write mode.
|
|
261
|
+
void unlock_shared() ABSL_UNLOCK_FUNCTION();
|
|
262
|
+
|
|
263
|
+
void ReaderUnlock() ABSL_UNLOCK_FUNCTION() { unlock_shared(); }
|
|
252
264
|
|
|
253
|
-
// Mutex::
|
|
265
|
+
// Mutex::try_lock_shared()
|
|
254
266
|
//
|
|
255
267
|
// If the mutex can be acquired without blocking, acquires this mutex for
|
|
256
268
|
// shared access and returns `true`. Otherwise, returns `false`. Returns
|
|
257
269
|
// `true` with high probability if the `Mutex` was free or shared.
|
|
258
|
-
|
|
270
|
+
[[nodiscard]] bool try_lock_shared() ABSL_SHARED_TRYLOCK_FUNCTION(true);
|
|
271
|
+
|
|
272
|
+
[[nodiscard]] bool ReaderTryLock() ABSL_SHARED_TRYLOCK_FUNCTION(true) {
|
|
273
|
+
return try_lock_shared();
|
|
274
|
+
}
|
|
259
275
|
|
|
260
276
|
// Mutex::AssertReaderHeld()
|
|
261
277
|
//
|
|
@@ -277,13 +293,12 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
|
|
|
277
293
|
// These methods may be used (along with the complementary `Reader*()`
|
|
278
294
|
// methods) to distinguish simple exclusive `Mutex` usage (`Lock()`,
|
|
279
295
|
// etc.) from reader/writer lock usage.
|
|
280
|
-
void WriterLock() ABSL_EXCLUSIVE_LOCK_FUNCTION() {
|
|
296
|
+
void WriterLock() ABSL_EXCLUSIVE_LOCK_FUNCTION() { lock(); }
|
|
281
297
|
|
|
282
|
-
void WriterUnlock() ABSL_UNLOCK_FUNCTION() {
|
|
298
|
+
void WriterUnlock() ABSL_UNLOCK_FUNCTION() { unlock(); }
|
|
283
299
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
return this->TryLock();
|
|
300
|
+
[[nodiscard]] bool WriterTryLock() ABSL_EXCLUSIVE_TRYLOCK_FUNCTION(true) {
|
|
301
|
+
return try_lock();
|
|
287
302
|
}
|
|
288
303
|
|
|
289
304
|
// ---------------------------------------------------------------------------
|
|
@@ -450,7 +465,9 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
|
|
|
450
465
|
// substantially reduce `Mutex` performance; it should be set only for
|
|
451
466
|
// non-production runs. Optimization options may also disable invariant
|
|
452
467
|
// checks.
|
|
453
|
-
void EnableInvariantDebugging(
|
|
468
|
+
void EnableInvariantDebugging(
|
|
469
|
+
void (*absl_nullable invariant)(void* absl_nullability_unknown),
|
|
470
|
+
void* absl_nullability_unknown arg);
|
|
454
471
|
|
|
455
472
|
// Mutex::EnableDebugLog()
|
|
456
473
|
//
|
|
@@ -459,7 +476,7 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
|
|
|
459
476
|
// call to `EnableInvariantDebugging()` or `EnableDebugLog()` has been made.
|
|
460
477
|
//
|
|
461
478
|
// Note: This method substantially reduces `Mutex` performance.
|
|
462
|
-
void EnableDebugLog(const char* name);
|
|
479
|
+
void EnableDebugLog(const char* absl_nullable name);
|
|
463
480
|
|
|
464
481
|
// Deadlock detection
|
|
465
482
|
|
|
@@ -509,20 +526,23 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
|
|
|
509
526
|
|
|
510
527
|
// Post()/Wait() versus associated PerThreadSem; in class for required
|
|
511
528
|
// friendship with PerThreadSem.
|
|
512
|
-
static void IncrementSynchSem(Mutex* mu,
|
|
513
|
-
|
|
529
|
+
static void IncrementSynchSem(Mutex* absl_nonnull mu,
|
|
530
|
+
base_internal::PerThreadSynch* absl_nonnull w);
|
|
531
|
+
static bool DecrementSynchSem(Mutex* absl_nonnull mu,
|
|
532
|
+
base_internal::PerThreadSynch* absl_nonnull w,
|
|
514
533
|
synchronization_internal::KernelTimeout t);
|
|
515
534
|
|
|
516
535
|
// slow path acquire
|
|
517
|
-
void LockSlowLoop(SynchWaitParams* waitp, int flags);
|
|
536
|
+
void LockSlowLoop(SynchWaitParams* absl_nonnull waitp, int flags);
|
|
518
537
|
// wrappers around LockSlowLoop()
|
|
519
|
-
bool LockSlowWithDeadline(MuHow how,
|
|
538
|
+
bool LockSlowWithDeadline(MuHow absl_nonnull how,
|
|
539
|
+
const Condition* absl_nullable cond,
|
|
520
540
|
synchronization_internal::KernelTimeout t,
|
|
521
541
|
int flags);
|
|
522
|
-
void LockSlow(MuHow how, const Condition* cond,
|
|
542
|
+
void LockSlow(MuHow absl_nonnull how, const Condition* absl_nullable cond,
|
|
523
543
|
int flags) ABSL_ATTRIBUTE_COLD;
|
|
524
544
|
// slow path release
|
|
525
|
-
void UnlockSlow(SynchWaitParams* waitp) ABSL_ATTRIBUTE_COLD;
|
|
545
|
+
void UnlockSlow(SynchWaitParams* absl_nullable waitp) ABSL_ATTRIBUTE_COLD;
|
|
526
546
|
// TryLock slow path.
|
|
527
547
|
bool TryLockSlow();
|
|
528
548
|
// ReaderTryLock slow path.
|
|
@@ -533,20 +553,21 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
|
|
|
533
553
|
bool LockWhenCommon(const Condition& cond,
|
|
534
554
|
synchronization_internal::KernelTimeout t, bool write);
|
|
535
555
|
// Attempt to remove thread s from queue.
|
|
536
|
-
void TryRemove(base_internal::PerThreadSynch* s);
|
|
556
|
+
void TryRemove(base_internal::PerThreadSynch* absl_nonnull s);
|
|
537
557
|
// Block a thread on mutex.
|
|
538
|
-
void Block(base_internal::PerThreadSynch* s);
|
|
558
|
+
void Block(base_internal::PerThreadSynch* absl_nonnull s);
|
|
539
559
|
// Wake a thread; return successor.
|
|
540
|
-
base_internal::PerThreadSynch* Wakeup(
|
|
560
|
+
base_internal::PerThreadSynch* absl_nullable Wakeup(
|
|
561
|
+
base_internal::PerThreadSynch* absl_nonnull w);
|
|
541
562
|
void Dtor();
|
|
542
563
|
|
|
543
564
|
friend class CondVar; // for access to Trans()/Fer().
|
|
544
|
-
void Trans(MuHow how); // used for CondVar->Mutex transfer
|
|
545
|
-
void Fer(
|
|
546
|
-
|
|
565
|
+
void Trans(MuHow absl_nonnull how); // used for CondVar->Mutex transfer
|
|
566
|
+
void Fer(base_internal::PerThreadSynch* absl_nonnull
|
|
567
|
+
w); // used for CondVar->Mutex transfer
|
|
547
568
|
|
|
548
569
|
// Catch the error of writing Mutex when intending MutexLock.
|
|
549
|
-
explicit Mutex(const volatile Mutex* /*ignored*/) {}
|
|
570
|
+
explicit Mutex(const volatile Mutex* absl_nullable /*ignored*/) {}
|
|
550
571
|
|
|
551
572
|
Mutex(const Mutex&) = delete;
|
|
552
573
|
Mutex& operator=(const Mutex&) = delete;
|
|
@@ -566,7 +587,7 @@ class ABSL_LOCKABLE ABSL_ATTRIBUTE_WARN_UNUSED Mutex {
|
|
|
566
587
|
// Class Foo {
|
|
567
588
|
// public:
|
|
568
589
|
// Foo::Bar* Baz() {
|
|
569
|
-
// MutexLock lock(
|
|
590
|
+
// MutexLock lock(mu_);
|
|
570
591
|
// ...
|
|
571
592
|
// return bar;
|
|
572
593
|
// }
|
|
@@ -578,31 +599,42 @@ class ABSL_SCOPED_LOCKABLE MutexLock {
|
|
|
578
599
|
public:
|
|
579
600
|
// Constructors
|
|
580
601
|
|
|
581
|
-
// Calls `mu
|
|
602
|
+
// Calls `mu.lock()` and returns when that call returns. That is, `mu` is
|
|
603
|
+
// guaranteed to be locked when this object is constructed.
|
|
604
|
+
explicit MutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
|
|
605
|
+
ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
606
|
+
: mu_(mu) {
|
|
607
|
+
this->mu_.lock();
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
// Calls `mu->lock()` and returns when that call returns. That is, `*mu` is
|
|
582
611
|
// guaranteed to be locked when this object is constructed. Requires that
|
|
583
612
|
// `mu` be dereferenceable.
|
|
584
|
-
explicit MutexLock(Mutex* mu) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
585
|
-
|
|
586
|
-
}
|
|
613
|
+
explicit MutexLock(Mutex* absl_nonnull mu) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
614
|
+
: MutexLock(*mu) {}
|
|
587
615
|
|
|
588
|
-
// Like above, but calls `mu
|
|
616
|
+
// Like above, but calls `mu.LockWhen(cond)` instead. That is, in addition to
|
|
589
617
|
// the above, the condition given by `cond` is also guaranteed to hold when
|
|
590
618
|
// this object is constructed.
|
|
591
|
-
explicit MutexLock(Mutex
|
|
592
|
-
|
|
619
|
+
explicit MutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
|
|
620
|
+
const Condition& cond) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
593
621
|
: mu_(mu) {
|
|
594
|
-
this->mu_
|
|
622
|
+
this->mu_.LockWhen(cond);
|
|
595
623
|
}
|
|
596
624
|
|
|
625
|
+
explicit MutexLock(Mutex* absl_nonnull mu, const Condition& cond)
|
|
626
|
+
ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
627
|
+
: MutexLock(*mu, cond) {}
|
|
628
|
+
|
|
597
629
|
MutexLock(const MutexLock&) = delete; // NOLINT(runtime/mutex)
|
|
598
630
|
MutexLock(MutexLock&&) = delete; // NOLINT(runtime/mutex)
|
|
599
631
|
MutexLock& operator=(const MutexLock&) = delete;
|
|
600
632
|
MutexLock& operator=(MutexLock&&) = delete;
|
|
601
633
|
|
|
602
|
-
~MutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_
|
|
634
|
+
~MutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_.unlock(); }
|
|
603
635
|
|
|
604
636
|
private:
|
|
605
|
-
Mutex
|
|
637
|
+
Mutex& mu_;
|
|
606
638
|
};
|
|
607
639
|
|
|
608
640
|
// ReaderMutexLock
|
|
@@ -611,25 +643,34 @@ class ABSL_SCOPED_LOCKABLE MutexLock {
|
|
|
611
643
|
// releases a shared lock on a `Mutex` via RAII.
|
|
612
644
|
class ABSL_SCOPED_LOCKABLE ReaderMutexLock {
|
|
613
645
|
public:
|
|
614
|
-
explicit ReaderMutexLock(Mutex
|
|
615
|
-
|
|
646
|
+
explicit ReaderMutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
|
|
647
|
+
ABSL_SHARED_LOCK_FUNCTION(mu)
|
|
648
|
+
: mu_(mu) {
|
|
649
|
+
mu.lock_shared();
|
|
616
650
|
}
|
|
617
651
|
|
|
618
|
-
explicit ReaderMutexLock(Mutex* mu
|
|
619
|
-
|
|
652
|
+
explicit ReaderMutexLock(Mutex* absl_nonnull mu) ABSL_SHARED_LOCK_FUNCTION(mu)
|
|
653
|
+
: ReaderMutexLock(*mu) {}
|
|
654
|
+
|
|
655
|
+
explicit ReaderMutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
|
|
656
|
+
const Condition& cond) ABSL_SHARED_LOCK_FUNCTION(mu)
|
|
620
657
|
: mu_(mu) {
|
|
621
|
-
mu
|
|
658
|
+
mu.ReaderLockWhen(cond);
|
|
622
659
|
}
|
|
623
660
|
|
|
661
|
+
explicit ReaderMutexLock(Mutex* absl_nonnull mu, const Condition& cond)
|
|
662
|
+
ABSL_SHARED_LOCK_FUNCTION(mu)
|
|
663
|
+
: ReaderMutexLock(*mu, cond) {}
|
|
664
|
+
|
|
624
665
|
ReaderMutexLock(const ReaderMutexLock&) = delete;
|
|
625
666
|
ReaderMutexLock(ReaderMutexLock&&) = delete;
|
|
626
667
|
ReaderMutexLock& operator=(const ReaderMutexLock&) = delete;
|
|
627
668
|
ReaderMutexLock& operator=(ReaderMutexLock&&) = delete;
|
|
628
669
|
|
|
629
|
-
~ReaderMutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_
|
|
670
|
+
~ReaderMutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_.unlock_shared(); }
|
|
630
671
|
|
|
631
672
|
private:
|
|
632
|
-
Mutex
|
|
673
|
+
Mutex& mu_;
|
|
633
674
|
};
|
|
634
675
|
|
|
635
676
|
// WriterMutexLock
|
|
@@ -638,26 +679,36 @@ class ABSL_SCOPED_LOCKABLE ReaderMutexLock {
|
|
|
638
679
|
// releases a write (exclusive) lock on a `Mutex` via RAII.
|
|
639
680
|
class ABSL_SCOPED_LOCKABLE WriterMutexLock {
|
|
640
681
|
public:
|
|
641
|
-
explicit WriterMutexLock(Mutex
|
|
682
|
+
explicit WriterMutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
|
|
683
|
+
ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
642
684
|
: mu_(mu) {
|
|
643
|
-
mu
|
|
685
|
+
mu.lock();
|
|
644
686
|
}
|
|
645
687
|
|
|
646
|
-
explicit WriterMutexLock(Mutex* mu
|
|
688
|
+
explicit WriterMutexLock(Mutex* absl_nonnull mu)
|
|
689
|
+
ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
690
|
+
: WriterMutexLock(*mu) {}
|
|
691
|
+
|
|
692
|
+
explicit WriterMutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
|
|
693
|
+
const Condition& cond)
|
|
647
694
|
ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
648
695
|
: mu_(mu) {
|
|
649
|
-
mu
|
|
696
|
+
mu.WriterLockWhen(cond);
|
|
650
697
|
}
|
|
651
698
|
|
|
699
|
+
explicit WriterMutexLock(Mutex* absl_nonnull mu, const Condition& cond)
|
|
700
|
+
ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
701
|
+
: WriterMutexLock(*mu, cond) {}
|
|
702
|
+
|
|
652
703
|
WriterMutexLock(const WriterMutexLock&) = delete;
|
|
653
704
|
WriterMutexLock(WriterMutexLock&&) = delete;
|
|
654
705
|
WriterMutexLock& operator=(const WriterMutexLock&) = delete;
|
|
655
706
|
WriterMutexLock& operator=(WriterMutexLock&&) = delete;
|
|
656
707
|
|
|
657
|
-
~WriterMutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_
|
|
708
|
+
~WriterMutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_.unlock(); }
|
|
658
709
|
|
|
659
710
|
private:
|
|
660
|
-
Mutex
|
|
711
|
+
Mutex& mu_;
|
|
661
712
|
};
|
|
662
713
|
|
|
663
714
|
// -----------------------------------------------------------------------------
|
|
@@ -704,7 +755,7 @@ class ABSL_SCOPED_LOCKABLE WriterMutexLock {
|
|
|
704
755
|
// Example using a scope guard:
|
|
705
756
|
//
|
|
706
757
|
// {
|
|
707
|
-
// MutexLock lock(
|
|
758
|
+
// MutexLock lock(mu_, count_is_zero);
|
|
708
759
|
// // ...
|
|
709
760
|
// }
|
|
710
761
|
//
|
|
@@ -715,7 +766,8 @@ class ABSL_SCOPED_LOCKABLE WriterMutexLock {
|
|
|
715
766
|
class Condition {
|
|
716
767
|
public:
|
|
717
768
|
// A Condition that returns the result of "(*func)(arg)"
|
|
718
|
-
Condition(bool (*func)(void*),
|
|
769
|
+
Condition(bool (*absl_nonnull func)(void* absl_nullability_unknown),
|
|
770
|
+
void* absl_nullability_unknown arg);
|
|
719
771
|
|
|
720
772
|
// Templated version for people who are averse to casts.
|
|
721
773
|
//
|
|
@@ -727,7 +779,8 @@ class Condition {
|
|
|
727
779
|
//
|
|
728
780
|
// See class comment for performance advice.
|
|
729
781
|
template <typename T>
|
|
730
|
-
Condition(bool (*func)(T*),
|
|
782
|
+
Condition(bool (*absl_nonnull func)(T* absl_nullability_unknown),
|
|
783
|
+
T* absl_nullability_unknown arg);
|
|
731
784
|
|
|
732
785
|
// Same as above, but allows for cases where `arg` comes from a pointer that
|
|
733
786
|
// is convertible to the function parameter type `T*` but not an exact match.
|
|
@@ -741,8 +794,10 @@ class Condition {
|
|
|
741
794
|
// a function template is passed as `func`. Also, the dummy `typename = void`
|
|
742
795
|
// template parameter exists just to work around a MSVC mangling bug.
|
|
743
796
|
template <typename T, typename = void>
|
|
744
|
-
Condition(
|
|
745
|
-
|
|
797
|
+
Condition(
|
|
798
|
+
bool (*absl_nonnull func)(T* absl_nullability_unknown),
|
|
799
|
+
typename absl::internal::type_identity<T>::type* absl_nullability_unknown
|
|
800
|
+
arg);
|
|
746
801
|
|
|
747
802
|
// Templated version for invoking a method that returns a `bool`.
|
|
748
803
|
//
|
|
@@ -753,16 +808,19 @@ class Condition {
|
|
|
753
808
|
// methods to come from base classes. A simpler signature like
|
|
754
809
|
// `Condition(T*, bool (T::*)())` does not suffice.
|
|
755
810
|
template <typename T>
|
|
756
|
-
Condition(
|
|
757
|
-
|
|
811
|
+
Condition(
|
|
812
|
+
T* absl_nonnull object,
|
|
813
|
+
bool (absl::internal::type_identity<T>::type::* absl_nonnull method)());
|
|
758
814
|
|
|
759
815
|
// Same as above, for const members
|
|
760
816
|
template <typename T>
|
|
761
|
-
Condition(
|
|
762
|
-
|
|
817
|
+
Condition(
|
|
818
|
+
const T* absl_nonnull object,
|
|
819
|
+
bool (absl::internal::type_identity<T>::type::* absl_nonnull method)()
|
|
820
|
+
const);
|
|
763
821
|
|
|
764
822
|
// A Condition that returns the value of `*cond`
|
|
765
|
-
explicit Condition(const bool* cond);
|
|
823
|
+
explicit Condition(const bool* absl_nonnull cond);
|
|
766
824
|
|
|
767
825
|
// Templated version for invoking a functor that returns a `bool`.
|
|
768
826
|
// This approach accepts pointers to non-mutable lambdas, `std::function`,
|
|
@@ -791,7 +849,7 @@ class Condition {
|
|
|
791
849
|
// `bool operator() const`.
|
|
792
850
|
template <typename T, typename E = decltype(static_cast<bool (T::*)() const>(
|
|
793
851
|
&T::operator()))>
|
|
794
|
-
explicit Condition(const T* obj)
|
|
852
|
+
explicit Condition(const T* absl_nonnull obj)
|
|
795
853
|
: Condition(obj, static_cast<bool (T::*)() const>(&T::operator())) {}
|
|
796
854
|
|
|
797
855
|
// A Condition that always returns `true`.
|
|
@@ -817,7 +875,8 @@ class Condition {
|
|
|
817
875
|
// Two `Condition` values are guaranteed equal if both their `func` and `arg`
|
|
818
876
|
// components are the same. A null pointer is equivalent to a `true`
|
|
819
877
|
// condition.
|
|
820
|
-
static bool GuaranteedEqual(const Condition* a,
|
|
878
|
+
static bool GuaranteedEqual(const Condition* absl_nullable a,
|
|
879
|
+
const Condition* absl_nullable b);
|
|
821
880
|
|
|
822
881
|
private:
|
|
823
882
|
// Sizing an allocation for a method pointer can be subtle. In the Itanium
|
|
@@ -842,17 +901,17 @@ class Condition {
|
|
|
842
901
|
#endif
|
|
843
902
|
|
|
844
903
|
// Function with which to evaluate callbacks and/or arguments.
|
|
845
|
-
bool (*eval_)(const Condition*) = nullptr;
|
|
904
|
+
bool (*absl_nullable eval_)(const Condition* absl_nonnull) = nullptr;
|
|
846
905
|
|
|
847
906
|
// Either an argument for a function call or an object for a method call.
|
|
848
|
-
void* arg_ = nullptr;
|
|
907
|
+
void* absl_nullable arg_ = nullptr;
|
|
849
908
|
|
|
850
909
|
// Various functions eval_ can point to:
|
|
851
|
-
static bool CallVoidPtrFunction(const Condition*);
|
|
910
|
+
static bool CallVoidPtrFunction(const Condition* absl_nonnull c);
|
|
852
911
|
template <typename T>
|
|
853
|
-
static bool CastAndCallFunction(const Condition* c);
|
|
912
|
+
static bool CastAndCallFunction(const Condition* absl_nonnull c);
|
|
854
913
|
template <typename T, typename ConditionMethodPtr>
|
|
855
|
-
static bool CastAndCallMethod(const Condition* c);
|
|
914
|
+
static bool CastAndCallMethod(const Condition* absl_nonnull c);
|
|
856
915
|
|
|
857
916
|
// Helper methods for storing, validating, and reading callback arguments.
|
|
858
917
|
template <typename T>
|
|
@@ -864,11 +923,11 @@ class Condition {
|
|
|
864
923
|
}
|
|
865
924
|
|
|
866
925
|
template <typename T>
|
|
867
|
-
inline void ReadCallback(T* callback) const {
|
|
926
|
+
inline void ReadCallback(T* absl_nonnull callback) const {
|
|
868
927
|
std::memcpy(callback, callback_, sizeof(*callback));
|
|
869
928
|
}
|
|
870
929
|
|
|
871
|
-
static bool AlwaysTrue(const Condition*) { return true; }
|
|
930
|
+
static bool AlwaysTrue(const Condition* absl_nullable) { return true; }
|
|
872
931
|
|
|
873
932
|
// Used only to create kTrue.
|
|
874
933
|
constexpr Condition() : eval_(AlwaysTrue), arg_(nullptr) {}
|
|
@@ -922,7 +981,7 @@ class CondVar {
|
|
|
922
981
|
// spurious wakeup), then reacquires the `Mutex` and returns.
|
|
923
982
|
//
|
|
924
983
|
// Requires and ensures that the current thread holds the `Mutex`.
|
|
925
|
-
void Wait(Mutex* mu) {
|
|
984
|
+
void Wait(Mutex* absl_nonnull mu) {
|
|
926
985
|
WaitCommon(mu, synchronization_internal::KernelTimeout::Never());
|
|
927
986
|
}
|
|
928
987
|
|
|
@@ -939,7 +998,7 @@ class CondVar {
|
|
|
939
998
|
// to return `true` or `false`.
|
|
940
999
|
//
|
|
941
1000
|
// Requires and ensures that the current thread holds the `Mutex`.
|
|
942
|
-
bool WaitWithTimeout(Mutex* mu, absl::Duration timeout) {
|
|
1001
|
+
bool WaitWithTimeout(Mutex* absl_nonnull mu, absl::Duration timeout) {
|
|
943
1002
|
return WaitCommon(mu, synchronization_internal::KernelTimeout(timeout));
|
|
944
1003
|
}
|
|
945
1004
|
|
|
@@ -958,7 +1017,7 @@ class CondVar {
|
|
|
958
1017
|
// to return `true` or `false`.
|
|
959
1018
|
//
|
|
960
1019
|
// Requires and ensures that the current thread holds the `Mutex`.
|
|
961
|
-
bool WaitWithDeadline(Mutex* mu, absl::Time deadline) {
|
|
1020
|
+
bool WaitWithDeadline(Mutex* absl_nonnull mu, absl::Time deadline) {
|
|
962
1021
|
return WaitCommon(mu, synchronization_internal::KernelTimeout(deadline));
|
|
963
1022
|
}
|
|
964
1023
|
|
|
@@ -977,11 +1036,12 @@ class CondVar {
|
|
|
977
1036
|
// Causes all subsequent uses of this `CondVar` to be logged via
|
|
978
1037
|
// `ABSL_RAW_LOG(INFO)`. Log entries are tagged with `name` if `name != 0`.
|
|
979
1038
|
// Note: this method substantially reduces `CondVar` performance.
|
|
980
|
-
void EnableDebugLog(const char* name);
|
|
1039
|
+
void EnableDebugLog(const char* absl_nullable name);
|
|
981
1040
|
|
|
982
1041
|
private:
|
|
983
|
-
bool WaitCommon(Mutex* mutex,
|
|
984
|
-
|
|
1042
|
+
bool WaitCommon(Mutex* absl_nonnull mutex,
|
|
1043
|
+
synchronization_internal::KernelTimeout t);
|
|
1044
|
+
void Remove(base_internal::PerThreadSynch* absl_nonnull s);
|
|
985
1045
|
std::atomic<intptr_t> cv_; // Condition variable state.
|
|
986
1046
|
CondVar(const CondVar&) = delete;
|
|
987
1047
|
CondVar& operator=(const CondVar&) = delete;
|
|
@@ -997,14 +1057,15 @@ class CondVar {
|
|
|
997
1057
|
// MutexLockMaybe is like MutexLock, but is a no-op when mu is null.
|
|
998
1058
|
class ABSL_SCOPED_LOCKABLE MutexLockMaybe {
|
|
999
1059
|
public:
|
|
1000
|
-
explicit MutexLockMaybe(Mutex*
|
|
1060
|
+
explicit MutexLockMaybe(Mutex* absl_nullable mu)
|
|
1061
|
+
ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
1001
1062
|
: mu_(mu) {
|
|
1002
1063
|
if (this->mu_ != nullptr) {
|
|
1003
|
-
this->mu_->
|
|
1064
|
+
this->mu_->lock();
|
|
1004
1065
|
}
|
|
1005
1066
|
}
|
|
1006
1067
|
|
|
1007
|
-
explicit MutexLockMaybe(Mutex* mu, const Condition& cond)
|
|
1068
|
+
explicit MutexLockMaybe(Mutex* absl_nullable mu, const Condition& cond)
|
|
1008
1069
|
ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
1009
1070
|
: mu_(mu) {
|
|
1010
1071
|
if (this->mu_ != nullptr) {
|
|
@@ -1014,12 +1075,12 @@ class ABSL_SCOPED_LOCKABLE MutexLockMaybe {
|
|
|
1014
1075
|
|
|
1015
1076
|
~MutexLockMaybe() ABSL_UNLOCK_FUNCTION() {
|
|
1016
1077
|
if (this->mu_ != nullptr) {
|
|
1017
|
-
this->mu_->
|
|
1078
|
+
this->mu_->unlock();
|
|
1018
1079
|
}
|
|
1019
1080
|
}
|
|
1020
1081
|
|
|
1021
1082
|
private:
|
|
1022
|
-
Mutex* const mu_;
|
|
1083
|
+
Mutex* absl_nullable const mu_;
|
|
1023
1084
|
MutexLockMaybe(const MutexLockMaybe&) = delete;
|
|
1024
1085
|
MutexLockMaybe(MutexLockMaybe&&) = delete;
|
|
1025
1086
|
MutexLockMaybe& operator=(const MutexLockMaybe&) = delete;
|
|
@@ -1032,27 +1093,37 @@ class ABSL_SCOPED_LOCKABLE MutexLockMaybe {
|
|
|
1032
1093
|
// mutex before destruction. `Release()` may be called at most once.
|
|
1033
1094
|
class ABSL_SCOPED_LOCKABLE ReleasableMutexLock {
|
|
1034
1095
|
public:
|
|
1035
|
-
explicit ReleasableMutexLock(Mutex
|
|
1036
|
-
|
|
1037
|
-
|
|
1096
|
+
explicit ReleasableMutexLock(Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(
|
|
1097
|
+
this)) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
1098
|
+
: mu_(&mu) {
|
|
1099
|
+
this->mu_->lock();
|
|
1038
1100
|
}
|
|
1039
1101
|
|
|
1040
|
-
explicit ReleasableMutexLock(Mutex* mu
|
|
1102
|
+
explicit ReleasableMutexLock(Mutex* absl_nonnull mu)
|
|
1041
1103
|
ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
1042
|
-
:
|
|
1104
|
+
: ReleasableMutexLock(*mu) {}
|
|
1105
|
+
|
|
1106
|
+
explicit ReleasableMutexLock(
|
|
1107
|
+
Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
|
|
1108
|
+
const Condition& cond) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
1109
|
+
: mu_(&mu) {
|
|
1043
1110
|
this->mu_->LockWhen(cond);
|
|
1044
1111
|
}
|
|
1045
1112
|
|
|
1113
|
+
explicit ReleasableMutexLock(Mutex* absl_nonnull mu, const Condition& cond)
|
|
1114
|
+
ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
|
|
1115
|
+
: ReleasableMutexLock(*mu, cond) {}
|
|
1116
|
+
|
|
1046
1117
|
~ReleasableMutexLock() ABSL_UNLOCK_FUNCTION() {
|
|
1047
1118
|
if (this->mu_ != nullptr) {
|
|
1048
|
-
this->mu_->
|
|
1119
|
+
this->mu_->unlock();
|
|
1049
1120
|
}
|
|
1050
1121
|
}
|
|
1051
1122
|
|
|
1052
1123
|
void Release() ABSL_UNLOCK_FUNCTION();
|
|
1053
1124
|
|
|
1054
1125
|
private:
|
|
1055
|
-
Mutex* mu_;
|
|
1126
|
+
Mutex* absl_nonnull mu_;
|
|
1056
1127
|
ReleasableMutexLock(const ReleasableMutexLock&) = delete;
|
|
1057
1128
|
ReleasableMutexLock(ReleasableMutexLock&&) = delete;
|
|
1058
1129
|
ReleasableMutexLock& operator=(const ReleasableMutexLock&) = delete;
|
|
@@ -1084,7 +1155,7 @@ inline CondVar::CondVar() : cv_(0) {}
|
|
|
1084
1155
|
|
|
1085
1156
|
// static
|
|
1086
1157
|
template <typename T, typename ConditionMethodPtr>
|
|
1087
|
-
bool Condition::CastAndCallMethod(const Condition* c) {
|
|
1158
|
+
bool Condition::CastAndCallMethod(const Condition* absl_nonnull c) {
|
|
1088
1159
|
T* object = static_cast<T*>(c->arg_);
|
|
1089
1160
|
ConditionMethodPtr condition_method_pointer;
|
|
1090
1161
|
c->ReadCallback(&condition_method_pointer);
|
|
@@ -1093,7 +1164,7 @@ bool Condition::CastAndCallMethod(const Condition* c) {
|
|
|
1093
1164
|
|
|
1094
1165
|
// static
|
|
1095
1166
|
template <typename T>
|
|
1096
|
-
bool Condition::CastAndCallFunction(const Condition* c) {
|
|
1167
|
+
bool Condition::CastAndCallFunction(const Condition* absl_nonnull c) {
|
|
1097
1168
|
bool (*function)(T*);
|
|
1098
1169
|
c->ReadCallback(&function);
|
|
1099
1170
|
T* argument = static_cast<T*>(c->arg_);
|
|
@@ -1101,7 +1172,9 @@ bool Condition::CastAndCallFunction(const Condition* c) {
|
|
|
1101
1172
|
}
|
|
1102
1173
|
|
|
1103
1174
|
template <typename T>
|
|
1104
|
-
inline Condition::Condition(
|
|
1175
|
+
inline Condition::Condition(
|
|
1176
|
+
bool (*absl_nonnull func)(T* absl_nullability_unknown),
|
|
1177
|
+
T* absl_nullability_unknown arg)
|
|
1105
1178
|
: eval_(&CastAndCallFunction<T>),
|
|
1106
1179
|
arg_(const_cast<void*>(static_cast<const void*>(arg))) {
|
|
1107
1180
|
static_assert(sizeof(&func) <= sizeof(callback_),
|
|
@@ -1111,13 +1184,16 @@ inline Condition::Condition(bool (*func)(T*), T* arg)
|
|
|
1111
1184
|
|
|
1112
1185
|
template <typename T, typename>
|
|
1113
1186
|
inline Condition::Condition(
|
|
1114
|
-
bool (*func)(T*),
|
|
1187
|
+
bool (*absl_nonnull func)(T* absl_nullability_unknown),
|
|
1188
|
+
typename absl::internal::type_identity<T>::type* absl_nullability_unknown
|
|
1189
|
+
arg)
|
|
1115
1190
|
// Just delegate to the overload above.
|
|
1116
1191
|
: Condition(func, arg) {}
|
|
1117
1192
|
|
|
1118
1193
|
template <typename T>
|
|
1119
1194
|
inline Condition::Condition(
|
|
1120
|
-
T* object,
|
|
1195
|
+
T* absl_nonnull object,
|
|
1196
|
+
bool (absl::internal::type_identity<T>::type::* absl_nonnull method)())
|
|
1121
1197
|
: eval_(&CastAndCallMethod<T, decltype(method)>), arg_(object) {
|
|
1122
1198
|
static_assert(sizeof(&method) <= sizeof(callback_),
|
|
1123
1199
|
"An overlarge method pointer was passed to Condition.");
|
|
@@ -1126,8 +1202,9 @@ inline Condition::Condition(
|
|
|
1126
1202
|
|
|
1127
1203
|
template <typename T>
|
|
1128
1204
|
inline Condition::Condition(
|
|
1129
|
-
const T* object,
|
|
1130
|
-
bool (absl::internal::type_identity<T>::type::*method)()
|
|
1205
|
+
const T* absl_nonnull object,
|
|
1206
|
+
bool (absl::internal::type_identity<T>::type::* absl_nonnull method)()
|
|
1207
|
+
const)
|
|
1131
1208
|
: eval_(&CastAndCallMethod<const T, decltype(method)>),
|
|
1132
1209
|
arg_(reinterpret_cast<void*>(const_cast<T*>(object))) {
|
|
1133
1210
|
StoreCallback(method);
|
|
@@ -1145,7 +1222,7 @@ inline Condition::Condition(
|
|
|
1145
1222
|
// binary; if this function is called a second time with a different function
|
|
1146
1223
|
// pointer, the value is ignored (and will cause an assertion failure in debug
|
|
1147
1224
|
// mode.)
|
|
1148
|
-
void RegisterMutexProfiler(void (*fn)(int64_t wait_cycles));
|
|
1225
|
+
void RegisterMutexProfiler(void (*absl_nonnull fn)(int64_t wait_cycles));
|
|
1149
1226
|
|
|
1150
1227
|
// Register a hook for Mutex tracing.
|
|
1151
1228
|
//
|
|
@@ -1159,8 +1236,9 @@ void RegisterMutexProfiler(void (*fn)(int64_t wait_cycles));
|
|
|
1159
1236
|
//
|
|
1160
1237
|
// This has the same ordering and single-use limitations as
|
|
1161
1238
|
// RegisterMutexProfiler() above.
|
|
1162
|
-
void RegisterMutexTracer(void (*fn)(const char* msg,
|
|
1163
|
-
|
|
1239
|
+
void RegisterMutexTracer(void (*absl_nonnull fn)(const char* absl_nonnull msg,
|
|
1240
|
+
const void* absl_nonnull obj,
|
|
1241
|
+
int64_t wait_cycles));
|
|
1164
1242
|
|
|
1165
1243
|
// Register a hook for CondVar tracing.
|
|
1166
1244
|
//
|
|
@@ -1174,7 +1252,8 @@ void RegisterMutexTracer(void (*fn)(const char* msg, const void* obj,
|
|
|
1174
1252
|
//
|
|
1175
1253
|
// This has the same ordering and single-use limitations as
|
|
1176
1254
|
// RegisterMutexProfiler() above.
|
|
1177
|
-
void RegisterCondVarTracer(void (*fn)(
|
|
1255
|
+
void RegisterCondVarTracer(void (*absl_nonnull fn)(
|
|
1256
|
+
const char* absl_nonnull msg, const void* absl_nonnull cv));
|
|
1178
1257
|
|
|
1179
1258
|
// EnableMutexInvariantDebugging()
|
|
1180
1259
|
//
|