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
@@ -12,7 +12,7 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
- #include "absl/random/internal/pool_urbg.h"
15
+ #include "absl/random/internal/entropy_pool.h"
16
16
 
17
17
  #include <algorithm>
18
18
  #include <atomic>
@@ -23,15 +23,14 @@
23
23
  #include "absl/base/attributes.h"
24
24
  #include "absl/base/call_once.h"
25
25
  #include "absl/base/config.h"
26
- #include "absl/base/internal/endian.h"
27
- #include "absl/base/internal/raw_logging.h"
28
26
  #include "absl/base/internal/spinlock.h"
29
- #include "absl/base/internal/sysinfo.h"
30
- #include "absl/base/internal/unaligned_access.h"
31
27
  #include "absl/base/optimization.h"
28
+ #include "absl/base/thread_annotations.h"
32
29
  #include "absl/random/internal/randen.h"
30
+ #include "absl/random/internal/randen_traits.h"
33
31
  #include "absl/random/internal/seed_material.h"
34
32
  #include "absl/random/seed_gen_exception.h"
33
+ #include "absl/types/span.h"
35
34
 
36
35
  using absl::base_internal::SpinLock;
37
36
  using absl::base_internal::SpinLockHolder;
@@ -45,16 +44,18 @@ namespace {
45
44
  // single generator within a RandenPool<T>. It is an internal implementation
46
45
  // detail, and does not aim to conform to [rand.req.urng].
47
46
  //
48
- // NOTE: There are alignment issues when used on ARM, for instance.
49
- // See the allocation code in PoolAlignedAlloc().
50
- class RandenPoolEntry {
47
+ // At least 32-byte alignment is required for the state_ array on some ARM
48
+ // platforms. We also want this aligned to a cacheline to eliminate false
49
+ // sharing.
50
+ class alignas(std::max(size_t{ABSL_CACHELINE_SIZE}, size_t{32}))
51
+ RandenPoolEntry {
51
52
  public:
52
53
  static constexpr size_t kState = RandenTraits::kStateBytes / sizeof(uint32_t);
53
54
  static constexpr size_t kCapacity =
54
55
  RandenTraits::kCapacityBytes / sizeof(uint32_t);
55
56
 
56
57
  void Init(absl::Span<const uint32_t> data) {
57
- SpinLockHolder l(&mu_); // Always uncontested.
58
+ SpinLockHolder l(mu_); // Always uncontested.
58
59
  std::copy(data.begin(), data.end(), std::begin(state_));
59
60
  next_ = kState;
60
61
  }
@@ -62,10 +63,6 @@ class RandenPoolEntry {
62
63
  // Copy bytes into out.
63
64
  void Fill(uint8_t* out, size_t bytes) ABSL_LOCKS_EXCLUDED(mu_);
64
65
 
65
- // Returns random bits from the buffer in units of T.
66
- template <typename T>
67
- inline T Generate() ABSL_LOCKS_EXCLUDED(mu_);
68
-
69
66
  inline void MaybeRefill() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
70
67
  if (next_ >= kState) {
71
68
  next_ = kCapacity;
@@ -73,55 +70,24 @@ class RandenPoolEntry {
73
70
  }
74
71
  }
75
72
 
73
+ inline size_t available() const ABSL_SHARED_LOCKS_REQUIRED(mu_) {
74
+ return kState - next_;
75
+ }
76
+
76
77
  private:
77
78
  // Randen URBG state.
78
- uint32_t state_[kState] ABSL_GUARDED_BY(mu_); // First to satisfy alignment.
79
+ // At least 32-byte alignment is required by ARM platform code.
80
+ alignas(32) uint32_t state_[kState] ABSL_GUARDED_BY(mu_);
79
81
  SpinLock mu_;
80
82
  const Randen impl_;
81
83
  size_t next_ ABSL_GUARDED_BY(mu_);
82
84
  };
83
85
 
84
- template <>
85
- inline uint8_t RandenPoolEntry::Generate<uint8_t>() {
86
- SpinLockHolder l(&mu_);
87
- MaybeRefill();
88
- return static_cast<uint8_t>(state_[next_++]);
89
- }
90
-
91
- template <>
92
- inline uint16_t RandenPoolEntry::Generate<uint16_t>() {
93
- SpinLockHolder l(&mu_);
94
- MaybeRefill();
95
- return static_cast<uint16_t>(state_[next_++]);
96
- }
97
-
98
- template <>
99
- inline uint32_t RandenPoolEntry::Generate<uint32_t>() {
100
- SpinLockHolder l(&mu_);
101
- MaybeRefill();
102
- return state_[next_++];
103
- }
104
-
105
- template <>
106
- inline uint64_t RandenPoolEntry::Generate<uint64_t>() {
107
- SpinLockHolder l(&mu_);
108
- if (next_ >= kState - 1) {
109
- next_ = kCapacity;
110
- impl_.Generate(state_);
111
- }
112
- auto p = state_ + next_;
113
- next_ += 2;
114
-
115
- uint64_t result;
116
- std::memcpy(&result, p, sizeof(result));
117
- return result;
118
- }
119
-
120
86
  void RandenPoolEntry::Fill(uint8_t* out, size_t bytes) {
121
- SpinLockHolder l(&mu_);
87
+ SpinLockHolder l(mu_);
122
88
  while (bytes > 0) {
123
89
  MaybeRefill();
124
- size_t remaining = (kState - next_) * sizeof(state_[0]);
90
+ size_t remaining = available() * sizeof(state_[0]);
125
91
  size_t to_copy = std::min(bytes, remaining);
126
92
  std::memcpy(out, &state_[next_], to_copy);
127
93
  out += to_copy;
@@ -185,38 +151,17 @@ size_t GetPoolID() {
185
151
  #endif
186
152
  }
187
153
 
188
- // Allocate a RandenPoolEntry with at least 32-byte alignment, which is required
189
- // by ARM platform code.
190
- RandenPoolEntry* PoolAlignedAlloc() {
191
- constexpr size_t kAlignment =
192
- ABSL_CACHELINE_SIZE > 32 ? ABSL_CACHELINE_SIZE : 32;
193
-
194
- // Not all the platforms that we build for have std::aligned_alloc, however
195
- // since we never free these objects, we can over allocate and munge the
196
- // pointers to the correct alignment.
197
- uintptr_t x = reinterpret_cast<uintptr_t>(
198
- new char[sizeof(RandenPoolEntry) + kAlignment]);
199
- auto y = x % kAlignment;
200
- void* aligned = reinterpret_cast<void*>(y == 0 ? x : (x + kAlignment - y));
201
- return new (aligned) RandenPoolEntry();
202
- }
203
-
204
154
  // Allocate and initialize kPoolSize objects of type RandenPoolEntry.
205
- //
206
- // The initialization strategy is to initialize one object directly from
207
- // OS entropy, then to use that object to seed all of the individual
208
- // pool instances.
209
155
  void InitPoolURBG() {
210
156
  static constexpr size_t kSeedSize =
211
157
  RandenTraits::kStateBytes / sizeof(uint32_t);
212
- // Read the seed data from OS entropy once.
158
+ // Read OS entropy once, and use it to initialize each pool entry.
213
159
  uint32_t seed_material[kPoolSize * kSeedSize];
214
- if (!random_internal::ReadSeedMaterialFromOSEntropy(
215
- absl::MakeSpan(seed_material))) {
216
- random_internal::ThrowSeedGenException();
160
+ if (!ReadSeedMaterialFromOSEntropy(absl::MakeSpan(seed_material))) {
161
+ ThrowSeedGenException();
217
162
  }
218
163
  for (size_t i = 0; i < kPoolSize; i++) {
219
- shared_pools[i] = PoolAlignedAlloc();
164
+ shared_pools[i] = new RandenPoolEntry();
220
165
  shared_pools[i]->Init(
221
166
  absl::MakeSpan(&seed_material[i * kSeedSize], kSeedSize));
222
167
  }
@@ -230,24 +175,11 @@ RandenPoolEntry* GetPoolForCurrentThread() {
230
175
 
231
176
  } // namespace
232
177
 
233
- template <typename T>
234
- typename RandenPool<T>::result_type RandenPool<T>::Generate() {
178
+ void GetEntropyFromRandenPool(void* dest, size_t bytes) {
235
179
  auto* pool = GetPoolForCurrentThread();
236
- return pool->Generate<T>();
180
+ pool->Fill(reinterpret_cast<uint8_t*>(dest), bytes);
237
181
  }
238
182
 
239
- template <typename T>
240
- void RandenPool<T>::Fill(absl::Span<result_type> data) {
241
- auto* pool = GetPoolForCurrentThread();
242
- pool->Fill(reinterpret_cast<uint8_t*>(data.data()),
243
- data.size() * sizeof(result_type));
244
- }
245
-
246
- template class RandenPool<uint8_t>;
247
- template class RandenPool<uint16_t>;
248
- template class RandenPool<uint32_t>;
249
- template class RandenPool<uint64_t>;
250
-
251
183
  } // namespace random_internal
252
184
  ABSL_NAMESPACE_END
253
185
  } // namespace absl
@@ -12,16 +12,24 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
- #include "absl/base/internal/inline_variable_testing.h"
15
+ #ifndef ABSL_RANDOM_INTERNAL_ENTROPY_POOL_H_
16
+ #define ABSL_RANDOM_INTERNAL_ENTROPY_POOL_H_
17
+
18
+ #include <cstddef>
19
+
20
+ #include "absl/base/config.h"
16
21
 
17
22
  namespace absl {
18
23
  ABSL_NAMESPACE_BEGIN
19
- namespace inline_variable_testing_internal {
24
+ namespace random_internal {
20
25
 
21
- const Foo& get_foo_b() { return inline_variable_foo; }
26
+ // GetEntropyFromRandenPool() is a helper function that fills a memory region
27
+ // with random bytes from the RandenPool. This is used by the absl::BitGen
28
+ // implementation to fill the internal buffer.
29
+ void GetEntropyFromRandenPool(void* dest, size_t bytes);
22
30
 
23
- const int& get_int_b() { return inline_variable_int; }
24
-
25
- } // namespace inline_variable_testing_internal
31
+ } // namespace random_internal
26
32
  ABSL_NAMESPACE_END
27
33
  } // namespace absl
34
+
35
+ #endif // ABSL_RANDOM_INTERNAL_ENTROPY_POOL_H_
@@ -0,0 +1,119 @@
1
+ // Copyright 2017 The Abseil Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "absl/random/internal/entropy_pool.h"
16
+
17
+ #include <bitset>
18
+ #include <cmath>
19
+ #include <cstddef>
20
+ #include <cstdint>
21
+ #include <thread> // NOLINT
22
+ #include <utility>
23
+ #include <vector>
24
+
25
+ #include "gtest/gtest.h"
26
+ #include "absl/container/flat_hash_set.h"
27
+ #include "absl/synchronization/mutex.h"
28
+
29
+ namespace {
30
+
31
+ using ::absl::random_internal::GetEntropyFromRandenPool;
32
+
33
+ TEST(EntropyPoolTest, DistinctSequencesPerThread) {
34
+ using result_type = uint32_t;
35
+ constexpr int kNumThreads = 12;
36
+ constexpr size_t kValuesPerThread = 32;
37
+
38
+ // Acquire entropy from multiple threads.
39
+ std::vector<std::vector<result_type>> data;
40
+ {
41
+ absl::Mutex mu;
42
+ std::vector<std::thread> threads;
43
+ for (int i = 0; i < kNumThreads; i++) {
44
+ threads.emplace_back([&]() {
45
+ std::vector<result_type> v(kValuesPerThread);
46
+ GetEntropyFromRandenPool(v.data(), sizeof(result_type) * v.size());
47
+ absl::MutexLock l(mu);
48
+ data.push_back(std::move(v));
49
+ });
50
+ }
51
+ for (auto& t : threads) t.join();
52
+ }
53
+
54
+ EXPECT_EQ(data.size(), kNumThreads);
55
+
56
+ // There should be essentially no duplicates in the sequences.
57
+ size_t expected_size = 0;
58
+ absl::flat_hash_set<result_type> seen;
59
+ for (const auto& v : data) {
60
+ expected_size += v.size();
61
+ for (result_type x : v) seen.insert(x);
62
+ }
63
+ EXPECT_GE(seen.size(), expected_size - 1);
64
+ }
65
+
66
+ // This validates that sequences are independent.
67
+ TEST(EntropyPoolTest, ValidateDistribution) {
68
+ using result_type = uint32_t;
69
+ constexpr int kNumOutputs = 16;
70
+ std::vector<result_type> a(kNumOutputs);
71
+ std::vector<result_type> b(kNumOutputs);
72
+
73
+ GetEntropyFromRandenPool(a.data(), sizeof(a[0]) * a.size());
74
+ GetEntropyFromRandenPool(b.data(), sizeof(b[0]) * b.size());
75
+
76
+ // Compare the two sequences, counting the number of bits that are different,
77
+ // then verify using a normal-approximation of the binomial distribution.
78
+ size_t changed_bits = 0;
79
+ size_t total_set = 0;
80
+ size_t equal_count = 0;
81
+ size_t zero_count = 0;
82
+ for (size_t i = 0; i < a.size(); ++i) {
83
+ std::bitset<sizeof(result_type) * 8> changed_set(a[i] ^ b[i]);
84
+ changed_bits += changed_set.count();
85
+
86
+ std::bitset<sizeof(result_type) * 8> a_set(a[i]);
87
+ std::bitset<sizeof(result_type) * 8> b_set(b[i]);
88
+ total_set += a_set.count() + b_set.count();
89
+
90
+ equal_count += (a[i] == b[i]) ? 1 : 0;
91
+
92
+ zero_count += (a[i] == 0) ? 1 : 0;
93
+ zero_count += (b[i] == 0) ? 1 : 0;
94
+ }
95
+
96
+ constexpr size_t kNBits = kNumOutputs * sizeof(result_type) * 8;
97
+
98
+ // This should be a binomial distribution with:
99
+ // p = 0.5
100
+ // n = kNBits
101
+ // sigma =~ 11.3 (sqrt(n * 0.5 * 0.5))
102
+ // So we expect the number of changed bits to be within 5 standard deviations
103
+ // of the mean; this should fail less than one in 3 million times.
104
+ EXPECT_NEAR(changed_bits, kNBits * 0.5, 5 * std::sqrt(kNBits))
105
+ << "@" << changed_bits / static_cast<double>(kNBits);
106
+
107
+ // Verify that the number of set bits is also within the expected range;
108
+ // Note that this is summed over the two sequences, so the number of trials
109
+ // is twice the number of bits.
110
+ EXPECT_NEAR(total_set, kNBits, 5 * std::sqrt(2 * kNBits))
111
+ << "@" << total_set / static_cast<double>(2 * kNBits);
112
+
113
+ // A[i] == B[i] with probability ~= 16 * 1/2^32; certainly less than 1.
114
+ EXPECT_LE(equal_count, 1);
115
+
116
+ // Zeros values must be rare; 32 / 2^32 is certainly less than 1.
117
+ EXPECT_LE(zero_count, 1);
118
+ }
119
+ } // namespace
@@ -19,7 +19,7 @@
19
19
  #include <utility>
20
20
 
21
21
  #include "absl/base/config.h"
22
- #include "absl/base/internal/fast_type_id.h"
22
+ #include "absl/base/fast_type_id.h"
23
23
  #include "absl/types/optional.h"
24
24
 
25
25
  namespace absl {
@@ -48,7 +48,7 @@ struct NoOpValidator {
48
48
  // result_type(args...)
49
49
  //
50
50
  class MockHelpers {
51
- using IdType = ::absl::base_internal::FastTypeIdType;
51
+ using IdType = ::absl::FastTypeIdType;
52
52
 
53
53
  // Given a key signature type used to index the mock, extract the components.
54
54
  // KeyT is expected to have the form:
@@ -82,8 +82,7 @@ class MockHelpers {
82
82
  Args&&... args) {
83
83
  ArgTupleT arg_tuple(std::forward<Args>(args)...);
84
84
  ReturnT result;
85
- if (urbg->InvokeMock(::absl::base_internal::FastTypeId<KeyT>(), &arg_tuple,
86
- &result)) {
85
+ if (urbg->InvokeMock(FastTypeId<KeyT>(), &arg_tuple, &result)) {
87
86
  return result;
88
87
  }
89
88
  return absl::nullopt;
@@ -92,9 +91,9 @@ class MockHelpers {
92
91
  public:
93
92
  // InvokeMock is private; this provides access for some specialized use cases.
94
93
  template <typename URBG>
95
- static inline bool PrivateInvokeMock(URBG* urbg, IdType type,
94
+ static inline bool PrivateInvokeMock(URBG* urbg, IdType key_id,
96
95
  void* args_tuple, void* result) {
97
- return urbg->InvokeMock(type, args_tuple, result);
96
+ return urbg->InvokeMock(key_id, args_tuple, result);
98
97
  }
99
98
 
100
99
  // Invoke a mock for the KeyT (may or may not be a signature).
@@ -138,7 +137,7 @@ class MockHelpers {
138
137
  m, std::declval<IdType>(), ValidatorT())) {
139
138
  return m.template RegisterMock<typename KeySignature<KeyT>::result_type,
140
139
  typename KeySignature<KeyT>::arg_tuple_type>(
141
- m, ::absl::base_internal::FastTypeId<KeyT>(), ValidatorT());
140
+ m, ::absl::FastTypeId<KeyT>(), ValidatorT());
142
141
  }
143
142
 
144
143
  // Acquire a mock for the KeyT (may or may not be a signature).
@@ -16,19 +16,19 @@
16
16
  #define ABSL_RANDOM_INTERNAL_NONSECURE_BASE_H_
17
17
 
18
18
  #include <algorithm>
19
+ #include <cstddef>
19
20
  #include <cstdint>
20
21
  #include <iterator>
21
22
  #include <type_traits>
22
23
  #include <utility>
23
24
  #include <vector>
24
25
 
25
- #include "absl/base/macros.h"
26
+ #include "absl/base/config.h"
26
27
  #include "absl/container/inlined_vector.h"
27
28
  #include "absl/meta/type_traits.h"
28
- #include "absl/random/internal/pool_urbg.h"
29
+ #include "absl/random/internal/entropy_pool.h"
29
30
  #include "absl/random/internal/salted_seed_seq.h"
30
31
  #include "absl/random/internal/seed_material.h"
31
- #include "absl/types/span.h"
32
32
 
33
33
  namespace absl {
34
34
  ABSL_NAMESPACE_BEGIN
@@ -46,8 +46,7 @@ class RandenPoolSeedSeq {
46
46
  void generate_impl(ContiguousTag, Contiguous begin, Contiguous end) {
47
47
  const size_t n = static_cast<size_t>(std::distance(begin, end));
48
48
  auto* a = &(*begin);
49
- RandenPool<uint8_t>::Fill(
50
- absl::MakeSpan(reinterpret_cast<uint8_t*>(a), sizeof(*a) * n));
49
+ GetEntropyFromRandenPool(a, sizeof(*a) * n);
51
50
  }
52
51
 
53
52
  // Construct a buffer of size n and fill it with values, then copy
@@ -57,7 +56,7 @@ class RandenPoolSeedSeq {
57
56
  RandomAccessIterator end) {
58
57
  const size_t n = std::distance(begin, end);
59
58
  absl::InlinedVector<uint32_t, 8> data(n, 0);
60
- RandenPool<uint32_t>::Fill(absl::MakeSpan(data.begin(), data.end()));
59
+ GetEntropyFromRandenPool(data.begin(), sizeof(data[0]) * n);
61
60
  std::copy(std::begin(data), std::end(data), begin);
62
61
  }
63
62
 
@@ -14,18 +14,22 @@
14
14
 
15
15
  #include "absl/random/internal/nonsecure_base.h"
16
16
 
17
+ #include <algorithm>
17
18
  #include <cstddef>
18
19
  #include <cstdint>
19
20
  #include <iterator>
20
21
  #include <random>
22
+ #include <thread> // NOLINT
21
23
  #include <type_traits>
22
24
  #include <utility>
23
25
  #include <vector>
24
26
 
25
27
  #include "gtest/gtest.h"
28
+ #include "absl/container/flat_hash_set.h"
26
29
  #include "absl/meta/type_traits.h"
27
30
  #include "absl/random/distributions.h"
28
31
  #include "absl/random/random.h"
32
+ #include "absl/synchronization/mutex.h"
29
33
 
30
34
  namespace {
31
35
 
@@ -194,6 +198,41 @@ TEST(NonsecureURBGBase, EqualSeedSequencesYieldEqualVariates) {
194
198
  }
195
199
  }
196
200
 
201
+ TEST(NonsecureURBGBase, DistinctSequencesPerThread) {
202
+ constexpr int kNumThreads = 12;
203
+ constexpr size_t kValuesPerThread = 32;
204
+ using result_type = absl::BitGen::result_type;
205
+
206
+ // Acquire initial sequences from multiple threads.
207
+ std::vector<std::vector<result_type>> data;
208
+ {
209
+ absl::Mutex mu;
210
+ std::vector<std::thread> threads;
211
+ for (int i = 0; i < kNumThreads; i++) {
212
+ threads.emplace_back([&]() {
213
+ absl::BitGen gen;
214
+
215
+ std::vector<result_type> v(kValuesPerThread);
216
+ std::generate(v.begin(), v.end(), [&]() { return gen(); });
217
+ absl::MutexLock l(mu);
218
+ data.push_back(std::move(v));
219
+ });
220
+ }
221
+ for (auto& t : threads) t.join();
222
+ }
223
+
224
+ EXPECT_EQ(data.size(), kNumThreads);
225
+
226
+ // There should be essentially no duplicates in the sequences.
227
+ size_t expected_size = 0;
228
+ absl::flat_hash_set<result_type> seen;
229
+ for (const auto& v : data) {
230
+ expected_size += v.size();
231
+ for (result_type x : v) seen.insert(x);
232
+ }
233
+ EXPECT_GE(seen.size(), expected_size - 1);
234
+ }
235
+
197
236
  TEST(RandenPoolSeedSeqTest, SeederWorksForU32) {
198
237
  absl::random_internal::RandenPoolSeedSeq seeder;
199
238
 
@@ -20,6 +20,7 @@
20
20
  #include "absl/random/internal/nanobenchmark.h"
21
21
  #include "absl/random/internal/platform.h"
22
22
  #include "absl/random/internal/randen.h"
23
+ #include "absl/random/internal/randen_detect.h"
23
24
  #include "absl/random/internal/randen_engine.h"
24
25
  #include "absl/random/internal/randen_hwaes.h"
25
26
  #include "absl/random/internal/randen_slow.h"
@@ -27,6 +28,7 @@
27
28
 
28
29
  namespace {
29
30
 
31
+ using absl::random_internal::CPUSupportsRandenHwAes;
30
32
  using absl::random_internal::Randen;
31
33
  using absl::random_internal::RandenHwAes;
32
34
  using absl::random_internal::RandenSlow;
@@ -150,14 +152,14 @@ void RunAll(const int argc, char* argv[]) {
150
152
  const FuncInput unpredictable = (argc != 999);
151
153
  static const FuncInput inputs[] = {unpredictable * 100, unpredictable * 1000};
152
154
 
153
- #if !defined(ABSL_INTERNAL_DISABLE_AES) && ABSL_HAVE_ACCELERATED_AES
154
- Measure<AbsorbFn<RandenHwAes>>("Absorb (HwAes)", inputs);
155
- #endif
155
+ if (CPUSupportsRandenHwAes()) {
156
+ Measure<AbsorbFn<RandenHwAes>>("Absorb (HwAes)", inputs);
157
+ }
156
158
  Measure<AbsorbFn<RandenSlow>>("Absorb (Slow)", inputs);
157
159
 
158
- #if !defined(ABSL_INTERNAL_DISABLE_AES) && ABSL_HAVE_ACCELERATED_AES
159
- Measure<GenerateFn<RandenHwAes>>("Generate (HwAes)", inputs);
160
- #endif
160
+ if (CPUSupportsRandenHwAes()) {
161
+ Measure<GenerateFn<RandenHwAes>>("Generate (HwAes)", inputs);
162
+ }
161
163
  Measure<GenerateFn<RandenSlow>>("Generate (Slow)", inputs);
162
164
 
163
165
  // Measure the production engine.
@@ -74,7 +74,7 @@ static void __cpuid(int cpu_info[4], int info_type) {
74
74
  // On linux, just use the c-library getauxval call.
75
75
  #if defined(ABSL_INTERNAL_USE_LINUX_GETAUXVAL)
76
76
 
77
- extern "C" unsigned long getauxval(unsigned long type); // NOLINT(runtime/int)
77
+ #include <sys/auxv.h>
78
78
 
79
79
  static uint32_t GetAuxval(uint32_t hwcap_type) {
80
80
  return static_cast<uint32_t>(getauxval(hwcap_type));
@@ -23,17 +23,23 @@
23
23
  #endif
24
24
 
25
25
  #include <algorithm>
26
+ #include <cassert>
26
27
  #include <cerrno>
27
28
  #include <cstdint>
28
29
  #include <cstdlib>
29
30
  #include <cstring>
31
+ #include <string>
32
+ #include <vector>
30
33
 
34
+ #include "absl/base/config.h"
31
35
  #include "absl/base/dynamic_annotations.h"
32
36
  #include "absl/base/internal/raw_logging.h"
33
37
  #include "absl/strings/ascii.h"
34
38
  #include "absl/strings/escaping.h"
35
39
  #include "absl/strings/string_view.h"
36
40
  #include "absl/strings/strip.h"
41
+ #include "absl/types/optional.h"
42
+ #include "absl/types/span.h"
37
43
 
38
44
  #if defined(__native_client__)
39
45
 
@@ -167,24 +173,27 @@ bool ReadSeedMaterialFromDevURandom(absl::Span<uint32_t> values) {
167
173
  size_t buffer_size = sizeof(uint32_t) * values.size();
168
174
 
169
175
  int dev_urandom = open(kEntropyFile, O_RDONLY);
170
- bool success = (-1 != dev_urandom);
171
- if (!success) {
176
+ if (dev_urandom < 0) {
177
+ ABSL_RAW_LOG(ERROR, "Failed to open /dev/urandom.");
172
178
  return false;
173
179
  }
174
180
 
175
- while (success && buffer_size > 0) {
181
+ while (buffer_size > 0) {
176
182
  ssize_t bytes_read = read(dev_urandom, buffer, buffer_size);
177
183
  int read_error = errno;
178
- success = (bytes_read > 0);
179
- if (success) {
180
- buffer += bytes_read;
181
- buffer_size -= static_cast<size_t>(bytes_read);
182
- } else if (bytes_read == -1 && read_error == EINTR) {
183
- success = true; // Need to try again.
184
+ if (bytes_read == -1 && read_error == EINTR) {
185
+ // Interrupted, try again.
186
+ continue;
187
+ } else if (bytes_read <= 0) {
188
+ // EOF, or error.
189
+ break;
184
190
  }
191
+ buffer += bytes_read;
192
+ buffer_size -= static_cast<size_t>(bytes_read);
185
193
  }
194
+
186
195
  close(dev_urandom);
187
- return success;
196
+ return buffer_size == 0;
188
197
  }
189
198
 
190
199
  bool ReadSeedMaterialFromOSEntropyImpl(absl::Span<uint32_t> values) {
@@ -251,8 +260,7 @@ absl::optional<uint32_t> GetSaltMaterial() {
251
260
  static const auto salt_material = []() -> absl::optional<uint32_t> {
252
261
  uint32_t salt_value = 0;
253
262
 
254
- if (random_internal::ReadSeedMaterialFromOSEntropy(
255
- MakeSpan(&salt_value, 1))) {
263
+ if (ReadSeedMaterialFromOSEntropy(absl::MakeSpan(&salt_value, 1))) {
256
264
  return salt_value;
257
265
  }
258
266
 
@@ -21,7 +21,7 @@
21
21
  #include <string>
22
22
  #include <vector>
23
23
 
24
- #include "absl/base/attributes.h"
24
+ #include "absl/base/config.h"
25
25
  #include "absl/random/internal/fast_uniform_bits.h"
26
26
  #include "absl/types/optional.h"
27
27
  #include "absl/types/span.h"
@@ -54,7 +54,7 @@ static_assert(kEntropyBlocksNeeded > 0,
54
54
  // to the C++ Standard "Seed Sequence" concept [rand.req.seedseq].
55
55
  //
56
56
  // If values.data() == nullptr, the behavior is undefined.
57
- ABSL_MUST_USE_RESULT
57
+ [[nodiscard]]
58
58
  bool ReadSeedMaterialFromOSEntropy(absl::Span<uint32_t> values);
59
59
 
60
60
  // Attempts to fill a span of uint32_t-values using variates generated by an
@@ -65,8 +65,8 @@ bool ReadSeedMaterialFromOSEntropy(absl::Span<uint32_t> values);
65
65
  //
66
66
  // If urbg == nullptr or values.data() == nullptr, the behavior is undefined.
67
67
  template <typename URBG>
68
- ABSL_MUST_USE_RESULT bool ReadSeedMaterialFromURBG(
69
- URBG* urbg, absl::Span<uint32_t> values) {
68
+ [[nodiscard]] bool ReadSeedMaterialFromURBG(URBG* urbg,
69
+ absl::Span<uint32_t> values) {
70
70
  random_internal::FastUniformBits<uint32_t> distr;
71
71
 
72
72
  assert(urbg != nullptr && values.data() != nullptr);
@@ -94,7 +94,7 @@ void MixIntoSeedMaterial(absl::Span<const uint32_t> sequence,
94
94
  //
95
95
  // Salt is obtained only once and stored in static variable.
96
96
  //
97
- // May return empty value if optaining the salt was not possible.
97
+ // May return empty value if obtaining the salt was not possible.
98
98
  absl::optional<uint32_t> GetSaltMaterial();
99
99
 
100
100
  } // namespace random_internal
@@ -15,12 +15,15 @@
15
15
  #include "absl/random/internal/seed_material.h"
16
16
 
17
17
  #include <bitset>
18
+ #include <cstdint>
18
19
  #include <cstdlib>
19
20
  #include <cstring>
20
21
  #include <random>
22
+ #include <vector>
21
23
 
22
24
  #include "gmock/gmock.h"
23
25
  #include "gtest/gtest.h"
26
+ #include "absl/types/span.h"
24
27
 
25
28
  #ifdef __ANDROID__
26
29
  // Android assert messages only go to system log, so death tests cannot inspect