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.
Files changed (495) hide show
  1. package/README.md +60 -4
  2. package/binding.gyp +5 -1
  3. package/lib/addon.cc +4 -0
  4. package/lib/new.cc +1 -246
  5. package/lib/pattern.cc +252 -0
  6. package/lib/pattern.h +10 -0
  7. package/lib/set.cc +777 -0
  8. package/lib/wrapped_re2_set.h +42 -0
  9. package/package.json +21 -9
  10. package/re2.d.ts +46 -9
  11. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
  12. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
  13. package/vendor/abseil-cpp/CMake/README.md +2 -2
  14. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  15. package/vendor/abseil-cpp/MODULE.bazel +6 -9
  16. package/vendor/abseil-cpp/README.md +6 -8
  17. package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
  18. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
  19. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
  20. package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
  21. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
  22. package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
  23. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
  24. package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
  25. package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
  26. package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
  27. package/vendor/abseil-cpp/absl/base/config.h +22 -129
  28. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
  29. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  30. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
  31. package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  32. package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  33. package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
  34. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  35. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
  36. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  37. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
  38. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  39. package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
  40. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
  41. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
  42. package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
  43. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
  44. package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
  45. package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
  46. package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  47. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
  48. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  49. package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
  50. package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
  51. package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
  52. package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
  53. package/vendor/abseil-cpp/absl/base/options.h +3 -80
  54. package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
  55. package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
  56. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
  57. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
  58. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
  59. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  60. package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
  61. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  62. package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
  63. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
  64. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
  65. package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
  68. package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
  69. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
  70. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
  71. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
  72. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
  73. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
  74. package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
  75. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
  76. package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
  77. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  78. package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
  79. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  80. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
  81. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
  82. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
  83. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
  84. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
  87. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
  88. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
  89. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
  90. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
  91. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
  92. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
  93. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
  94. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
  95. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
  96. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  97. package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
  101. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
  102. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
  103. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
  104. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  105. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
  106. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
  107. package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
  108. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
  109. package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
  110. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
  111. package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
  112. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
  113. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
  114. package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
  115. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
  116. package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
  117. package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
  118. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
  119. package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
  120. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
  121. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  122. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  123. package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  124. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
  125. package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
  126. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
  127. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
  128. package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  129. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  130. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  131. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  132. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  133. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
  134. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  135. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  136. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  137. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  138. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  139. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  140. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  141. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  142. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  143. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
  144. package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  145. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
  146. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  147. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
  148. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
  149. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  150. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  151. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
  152. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
  153. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  154. package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
  155. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  156. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
  157. package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
  158. package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  159. package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
  160. package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
  161. package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
  162. package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
  163. package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
  164. package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
  165. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
  166. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
  167. package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
  168. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
  169. package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
  170. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
  171. package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
  172. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
  173. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  174. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  175. package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
  176. package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
  177. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
  178. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
  179. package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
  180. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
  181. package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
  182. package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
  183. package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
  184. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
  185. package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
  186. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
  187. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
  188. package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
  189. package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
  190. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
  191. package/vendor/abseil-cpp/absl/log/check.h +2 -1
  192. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
  193. package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
  194. package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
  195. package/vendor/abseil-cpp/absl/log/globals.h +4 -5
  196. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
  197. package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  198. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
  199. package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
  200. package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  201. package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
  202. package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
  203. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  204. package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
  205. package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  206. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  207. package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
  208. package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
  209. package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
  210. package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
  211. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
  212. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  213. package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
  214. package/vendor/abseil-cpp/absl/log/log.h +48 -35
  215. package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
  216. package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
  217. package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
  218. package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
  219. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
  220. package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  221. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
  222. package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
  223. package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
  224. package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
  225. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  226. package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
  227. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
  228. package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
  229. package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
  230. package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
  231. package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
  232. package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
  233. package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
  234. package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
  235. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
  236. package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
  237. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
  238. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
  239. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
  240. package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
  241. package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  242. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
  243. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
  244. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  245. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
  246. package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
  247. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
  248. package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
  249. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  250. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
  251. package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
  252. package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  253. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
  254. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  255. package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
  256. package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
  257. package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
  258. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
  259. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  260. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
  261. package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
  262. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  263. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  264. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  265. package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
  266. package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
  267. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
  268. package/vendor/abseil-cpp/absl/random/random.h +88 -53
  269. package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  270. package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
  271. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  272. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  273. package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
  274. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
  275. package/vendor/abseil-cpp/absl/status/status.cc +4 -8
  276. package/vendor/abseil-cpp/absl/status/status.h +8 -8
  277. package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
  278. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
  279. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  280. package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
  281. package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
  282. package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
  283. package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
  284. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
  285. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
  286. package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
  287. package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
  288. package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
  289. package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
  290. package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
  291. package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
  292. package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
  293. package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
  294. package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
  295. package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  296. package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  297. package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
  298. package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
  299. package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
  300. package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
  301. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
  302. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
  303. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  304. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
  305. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
  306. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  307. package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  308. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
  309. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
  310. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
  311. package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
  312. package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
  313. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  314. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  315. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
  316. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  317. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
  318. package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  319. package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  320. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  321. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
  322. package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  323. package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  324. package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  325. package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
  326. package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
  327. package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
  328. package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
  329. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
  330. package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
  331. package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
  332. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
  333. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
  334. package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
  335. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
  336. package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
  337. package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
  338. package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
  339. package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
  340. package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
  341. package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
  342. package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
  343. package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
  344. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
  345. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
  346. package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
  347. package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
  348. package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
  349. package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
  350. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
  351. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
  352. package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  353. package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
  354. package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  355. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  356. package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  357. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  358. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
  359. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
  360. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  361. package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  362. package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  363. package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  364. package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
  365. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  366. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
  367. package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  368. package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
  369. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
  370. package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
  371. package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
  372. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
  373. package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
  374. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  375. package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
  376. package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
  377. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
  378. package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
  379. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
  380. package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
  381. package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
  382. package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
  383. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
  384. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  385. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  386. package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
  387. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
  388. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  389. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
  390. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
  391. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  392. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
  393. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  394. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  395. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  396. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  397. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
  398. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
  399. package/vendor/abseil-cpp/absl/time/time.h +24 -18
  400. package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
  401. package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
  402. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
  403. package/vendor/abseil-cpp/absl/types/any.h +9 -484
  404. package/vendor/abseil-cpp/absl/types/optional.h +7 -747
  405. package/vendor/abseil-cpp/absl/types/span.h +46 -19
  406. package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
  407. package/vendor/abseil-cpp/absl/types/variant.h +5 -784
  408. package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
  409. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
  410. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
  411. package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
  412. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
  413. package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
  414. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
  415. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
  416. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
  417. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
  418. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
  419. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  420. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
  421. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
  422. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
  423. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
  424. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
  425. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
  426. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
  427. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
  428. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
  429. package/vendor/re2/.bazelrc +4 -4
  430. package/vendor/re2/.bcr/metadata.template.json +16 -0
  431. package/vendor/re2/.bcr/presubmit.yml +57 -0
  432. package/vendor/re2/.bcr/source.template.json +5 -0
  433. package/vendor/re2/.github/bazel.sh +1 -7
  434. package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
  435. package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
  436. package/vendor/re2/.github/workflows/ci.yml +5 -6
  437. package/vendor/re2/.github/workflows/pages.yml +3 -3
  438. package/vendor/re2/.github/workflows/python.yml +29 -24
  439. package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
  440. package/vendor/re2/.github/workflows/release.yml +15 -4
  441. package/vendor/re2/BUILD.bazel +25 -0
  442. package/vendor/re2/CMakeLists.txt +100 -85
  443. package/vendor/re2/CONTRIBUTING.md +0 -1
  444. package/vendor/re2/MODULE.bazel +10 -10
  445. package/vendor/re2/Makefile +1 -1
  446. package/vendor/re2/README.md +259 -0
  447. package/vendor/re2/python/BUILD.bazel +8 -0
  448. package/vendor/re2/python/re2.py +1 -1
  449. package/vendor/re2/python/re2_test.py +6 -0
  450. package/vendor/re2/python/setup.py +3 -3
  451. package/vendor/re2/re2/bitmap256.cc +3 -4
  452. package/vendor/re2/re2/bitstate.cc +15 -10
  453. package/vendor/re2/re2/dfa.cc +1 -2
  454. package/vendor/re2/re2/parse.cc +3 -4
  455. package/vendor/re2/re2/prog.cc +1 -2
  456. package/vendor/re2/re2/prog.h +1 -0
  457. package/vendor/re2/re2/re2.cc +5 -0
  458. package/vendor/re2/re2/re2.h +9 -9
  459. package/vendor/re2/re2/set.cc +6 -0
  460. package/vendor/re2/re2/set.h +5 -0
  461. package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
  462. package/vendor/re2/re2/testing/re2_test.cc +8 -0
  463. package/vendor/re2/re2/testing/set_test.cc +5 -0
  464. package/vendor/re2/re2/walker-inl.h +1 -1
  465. package/vendor/abseil-cpp/WORKSPACE +0 -76
  466. package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
  467. package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
  468. package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  469. package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
  470. package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
  471. package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
  472. package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
  473. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
  474. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
  475. package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  476. package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
  477. package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
  478. package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
  479. package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
  480. package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
  481. package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  482. package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  483. package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  484. package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  485. package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
  486. package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
  487. package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
  488. package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
  489. package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
  490. package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
  491. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
  492. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
  493. package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
  494. package/vendor/re2/.github/workflows/pr.yml +0 -34
  495. package/vendor/re2/README +0 -47
@@ -23,7 +23,9 @@
23
23
  #include <cstdlib>
24
24
  #include <functional>
25
25
  #include <memory>
26
+ #include <mutex> // NOLINT(build/c++11)
26
27
  #include <random>
28
+ #include <shared_mutex> // NOLINT(build/c++14)
27
29
  #include <string>
28
30
  #include <thread> // NOLINT(build/c++11)
29
31
  #include <type_traits>
@@ -36,6 +38,7 @@
36
38
  #include "absl/log/check.h"
37
39
  #include "absl/log/log.h"
38
40
  #include "absl/memory/memory.h"
41
+ #include "absl/random/random.h"
39
42
  #include "absl/synchronization/internal/create_thread_identity.h"
40
43
  #include "absl/synchronization/internal/thread_pool.h"
41
44
  #include "absl/time/clock.h"
@@ -105,7 +108,7 @@ static void CheckSumG0G1(void *v) {
105
108
 
106
109
  static void TestMu(TestContext *cxt, int c) {
107
110
  for (int i = 0; i != cxt->iterations; i++) {
108
- absl::MutexLock l(&cxt->mu);
111
+ absl::MutexLock l(cxt->mu);
109
112
  int a = cxt->g0 + 1;
110
113
  cxt->g0 = a;
111
114
  cxt->g1--;
@@ -116,17 +119,17 @@ static void TestTry(TestContext *cxt, int c) {
116
119
  for (int i = 0; i != cxt->iterations; i++) {
117
120
  do {
118
121
  std::this_thread::yield();
119
- } while (!cxt->mu.TryLock());
122
+ } while (!cxt->mu.try_lock());
120
123
  int a = cxt->g0 + 1;
121
124
  cxt->g0 = a;
122
125
  cxt->g1--;
123
- cxt->mu.Unlock();
126
+ cxt->mu.unlock();
124
127
  }
125
128
  }
126
129
 
127
130
  static void TestR20ms(TestContext *cxt, int c) {
128
131
  for (int i = 0; i != cxt->iterations; i++) {
129
- absl::ReaderMutexLock l(&cxt->mu);
132
+ absl::ReaderMutexLock l(cxt->mu);
130
133
  absl::SleepFor(absl::Milliseconds(20));
131
134
  cxt->mu.AssertReaderHeld();
132
135
  }
@@ -135,7 +138,7 @@ static void TestR20ms(TestContext *cxt, int c) {
135
138
  static void TestRW(TestContext *cxt, int c) {
136
139
  if ((c & 1) == 0) {
137
140
  for (int i = 0; i != cxt->iterations; i++) {
138
- absl::WriterMutexLock l(&cxt->mu);
141
+ absl::WriterMutexLock l(cxt->mu);
139
142
  cxt->g0++;
140
143
  cxt->g1--;
141
144
  cxt->mu.AssertHeld();
@@ -143,7 +146,7 @@ static void TestRW(TestContext *cxt, int c) {
143
146
  }
144
147
  } else {
145
148
  for (int i = 0; i != cxt->iterations; i++) {
146
- absl::ReaderMutexLock l(&cxt->mu);
149
+ absl::ReaderMutexLock l(cxt->mu);
147
150
  CHECK_EQ(cxt->g0, -cxt->g1) << "Error in TestRW";
148
151
  cxt->mu.AssertReaderHeld();
149
152
  }
@@ -165,7 +168,7 @@ static void TestAwait(TestContext *cxt, int c) {
165
168
  MyContext mc;
166
169
  mc.target = c;
167
170
  mc.cxt = cxt;
168
- absl::MutexLock l(&cxt->mu);
171
+ absl::MutexLock l(cxt->mu);
169
172
  cxt->mu.AssertHeld();
170
173
  while (cxt->g0 < cxt->iterations) {
171
174
  cxt->mu.Await(absl::Condition(&mc, &MyContext::MyTurn));
@@ -181,7 +184,7 @@ static void TestAwait(TestContext *cxt, int c) {
181
184
 
182
185
  static void TestSignalAll(TestContext *cxt, int c) {
183
186
  int target = c;
184
- absl::MutexLock l(&cxt->mu);
187
+ absl::MutexLock l(cxt->mu);
185
188
  cxt->mu.AssertHeld();
186
189
  while (cxt->g0 < cxt->iterations) {
187
190
  while (cxt->g0 != target && cxt->g0 != cxt->iterations) {
@@ -199,7 +202,7 @@ static void TestSignalAll(TestContext *cxt, int c) {
199
202
  static void TestSignal(TestContext *cxt, int c) {
200
203
  CHECK_EQ(cxt->threads, 2) << "TestSignal should use 2 threads";
201
204
  int target = c;
202
- absl::MutexLock l(&cxt->mu);
205
+ absl::MutexLock l(cxt->mu);
203
206
  cxt->mu.AssertHeld();
204
207
  while (cxt->g0 < cxt->iterations) {
205
208
  while (cxt->g0 != target && cxt->g0 != cxt->iterations) {
@@ -216,7 +219,7 @@ static void TestSignal(TestContext *cxt, int c) {
216
219
 
217
220
  static void TestCVTimeout(TestContext *cxt, int c) {
218
221
  int target = c;
219
- absl::MutexLock l(&cxt->mu);
222
+ absl::MutexLock l(cxt->mu);
220
223
  cxt->mu.AssertHeld();
221
224
  while (cxt->g0 < cxt->iterations) {
222
225
  while (cxt->g0 != target && cxt->g0 != cxt->iterations) {
@@ -240,7 +243,7 @@ static void TestTime(TestContext *cxt, int c, bool use_cv) {
240
243
  absl::Condition false_cond(&kFalse);
241
244
  absl::Condition g0ge2(G0GE2, cxt);
242
245
  if (c == 0) {
243
- absl::MutexLock l(&cxt->mu);
246
+ absl::MutexLock l(cxt->mu);
244
247
 
245
248
  absl::Time start = absl::Now();
246
249
  if (use_cv) {
@@ -308,7 +311,7 @@ static void TestTime(TestContext *cxt, int c, bool use_cv) {
308
311
  CHECK_EQ(cxt->g0, cxt->threads) << "TestTime failed";
309
312
 
310
313
  } else if (c == 1) {
311
- absl::MutexLock l(&cxt->mu);
314
+ absl::MutexLock l(cxt->mu);
312
315
  const absl::Time start = absl::Now();
313
316
  if (use_cv) {
314
317
  cxt->cv.WaitWithTimeout(&cxt->mu, absl::Milliseconds(500));
@@ -321,7 +324,7 @@ static void TestTime(TestContext *cxt, int c, bool use_cv) {
321
324
  << "TestTime failed";
322
325
  cxt->g0++;
323
326
  } else if (c == 2) {
324
- absl::MutexLock l(&cxt->mu);
327
+ absl::MutexLock l(cxt->mu);
325
328
  if (use_cv) {
326
329
  while (cxt->g0 < 2) {
327
330
  cxt->cv.WaitWithTimeout(&cxt->mu, absl::Seconds(100));
@@ -332,7 +335,7 @@ static void TestTime(TestContext *cxt, int c, bool use_cv) {
332
335
  }
333
336
  cxt->g0++;
334
337
  } else {
335
- absl::MutexLock l(&cxt->mu);
338
+ absl::MutexLock l(cxt->mu);
336
339
  if (use_cv) {
337
340
  while (cxt->g0 < 2) {
338
341
  cxt->cv.Wait(&cxt->mu);
@@ -350,11 +353,11 @@ static void TestCVTime(TestContext *cxt, int c) { TestTime(cxt, c, true); }
350
353
 
351
354
  static void EndTest(int *c0, int *c1, absl::Mutex *mu, absl::CondVar *cv,
352
355
  const std::function<void(int)> &cb) {
353
- mu->Lock();
356
+ mu->lock();
354
357
  int c = (*c0)++;
355
- mu->Unlock();
358
+ mu->unlock();
356
359
  cb(c);
357
- absl::MutexLock l(mu);
360
+ absl::MutexLock l(*mu);
358
361
  (*c1)++;
359
362
  cv->Signal();
360
363
  }
@@ -376,11 +379,11 @@ static int RunTestCommon(TestContext *cxt, void (*test)(TestContext *cxt, int),
376
379
  &EndTest, &c0, &c1, &mu2, &cv2,
377
380
  std::function<void(int)>(std::bind(test, cxt, std::placeholders::_1))));
378
381
  }
379
- mu2.Lock();
382
+ mu2.lock();
380
383
  while (c1 != threads) {
381
384
  cv2.Wait(&mu2);
382
385
  }
383
- mu2.Unlock();
386
+ mu2.unlock();
384
387
  return cxt->g0;
385
388
  }
386
389
 
@@ -421,7 +424,7 @@ struct TimeoutBugStruct {
421
424
  static void WaitForA(TimeoutBugStruct *x) {
422
425
  x->mu.LockWhen(absl::Condition(&x->a));
423
426
  x->a_waiter_count--;
424
- x->mu.Unlock();
427
+ x->mu.unlock();
425
428
  }
426
429
 
427
430
  static bool NoAWaiters(TimeoutBugStruct *x) { return x->a_waiter_count == 0; }
@@ -444,27 +447,27 @@ TEST(Mutex, CondVarWaitSignalsAwait) {
444
447
  // Thread A. Sets barrier, waits for release using Mutex::Await, then
445
448
  // signals released_cv.
446
449
  pool->Schedule([&state] {
447
- state.release_mu.Lock();
450
+ state.release_mu.lock();
448
451
 
449
- state.barrier_mu.Lock();
452
+ state.barrier_mu.lock();
450
453
  state.barrier = true;
451
- state.barrier_mu.Unlock();
454
+ state.barrier_mu.unlock();
452
455
 
453
456
  state.release_mu.Await(absl::Condition(&state.release));
454
457
  state.released_cv.Signal();
455
- state.release_mu.Unlock();
458
+ state.release_mu.unlock();
456
459
  });
457
460
 
458
461
  state.barrier_mu.LockWhen(absl::Condition(&state.barrier));
459
- state.barrier_mu.Unlock();
460
- state.release_mu.Lock();
462
+ state.barrier_mu.unlock();
463
+ state.release_mu.lock();
461
464
  // Thread A is now blocked on release by way of Mutex::Await().
462
465
 
463
466
  // Set release. Calling released_cv.Wait() should un-block thread A,
464
467
  // which will signal released_cv. If not, the test will hang.
465
468
  state.release = true;
466
469
  state.released_cv.Wait(&state.release_mu);
467
- state.release_mu.Unlock();
470
+ state.release_mu.unlock();
468
471
  }
469
472
 
470
473
  // Test that a CondVar.WaitWithTimeout(&mutex) can un-block a call to
@@ -485,20 +488,20 @@ TEST(Mutex, CondVarWaitWithTimeoutSignalsAwait) {
485
488
  // Thread A. Sets barrier, waits for release using Mutex::Await, then
486
489
  // signals released_cv.
487
490
  pool->Schedule([&state] {
488
- state.release_mu.Lock();
491
+ state.release_mu.lock();
489
492
 
490
- state.barrier_mu.Lock();
493
+ state.barrier_mu.lock();
491
494
  state.barrier = true;
492
- state.barrier_mu.Unlock();
495
+ state.barrier_mu.unlock();
493
496
 
494
497
  state.release_mu.Await(absl::Condition(&state.release));
495
498
  state.released_cv.Signal();
496
- state.release_mu.Unlock();
499
+ state.release_mu.unlock();
497
500
  });
498
501
 
499
502
  state.barrier_mu.LockWhen(absl::Condition(&state.barrier));
500
- state.barrier_mu.Unlock();
501
- state.release_mu.Lock();
503
+ state.barrier_mu.unlock();
504
+ state.release_mu.lock();
502
505
  // Thread A is now blocked on release by way of Mutex::Await().
503
506
 
504
507
  // Set release. Calling released_cv.Wait() should un-block thread A,
@@ -509,7 +512,7 @@ TEST(Mutex, CondVarWaitWithTimeoutSignalsAwait) {
509
512
  << "; Unrecoverable test failure: CondVar::WaitWithTimeout did not "
510
513
  "unblock the absl::Mutex::Await call in another thread.";
511
514
 
512
- state.release_mu.Unlock();
515
+ state.release_mu.unlock();
513
516
  }
514
517
 
515
518
  // Test for regression of a bug in loop of TryRemove()
@@ -535,7 +538,7 @@ TEST(Mutex, MutexTimeoutBug) {
535
538
 
536
539
  x.a = true; // wakeup the two waiters on A
537
540
  x.mu.Await(absl::Condition(&NoAWaiters, &x)); // wait for them to exit
538
- x.mu.Unlock();
541
+ x.mu.unlock();
539
542
  }
540
543
 
541
544
  struct CondVarWaitDeadlock : testing::TestWithParam<int> {
@@ -555,27 +558,27 @@ struct CondVarWaitDeadlock : testing::TestWithParam<int> {
555
558
 
556
559
  void Waiter1() {
557
560
  if (read_lock1) {
558
- mu.ReaderLock();
561
+ mu.lock_shared();
559
562
  while (!cond1) {
560
563
  cv.Wait(&mu);
561
564
  }
562
- mu.ReaderUnlock();
565
+ mu.unlock_shared();
563
566
  } else {
564
- mu.Lock();
567
+ mu.lock();
565
568
  while (!cond1) {
566
569
  cv.Wait(&mu);
567
570
  }
568
- mu.Unlock();
571
+ mu.unlock();
569
572
  }
570
573
  }
571
574
 
572
575
  void Waiter2() {
573
576
  if (read_lock2) {
574
577
  mu.ReaderLockWhen(absl::Condition(&cond2));
575
- mu.ReaderUnlock();
578
+ mu.unlock_shared();
576
579
  } else {
577
580
  mu.LockWhen(absl::Condition(&cond2));
578
- mu.Unlock();
581
+ mu.unlock();
579
582
  }
580
583
  }
581
584
  };
@@ -599,21 +602,21 @@ TEST_P(CondVarWaitDeadlock, Test) {
599
602
  absl::SleepFor(absl::Milliseconds(100));
600
603
 
601
604
  // Wake condwaiter.
602
- mu.Lock();
605
+ mu.lock();
603
606
  cond1 = true;
604
607
  if (signal_unlocked) {
605
- mu.Unlock();
608
+ mu.unlock();
606
609
  cv.Signal();
607
610
  } else {
608
611
  cv.Signal();
609
- mu.Unlock();
612
+ mu.unlock();
610
613
  }
611
614
  waiter1.reset(); // "join" waiter1
612
615
 
613
616
  // Wake waiter.
614
- mu.Lock();
617
+ mu.lock();
615
618
  cond2 = true;
616
- mu.Unlock();
619
+ mu.unlock();
617
620
  waiter2.reset(); // "join" waiter2
618
621
  }
619
622
 
@@ -638,19 +641,19 @@ struct DequeueAllWakeableBugStruct {
638
641
 
639
642
  // Test for regression of a bug in loop of DequeueAllWakeable()
640
643
  static void AcquireAsReader(DequeueAllWakeableBugStruct *x) {
641
- x->mu.ReaderLock();
642
- x->mu2.Lock();
644
+ x->mu.lock_shared();
645
+ x->mu2.lock();
643
646
  x->unfinished_count--;
644
647
  x->done1 = (x->unfinished_count == 0);
645
- x->mu2.Unlock();
648
+ x->mu2.unlock();
646
649
  // make sure that both readers acquired mu before we release it.
647
650
  absl::SleepFor(absl::Seconds(2));
648
- x->mu.ReaderUnlock();
651
+ x->mu.unlock_shared();
649
652
 
650
- x->mu2.Lock();
653
+ x->mu2.lock();
651
654
  x->finished_count--;
652
655
  x->done2 = (x->finished_count == 0);
653
- x->mu2.Unlock();
656
+ x->mu2.unlock();
654
657
  }
655
658
 
656
659
  // Test for regression of a bug in loop of DequeueAllWakeable()
@@ -662,21 +665,21 @@ TEST(Mutex, MutexReaderWakeupBug) {
662
665
  x.done1 = false;
663
666
  x.finished_count = 2;
664
667
  x.done2 = false;
665
- x.mu.Lock(); // acquire mu exclusively
668
+ x.mu.lock(); // acquire mu exclusively
666
669
  // queue two thread that will block on reader locks on x.mu
667
670
  tp->Schedule(std::bind(&AcquireAsReader, &x));
668
671
  tp->Schedule(std::bind(&AcquireAsReader, &x));
669
672
  absl::SleepFor(absl::Seconds(1)); // give time for reader threads to block
670
- x.mu.Unlock(); // wake them up
673
+ x.mu.unlock(); // wake them up
671
674
 
672
675
  // both readers should finish promptly
673
676
  EXPECT_TRUE(
674
677
  x.mu2.LockWhenWithTimeout(absl::Condition(&x.done1), absl::Seconds(10)));
675
- x.mu2.Unlock();
678
+ x.mu2.unlock();
676
679
 
677
680
  EXPECT_TRUE(
678
681
  x.mu2.LockWhenWithTimeout(absl::Condition(&x.done2), absl::Seconds(10)));
679
- x.mu2.Unlock();
682
+ x.mu2.unlock();
680
683
  }
681
684
 
682
685
  struct LockWhenTestStruct {
@@ -688,15 +691,15 @@ struct LockWhenTestStruct {
688
691
  };
689
692
 
690
693
  static bool LockWhenTestIsCond(LockWhenTestStruct *s) {
691
- s->mu2.Lock();
694
+ s->mu2.lock();
692
695
  s->waiting = true;
693
- s->mu2.Unlock();
696
+ s->mu2.unlock();
694
697
  return s->cond;
695
698
  }
696
699
 
697
700
  static void LockWhenTestWaitForIsCond(LockWhenTestStruct *s) {
698
701
  s->mu1.LockWhen(absl::Condition(&LockWhenTestIsCond, s));
699
- s->mu1.Unlock();
702
+ s->mu1.unlock();
700
703
  }
701
704
 
702
705
  TEST(Mutex, LockWhen) {
@@ -704,11 +707,11 @@ TEST(Mutex, LockWhen) {
704
707
 
705
708
  std::thread t(LockWhenTestWaitForIsCond, &s);
706
709
  s.mu2.LockWhen(absl::Condition(&s.waiting));
707
- s.mu2.Unlock();
710
+ s.mu2.unlock();
708
711
 
709
- s.mu1.Lock();
712
+ s.mu1.lock();
710
713
  s.cond = true;
711
- s.mu1.Unlock();
714
+ s.mu1.unlock();
712
715
 
713
716
  t.join();
714
717
  }
@@ -723,20 +726,20 @@ TEST(Mutex, LockWhenGuard) {
723
726
  bool (*cond_lt_10)(int *) = [](int *p) { return *p < 10; };
724
727
 
725
728
  std::thread t1([&mu, &n, &done, cond_eq_10]() {
726
- absl::ReaderMutexLock lock(&mu, absl::Condition(cond_eq_10, &n));
729
+ absl::ReaderMutexLock lock(mu, absl::Condition(cond_eq_10, &n));
727
730
  done = true;
728
731
  });
729
732
 
730
733
  std::thread t2[10];
731
734
  for (std::thread &t : t2) {
732
735
  t = std::thread([&mu, &n, cond_lt_10]() {
733
- absl::WriterMutexLock lock(&mu, absl::Condition(cond_lt_10, &n));
736
+ absl::WriterMutexLock lock(mu, absl::Condition(cond_lt_10, &n));
734
737
  ++n;
735
738
  });
736
739
  }
737
740
 
738
741
  {
739
- absl::MutexLock lock(&mu);
742
+ absl::MutexLock lock(mu);
740
743
  n = 0;
741
744
  }
742
745
 
@@ -748,7 +751,7 @@ TEST(Mutex, LockWhenGuard) {
748
751
  }
749
752
 
750
753
  // --------------------------------------------------------
751
- // The following test requires Mutex::ReaderLock to be a real shared
754
+ // The following test requires Mutex::lock_shared to be a real shared
752
755
  // lock, which is not the case in all builds.
753
756
  #if !defined(ABSL_MUTEX_READER_LOCK_IS_EXCLUSIVE)
754
757
 
@@ -775,9 +778,9 @@ struct ReaderDecrementBugStruct {
775
778
  // L >= mu, L < mu_waiting_on_cond
776
779
  static bool IsCond(void *v) {
777
780
  ReaderDecrementBugStruct *x = reinterpret_cast<ReaderDecrementBugStruct *>(v);
778
- x->mu2.Lock();
781
+ x->mu2.lock();
779
782
  x->waiting_on_cond = true;
780
- x->mu2.Unlock();
783
+ x->mu2.unlock();
781
784
  return x->cond;
782
785
  }
783
786
 
@@ -790,23 +793,23 @@ static bool AllDone(void *v) {
790
793
  // L={}
791
794
  static void WaitForCond(ReaderDecrementBugStruct *x) {
792
795
  absl::Mutex dummy;
793
- absl::MutexLock l(&dummy);
796
+ absl::MutexLock l(dummy);
794
797
  x->mu.LockWhen(absl::Condition(&IsCond, x));
795
798
  x->done--;
796
- x->mu.Unlock();
799
+ x->mu.unlock();
797
800
  }
798
801
 
799
802
  // L={}
800
803
  static void GetReadLock(ReaderDecrementBugStruct *x) {
801
- x->mu.ReaderLock();
802
- x->mu2.Lock();
804
+ x->mu.lock_shared();
805
+ x->mu2.lock();
803
806
  x->have_reader_lock = true;
804
807
  x->mu2.Await(absl::Condition(&x->complete));
805
- x->mu2.Unlock();
806
- x->mu.ReaderUnlock();
807
- x->mu.Lock();
808
+ x->mu2.unlock();
809
+ x->mu.unlock_shared();
810
+ x->mu.lock();
808
811
  x->done--;
809
- x->mu.Unlock();
812
+ x->mu.unlock();
810
813
  }
811
814
 
812
815
  // Test for reader counter being decremented incorrectly by waiter
@@ -822,32 +825,32 @@ TEST(Mutex, MutexReaderDecrementBug) ABSL_NO_THREAD_SAFETY_ANALYSIS {
822
825
  // Run WaitForCond() and wait for it to sleep
823
826
  std::thread thread1(WaitForCond, &x);
824
827
  x.mu2.LockWhen(absl::Condition(&x.waiting_on_cond));
825
- x.mu2.Unlock();
828
+ x.mu2.unlock();
826
829
 
827
830
  // Run GetReadLock(), and wait for it to get the read lock
828
831
  std::thread thread2(GetReadLock, &x);
829
832
  x.mu2.LockWhen(absl::Condition(&x.have_reader_lock));
830
- x.mu2.Unlock();
833
+ x.mu2.unlock();
831
834
 
832
835
  // Get the reader lock ourselves, and release it.
833
- x.mu.ReaderLock();
834
- x.mu.ReaderUnlock();
836
+ x.mu.lock_shared();
837
+ x.mu.unlock_shared();
835
838
 
836
839
  // The lock should be held in read mode by GetReadLock().
837
840
  // If we have the bug, the lock will be free.
838
841
  x.mu.AssertReaderHeld();
839
842
 
840
843
  // Wake up all the threads.
841
- x.mu2.Lock();
844
+ x.mu2.lock();
842
845
  x.complete = true;
843
- x.mu2.Unlock();
846
+ x.mu2.unlock();
844
847
 
845
848
  // TODO(delesley): turn on analysis once lock upgrading is supported.
846
849
  // (This call upgrades the lock from shared to exclusive.)
847
- x.mu.Lock();
850
+ x.mu.lock();
848
851
  x.cond = true;
849
852
  x.mu.Await(absl::Condition(&AllDone, &x));
850
- x.mu.Unlock();
853
+ x.mu.unlock();
851
854
 
852
855
  thread1.join();
853
856
  thread2.join();
@@ -868,9 +871,9 @@ TEST(Mutex, LockedMutexDestructionBug) ABSL_NO_THREAD_SAFETY_ANALYSIS {
868
871
  auto mu = absl::make_unique<absl::Mutex[]>(kNumLocks);
869
872
  for (int j = 0; j != kNumLocks; j++) {
870
873
  if ((j % 2) == 0) {
871
- mu[j].WriterLock();
874
+ mu[j].lock();
872
875
  } else {
873
- mu[j].ReaderLock();
876
+ mu[j].lock_shared();
874
877
  }
875
878
  }
876
879
  }
@@ -1064,18 +1067,17 @@ TEST(Mutex, ConditionSwap) {
1064
1067
 
1065
1068
  static void ReaderForReaderOnCondVar(absl::Mutex *mu, absl::CondVar *cv,
1066
1069
  int *running) {
1067
- std::random_device dev;
1068
- std::mt19937 gen(dev());
1070
+ absl::InsecureBitGen gen;
1069
1071
  std::uniform_int_distribution<int> random_millis(0, 15);
1070
- mu->ReaderLock();
1072
+ mu->lock_shared();
1071
1073
  while (*running == 3) {
1072
1074
  absl::SleepFor(absl::Milliseconds(random_millis(gen)));
1073
1075
  cv->WaitWithTimeout(mu, absl::Milliseconds(random_millis(gen)));
1074
1076
  }
1075
- mu->ReaderUnlock();
1076
- mu->Lock();
1077
+ mu->unlock_shared();
1078
+ mu->lock();
1077
1079
  (*running)--;
1078
- mu->Unlock();
1080
+ mu->unlock();
1079
1081
  }
1080
1082
 
1081
1083
  static bool IntIsZero(int *x) { return *x == 0; }
@@ -1090,10 +1092,10 @@ TEST(Mutex, TestReaderOnCondVar) {
1090
1092
  tp->Schedule(std::bind(&ReaderForReaderOnCondVar, &mu, &cv, &running));
1091
1093
  tp->Schedule(std::bind(&ReaderForReaderOnCondVar, &mu, &cv, &running));
1092
1094
  absl::SleepFor(absl::Seconds(2));
1093
- mu.Lock();
1095
+ mu.lock();
1094
1096
  running--;
1095
1097
  mu.Await(absl::Condition(&IntIsZero, &running));
1096
- mu.Unlock();
1098
+ mu.unlock();
1097
1099
  }
1098
1100
 
1099
1101
  // --------------------------------------------------------
@@ -1117,7 +1119,7 @@ static bool ConditionWithAcquire(AcquireFromConditionStruct *x) {
1117
1119
  bool always_false = false;
1118
1120
  x->mu1.LockWhenWithTimeout(absl::Condition(&always_false),
1119
1121
  absl::Milliseconds(100));
1120
- x->mu1.Unlock();
1122
+ x->mu1.unlock();
1121
1123
  }
1122
1124
  CHECK_LT(x->value, 4) << "should not be invoked a fourth time";
1123
1125
 
@@ -1129,7 +1131,7 @@ static void WaitForCond2(AcquireFromConditionStruct *x) {
1129
1131
  // wait for cond0 to become true
1130
1132
  x->mu0.LockWhen(absl::Condition(&ConditionWithAcquire, x));
1131
1133
  x->done = true;
1132
- x->mu0.Unlock();
1134
+ x->mu0.unlock();
1133
1135
  }
1134
1136
 
1135
1137
  // Test for Condition whose function acquires other Mutexes
@@ -1145,12 +1147,12 @@ TEST(Mutex, AcquireFromCondition) {
1145
1147
  // return false.
1146
1148
  absl::SleepFor(absl::Milliseconds(500)); // allow T time to hang
1147
1149
 
1148
- x.mu0.Lock();
1150
+ x.mu0.lock();
1149
1151
  x.cv.WaitWithTimeout(&x.mu0, absl::Milliseconds(500)); // wake T
1150
1152
  // T will be woken because the Wait() will call ConditionWithAcquire()
1151
1153
  // for the second time, and it will return true.
1152
1154
 
1153
- x.mu0.Unlock();
1155
+ x.mu0.unlock();
1154
1156
 
1155
1157
  // T will then acquire the lock and recheck its own condition.
1156
1158
  // It will find the condition true, as this is the third invocation,
@@ -1166,7 +1168,7 @@ TEST(Mutex, AcquireFromCondition) {
1166
1168
  // is conceptually waiting both on the condition variable, and on mu2.
1167
1169
 
1168
1170
  x.mu0.LockWhen(absl::Condition(&x.done));
1169
- x.mu0.Unlock();
1171
+ x.mu0.unlock();
1170
1172
  }
1171
1173
 
1172
1174
  TEST(Mutex, DeadlockDetector) {
@@ -1178,20 +1180,20 @@ TEST(Mutex, DeadlockDetector) {
1178
1180
  absl::Mutex m3;
1179
1181
  absl::Mutex m4;
1180
1182
 
1181
- m1.Lock(); // m1 gets ID1
1182
- m2.Lock(); // m2 gets ID2
1183
- m3.Lock(); // m3 gets ID3
1184
- m3.Unlock();
1185
- m2.Unlock();
1183
+ m1.lock(); // m1 gets ID1
1184
+ m2.lock(); // m2 gets ID2
1185
+ m3.lock(); // m3 gets ID3
1186
+ m3.unlock();
1187
+ m2.unlock();
1186
1188
  // m1 still held
1187
1189
  m1.ForgetDeadlockInfo(); // m1 loses ID
1188
- m2.Lock(); // m2 gets ID2
1189
- m3.Lock(); // m3 gets ID3
1190
- m4.Lock(); // m4 gets ID4
1191
- m3.Unlock();
1192
- m2.Unlock();
1193
- m4.Unlock();
1194
- m1.Unlock();
1190
+ m2.lock(); // m2 gets ID2
1191
+ m3.lock(); // m3 gets ID3
1192
+ m4.lock(); // m4 gets ID4
1193
+ m3.unlock();
1194
+ m2.unlock();
1195
+ m4.unlock();
1196
+ m1.unlock();
1195
1197
  }
1196
1198
 
1197
1199
  // Bazel has a test "warning" file that programs can write to if the
@@ -1246,18 +1248,18 @@ TEST(Mutex, DeadlockDetectorBazelWarning) {
1246
1248
 
1247
1249
  absl::Mutex mu0;
1248
1250
  absl::Mutex mu1;
1249
- bool got_mu0 = mu0.TryLock();
1250
- mu1.Lock(); // acquire mu1 while holding mu0
1251
+ bool got_mu0 = mu0.try_lock();
1252
+ mu1.lock(); // acquire mu1 while holding mu0
1251
1253
  if (got_mu0) {
1252
- mu0.Unlock();
1254
+ mu0.unlock();
1253
1255
  }
1254
- if (mu0.TryLock()) { // try lock shouldn't cause deadlock detector to fire
1255
- mu0.Unlock();
1256
+ if (mu0.try_lock()) { // try lock shouldn't cause deadlock detector to fire
1257
+ mu0.unlock();
1256
1258
  }
1257
- mu0.Lock(); // acquire mu0 while holding mu1; should get one deadlock
1259
+ mu0.lock(); // acquire mu0 while holding mu1; should get one deadlock
1258
1260
  // report here
1259
- mu0.Unlock();
1260
- mu1.Unlock();
1261
+ mu0.unlock();
1262
+ mu1.unlock();
1261
1263
 
1262
1264
  absl::SetMutexDeadlockDetectionMode(absl::OnDeadlockCycle::kAbort);
1263
1265
  }
@@ -1272,10 +1274,10 @@ TEST(Mutex, DeadlockDetectorLongCycle) {
1272
1274
  // Check that we survive a deadlock with a lock cycle.
1273
1275
  std::vector<absl::Mutex> mutex(100);
1274
1276
  for (size_t i = 0; i != mutex.size(); i++) {
1275
- mutex[i].Lock();
1276
- mutex[(i + 1) % mutex.size()].Lock();
1277
- mutex[i].Unlock();
1278
- mutex[(i + 1) % mutex.size()].Unlock();
1277
+ mutex[i].lock();
1278
+ mutex[(i + 1) % mutex.size()].lock();
1279
+ mutex[i].unlock();
1280
+ mutex[(i + 1) % mutex.size()].unlock();
1279
1281
  }
1280
1282
 
1281
1283
  absl::SetMutexDeadlockDetectionMode(absl::OnDeadlockCycle::kAbort);
@@ -1295,10 +1297,10 @@ TEST(Mutex, DeadlockDetectorStressTest) ABSL_NO_THREAD_SAFETY_ANALYSIS {
1295
1297
  int end = std::min(n_locks, i + 5);
1296
1298
  // acquire and then release locks i, i+1, ..., i+4
1297
1299
  for (int j = i; j < end; j++) {
1298
- array_of_locks[j].Lock();
1300
+ array_of_locks[j].lock();
1299
1301
  }
1300
1302
  for (int j = i; j < end; j++) {
1301
- array_of_locks[j].Unlock();
1303
+ array_of_locks[j].unlock();
1302
1304
  }
1303
1305
  }
1304
1306
  }
@@ -1319,11 +1321,11 @@ TEST(Mutex, DeadlockIdBug) ABSL_NO_THREAD_SAFETY_ANALYSIS {
1319
1321
  absl::Mutex b, c;
1320
1322
 
1321
1323
  // Hold mutex.
1322
- a->Lock();
1324
+ a->lock();
1323
1325
 
1324
1326
  // Force deadlock id assignment by acquiring another lock.
1325
- b.Lock();
1326
- b.Unlock();
1327
+ b.lock();
1328
+ b.unlock();
1327
1329
 
1328
1330
  // Delete the mutex. The Mutex destructor tries to remove held locks,
1329
1331
  // but the attempt isn't foolproof. It can fail if:
@@ -1338,8 +1340,8 @@ TEST(Mutex, DeadlockIdBug) ABSL_NO_THREAD_SAFETY_ANALYSIS {
1338
1340
  // We should end up getting assigned the same deadlock id that was
1339
1341
  // freed up when "a" was deleted, which will cause a spurious deadlock
1340
1342
  // report if the held lock entry for "a" was not invalidated.
1341
- c.Lock();
1342
- c.Unlock();
1343
+ c.lock();
1344
+ c.unlock();
1343
1345
  }
1344
1346
 
1345
1347
  // --------------------------------------------------------
@@ -1357,7 +1359,7 @@ static absl::Duration TimeoutTestAllowedSchedulingDelay() {
1357
1359
 
1358
1360
  // Returns true if `actual_delay` is close enough to `expected_delay` to pass
1359
1361
  // the timeouts/deadlines test. Otherwise, logs warnings and returns false.
1360
- ABSL_MUST_USE_RESULT
1362
+ [[nodiscard]]
1361
1363
  static bool DelayIsWithinBounds(absl::Duration expected_delay,
1362
1364
  absl::Duration actual_delay) {
1363
1365
  bool pass = true;
@@ -1574,11 +1576,11 @@ TEST_P(TimeoutTest, Await) {
1574
1576
  std::unique_ptr<absl::synchronization_internal::ThreadPool> pool =
1575
1577
  CreateDefaultPool();
1576
1578
  RunAfterDelay(params.satisfy_condition_delay, pool.get(), [&] {
1577
- absl::MutexLock l(&mu);
1579
+ absl::MutexLock l(mu);
1578
1580
  value = true;
1579
1581
  });
1580
1582
 
1581
- absl::MutexLock lock(&mu);
1583
+ absl::MutexLock lock(mu);
1582
1584
  absl::Time start_time = absl::Now();
1583
1585
  absl::Condition cond(&value);
1584
1586
  bool result =
@@ -1608,7 +1610,7 @@ TEST_P(TimeoutTest, LockWhen) {
1608
1610
  std::unique_ptr<absl::synchronization_internal::ThreadPool> pool =
1609
1611
  CreateDefaultPool();
1610
1612
  RunAfterDelay(params.satisfy_condition_delay, pool.get(), [&] {
1611
- absl::MutexLock l(&mu);
1613
+ absl::MutexLock l(mu);
1612
1614
  value = true;
1613
1615
  });
1614
1616
 
@@ -1618,7 +1620,7 @@ TEST_P(TimeoutTest, LockWhen) {
1618
1620
  params.use_absolute_deadline
1619
1621
  ? mu.LockWhenWithDeadline(cond, start_time + params.wait_timeout)
1620
1622
  : mu.LockWhenWithTimeout(cond, params.wait_timeout);
1621
- mu.Unlock();
1623
+ mu.unlock();
1622
1624
 
1623
1625
  if (DelayIsWithinBounds(params.expected_delay, absl::Now() - start_time)) {
1624
1626
  EXPECT_EQ(params.expected_result, result);
@@ -1643,7 +1645,7 @@ TEST_P(TimeoutTest, ReaderLockWhen) {
1643
1645
  std::unique_ptr<absl::synchronization_internal::ThreadPool> pool =
1644
1646
  CreateDefaultPool();
1645
1647
  RunAfterDelay(params.satisfy_condition_delay, pool.get(), [&] {
1646
- absl::MutexLock l(&mu);
1648
+ absl::MutexLock l(mu);
1647
1649
  value = true;
1648
1650
  });
1649
1651
 
@@ -1654,7 +1656,7 @@ TEST_P(TimeoutTest, ReaderLockWhen) {
1654
1656
  start_time + params.wait_timeout)
1655
1657
  : mu.ReaderLockWhenWithTimeout(absl::Condition(&value),
1656
1658
  params.wait_timeout);
1657
- mu.ReaderUnlock();
1659
+ mu.unlock_shared();
1658
1660
 
1659
1661
  if (DelayIsWithinBounds(params.expected_delay, absl::Now() - start_time)) {
1660
1662
  EXPECT_EQ(params.expected_result, result);
@@ -1680,12 +1682,12 @@ TEST_P(TimeoutTest, Wait) {
1680
1682
  std::unique_ptr<absl::synchronization_internal::ThreadPool> pool =
1681
1683
  CreateDefaultPool();
1682
1684
  RunAfterDelay(params.satisfy_condition_delay, pool.get(), [&] {
1683
- absl::MutexLock l(&mu);
1685
+ absl::MutexLock l(mu);
1684
1686
  value = true;
1685
1687
  cv.Signal();
1686
1688
  });
1687
1689
 
1688
- absl::MutexLock lock(&mu);
1690
+ absl::MutexLock lock(mu);
1689
1691
  absl::Time start_time = absl::Now();
1690
1692
  absl::Duration timeout = params.wait_timeout;
1691
1693
  absl::Time deadline = start_time + timeout;
@@ -1711,13 +1713,13 @@ TEST(Mutex, Logging) {
1711
1713
  logged_mutex.EnableDebugLog("fido_mutex");
1712
1714
  absl::CondVar logged_cv;
1713
1715
  logged_cv.EnableDebugLog("rover_cv");
1714
- logged_mutex.Lock();
1716
+ logged_mutex.lock();
1715
1717
  logged_cv.WaitWithTimeout(&logged_mutex, absl::Milliseconds(20));
1716
- logged_mutex.Unlock();
1717
- logged_mutex.ReaderLock();
1718
- logged_mutex.ReaderUnlock();
1719
- logged_mutex.Lock();
1720
- logged_mutex.Unlock();
1718
+ logged_mutex.unlock();
1719
+ logged_mutex.lock_shared();
1720
+ logged_mutex.unlock_shared();
1721
+ logged_mutex.lock();
1722
+ logged_mutex.unlock();
1721
1723
  logged_cv.Signal();
1722
1724
  logged_cv.SignalAll();
1723
1725
  }
@@ -1725,7 +1727,7 @@ TEST(Mutex, Logging) {
1725
1727
  TEST(Mutex, LoggingAddressReuse) {
1726
1728
  // Repeatedly re-create a Mutex with debug logging at the same address.
1727
1729
  ScopedInvariantDebugging scoped_debugging;
1728
- alignas(absl::Mutex) char storage[sizeof(absl::Mutex)];
1730
+ alignas(absl::Mutex) unsigned char storage[sizeof(absl::Mutex)];
1729
1731
  auto invariant =
1730
1732
  +[](void *alive) { EXPECT_TRUE(*static_cast<bool *>(alive)); };
1731
1733
  constexpr size_t kIters = 10;
@@ -1735,8 +1737,8 @@ TEST(Mutex, LoggingAddressReuse) {
1735
1737
  alive[i] = true;
1736
1738
  mu->EnableDebugLog("Mutex");
1737
1739
  mu->EnableInvariantDebugging(invariant, &alive[i]);
1738
- mu->Lock();
1739
- mu->Unlock();
1740
+ mu->lock();
1741
+ mu->unlock();
1740
1742
  mu->~Mutex();
1741
1743
  alive[i] = false;
1742
1744
  }
@@ -1762,8 +1764,8 @@ TEST(Mutex, SynchEventRace) {
1762
1764
  {
1763
1765
  absl::Mutex mu;
1764
1766
  mu.EnableInvariantDebugging([](void *) {}, nullptr);
1765
- mu.Lock();
1766
- mu.Unlock();
1767
+ mu.lock();
1768
+ mu.unlock();
1767
1769
  }
1768
1770
  {
1769
1771
  absl::Mutex mu;
@@ -1900,7 +1902,7 @@ TEST(Mutex, MuTime) {
1900
1902
  }
1901
1903
 
1902
1904
  TEST(Mutex, SignalExitedThread) {
1903
- // The test may expose a race when Mutex::Unlock signals a thread
1905
+ // The test may expose a race when Mutex::unlock signals a thread
1904
1906
  // that has already exited.
1905
1907
  #if defined(__wasm__) || defined(__asmjs__)
1906
1908
  constexpr int kThreads = 1; // OOMs under WASM
@@ -1913,11 +1915,11 @@ TEST(Mutex, SignalExitedThread) {
1913
1915
  for (int i = 0; i < kThreads; i++) {
1914
1916
  absl::Mutex mu;
1915
1917
  std::thread t([&]() {
1916
- mu.Lock();
1917
- mu.Unlock();
1918
+ mu.lock();
1919
+ mu.unlock();
1918
1920
  });
1919
- mu.Lock();
1920
- mu.Unlock();
1921
+ mu.lock();
1922
+ mu.unlock();
1921
1923
  t.join();
1922
1924
  }
1923
1925
  });
@@ -1931,7 +1933,7 @@ TEST(Mutex, WriterPriority) {
1931
1933
  std::atomic<bool> saw_wrote{false};
1932
1934
  auto readfunc = [&]() {
1933
1935
  for (size_t i = 0; i < 10; ++i) {
1934
- absl::ReaderMutexLock lock(&mu);
1936
+ absl::ReaderMutexLock lock(mu);
1935
1937
  if (wrote) {
1936
1938
  saw_wrote = true;
1937
1939
  break;
@@ -1946,7 +1948,7 @@ TEST(Mutex, WriterPriority) {
1946
1948
  // PerThreadSynch::priority, so the writer intentionally runs on a new thread.
1947
1949
  std::thread t3([&]() {
1948
1950
  // The writer should be able squeeze between the two alternating readers.
1949
- absl::MutexLock lock(&mu);
1951
+ absl::MutexLock lock(mu);
1950
1952
  wrote = true;
1951
1953
  });
1952
1954
  t1.join();
@@ -1978,30 +1980,30 @@ TEST(Mutex, CondVarPriority) {
1978
1980
  bool morph = false;
1979
1981
  std::thread th([&]() {
1980
1982
  EXPECT_EQ(0, pthread_setschedparam(pthread_self(), SCHED_FIFO, &param));
1981
- mu.Lock();
1983
+ mu.lock();
1982
1984
  locked = true;
1983
1985
  mu.Await(absl::Condition(&notified));
1984
- mu.Unlock();
1986
+ mu.unlock();
1985
1987
  EXPECT_EQ(absl::synchronization_internal::GetOrCreateCurrentThreadIdentity()
1986
1988
  ->per_thread_synch.priority,
1987
1989
  param.sched_priority);
1988
- mu.Lock();
1990
+ mu.lock();
1989
1991
  mu.Await(absl::Condition(&waiting));
1990
1992
  morph = true;
1991
1993
  absl::SleepFor(absl::Seconds(1));
1992
1994
  cv.Signal();
1993
- mu.Unlock();
1995
+ mu.unlock();
1994
1996
  });
1995
- mu.Lock();
1997
+ mu.lock();
1996
1998
  mu.Await(absl::Condition(&locked));
1997
1999
  notified = true;
1998
- mu.Unlock();
1999
- mu.Lock();
2000
+ mu.unlock();
2001
+ mu.lock();
2000
2002
  waiting = true;
2001
2003
  while (!morph) {
2002
2004
  cv.Wait(&mu);
2003
2005
  }
2004
- mu.Unlock();
2006
+ mu.unlock();
2005
2007
  th.join();
2006
2008
  EXPECT_NE(absl::synchronization_internal::GetOrCreateCurrentThreadIdentity()
2007
2009
  ->per_thread_synch.priority,
@@ -2016,22 +2018,34 @@ TEST(Mutex, LockWhenWithTimeoutResult) {
2016
2018
  const bool kAlwaysTrue = true, kAlwaysFalse = false;
2017
2019
  const absl::Condition kTrueCond(&kAlwaysTrue), kFalseCond(&kAlwaysFalse);
2018
2020
  EXPECT_TRUE(mu.LockWhenWithTimeout(kTrueCond, absl::Milliseconds(1)));
2019
- mu.Unlock();
2021
+ mu.unlock();
2020
2022
  EXPECT_FALSE(mu.LockWhenWithTimeout(kFalseCond, absl::Milliseconds(1)));
2021
2023
  EXPECT_TRUE(mu.AwaitWithTimeout(kTrueCond, absl::Milliseconds(1)));
2022
2024
  EXPECT_FALSE(mu.AwaitWithTimeout(kFalseCond, absl::Milliseconds(1)));
2023
2025
  std::thread th1([&]() {
2024
2026
  EXPECT_TRUE(mu.LockWhenWithTimeout(kTrueCond, absl::Milliseconds(1)));
2025
- mu.Unlock();
2027
+ mu.unlock();
2026
2028
  });
2027
2029
  std::thread th2([&]() {
2028
2030
  EXPECT_FALSE(mu.LockWhenWithTimeout(kFalseCond, absl::Milliseconds(1)));
2029
- mu.Unlock();
2031
+ mu.unlock();
2030
2032
  });
2031
2033
  absl::SleepFor(absl::Milliseconds(100));
2032
- mu.Unlock();
2034
+ mu.unlock();
2033
2035
  th1.join();
2034
2036
  th2.join();
2035
2037
  }
2036
2038
 
2039
+ TEST(Mutex, ScopedLock) {
2040
+ absl::Mutex mu;
2041
+ {
2042
+ std::scoped_lock l(mu);
2043
+ }
2044
+
2045
+ {
2046
+ std::shared_lock l(mu);
2047
+ EXPECT_TRUE(l.owns_lock());
2048
+ }
2049
+ }
2050
+
2037
2051
  } // namespace