re2 1.24.1 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/LICENSE +15 -20
  2. package/README.md +62 -4
  3. package/binding.gyp +1 -2
  4. package/lib/addon.cc +7 -3
  5. package/lib/exec.cc +4 -4
  6. package/lib/match.cc +4 -4
  7. package/lib/pattern.cc +148 -1
  8. package/lib/replace.cc +5 -4
  9. package/lib/search.cc +1 -1
  10. package/lib/set.cc +75 -0
  11. package/lib/test.cc +1 -1
  12. package/lib/unicode_properties.h +15840 -0
  13. package/lib/wrapped_re2.h +11 -4
  14. package/lib/wrapped_re2_set.h +3 -1
  15. package/llms-full.txt +37 -7
  16. package/llms.txt +4 -1
  17. package/package.json +11 -10
  18. package/re2.d.ts +2 -0
  19. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
  20. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  21. package/vendor/abseil-cpp/FAQ.md +130 -79
  22. package/vendor/abseil-cpp/MODULE.bazel +6 -7
  23. package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
  24. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
  25. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
  26. package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  27. package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
  28. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
  29. package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
  30. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
  31. package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
  32. package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
  33. package/vendor/abseil-cpp/absl/base/casts.h +8 -1
  34. package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
  35. package/vendor/abseil-cpp/absl/base/config.h +54 -10
  36. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
  37. package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
  38. package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
  39. package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
  40. package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
  41. package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
  42. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
  43. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
  44. package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  45. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
  46. package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  47. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  48. package/vendor/abseil-cpp/absl/base/macros.h +36 -20
  49. package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
  50. package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
  51. package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
  52. package/vendor/abseil-cpp/absl/base/options.h +55 -1
  53. package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
  54. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  55. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  56. package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
  57. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
  58. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
  59. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
  60. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  61. package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
  62. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
  63. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
  64. package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
  65. package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
  66. package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
  67. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
  68. package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
  69. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
  70. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
  71. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
  72. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
  73. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
  74. package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
  75. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
  76. package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
  77. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
  78. package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
  79. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  80. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
  81. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
  82. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
  83. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
  84. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
  85. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
  86. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
  87. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
  88. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
  89. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
  90. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
  91. package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
  92. package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
  93. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
  94. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
  95. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
  96. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
  97. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
  99. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
  100. package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
  101. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
  102. package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
  103. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
  104. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
  105. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
  106. package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
  107. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
  108. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
  109. package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  110. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  111. package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  112. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
  113. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
  114. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
  115. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  116. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
  117. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
  118. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
  119. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
  120. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
  121. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  122. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
  123. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
  124. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
  125. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
  126. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
  127. package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  128. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
  129. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
  130. package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  131. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
  132. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
  133. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  134. package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
  135. package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
  136. package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
  137. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
  138. package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
  139. package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
  140. package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
  141. package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
  142. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
  143. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
  144. package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
  145. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
  146. package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
  147. package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
  148. package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
  149. package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
  150. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
  151. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
  152. package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
  153. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  154. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  155. package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
  156. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
  157. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
  158. package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
  159. package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
  160. package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
  161. package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
  162. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
  163. package/vendor/abseil-cpp/absl/hash/internal/hash.h +82 -26
  164. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
  165. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
  166. package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
  167. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
  168. package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  169. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
  170. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
  171. package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
  172. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  173. package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
  174. package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  175. package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  176. package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
  177. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
  178. package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
  179. package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
  180. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
  181. package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
  182. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
  183. package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
  184. package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  185. package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
  186. package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
  187. package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
  188. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  189. package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
  190. package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
  191. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
  192. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
  193. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
  194. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
  195. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
  196. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
  197. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
  198. package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
  199. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
  200. package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
  201. package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
  202. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  203. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
  204. package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  205. package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
  206. package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
  207. package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  208. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
  209. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  210. package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  211. package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  212. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  213. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
  214. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
  215. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  216. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
  217. package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  218. package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
  219. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  220. package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  221. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
  222. package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
  223. package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  224. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
  225. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  226. package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
  227. package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
  228. package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  229. package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
  230. package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
  231. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
  232. package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  233. package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
  234. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
  235. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  236. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
  237. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
  238. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
  239. package/vendor/abseil-cpp/absl/status/status.cc +62 -70
  240. package/vendor/abseil-cpp/absl/status/status.h +249 -23
  241. package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
  242. package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
  243. package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
  244. package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
  245. package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
  246. package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
  247. package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
  248. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
  249. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  250. package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
  251. package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
  252. package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
  253. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
  254. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
  255. package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
  256. package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
  257. package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
  258. package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
  259. package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  260. package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
  261. package/vendor/abseil-cpp/absl/strings/escaping.cc +176 -30
  262. package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
  263. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
  264. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +18 -18
  265. package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
  266. package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
  267. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
  268. package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
  269. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  270. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  271. package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  272. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
  273. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
  274. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
  275. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
  276. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
  277. package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  278. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  279. package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  280. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
  281. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
  282. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
  283. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
  284. package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
  285. package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  286. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
  287. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
  288. package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
  289. package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
  290. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
  291. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
  292. package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
  293. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
  294. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
  295. package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
  296. package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
  297. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
  298. package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
  299. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
  300. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
  301. package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  302. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
  303. package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
  304. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
  305. package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
  306. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
  307. package/vendor/abseil-cpp/absl/time/clock.h +3 -0
  308. package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
  309. package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
  310. package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
  311. package/vendor/abseil-cpp/absl/time/format.cc +3 -10
  312. package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
  313. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
  314. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
  315. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
  316. package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  317. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  318. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
  319. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  320. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
  321. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
  322. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
  323. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
  324. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
  325. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
  326. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
  327. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
  328. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
  329. package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
  330. package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
  331. package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
  332. package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
  333. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
  334. package/vendor/abseil-cpp/absl/types/any.h +26 -4
  335. package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
  336. package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
  337. package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
  338. package/vendor/abseil-cpp/absl/types/compare.h +4 -4
  339. package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
  340. package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
  341. package/vendor/abseil-cpp/absl/types/optional.h +30 -3
  342. package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
  343. package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
  344. package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
  345. package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
  346. package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
  347. package/vendor/abseil-cpp/absl/types/span.h +19 -23
  348. package/vendor/abseil-cpp/absl/types/variant.h +75 -18
  349. package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
  350. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
  351. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
  352. package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
  353. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
  354. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
  355. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
  356. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
  357. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
  358. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
  359. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  360. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
  361. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
  362. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
  363. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
  364. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
  365. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
  366. package/AGENTS.md +0 -131
  367. package/ARCHITECTURE.md +0 -152
  368. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
  369. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
  370. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
@@ -27,41 +27,17 @@
27
27
  #include <cstdint>
28
28
  #include <limits>
29
29
  #include <type_traits>
30
- #include <utility>
31
30
 
32
31
  #include "absl/base/attributes.h"
33
32
  #include "absl/base/config.h"
34
33
  #include "absl/base/fast_type_id.h"
35
34
  #include "absl/meta/type_traits.h"
36
- #include "absl/random/internal/distribution_caller.h"
37
35
  #include "absl/random/internal/fast_uniform_bits.h"
36
+ #include "absl/random/internal/traits.h"
37
+ #include "absl/random/mocking_access.h"
38
38
 
39
39
  namespace absl {
40
40
  ABSL_NAMESPACE_BEGIN
41
- namespace random_internal {
42
-
43
- template <typename URBG, typename = void, typename = void, typename = void>
44
- struct is_urbg : std::false_type {};
45
-
46
- template <typename URBG>
47
- struct is_urbg<
48
- URBG,
49
- absl::enable_if_t<std::is_same<
50
- typename URBG::result_type,
51
- typename std::decay<decltype((URBG::min)())>::type>::value>,
52
- absl::enable_if_t<std::is_same<
53
- typename URBG::result_type,
54
- typename std::decay<decltype((URBG::max)())>::type>::value>,
55
- absl::enable_if_t<std::is_same<
56
- typename URBG::result_type,
57
- typename std::decay<decltype(std::declval<URBG>()())>::type>::value>>
58
- : std::true_type {};
59
-
60
- template <typename>
61
- struct DistributionCaller;
62
- class MockHelpers;
63
-
64
- } // namespace random_internal
65
41
 
66
42
  // -----------------------------------------------------------------------------
67
43
  // absl::BitGenRef
@@ -87,24 +63,18 @@ class MockHelpers;
87
63
  // }
88
64
  //
89
65
  class BitGenRef {
90
- // SFINAE to detect whether the URBG type includes a member matching
91
- // bool InvokeMock(key_id, args_tuple*, result*).
92
- //
93
- // These live inside BitGenRef so that they have friend access
94
- // to MockingBitGen. (see similar methods in DistributionCaller).
95
66
  template <template <class...> class Trait, class AlwaysVoid, class... Args>
96
67
  struct detector : std::false_type {};
97
68
  template <template <class...> class Trait, class... Args>
98
- struct detector<Trait, absl::void_t<Trait<Args...>>, Args...>
69
+ struct detector<Trait, std::void_t<Trait<Args...>>, Args...>
99
70
  : std::true_type {};
100
71
 
101
- template <class T>
102
- using invoke_mock_t = decltype(std::declval<T*>()->InvokeMock(
103
- std::declval<FastTypeIdType>(), std::declval<void*>(),
104
- std::declval<void*>()));
72
+ template <typename T>
73
+ using has_conversion_operator_t =
74
+ decltype(std::declval<T>().operator BitGenRef());
105
75
 
106
76
  template <typename T>
107
- using HasInvokeMock = typename detector<invoke_mock_t, void, T>::type;
77
+ using HasConversionOperator = detector<has_conversion_operator_t, void, T>;
108
78
 
109
79
  public:
110
80
  BitGenRef(const BitGenRef&) = default;
@@ -112,23 +82,28 @@ class BitGenRef {
112
82
  BitGenRef& operator=(const BitGenRef&) = default;
113
83
  BitGenRef& operator=(BitGenRef&&) = default;
114
84
 
115
- template <
116
- typename URBGRef, typename URBG = absl::remove_cvref_t<URBGRef>,
117
- typename absl::enable_if_t<(!std::is_same<URBG, BitGenRef>::value &&
118
- random_internal::is_urbg<URBG>::value &&
119
- !HasInvokeMock<URBG>::value)>* = nullptr>
85
+ template <typename URBGRef, typename URBG = absl::remove_cvref_t<URBGRef>,
86
+ typename std::enable_if_t<
87
+ (!std::is_same<URBG, BitGenRef>::value &&
88
+ !std::is_base_of<BitGenRef, URBG>::value &&
89
+ !HasConversionOperator<URBG>::value &&
90
+ random_internal::is_urbg<URBG>::value &&
91
+ !RandomMockingAccess::HasInvokeMock<URBG>::value)>* = nullptr>
120
92
  BitGenRef(URBGRef&& gen ABSL_ATTRIBUTE_LIFETIME_BOUND) // NOLINT
121
93
  : t_erased_gen_ptr_(reinterpret_cast<uintptr_t>(&gen)),
122
94
  mock_call_(NotAMock),
123
95
  generate_impl_fn_(ImplFn<URBG>) {}
124
96
 
125
97
  template <typename URBGRef, typename URBG = absl::remove_cvref_t<URBGRef>,
126
- typename absl::enable_if_t<(!std::is_same<URBG, BitGenRef>::value &&
127
- random_internal::is_urbg<URBG>::value &&
128
- HasInvokeMock<URBG>::value)>* = nullptr>
98
+ typename std::enable_if_t<
99
+ (!std::is_same<URBG, BitGenRef>::value &&
100
+ !std::is_base_of<BitGenRef, URBG>::value &&
101
+ !HasConversionOperator<URBG>::value &&
102
+ random_internal::is_urbg<URBG>::value &&
103
+ RandomMockingAccess::HasInvokeMock<URBG>::value)>* = nullptr>
129
104
  BitGenRef(URBGRef&& gen ABSL_ATTRIBUTE_LIFETIME_BOUND) // NOLINT
130
105
  : t_erased_gen_ptr_(reinterpret_cast<uintptr_t>(&gen)),
131
- mock_call_(&MockCall<URBG>),
106
+ mock_call_(MockCall<URBG>),
132
107
  generate_impl_fn_(ImplFn<URBG>) {}
133
108
 
134
109
  using result_type = uint64_t;
@@ -157,10 +132,10 @@ class BitGenRef {
157
132
 
158
133
  // Get a type-erased InvokeMock pointer.
159
134
  template <typename URBG>
160
- static bool MockCall(uintptr_t gen_ptr, FastTypeIdType key_id, void* result,
161
- void* arg_tuple) {
162
- return reinterpret_cast<URBG*>(gen_ptr)->InvokeMock(key_id, result,
163
- arg_tuple);
135
+ static bool MockCall(uintptr_t gen_ptr, FastTypeIdType key_id,
136
+ void* args_tuple, void* result) {
137
+ return RandomMockingAccess::InvokeMock(reinterpret_cast<URBG*>(gen_ptr),
138
+ key_id, args_tuple, result);
164
139
  }
165
140
  static bool NotAMock(uintptr_t, FastTypeIdType, void*, void*) {
166
141
  return false;
@@ -176,9 +151,7 @@ class BitGenRef {
176
151
  mock_call_fn mock_call_;
177
152
  impl_fn generate_impl_fn_;
178
153
 
179
- template <typename>
180
- friend struct ::absl::random_internal::DistributionCaller; // for InvokeMock
181
- friend class ::absl::random_internal::MockHelpers; // for InvokeMock
154
+ friend class ::absl::RandomMockingAccess; // for InvokeMock
182
155
  };
183
156
 
184
157
  ABSL_NAMESPACE_END
@@ -17,6 +17,7 @@
17
17
 
18
18
  #include <cstdint>
19
19
  #include <random>
20
+ #include <type_traits>
20
21
  #include <vector>
21
22
 
22
23
  #include "gmock/gmock.h"
@@ -102,6 +103,48 @@ TEST(BitGenRefTest, MockingBitGenBaseOverrides) {
102
103
  absl::BitGenRef gen_ref(const_gen);
103
104
  EXPECT_EQ(FnTest(gen_ref), 42); // Copy
104
105
  }
106
+
107
+ struct MinStdRand {
108
+ // The URBG just returns 0.
109
+ using result_type = absl::BitGen::result_type;
110
+ static constexpr result_type(min)() { return (absl::BitGen::min)(); }
111
+ static constexpr result_type(max)() { return (absl::BitGen::max)(); }
112
+ result_type operator()() { return 0; }
113
+
114
+ // Implicit conversions allow passing MinStdRand to functions taking
115
+ // absl::BitGenRef as well as explicitly constructing an absl::BitGenRef from
116
+ // a MinStdRand.
117
+ operator absl::BitGenRef() const {
118
+ conversion_count++;
119
+ return absl::BitGenRef(minstd_gen);
120
+ }
121
+
122
+ std::minstd_rand minstd_gen;
123
+ mutable int conversion_count = 0;
124
+ };
125
+
126
+ TEST(BitGenRefTest, IsConvertibleTest) {
127
+ // Verify that MinStdRandBitGen is convertible to absl::BitGenRef.
128
+ EXPECT_TRUE((std::is_convertible<MinStdRand, absl::BitGenRef>::value));
129
+
130
+ // Explicit construction should trigger the conversion.
131
+ {
132
+ MinStdRand minstd;
133
+ absl::BitGenRef gen_ref(minstd);
134
+ EXPECT_EQ(minstd.conversion_count, 1);
135
+ (void)gen_ref;
136
+ }
137
+
138
+ // Calling a function that accepts absl::BitGenRef should trigger the
139
+ // conversion. This tests implicit conversion.
140
+ {
141
+ MinStdRand minstd;
142
+ auto result = FnTest(minstd);
143
+ EXPECT_EQ(minstd.conversion_count, 1);
144
+ EXPECT_GE(result, 1);
145
+ }
146
+ }
147
+
105
148
  } // namespace
106
149
  ABSL_NAMESPACE_END
107
150
  } // namespace absl
@@ -38,7 +38,7 @@ ABSL_NAMESPACE_BEGIN
38
38
  // A discrete distribution produces random integers i, where 0 <= i < n
39
39
  // distributed according to the discrete probability function:
40
40
  //
41
- // P(i|p0,...,pn1)=pi
41
+ // P(i|p0,...,pn-1)=pi
42
42
  //
43
43
  // This class is an implementation of discrete_distribution (see
44
44
  // [rand.dist.samp.discrete]).
@@ -117,11 +117,11 @@ inline constexpr IntervalOpenClosedTag IntervalOpenClosed = {};
117
117
  // auto x = absl::Uniform<float>(bitgen, 0, 1);
118
118
  //
119
119
  template <typename R = void, typename TagType, typename URBG>
120
- typename absl::enable_if_t<!std::is_same<R, void>::value, R> //
120
+ typename std::enable_if_t<!std::is_same<R, void>::value, R> //
121
121
  Uniform(TagType tag,
122
122
  URBG&& urbg, // NOLINT(runtime/references)
123
123
  R lo, R hi) {
124
- using gen_t = absl::decay_t<URBG>;
124
+ using gen_t = std::decay_t<URBG>;
125
125
  using distribution_t = random_internal::UniformDistributionWrapper<R>;
126
126
 
127
127
  auto a = random_internal::uniform_lower_bound(tag, lo, hi);
@@ -137,10 +137,10 @@ Uniform(TagType tag,
137
137
  // Overload of `Uniform()` using the default closed-open interval of [lo, hi),
138
138
  // and returning values of type `T`
139
139
  template <typename R = void, typename URBG>
140
- typename absl::enable_if_t<!std::is_same<R, void>::value, R> //
140
+ typename std::enable_if_t<!std::is_same<R, void>::value, R> //
141
141
  Uniform(URBG&& urbg, // NOLINT(runtime/references)
142
142
  R lo, R hi) {
143
- using gen_t = absl::decay_t<URBG>;
143
+ using gen_t = std::decay_t<URBG>;
144
144
  using distribution_t = random_internal::UniformDistributionWrapper<R>;
145
145
  constexpr auto tag = absl::IntervalClosedOpen;
146
146
 
@@ -159,12 +159,12 @@ Uniform(URBG&& urbg, // NOLINT(runtime/references)
159
159
  // correctly from the passed types.
160
160
  template <typename R = void, typename TagType, typename URBG, typename A,
161
161
  typename B>
162
- typename absl::enable_if_t<std::is_same<R, void>::value,
162
+ typename std::enable_if_t<std::is_same<R, void>::value,
163
163
  random_internal::uniform_inferred_return_t<A, B>>
164
164
  Uniform(TagType tag,
165
165
  URBG&& urbg, // NOLINT(runtime/references)
166
166
  A lo, B hi) {
167
- using gen_t = absl::decay_t<URBG>;
167
+ using gen_t = std::decay_t<URBG>;
168
168
  using return_t = typename random_internal::uniform_inferred_return_t<A, B>;
169
169
  using distribution_t = random_internal::UniformDistributionWrapper<return_t>;
170
170
 
@@ -183,11 +183,11 @@ Uniform(TagType tag,
183
183
  // default closed-open interval of [lo, hi). Note that a compile-error will
184
184
  // result if the return type cannot be deduced correctly from the passed types.
185
185
  template <typename R = void, typename URBG, typename A, typename B>
186
- typename absl::enable_if_t<std::is_same<R, void>::value,
186
+ typename std::enable_if_t<std::is_same<R, void>::value,
187
187
  random_internal::uniform_inferred_return_t<A, B>>
188
188
  Uniform(URBG&& urbg, // NOLINT(runtime/references)
189
189
  A lo, B hi) {
190
- using gen_t = absl::decay_t<URBG>;
190
+ using gen_t = std::decay_t<URBG>;
191
191
  using return_t = typename random_internal::uniform_inferred_return_t<A, B>;
192
192
  using distribution_t = random_internal::UniformDistributionWrapper<return_t>;
193
193
 
@@ -206,9 +206,9 @@ Uniform(URBG&& urbg, // NOLINT(runtime/references)
206
206
  // Overload of Uniform() using the minimum and maximum values of a given type
207
207
  // `T` (which must be unsigned), returning a value of type `unsigned T`
208
208
  template <typename R, typename URBG>
209
- typename absl::enable_if_t<!std::numeric_limits<R>::is_signed, R> //
209
+ typename std::enable_if_t<!std::numeric_limits<R>::is_signed, R> //
210
210
  Uniform(URBG&& urbg) { // NOLINT(runtime/references)
211
- using gen_t = absl::decay_t<URBG>;
211
+ using gen_t = std::decay_t<URBG>;
212
212
  using distribution_t = random_internal::UniformDistributionWrapper<R>;
213
213
 
214
214
  return random_internal::DistributionCaller<gen_t>::template Call<
@@ -238,7 +238,7 @@ Uniform(URBG&& urbg) { // NOLINT(runtime/references)
238
238
  template <typename URBG>
239
239
  bool Bernoulli(URBG&& urbg, // NOLINT(runtime/references)
240
240
  double p) {
241
- using gen_t = absl::decay_t<URBG>;
241
+ using gen_t = std::decay_t<URBG>;
242
242
  using distribution_t = absl::bernoulli_distribution;
243
243
 
244
244
  return random_internal::DistributionCaller<gen_t>::template Call<
@@ -270,7 +270,7 @@ RealType Beta(URBG&& urbg, // NOLINT(runtime/references)
270
270
  "Template-argument 'RealType' must be a floating-point type, in "
271
271
  "absl::Beta<RealType, URBG>(...)");
272
272
 
273
- using gen_t = absl::decay_t<URBG>;
273
+ using gen_t = std::decay_t<URBG>;
274
274
  using distribution_t = typename absl::beta_distribution<RealType>;
275
275
 
276
276
  return random_internal::DistributionCaller<gen_t>::template Call<
@@ -302,7 +302,7 @@ RealType Exponential(URBG&& urbg, // NOLINT(runtime/references)
302
302
  "Template-argument 'RealType' must be a floating-point type, in "
303
303
  "absl::Exponential<RealType, URBG>(...)");
304
304
 
305
- using gen_t = absl::decay_t<URBG>;
305
+ using gen_t = std::decay_t<URBG>;
306
306
  using distribution_t = typename absl::exponential_distribution<RealType>;
307
307
 
308
308
  return random_internal::DistributionCaller<gen_t>::template Call<
@@ -333,7 +333,7 @@ RealType Gaussian(URBG&& urbg, // NOLINT(runtime/references)
333
333
  "Template-argument 'RealType' must be a floating-point type, in "
334
334
  "absl::Gaussian<RealType, URBG>(...)");
335
335
 
336
- using gen_t = absl::decay_t<URBG>;
336
+ using gen_t = std::decay_t<URBG>;
337
337
  using distribution_t = typename absl::gaussian_distribution<RealType>;
338
338
 
339
339
  return random_internal::DistributionCaller<gen_t>::template Call<
@@ -375,7 +375,7 @@ IntType LogUniform(URBG&& urbg, // NOLINT(runtime/references)
375
375
  "Template-argument 'IntType' must be an integral type, in "
376
376
  "absl::LogUniform<IntType, URBG>(...)");
377
377
 
378
- using gen_t = absl::decay_t<URBG>;
378
+ using gen_t = std::decay_t<URBG>;
379
379
  using distribution_t = typename absl::log_uniform_int_distribution<IntType>;
380
380
 
381
381
  return random_internal::DistributionCaller<gen_t>::template Call<
@@ -405,7 +405,7 @@ IntType Poisson(URBG&& urbg, // NOLINT(runtime/references)
405
405
  "Template-argument 'IntType' must be an integral type, in "
406
406
  "absl::Poisson<IntType, URBG>(...)");
407
407
 
408
- using gen_t = absl::decay_t<URBG>;
408
+ using gen_t = std::decay_t<URBG>;
409
409
  using distribution_t = typename absl::poisson_distribution<IntType>;
410
410
 
411
411
  return random_internal::DistributionCaller<gen_t>::template Call<
@@ -437,7 +437,7 @@ IntType Zipf(URBG&& urbg, // NOLINT(runtime/references)
437
437
  "Template-argument 'IntType' must be an integral type, in "
438
438
  "absl::Zipf<IntType, URBG>(...)");
439
439
 
440
- using gen_t = absl::decay_t<URBG>;
440
+ using gen_t = std::decay_t<URBG>;
441
441
  using distribution_t = typename absl::zipf_distribution<IntType>;
442
442
 
443
443
  return random_internal::DistributionCaller<gen_t>::template Call<
@@ -80,13 +80,13 @@ Invalid InferredTaggedUniformReturnT(...);
80
80
  template <typename A, typename B, typename Expect>
81
81
  void CheckArgsInferType() {
82
82
  static_assert(
83
- absl::conjunction<
83
+ std::conjunction<
84
84
  std::is_same<Expect, decltype(InferredUniformReturnT<A, B>(0))>,
85
85
  std::is_same<Expect,
86
86
  decltype(InferredUniformReturnT<B, A>(0))>>::value,
87
87
  "");
88
88
  static_assert(
89
- absl::conjunction<
89
+ std::conjunction<
90
90
  std::is_same<Expect, decltype(InferredTaggedUniformReturnT<
91
91
  absl::IntervalOpenOpenTag, A, B>(0))>,
92
92
  std::is_same<Expect,
@@ -121,14 +121,14 @@ Invalid ExplicitTaggedUniformReturnT(...);
121
121
  template <typename A, typename B, typename Expect>
122
122
  void CheckArgsReturnExpectedType() {
123
123
  static_assert(
124
- absl::conjunction<
124
+ std::conjunction<
125
125
  std::is_same<Expect,
126
126
  decltype(ExplicitUniformReturnT<A, B, Expect>(0))>,
127
127
  std::is_same<Expect, decltype(ExplicitUniformReturnT<B, A, Expect>(
128
128
  0))>>::value,
129
129
  "");
130
130
  static_assert(
131
- absl::conjunction<
131
+ std::conjunction<
132
132
  std::is_same<Expect,
133
133
  decltype(ExplicitTaggedUniformReturnT<
134
134
  absl::IntervalOpenOpenTag, A, B, Expect>(0))>,
@@ -124,7 +124,7 @@ exponential_distribution<RealType>::operator()(
124
124
  using random_internal::GenerateNegativeTag;
125
125
  using random_internal::GenerateRealFromBits;
126
126
  using real_type =
127
- absl::conditional_t<std::is_same<RealType, float>::value, float, double>;
127
+ std::conditional_t<std::is_same<RealType, float>::value, float, double>;
128
128
 
129
129
  const result_type u = GenerateRealFromBits<real_type, GenerateNegativeTag,
130
130
  false>(fast_u64_(g)); // U(-1, 0)
@@ -29,6 +29,7 @@ load(
29
29
 
30
30
  default_package_visibility = [
31
31
  "//absl/random:__pkg__",
32
+ "//absl:friends",
32
33
  ]
33
34
 
34
35
  package(
@@ -115,6 +116,7 @@ cc_library(
115
116
  linkopts = ABSL_DEFAULT_LINKOPTS,
116
117
  deps = [
117
118
  "//absl/base:config",
119
+ "//absl/meta:type_traits",
118
120
  "//absl/numeric:bits",
119
121
  "//absl/numeric:int128",
120
122
  ],
@@ -129,6 +131,7 @@ cc_library(
129
131
  "//absl/base:config",
130
132
  "//absl/base:fast_type_id",
131
133
  "//absl/meta:type_traits",
134
+ "//absl/random:mocking_access",
132
135
  "//absl/utility",
133
136
  ],
134
137
  )
@@ -399,7 +402,6 @@ cc_library(
399
402
  ":platform",
400
403
  ":randen_hwaes_impl",
401
404
  "//absl/base:config",
402
- "//absl/types:optional",
403
405
  ],
404
406
  )
405
407
 
@@ -592,7 +594,7 @@ cc_library(
592
594
  deps = [
593
595
  "//absl/base:config",
594
596
  "//absl/base:fast_type_id",
595
- "//absl/types:optional",
597
+ "//absl/random:mocking_access",
596
598
  ],
597
599
  )
598
600
 
@@ -24,6 +24,7 @@
24
24
  #include "absl/base/config.h"
25
25
  #include "absl/base/fast_type_id.h"
26
26
  #include "absl/meta/type_traits.h"
27
+ #include "absl/random/mocking_access.h"
27
28
  #include "absl/utility/utility.h"
28
29
 
29
30
  namespace absl {
@@ -37,23 +38,8 @@ template <typename URBG>
37
38
  struct DistributionCaller {
38
39
  static_assert(!std::is_pointer<URBG>::value,
39
40
  "You must pass a reference, not a pointer.");
40
- // SFINAE to detect whether the URBG type includes a member matching
41
- // bool InvokeMock(key_id, args_tuple*, result*).
42
- //
43
- // These live inside BitGenRef so that they have friend access
44
- // to MockingBitGen. (see similar methods in DistributionCaller).
45
- template <template <class...> class Trait, class AlwaysVoid, class... Args>
46
- struct detector : std::false_type {};
47
- template <template <class...> class Trait, class... Args>
48
- struct detector<Trait, absl::void_t<Trait<Args...>>, Args...>
49
- : std::true_type {};
50
41
 
51
- template <class T>
52
- using invoke_mock_t = decltype(std::declval<T*>()->InvokeMock(
53
- std::declval<FastTypeIdType>(), std::declval<void*>(),
54
- std::declval<void*>()));
55
-
56
- using HasInvokeMock = typename detector<invoke_mock_t, void, URBG>::type;
42
+ using RandomMockingAccess = ::absl::RandomMockingAccess;
57
43
 
58
44
  // Default implementation of distribution caller.
59
45
  template <typename DistrT, typename... Args>
@@ -69,13 +55,14 @@ struct DistributionCaller {
69
55
  static typename DistrT::result_type Impl(std::true_type, URBG* urbg,
70
56
  Args&&... args) {
71
57
  using ResultT = typename DistrT::result_type;
72
- using ArgTupleT = std::tuple<absl::decay_t<Args>...>;
58
+ using ArgTupleT = std::tuple<std::decay_t<Args>...>;
73
59
  using KeyT = ResultT(DistrT, ArgTupleT);
74
60
 
75
61
  ArgTupleT arg_tuple(std::forward<Args>(args)...);
76
62
  ResultT result;
77
- if (!urbg->InvokeMock(FastTypeId<KeyT>(), &arg_tuple, &result)) {
78
- auto dist = absl::make_from_tuple<DistrT>(arg_tuple);
63
+ if (!RandomMockingAccess::InvokeMock<URBG>(urbg, FastTypeId<KeyT>(),
64
+ &arg_tuple, &result)) {
65
+ auto dist = std::make_from_tuple<DistrT>(arg_tuple);
79
66
  result = dist(*urbg);
80
67
  }
81
68
  return result;
@@ -84,8 +71,8 @@ struct DistributionCaller {
84
71
  // Default implementation of distribution caller.
85
72
  template <typename DistrT, typename... Args>
86
73
  static typename DistrT::result_type Call(URBG* urbg, Args&&... args) {
87
- return Impl<DistrT, Args...>(HasInvokeMock{}, urbg,
88
- std::forward<Args>(args)...);
74
+ return Impl<DistrT, Args...>(RandomMockingAccess::HasInvokeMock<URBG>{},
75
+ urbg, std::forward<Args>(args)...);
89
76
  }
90
77
  };
91
78
 
@@ -126,7 +126,7 @@ FastUniformBits<UIntType>::operator()(URBG& g) { // NOLINT(runtime/references)
126
126
  static_assert((URBG::max)() > (URBG::min)(),
127
127
  "URBG::max and URBG::min may not be equal.");
128
128
 
129
- using tag = absl::conditional_t<IsPowerOfTwoOrZero(RangeSize<URBG>()),
129
+ using tag = std::conditional_t<IsPowerOfTwoOrZero(RangeSize<URBG>()),
130
130
  SimplifiedLoopTag, RejectionLoopTag>;
131
131
  return Generate(g, tag{});
132
132
  }
@@ -69,7 +69,7 @@ template <typename RealType, // Real type, either float or double.
69
69
  bool IncludeZero = true>
70
70
  inline RealType GenerateRealFromBits(uint64_t bits, int exp_bias = 0) {
71
71
  using real_type = RealType;
72
- using uint_type = absl::conditional_t<std::is_same<real_type, float>::value,
72
+ using uint_type = std::conditional_t<std::is_same<real_type, float>::value,
73
73
  uint32_t, uint64_t>;
74
74
 
75
75
  static_assert(
@@ -95,7 +95,7 @@ ostream_state_saver<std::basic_ostream<CharT, Traits>> make_ostream_state_saver(
95
95
  }
96
96
 
97
97
  template <typename T>
98
- typename absl::enable_if_t<!std::is_base_of<std::ios_base, T>::value,
98
+ typename std::enable_if_t<!std::is_base_of<std::ios_base, T>::value,
99
99
  null_state_saver<T>>
100
100
  make_ostream_state_saver(T& is, // NOLINT(runtime/references)
101
101
  std::ios_base::fmtflags flags = std::ios_base::dec) {
@@ -159,7 +159,7 @@ istream_state_saver<std::basic_istream<CharT, Traits>> make_istream_state_saver(
159
159
  }
160
160
 
161
161
  template <typename T>
162
- typename absl::enable_if_t<!std::is_base_of<std::ios_base, T>::value,
162
+ typename std::enable_if_t<!std::is_base_of<std::ios_base, T>::value,
163
163
  null_state_saver<T>>
164
164
  make_istream_state_saver(T& is, // NOLINT(runtime/references)
165
165
  std::ios_base::fmtflags flags = std::ios_base::dec) {
@@ -19,6 +19,7 @@
19
19
 
20
20
  #include <sstream>
21
21
  #include <string>
22
+ #include <type_traits>
22
23
 
23
24
  #include "gtest/gtest.h"
24
25
 
@@ -29,7 +30,7 @@ using absl::random_internal::make_ostream_state_saver;
29
30
  using absl::random_internal::stream_precision_helper;
30
31
 
31
32
  template <typename T>
32
- typename absl::enable_if_t<std::is_integral<T>::value, T> //
33
+ typename std::enable_if_t<std::is_integral<T>::value, T> //
33
34
  StreamRoundTrip(T t) {
34
35
  std::stringstream ss;
35
36
  {
@@ -53,7 +54,7 @@ StreamRoundTrip(T t) {
53
54
  }
54
55
 
55
56
  template <typename T>
56
- typename absl::enable_if_t<std::is_floating_point<T>::value, T> //
57
+ typename std::enable_if_t<std::is_floating_point<T>::value, T> //
57
58
  StreamRoundTrip(T t) {
58
59
  std::stringstream ss;
59
60
  {
@@ -16,11 +16,12 @@
16
16
  #ifndef ABSL_RANDOM_INTERNAL_MOCK_HELPERS_H_
17
17
  #define ABSL_RANDOM_INTERNAL_MOCK_HELPERS_H_
18
18
 
19
+ #include <optional>
19
20
  #include <utility>
20
21
 
21
22
  #include "absl/base/config.h"
22
23
  #include "absl/base/fast_type_id.h"
23
- #include "absl/types/optional.h"
24
+ #include "absl/random/mocking_access.h"
24
25
 
25
26
  namespace absl {
26
27
  ABSL_NAMESPACE_BEGIN
@@ -49,6 +50,7 @@ struct NoOpValidator {
49
50
  //
50
51
  class MockHelpers {
51
52
  using IdType = ::absl::FastTypeIdType;
53
+ using RandomMockingAccess = ::absl::RandomMockingAccess;
52
54
 
53
55
  // Given a key signature type used to index the mock, extract the components.
54
56
  // KeyT is expected to have the form:
@@ -63,39 +65,7 @@ class MockHelpers {
63
65
  using arg_tuple_type = ArgTupleT;
64
66
  };
65
67
 
66
- // Detector for InvokeMock.
67
- template <class T>
68
- using invoke_mock_t = decltype(std::declval<T*>()->InvokeMock(
69
- std::declval<IdType>(), std::declval<void*>(), std::declval<void*>()));
70
-
71
- // Empty implementation of InvokeMock.
72
- template <typename KeyT, typename ReturnT, typename ArgTupleT, typename URBG,
73
- typename... Args>
74
- static absl::optional<ReturnT> InvokeMockImpl(char, URBG*, Args&&...) {
75
- return absl::nullopt;
76
- }
77
-
78
- // Non-empty implementation of InvokeMock.
79
- template <typename KeyT, typename ReturnT, typename ArgTupleT, typename URBG,
80
- typename = invoke_mock_t<URBG>, typename... Args>
81
- static absl::optional<ReturnT> InvokeMockImpl(int, URBG* urbg,
82
- Args&&... args) {
83
- ArgTupleT arg_tuple(std::forward<Args>(args)...);
84
- ReturnT result;
85
- if (urbg->InvokeMock(FastTypeId<KeyT>(), &arg_tuple, &result)) {
86
- return result;
87
- }
88
- return absl::nullopt;
89
- }
90
-
91
68
  public:
92
- // InvokeMock is private; this provides access for some specialized use cases.
93
- template <typename URBG>
94
- static inline bool PrivateInvokeMock(URBG* urbg, IdType key_id,
95
- void* args_tuple, void* result) {
96
- return urbg->InvokeMock(key_id, args_tuple, result);
97
- }
98
-
99
69
  // Invoke a mock for the KeyT (may or may not be a signature).
100
70
  //
101
71
  // KeyT is used to generate a typeid-based lookup key for the mock.
@@ -108,13 +78,17 @@ class MockHelpers {
108
78
  // the underlying mechanism requires a pointer to an argument tuple.
109
79
  template <typename KeyT, typename URBG, typename... Args>
110
80
  static auto MaybeInvokeMock(URBG* urbg, Args&&... args)
111
- -> absl::optional<typename KeySignature<KeyT>::result_type> {
112
- // Use function overloading to dispatch to the implementation since
113
- // more modern patterns (e.g. require + constexpr) are not supported in all
114
- // compiler configurations.
115
- return InvokeMockImpl<KeyT, typename KeySignature<KeyT>::result_type,
116
- typename KeySignature<KeyT>::arg_tuple_type, URBG>(
117
- 0, urbg, std::forward<Args>(args)...);
81
+ -> std::optional<typename KeySignature<KeyT>::result_type> {
82
+ if constexpr (RandomMockingAccess::HasInvokeMock<URBG>::value) {
83
+ typename KeySignature<KeyT>::arg_tuple_type arg_tuple(
84
+ std::forward<Args>(args)...);
85
+ typename KeySignature<KeyT>::result_type result;
86
+ if (RandomMockingAccess::InvokeMock(urbg, FastTypeId<KeyT>(), &arg_tuple,
87
+ &result)) {
88
+ return result;
89
+ }
90
+ }
91
+ return std::nullopt;
118
92
  }
119
93
 
120
94
  // Acquire a mock for the KeyT (may or may not be a signature), set up to use
@@ -78,7 +78,7 @@ class RandenPoolSeedSeq {
78
78
  // std::contiguous_iterator_tag provides a mechanism for testing this
79
79
  // capability, however until Abseil's support requirements allow us to
80
80
  // assume C++20, limit checks to a few common cases.
81
- using TagType = absl::conditional_t<
81
+ using TagType = std::conditional_t<
82
82
  (std::is_pointer<RandomAccessIterator>::value ||
83
83
  std::is_same<RandomAccessIterator,
84
84
  typename std::vector<U>::iterator>::value),
@@ -106,7 +106,7 @@ class NonsecureURBGBase {
106
106
  NonsecureURBGBase& operator=(NonsecureURBGBase&&) = default;
107
107
 
108
108
  // Constructor using a seed
109
- template <class SSeq, typename = typename absl::enable_if_t<
109
+ template <class SSeq, typename = typename std::enable_if_t<
110
110
  !std::is_same<SSeq, NonsecureURBGBase>::value>>
111
111
  explicit NonsecureURBGBase(SSeq&& seq)
112
112
  : urbg_(ConstructURBG(std::forward<SSeq>(seq))) {}