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
@@ -64,24 +64,24 @@ struct Elem<CompressedTuple<B...>, I>
64
64
  template <typename D, size_t I>
65
65
  using ElemT = typename Elem<D, I>::type;
66
66
 
67
- // We can't use EBCO on other CompressedTuples because that would mean that we
68
- // derive from multiple Storage<> instantiations with the same I parameter,
69
- // and potentially from multiple identical Storage<> instantiations. So anytime
70
- // we use type inheritance rather than encapsulation, we mark
71
- // CompressedTupleImpl, to make this easy to detect.
72
- struct uses_inheritance {};
73
67
 
74
68
  template <typename T>
75
69
  constexpr bool ShouldUseBase() {
76
70
  return std::is_class<T>::value && std::is_empty<T>::value &&
77
- !std::is_final<T>::value &&
78
- !std::is_base_of<uses_inheritance, T>::value;
71
+ !std::is_final<T>::value;
79
72
  }
80
73
 
74
+ // Tag type used to disambiguate Storage types for different CompresseedTuples.
75
+ // Without it, CompressedTuple<T, CompressedTuple<T>> would inherit from
76
+ // Storage<T, 0> twice.
77
+ template <typename... Ts>
78
+ struct StorageTag;
79
+
81
80
  // The storage class provides two specializations:
82
81
  // - For empty classes, it stores T as a base class.
83
82
  // - For everything else, it stores T as a member.
84
- template <typename T, size_t I, bool UseBase = ShouldUseBase<T>()>
83
+ // Tag should be set to StorageTag<Ts...>.
84
+ template <typename T, size_t I, typename Tag, bool UseBase = ShouldUseBase<T>()>
85
85
  struct Storage {
86
86
  T value;
87
87
  constexpr Storage() = default;
@@ -94,8 +94,8 @@ struct Storage {
94
94
  constexpr T&& get() && { return std::move(*this).value; }
95
95
  };
96
96
 
97
- template <typename T, size_t I>
98
- struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC Storage<T, I, true> : T {
97
+ template <typename T, size_t I, typename Tag>
98
+ struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC Storage<T, I, Tag, true> : T {
99
99
  constexpr Storage() = default;
100
100
 
101
101
  template <typename V>
@@ -111,30 +111,35 @@ template <typename D, typename I, bool ShouldAnyUseBase>
111
111
  struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTupleImpl;
112
112
 
113
113
  template <typename... Ts, size_t... I, bool ShouldAnyUseBase>
114
- struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTupleImpl<
115
- CompressedTuple<Ts...>, absl::index_sequence<I...>, ShouldAnyUseBase>
114
+ struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC
115
+ CompressedTupleImpl<CompressedTuple<Ts...>, absl::index_sequence<I...>,
116
+ ShouldAnyUseBase>
116
117
  // We use the dummy identity function through std::integral_constant to
117
118
  // convince MSVC of accepting and expanding I in that context. Without it
118
119
  // you would get:
119
120
  // error C3548: 'I': parameter pack cannot be used in this context
120
- : uses_inheritance,
121
- Storage<Ts, std::integral_constant<size_t, I>::value>... {
121
+ : Storage<Ts, std::integral_constant<size_t, I>::value,
122
+ StorageTag<Ts...>>... {
122
123
  constexpr CompressedTupleImpl() = default;
123
124
  template <typename... Vs>
124
125
  explicit constexpr CompressedTupleImpl(absl::in_place_t, Vs&&... args)
125
- : Storage<Ts, I>(absl::in_place, std::forward<Vs>(args))... {}
126
+ : Storage<Ts, I, StorageTag<Ts...>>(absl::in_place,
127
+ std::forward<Vs>(args))... {}
126
128
  friend CompressedTuple<Ts...>;
127
129
  };
128
130
 
129
131
  template <typename... Ts, size_t... I>
130
- struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTupleImpl<
131
- CompressedTuple<Ts...>, absl::index_sequence<I...>, false>
132
+ struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC
133
+ CompressedTupleImpl<CompressedTuple<Ts...>, absl::index_sequence<I...>,
134
+ false>
132
135
  // We use the dummy identity function as above...
133
- : Storage<Ts, std::integral_constant<size_t, I>::value, false>... {
136
+ : Storage<Ts, std::integral_constant<size_t, I>::value, StorageTag<Ts...>,
137
+ false>... {
134
138
  constexpr CompressedTupleImpl() = default;
135
139
  template <typename... Vs>
136
140
  explicit constexpr CompressedTupleImpl(absl::in_place_t, Vs&&... args)
137
- : Storage<Ts, I, false>(absl::in_place, std::forward<Vs>(args))... {}
141
+ : Storage<Ts, I, StorageTag<Ts...>, false>(absl::in_place,
142
+ std::forward<Vs>(args))... {}
138
143
  friend CompressedTuple<Ts...>;
139
144
  };
140
145
 
@@ -183,9 +188,7 @@ struct TupleItemsMoveConstructible
183
188
  // Helper class to perform the Empty Base Class Optimization.
184
189
  // Ts can contain classes and non-classes, empty or not. For the ones that
185
190
  // are empty classes, we perform the CompressedTuple. If all types in Ts are
186
- // empty classes, then CompressedTuple<Ts...> is itself an empty class. (This
187
- // does not apply when one or more of those empty classes is itself an empty
188
- // CompressedTuple.)
191
+ // empty classes, then CompressedTuple<Ts...> is itself an empty class.
189
192
  //
190
193
  // To access the members, use member .get<N>() function.
191
194
  //
@@ -208,7 +211,8 @@ class ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTuple
208
211
  using ElemT = internal_compressed_tuple::ElemT<CompressedTuple, I>;
209
212
 
210
213
  template <int I>
211
- using StorageT = internal_compressed_tuple::Storage<ElemT<I>, I>;
214
+ using StorageT = internal_compressed_tuple::Storage<
215
+ ElemT<I>, I, internal_compressed_tuple::StorageTag<Ts...>>;
212
216
 
213
217
  public:
214
218
  // There seems to be a bug in MSVC dealing in which using '=default' here will
@@ -386,20 +386,6 @@ TEST(CompressedTupleTest, Constexpr) {
386
386
 
387
387
  using Tuple = CompressedTuple<int, double, CompressedTuple<int>, Empty<0>>;
388
388
 
389
- constexpr int r0 =
390
- AsLValue(Tuple(1, 0.75, CompressedTuple<int>(9), {})).get<0>();
391
- constexpr double r1 =
392
- AsLValue(Tuple(1, 0.75, CompressedTuple<int>(9), {})).get<1>();
393
- constexpr int r2 =
394
- AsLValue(Tuple(1, 0.75, CompressedTuple<int>(9), {})).get<2>().get<0>();
395
- constexpr CallType r3 =
396
- AsLValue(Tuple(1, 0.75, CompressedTuple<int>(9), {})).get<3>().value();
397
-
398
- EXPECT_EQ(r0, 1);
399
- EXPECT_EQ(r1, 0.75);
400
- EXPECT_EQ(r2, 9);
401
- EXPECT_EQ(r3, CallType::kMutableRef);
402
-
403
389
  constexpr Tuple x(7, 1.25, CompressedTuple<int>(5), {});
404
390
  constexpr int x0 = x.get<0>();
405
391
  constexpr double x1 = x.get<1>();
@@ -466,14 +452,15 @@ TEST(CompressedTupleTest, EmptyFinalClass) {
466
452
  }
467
453
  #endif
468
454
 
469
- // TODO(b/214288561): enable this test.
470
- TEST(CompressedTupleTest, DISABLED_NestedEbo) {
455
+ TEST(CompressedTupleTest, NestedEbo) {
471
456
  struct Empty1 {};
472
457
  struct Empty2 {};
473
458
  CompressedTuple<Empty1, CompressedTuple<Empty2>, int> x;
474
459
  CompressedTuple<Empty1, Empty2, int> y;
475
- // Currently fails with sizeof(x) == 8, sizeof(y) == 4.
476
460
  EXPECT_EQ(sizeof(x), sizeof(y));
461
+
462
+ using NestedEmpty = CompressedTuple<Empty1, CompressedTuple<Empty2>>;
463
+ EXPECT_TRUE(std::is_empty_v<NestedEmpty>);
477
464
  }
478
465
 
479
466
  } // namespace
@@ -26,6 +26,7 @@
26
26
  #include <utility>
27
27
 
28
28
  #include "absl/base/config.h"
29
+ #include "absl/hash/hash.h"
29
30
  #include "absl/memory/memory.h"
30
31
  #include "absl/meta/type_traits.h"
31
32
  #include "absl/utility/utility.h"
@@ -374,9 +375,6 @@ struct map_slot_policy {
374
375
  return slot->value;
375
376
  }
376
377
 
377
- // When C++17 is available, we can use std::launder to provide mutable
378
- // access to the key for use in node handle.
379
- #if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
380
378
  static K& mutable_key(slot_type* slot) {
381
379
  // Still check for kMutableKeys so that we can avoid calling std::launder
382
380
  // unless necessary because it can interfere with optimizations.
@@ -384,9 +382,6 @@ struct map_slot_policy {
384
382
  : *std::launder(const_cast<K*>(
385
383
  std::addressof(slot->value.first)));
386
384
  }
387
- #else // !(defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606)
388
- static const K& mutable_key(slot_type* slot) { return key(slot); }
389
- #endif
390
385
 
391
386
  static const K& key(const slot_type* slot) {
392
387
  return kMutableKeys::value ? slot->key : slot->value.first;
@@ -439,11 +434,17 @@ struct map_slot_policy {
439
434
  template <class Allocator>
440
435
  static auto transfer(Allocator* alloc, slot_type* new_slot,
441
436
  slot_type* old_slot) {
442
- auto is_relocatable =
443
- typename absl::is_trivially_relocatable<value_type>::type();
437
+ // This should really just be
438
+ // typename absl::is_trivially_relocatable<value_type>::type()
439
+ // but std::pair is not trivially copyable in C++23 in some standard
440
+ // library versions.
441
+ // See https://github.com/llvm/llvm-project/pull/95444 for instance.
442
+ auto is_relocatable = typename std::conjunction<
443
+ absl::is_trivially_relocatable<typename value_type::first_type>,
444
+ absl::is_trivially_relocatable<typename value_type::second_type>>::
445
+ type();
444
446
 
445
447
  emplace(new_slot);
446
- #if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
447
448
  if (is_relocatable) {
448
449
  // TODO(b/247130232,b/251814870): remove casts after fixing warnings.
449
450
  std::memcpy(static_cast<void*>(std::launder(&new_slot->value)),
@@ -451,7 +452,6 @@ struct map_slot_policy {
451
452
  sizeof(value_type));
452
453
  return is_relocatable;
453
454
  }
454
- #endif
455
455
 
456
456
  if (kMutableKeys::value) {
457
457
  absl::allocator_traits<Allocator>::construct(
@@ -465,24 +465,87 @@ struct map_slot_policy {
465
465
  }
466
466
  };
467
467
 
468
+ // Suppress erroneous uninitialized memory errors on GCC. For example, GCC
469
+ // thinks that the call to slot_array() in find_or_prepare_insert() is reading
470
+ // uninitialized memory, but slot_array is only called there when the table is
471
+ // non-empty and this memory is initialized when the table is non-empty.
472
+ #if !defined(__clang__) && defined(__GNUC__)
473
+ #define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED(x) \
474
+ _Pragma("GCC diagnostic push") \
475
+ _Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") \
476
+ _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") x; \
477
+ _Pragma("GCC diagnostic pop")
478
+ #define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) \
479
+ ABSL_SWISSTABLE_IGNORE_UNINITIALIZED(return x)
480
+ #else
481
+ #define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED(x) x
482
+ #define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) return x
483
+ #endif
484
+
485
+ // Variadic arguments hash function that ignore the rest of the arguments.
486
+ // Useful for usage with policy traits.
487
+ template <class Hash, bool kIsDefault>
488
+ struct HashElement {
489
+ HashElement(const Hash& h, size_t s) : hash(h), seed(s) {}
490
+
491
+ template <class K, class... Args>
492
+ size_t operator()(const K& key, Args&&...) const {
493
+ if constexpr (kIsDefault) {
494
+ // TODO(b/384509507): resolve `no header providing
495
+ // "absl::hash_internal::SupportsHashWithSeed" is directly included`.
496
+ // Maybe we should make "internal/hash.h" be a separate library.
497
+ return absl::hash_internal::HashWithSeed().hash(hash, key, seed);
498
+ }
499
+ // NOLINTNEXTLINE(clang-diagnostic-sign-conversion)
500
+ return hash(key) ^ seed;
501
+ }
502
+ const Hash& hash;
503
+ size_t seed;
504
+ };
505
+
506
+ // No arguments function hash function for a specific key.
507
+ template <class Hash, class Key, bool kIsDefault>
508
+ struct HashKey {
509
+ HashKey(const Hash& h, const Key& k) : hash(h), key(k) {}
510
+
511
+ size_t operator()(size_t seed) const {
512
+ return HashElement<Hash, kIsDefault>{hash, seed}(key);
513
+ }
514
+ const Hash& hash;
515
+ const Key& key;
516
+ };
517
+
518
+ // Variadic arguments equality function that ignore the rest of the arguments.
519
+ // Useful for usage with policy traits.
520
+ template <class K1, class KeyEqual>
521
+ struct EqualElement {
522
+ template <class K2, class... Args>
523
+ bool operator()(const K2& lhs, Args&&...) const {
524
+ ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(eq(lhs, rhs));
525
+ }
526
+ const K1& rhs;
527
+ const KeyEqual& eq;
528
+ };
529
+
468
530
  // Type erased function for computing hash of the slot.
469
- using HashSlotFn = size_t (*)(const void* hash_fn, void* slot);
531
+ using HashSlotFn = size_t (*)(const void* hash_fn, void* slot, size_t seed);
470
532
 
471
533
  // Type erased function to apply `Fn` to data inside of the `slot`.
472
534
  // The data is expected to have type `T`.
473
- template <class Fn, class T>
474
- size_t TypeErasedApplyToSlotFn(const void* fn, void* slot) {
535
+ template <class Fn, class T, bool kIsDefault>
536
+ size_t TypeErasedApplyToSlotFn(const void* fn, void* slot, size_t seed) {
475
537
  const auto* f = static_cast<const Fn*>(fn);
476
- return (*f)(*static_cast<const T*>(slot));
538
+ return HashElement<Fn, kIsDefault>{*f, seed}(*static_cast<const T*>(slot));
477
539
  }
478
540
 
479
541
  // Type erased function to apply `Fn` to data inside of the `*slot_ptr`.
480
542
  // The data is expected to have type `T`.
481
- template <class Fn, class T>
482
- size_t TypeErasedDerefAndApplyToSlotFn(const void* fn, void* slot_ptr) {
543
+ template <class Fn, class T, bool kIsDefault>
544
+ size_t TypeErasedDerefAndApplyToSlotFn(const void* fn, void* slot_ptr,
545
+ size_t seed) {
483
546
  const auto* f = static_cast<const Fn*>(fn);
484
547
  const T* slot = *static_cast<const T**>(slot_ptr);
485
- return (*f)(*slot);
548
+ return HashElement<Fn, kIsDefault>{*f, seed}(*slot);
486
549
  }
487
550
 
488
551
  } // namespace container_internal
@@ -300,16 +300,46 @@ TEST(MapSlotPolicy, DestroyReturnsTrue) {
300
300
 
301
301
  TEST(ApplyTest, TypeErasedApplyToSlotFn) {
302
302
  size_t x = 7;
303
+ size_t seed = 100;
303
304
  auto fn = [](size_t v) { return v * 2; };
304
- EXPECT_EQ((TypeErasedApplyToSlotFn<decltype(fn), size_t>(&fn, &x)), 14);
305
+ EXPECT_EQ(
306
+ (TypeErasedApplyToSlotFn<decltype(fn), size_t, /*kIsDefault=*/false>(
307
+ &fn, &x, seed)),
308
+ (HashElement<decltype(fn), /*kIsDefault=*/false>(fn, seed)(x)));
305
309
  }
306
310
 
307
311
  TEST(ApplyTest, TypeErasedDerefAndApplyToSlotFn) {
308
312
  size_t x = 7;
313
+ size_t seed = 100;
309
314
  auto fn = [](size_t v) { return v * 2; };
310
315
  size_t* x_ptr = &x;
316
+ EXPECT_EQ((TypeErasedDerefAndApplyToSlotFn<decltype(fn), size_t,
317
+ /*kIsDefault=*/false>(&fn, &x_ptr,
318
+ seed)),
319
+ (HashElement<decltype(fn), /*kIsDefault=*/false>(fn, seed)(x)));
320
+ }
321
+
322
+ TEST(HashElement, DefaultHash) {
323
+ size_t x = 7;
324
+ size_t seed = 100;
325
+ struct HashWithSeed {
326
+ size_t operator()(size_t v) const { return v * 2; }
327
+ size_t hash_with_seed(size_t v, size_t seed) const {
328
+ return v * 2 + seed * 3;
329
+ }
330
+ } hash;
331
+ EXPECT_EQ((HashElement<HashWithSeed, /*kIsDefault=*/true>(hash, seed)(x)),
332
+ hash.hash_with_seed(x, seed));
333
+ }
334
+
335
+ TEST(HashElement, NonDefaultHash) {
336
+ size_t x = 7;
337
+ size_t seed = 100;
338
+ auto fn = [](size_t v) { return v * 2; };
311
339
  EXPECT_EQ(
312
- (TypeErasedDerefAndApplyToSlotFn<decltype(fn), size_t>(&fn, &x_ptr)), 14);
340
+ (HashElement<decltype(fn), /*kIsDefault=*/false>(
341
+ fn, seed)(x)),
342
+ fn(x) ^ seed);
313
343
  }
314
344
 
315
345
  } // namespace
@@ -49,6 +49,7 @@
49
49
  #include <functional>
50
50
  #include <memory>
51
51
  #include <string>
52
+ #include <string_view>
52
53
  #include <type_traits>
53
54
 
54
55
  #include "absl/base/config.h"
@@ -58,10 +59,6 @@
58
59
  #include "absl/strings/cord.h"
59
60
  #include "absl/strings/string_view.h"
60
61
 
61
- #ifdef ABSL_HAVE_STD_STRING_VIEW
62
- #include <string_view>
63
- #endif
64
-
65
62
  namespace absl {
66
63
  ABSL_NAMESPACE_BEGIN
67
64
  namespace container_internal {
@@ -82,6 +79,18 @@ struct StringHash {
82
79
  size_t operator()(const absl::Cord& v) const {
83
80
  return absl::Hash<absl::Cord>{}(v);
84
81
  }
82
+
83
+ private:
84
+ friend struct absl::hash_internal::HashWithSeed;
85
+
86
+ size_t hash_with_seed(absl::string_view v, size_t seed) const {
87
+ return absl::hash_internal::HashWithSeed().hash(
88
+ absl::Hash<absl::string_view>{}, v, seed);
89
+ }
90
+ size_t hash_with_seed(const absl::Cord& v, size_t seed) const {
91
+ return absl::hash_internal::HashWithSeed().hash(absl::Hash<absl::Cord>{}, v,
92
+ seed);
93
+ }
85
94
  };
86
95
 
87
96
  struct StringEq {
@@ -113,8 +122,6 @@ struct HashEq<absl::string_view> : StringHashEq {};
113
122
  template <>
114
123
  struct HashEq<absl::Cord> : StringHashEq {};
115
124
 
116
- #ifdef ABSL_HAVE_STD_STRING_VIEW
117
-
118
125
  template <typename TChar>
119
126
  struct BasicStringHash {
120
127
  using is_transparent = void;
@@ -153,8 +160,6 @@ struct HashEq<std::u32string> : BasicStringHashEq<char32_t> {};
153
160
  template <>
154
161
  struct HashEq<std::u32string_view> : BasicStringHashEq<char32_t> {};
155
162
 
156
- #endif // ABSL_HAVE_STD_STRING_VIEW
157
-
158
163
  // Supports heterogeneous lookup for pointers and smart pointers.
159
164
  template <class T>
160
165
  struct HashEq<T*> {
@@ -16,6 +16,7 @@
16
16
 
17
17
  #include <cstddef>
18
18
  #include <functional>
19
+ #include <string_view>
19
20
  #include <type_traits>
20
21
  #include <utility>
21
22
 
@@ -28,10 +29,6 @@
28
29
  #include "absl/strings/cord_test_helpers.h"
29
30
  #include "absl/strings/string_view.h"
30
31
 
31
- #ifdef ABSL_HAVE_STD_STRING_VIEW
32
- #include <string_view>
33
- #endif
34
-
35
32
  namespace absl {
36
33
  ABSL_NAMESPACE_BEGIN
37
34
  namespace container_internal {
@@ -118,9 +115,6 @@ TYPED_TEST(HashString, Works) {
118
115
  }
119
116
 
120
117
  TEST(BasicStringViewTest, WStringEqWorks) {
121
- #ifndef ABSL_HAVE_STD_STRING_VIEW
122
- GTEST_SKIP();
123
- #else
124
118
  hash_default_eq<std::wstring> eq;
125
119
  EXPECT_TRUE(eq(L"a", L"a"));
126
120
  EXPECT_TRUE(eq(L"a", std::wstring_view(L"a")));
@@ -128,13 +122,9 @@ TEST(BasicStringViewTest, WStringEqWorks) {
128
122
  EXPECT_FALSE(eq(L"a", L"b"));
129
123
  EXPECT_FALSE(eq(L"a", std::wstring_view(L"b")));
130
124
  EXPECT_FALSE(eq(L"a", std::wstring(L"b")));
131
- #endif
132
125
  }
133
126
 
134
127
  TEST(BasicStringViewTest, WStringViewEqWorks) {
135
- #ifndef ABSL_HAVE_STD_STRING_VIEW
136
- GTEST_SKIP();
137
- #else
138
128
  hash_default_eq<std::wstring_view> eq;
139
129
  EXPECT_TRUE(eq(L"a", L"a"));
140
130
  EXPECT_TRUE(eq(L"a", std::wstring_view(L"a")));
@@ -142,13 +132,9 @@ TEST(BasicStringViewTest, WStringViewEqWorks) {
142
132
  EXPECT_FALSE(eq(L"a", L"b"));
143
133
  EXPECT_FALSE(eq(L"a", std::wstring_view(L"b")));
144
134
  EXPECT_FALSE(eq(L"a", std::wstring(L"b")));
145
- #endif
146
135
  }
147
136
 
148
137
  TEST(BasicStringViewTest, U16StringEqWorks) {
149
- #ifndef ABSL_HAVE_STD_STRING_VIEW
150
- GTEST_SKIP();
151
- #else
152
138
  hash_default_eq<std::u16string> eq;
153
139
  EXPECT_TRUE(eq(u"a", u"a"));
154
140
  EXPECT_TRUE(eq(u"a", std::u16string_view(u"a")));
@@ -156,13 +142,9 @@ TEST(BasicStringViewTest, U16StringEqWorks) {
156
142
  EXPECT_FALSE(eq(u"a", u"b"));
157
143
  EXPECT_FALSE(eq(u"a", std::u16string_view(u"b")));
158
144
  EXPECT_FALSE(eq(u"a", std::u16string(u"b")));
159
- #endif
160
145
  }
161
146
 
162
147
  TEST(BasicStringViewTest, U16StringViewEqWorks) {
163
- #ifndef ABSL_HAVE_STD_STRING_VIEW
164
- GTEST_SKIP();
165
- #else
166
148
  hash_default_eq<std::u16string_view> eq;
167
149
  EXPECT_TRUE(eq(u"a", u"a"));
168
150
  EXPECT_TRUE(eq(u"a", std::u16string_view(u"a")));
@@ -170,13 +152,9 @@ TEST(BasicStringViewTest, U16StringViewEqWorks) {
170
152
  EXPECT_FALSE(eq(u"a", u"b"));
171
153
  EXPECT_FALSE(eq(u"a", std::u16string_view(u"b")));
172
154
  EXPECT_FALSE(eq(u"a", std::u16string(u"b")));
173
- #endif
174
155
  }
175
156
 
176
157
  TEST(BasicStringViewTest, U32StringEqWorks) {
177
- #ifndef ABSL_HAVE_STD_STRING_VIEW
178
- GTEST_SKIP();
179
- #else
180
158
  hash_default_eq<std::u32string> eq;
181
159
  EXPECT_TRUE(eq(U"a", U"a"));
182
160
  EXPECT_TRUE(eq(U"a", std::u32string_view(U"a")));
@@ -184,13 +162,9 @@ TEST(BasicStringViewTest, U32StringEqWorks) {
184
162
  EXPECT_FALSE(eq(U"a", U"b"));
185
163
  EXPECT_FALSE(eq(U"a", std::u32string_view(U"b")));
186
164
  EXPECT_FALSE(eq(U"a", std::u32string(U"b")));
187
- #endif
188
165
  }
189
166
 
190
167
  TEST(BasicStringViewTest, U32StringViewEqWorks) {
191
- #ifndef ABSL_HAVE_STD_STRING_VIEW
192
- GTEST_SKIP();
193
- #else
194
168
  hash_default_eq<std::u32string_view> eq;
195
169
  EXPECT_TRUE(eq(U"a", U"a"));
196
170
  EXPECT_TRUE(eq(U"a", std::u32string_view(U"a")));
@@ -198,85 +172,60 @@ TEST(BasicStringViewTest, U32StringViewEqWorks) {
198
172
  EXPECT_FALSE(eq(U"a", U"b"));
199
173
  EXPECT_FALSE(eq(U"a", std::u32string_view(U"b")));
200
174
  EXPECT_FALSE(eq(U"a", std::u32string(U"b")));
201
- #endif
202
175
  }
203
176
 
204
177
  TEST(BasicStringViewTest, WStringHashWorks) {
205
- #ifndef ABSL_HAVE_STD_STRING_VIEW
206
- GTEST_SKIP();
207
- #else
208
178
  hash_default_hash<std::wstring> hash;
209
179
  auto h = hash(L"a");
210
180
  EXPECT_EQ(h, hash(std::wstring_view(L"a")));
211
181
  EXPECT_EQ(h, hash(std::wstring(L"a")));
212
182
  EXPECT_NE(h, hash(std::wstring_view(L"b")));
213
183
  EXPECT_NE(h, hash(std::wstring(L"b")));
214
- #endif
215
184
  }
216
185
 
217
186
  TEST(BasicStringViewTest, WStringViewHashWorks) {
218
- #ifndef ABSL_HAVE_STD_STRING_VIEW
219
- GTEST_SKIP();
220
- #else
221
187
  hash_default_hash<std::wstring_view> hash;
222
188
  auto h = hash(L"a");
223
189
  EXPECT_EQ(h, hash(std::wstring_view(L"a")));
224
190
  EXPECT_EQ(h, hash(std::wstring(L"a")));
225
191
  EXPECT_NE(h, hash(std::wstring_view(L"b")));
226
192
  EXPECT_NE(h, hash(std::wstring(L"b")));
227
- #endif
228
193
  }
229
194
 
230
195
  TEST(BasicStringViewTest, U16StringHashWorks) {
231
- #ifndef ABSL_HAVE_STD_STRING_VIEW
232
- GTEST_SKIP();
233
- #else
234
196
  hash_default_hash<std::u16string> hash;
235
197
  auto h = hash(u"a");
236
198
  EXPECT_EQ(h, hash(std::u16string_view(u"a")));
237
199
  EXPECT_EQ(h, hash(std::u16string(u"a")));
238
200
  EXPECT_NE(h, hash(std::u16string_view(u"b")));
239
201
  EXPECT_NE(h, hash(std::u16string(u"b")));
240
- #endif
241
202
  }
242
203
 
243
204
  TEST(BasicStringViewTest, U16StringViewHashWorks) {
244
- #ifndef ABSL_HAVE_STD_STRING_VIEW
245
- GTEST_SKIP();
246
- #else
247
205
  hash_default_hash<std::u16string_view> hash;
248
206
  auto h = hash(u"a");
249
207
  EXPECT_EQ(h, hash(std::u16string_view(u"a")));
250
208
  EXPECT_EQ(h, hash(std::u16string(u"a")));
251
209
  EXPECT_NE(h, hash(std::u16string_view(u"b")));
252
210
  EXPECT_NE(h, hash(std::u16string(u"b")));
253
- #endif
254
211
  }
255
212
 
256
213
  TEST(BasicStringViewTest, U32StringHashWorks) {
257
- #ifndef ABSL_HAVE_STD_STRING_VIEW
258
- GTEST_SKIP();
259
- #else
260
214
  hash_default_hash<std::u32string> hash;
261
215
  auto h = hash(U"a");
262
216
  EXPECT_EQ(h, hash(std::u32string_view(U"a")));
263
217
  EXPECT_EQ(h, hash(std::u32string(U"a")));
264
218
  EXPECT_NE(h, hash(std::u32string_view(U"b")));
265
219
  EXPECT_NE(h, hash(std::u32string(U"b")));
266
- #endif
267
220
  }
268
221
 
269
222
  TEST(BasicStringViewTest, U32StringViewHashWorks) {
270
- #ifndef ABSL_HAVE_STD_STRING_VIEW
271
- GTEST_SKIP();
272
- #else
273
223
  hash_default_hash<std::u32string_view> hash;
274
224
  auto h = hash(U"a");
275
225
  EXPECT_EQ(h, hash(std::u32string_view(U"a")));
276
226
  EXPECT_EQ(h, hash(std::u32string(U"a")));
277
227
  EXPECT_NE(h, hash(std::u32string_view(U"b")));
278
228
  EXPECT_NE(h, hash(std::u32string(U"b")));
279
- #endif
280
229
  }
281
230
 
282
231
  struct NoDeleter {
@@ -14,61 +14,39 @@
14
14
 
15
15
  #include "absl/container/internal/hash_generator_testing.h"
16
16
 
17
+ #include <algorithm>
17
18
  #include <deque>
19
+ #include <random>
20
+ #include <string>
18
21
 
19
22
  #include "absl/base/no_destructor.h"
23
+ #include "absl/random/random.h"
24
+ #include "absl/strings/string_view.h"
20
25
 
21
26
  namespace absl {
22
27
  ABSL_NAMESPACE_BEGIN
23
28
  namespace container_internal {
24
29
  namespace hash_internal {
25
- namespace {
26
-
27
- class RandomDeviceSeedSeq {
28
- public:
29
- using result_type = typename std::random_device::result_type;
30
-
31
- template <class Iterator>
32
- void generate(Iterator start, Iterator end) {
33
- while (start != end) {
34
- *start = gen_();
35
- ++start;
36
- }
37
- }
38
-
39
- private:
40
- std::random_device gen_;
41
- };
42
-
43
- } // namespace
44
-
45
- std::mt19937_64* GetSharedRng() {
46
- static absl::NoDestructor<std::mt19937_64> rng([] {
47
- RandomDeviceSeedSeq seed_seq;
48
- return std::mt19937_64(seed_seq);
49
- }());
50
- return rng.get();
51
- }
52
30
 
53
31
  std::string Generator<std::string>::operator()() const {
32
+ absl::InsecureBitGen gen;
54
33
  // NOLINTNEXTLINE(runtime/int)
55
34
  std::uniform_int_distribution<short> chars(0x20, 0x7E);
56
35
  std::string res;
57
36
  res.resize(32);
58
- std::generate(res.begin(), res.end(),
59
- [&]() { return chars(*GetSharedRng()); });
37
+ std::generate(res.begin(), res.end(), [&]() { return chars(gen); });
60
38
  return res;
61
39
  }
62
40
 
63
41
  absl::string_view Generator<absl::string_view>::operator()() const {
64
42
  static absl::NoDestructor<std::deque<std::string>> arena;
43
+ absl::InsecureBitGen gen;
65
44
  // NOLINTNEXTLINE(runtime/int)
66
45
  std::uniform_int_distribution<short> chars(0x20, 0x7E);
67
46
  arena->emplace_back();
68
47
  auto& res = arena->back();
69
48
  res.resize(32);
70
- std::generate(res.begin(), res.end(),
71
- [&]() { return chars(*GetSharedRng()); });
49
+ std::generate(res.begin(), res.end(), [&]() { return chars(gen); });
72
50
  return res;
73
51
  }
74
52