re2 1.24.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/LICENSE +15 -20
  2. package/README.md +63 -4
  3. package/binding.gyp +1 -2
  4. package/lib/addon.cc +9 -5
  5. package/lib/exec.cc +4 -4
  6. package/lib/match.cc +4 -4
  7. package/lib/new.cc +6 -6
  8. package/lib/pattern.cc +148 -1
  9. package/lib/replace.cc +5 -4
  10. package/lib/search.cc +1 -1
  11. package/lib/set.cc +85 -10
  12. package/lib/test.cc +1 -1
  13. package/lib/unicode_properties.h +15840 -0
  14. package/lib/wrapped_re2.h +40 -4
  15. package/lib/wrapped_re2_set.h +3 -1
  16. package/llms-full.txt +497 -0
  17. package/llms.txt +135 -0
  18. package/package.json +19 -11
  19. package/re2.d.ts +2 -0
  20. package/re2.js +1 -0
  21. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
  22. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  23. package/vendor/abseil-cpp/FAQ.md +130 -79
  24. package/vendor/abseil-cpp/MODULE.bazel +6 -7
  25. package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
  26. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
  27. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
  28. package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  29. package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
  30. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
  31. package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
  32. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
  33. package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
  34. package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
  35. package/vendor/abseil-cpp/absl/base/casts.h +8 -1
  36. package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
  37. package/vendor/abseil-cpp/absl/base/config.h +53 -9
  38. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
  39. package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
  40. package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
  41. package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
  42. package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
  43. package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
  44. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
  45. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
  46. package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  47. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
  48. package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  49. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  50. package/vendor/abseil-cpp/absl/base/macros.h +36 -20
  51. package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
  52. package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
  53. package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
  54. package/vendor/abseil-cpp/absl/base/options.h +55 -1
  55. package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
  56. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  57. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  58. package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
  59. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
  60. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
  61. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
  62. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  63. package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
  64. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
  65. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
  68. package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
  69. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
  70. package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
  71. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
  72. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
  73. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
  74. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
  75. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
  76. package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
  77. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
  78. package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
  79. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
  80. package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
  81. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  82. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
  83. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
  84. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
  87. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
  88. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
  89. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
  90. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
  91. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
  92. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
  93. package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
  94. package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
  95. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
  96. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
  97. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
  101. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
  102. package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
  103. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
  104. package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
  105. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
  106. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
  107. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
  108. package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
  109. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
  110. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
  111. package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  112. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  113. package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  114. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
  115. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
  116. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
  117. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  118. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
  119. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
  120. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
  121. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
  122. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
  123. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  124. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
  125. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
  126. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
  127. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
  128. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
  129. package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  130. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
  131. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
  132. package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  133. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
  134. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
  135. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  136. package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
  137. package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
  138. package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
  139. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
  140. package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
  141. package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
  142. package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
  143. package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
  144. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
  145. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
  146. package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
  147. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
  148. package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
  149. package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
  150. package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
  151. package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
  152. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
  153. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
  154. package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
  155. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  156. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  157. package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
  158. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
  159. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
  160. package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
  161. package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
  162. package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
  163. package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
  164. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
  165. package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
  166. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
  167. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
  168. package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
  169. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
  170. package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  171. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
  172. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
  173. package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
  174. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  175. package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
  176. package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  177. package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  178. package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
  179. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
  180. package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
  181. package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
  182. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
  183. package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
  184. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
  185. package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
  186. package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  187. package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
  188. package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
  189. package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
  190. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  191. package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
  192. package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
  193. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
  194. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
  195. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
  196. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
  197. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
  198. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
  199. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
  200. package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
  201. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
  202. package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
  203. package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
  204. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  205. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
  206. package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  207. package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
  208. package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
  209. package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  210. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
  211. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  212. package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  213. package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  214. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  215. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
  216. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
  217. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  218. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
  219. package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  220. package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
  221. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  222. package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  223. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
  224. package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
  225. package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  226. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
  227. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  228. package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
  229. package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
  230. package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  231. package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
  232. package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
  233. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
  234. package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  235. package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
  236. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
  237. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  238. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
  239. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
  240. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
  241. package/vendor/abseil-cpp/absl/status/status.cc +62 -70
  242. package/vendor/abseil-cpp/absl/status/status.h +249 -23
  243. package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
  244. package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
  245. package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
  246. package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
  247. package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
  248. package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
  249. package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
  250. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
  251. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  252. package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
  253. package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
  254. package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
  255. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
  256. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
  257. package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
  258. package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
  259. package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
  260. package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
  261. package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  262. package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
  263. package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
  264. package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
  265. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
  266. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
  267. package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
  268. package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
  269. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
  270. package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
  271. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  272. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  273. package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  274. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
  275. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
  276. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
  277. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
  278. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
  279. package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  280. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  281. package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  282. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
  283. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
  284. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
  285. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
  286. package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
  287. package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  288. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
  289. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
  290. package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
  291. package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
  292. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
  293. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
  294. package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
  295. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
  296. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
  297. package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
  298. package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
  299. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
  300. package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
  301. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
  302. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
  303. package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  304. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
  305. package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
  306. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
  307. package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
  308. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
  309. package/vendor/abseil-cpp/absl/time/clock.h +3 -0
  310. package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
  311. package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
  312. package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
  313. package/vendor/abseil-cpp/absl/time/format.cc +3 -10
  314. package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
  315. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
  316. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
  317. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
  318. package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  319. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  320. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
  321. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  322. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
  323. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
  324. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
  325. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
  326. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
  327. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
  328. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
  329. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
  330. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
  331. package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
  332. package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
  333. package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
  334. package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
  335. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
  336. package/vendor/abseil-cpp/absl/types/any.h +26 -4
  337. package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
  338. package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
  339. package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
  340. package/vendor/abseil-cpp/absl/types/compare.h +4 -4
  341. package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
  342. package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
  343. package/vendor/abseil-cpp/absl/types/optional.h +30 -3
  344. package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
  345. package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
  346. package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
  347. package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
  348. package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
  349. package/vendor/abseil-cpp/absl/types/span.h +19 -23
  350. package/vendor/abseil-cpp/absl/types/variant.h +75 -18
  351. package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
  352. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
  353. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
  354. package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
  355. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
  356. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
  357. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
  358. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
  359. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
  360. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
  361. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  362. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
  363. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
  364. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
  365. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
  366. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
  367. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
  368. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
  369. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
  370. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
@@ -107,6 +107,7 @@
107
107
 
108
108
  #include "absl/base/attributes.h"
109
109
  #include "absl/base/config.h"
110
+ #include "absl/base/internal/hardening.h"
110
111
  #include "absl/base/internal/iterator_traits.h"
111
112
  #include "absl/base/macros.h"
112
113
  #include "absl/container/internal/chunked_queue.h"
@@ -428,22 +429,22 @@ class chunked_queue {
428
429
  // Returns a reference to the first element in the container.
429
430
  // REQUIRES: !empty()
430
431
  T& front() {
431
- ABSL_HARDENING_ASSERT(!empty());
432
+ absl::base_internal::HardeningAssertNonEmpty(*this);
432
433
  return *head_;
433
434
  }
434
435
  const T& front() const {
435
- ABSL_HARDENING_ASSERT(!empty());
436
+ absl::base_internal::HardeningAssertNonEmpty(*this);
436
437
  return *head_;
437
438
  }
438
439
 
439
440
  // Returns a reference to the last element in the container.
440
441
  // REQUIRES: !empty()
441
442
  T& back() {
442
- ABSL_HARDENING_ASSERT(!empty());
443
+ absl::base_internal::HardeningAssertNonEmpty(*this);
443
444
  return *(&*tail_ - 1);
444
445
  }
445
446
  const T& back() const {
446
- ABSL_HARDENING_ASSERT(!empty());
447
+ absl::base_internal::HardeningAssertNonEmpty(*this);
447
448
  return *(&*tail_ - 1);
448
449
  }
449
450
 
@@ -460,7 +461,8 @@ class chunked_queue {
460
461
  // (It is undefined behavior to swap between two containers with unequal
461
462
  // allocators if propagate_on_container_swap is false, so we don't have to
462
463
  // handle that here like we do in the move-assignment operator.)
463
- ABSL_HARDENING_ASSERT(get_allocator() == other.get_allocator());
464
+ absl::base_internal::HardeningAssert(get_allocator() ==
465
+ other.get_allocator());
464
466
  swap(alloc_and_size_.size, other.alloc_and_size_.size);
465
467
  }
466
468
  }
@@ -709,7 +711,7 @@ inline void chunked_queue<T, BLo, BHi, Allocator>::DestroyAndDeallocateAll() {
709
711
 
710
712
  template <typename T, size_t BLo, size_t BHi, typename Allocator>
711
713
  inline void chunked_queue<T, BLo, BHi, Allocator>::pop_front() {
712
- ABSL_HARDENING_ASSERT(!empty());
714
+ absl::base_internal::HardeningAssertNonEmpty(*this);
713
715
  ABSL_ASSERT(head_.block);
714
716
  AllocatorTraits::destroy(alloc_and_size_.allocator(), head_.ptr);
715
717
  ++head_.ptr;
@@ -756,13 +756,13 @@ TEST(ChunkedQueue, Hardening) {
756
756
  }
757
757
 
758
758
  absl::chunked_queue<int> q;
759
- EXPECT_DEATH(q.front(), "");
760
- EXPECT_DEATH(q.back(), "");
761
- EXPECT_DEATH(q.pop_front(), "");
759
+ EXPECT_DEATH_IF_SUPPORTED(q.front(), "");
760
+ EXPECT_DEATH_IF_SUPPORTED(q.back(), "");
761
+ EXPECT_DEATH_IF_SUPPORTED(q.pop_front(), "");
762
762
 
763
763
  const absl::chunked_queue<int> cq;
764
- EXPECT_DEATH(cq.front(), "");
765
- EXPECT_DEATH(cq.back(), "");
764
+ EXPECT_DEATH_IF_SUPPORTED(cq.front(), "");
765
+ EXPECT_DEATH_IF_SUPPORTED(cq.back(), "");
766
766
  }
767
767
 
768
768
  } // namespace
@@ -44,11 +44,12 @@
44
44
  #include "absl/base/attributes.h"
45
45
  #include "absl/base/config.h"
46
46
  #include "absl/base/dynamic_annotations.h"
47
+ #include "absl/base/internal/hardening.h"
47
48
  #include "absl/base/internal/iterator_traits.h"
48
- #include "absl/base/internal/throw_delegate.h"
49
49
  #include "absl/base/macros.h"
50
50
  #include "absl/base/optimization.h"
51
51
  #include "absl/base/port.h"
52
+ #include "absl/base/throw_delegate.h"
52
53
  #include "absl/container/internal/compressed_tuple.h"
53
54
  #include "absl/hash/internal/weakly_mixed_integer.h"
54
55
  #include "absl/memory/memory.h"
@@ -96,7 +97,7 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
96
97
  absl::allocator_is_nothrow<allocator_type>::value;
97
98
  }
98
99
  static constexpr bool DefaultConstructorIsNonTrivial() {
99
- return !absl::is_trivially_default_constructible<StorageElement>::value;
100
+ return !std::is_trivially_default_constructible<StorageElement>::value;
100
101
  }
101
102
 
102
103
  public:
@@ -222,7 +223,7 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
222
223
  // Returns a reference the ith element of the fixed array.
223
224
  // REQUIRES: 0 <= i < size()
224
225
  reference operator[](size_type i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
225
- ABSL_HARDENING_ASSERT(i < size());
226
+ absl::base_internal::HardeningAssertLT(i, size());
226
227
  return data()[i];
227
228
  }
228
229
 
@@ -230,7 +231,7 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
230
231
  // ith element of the fixed array.
231
232
  // REQUIRES: 0 <= i < size()
232
233
  const_reference operator[](size_type i) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
233
- ABSL_HARDENING_ASSERT(i < size());
234
+ absl::base_internal::HardeningAssertLT(i, size());
234
235
  return data()[i];
235
236
  }
236
237
 
@@ -240,7 +241,7 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
240
241
  // array, or throws std::out_of_range
241
242
  reference at(size_type i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
242
243
  if (ABSL_PREDICT_FALSE(i >= size())) {
243
- base_internal::ThrowStdOutOfRange("FixedArray::at failed bounds check");
244
+ ThrowStdOutOfRange("FixedArray::at failed bounds check");
244
245
  }
245
246
  return data()[i];
246
247
  }
@@ -249,7 +250,7 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
249
250
  // of the fixed array.
250
251
  const_reference at(size_type i) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
251
252
  if (ABSL_PREDICT_FALSE(i >= size())) {
252
- base_internal::ThrowStdOutOfRange("FixedArray::at failed bounds check");
253
+ ThrowStdOutOfRange("FixedArray::at failed bounds check");
253
254
  }
254
255
  return data()[i];
255
256
  }
@@ -258,14 +259,14 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
258
259
  //
259
260
  // Returns a reference to the first element of the fixed array.
260
261
  reference front() ABSL_ATTRIBUTE_LIFETIME_BOUND {
261
- ABSL_HARDENING_ASSERT(!empty());
262
+ absl::base_internal::HardeningAssertNonEmpty(*this);
262
263
  return data()[0];
263
264
  }
264
265
 
265
266
  // Overload of FixedArray::front() to return a reference to the first element
266
267
  // of a fixed array of const values.
267
268
  const_reference front() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
268
- ABSL_HARDENING_ASSERT(!empty());
269
+ absl::base_internal::HardeningAssertNonEmpty(*this);
269
270
  return data()[0];
270
271
  }
271
272
 
@@ -273,14 +274,14 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
273
274
  //
274
275
  // Returns a reference to the last element of the fixed array.
275
276
  reference back() ABSL_ATTRIBUTE_LIFETIME_BOUND {
276
- ABSL_HARDENING_ASSERT(!empty());
277
+ absl::base_internal::HardeningAssertNonEmpty(*this);
277
278
  return data()[size() - 1];
278
279
  }
279
280
 
280
281
  // Overload of FixedArray::back() to return a reference to the last element
281
282
  // of a fixed array of const values.
282
283
  const_reference back() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
283
- ABSL_HARDENING_ASSERT(!empty());
284
+ absl::base_internal::HardeningAssertNonEmpty(*this);
284
285
  return data()[size() - 1];
285
286
  }
286
287
 
@@ -414,14 +415,14 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
414
415
  // error: call to int __builtin___sprintf_chk(etc...)
415
416
  // will always overflow destination buffer [-Werror]
416
417
  //
417
- template <typename OuterT, typename InnerT = absl::remove_extent_t<OuterT>,
418
+ template <typename OuterT, typename InnerT = std::remove_extent_t<OuterT>,
418
419
  size_t InnerN = std::extent<OuterT>::value>
419
420
  struct StorageElementWrapper {
420
421
  InnerT array[InnerN];
421
422
  };
422
423
 
423
424
  using StorageElement =
424
- absl::conditional_t<std::is_array<value_type>::value,
425
+ std::conditional_t<std::is_array<value_type>::value,
425
426
  StorageElementWrapper<value_type>, value_type>;
426
427
 
427
428
  static pointer AsValueType(pointer ptr) { return ptr; }
@@ -458,7 +459,7 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
458
459
  };
459
460
 
460
461
  using InlinedStorage =
461
- absl::conditional_t<inline_elements == 0, EmptyInlinedStorage,
462
+ std::conditional_t<inline_elements == 0, EmptyInlinedStorage,
462
463
  NonEmptyInlinedStorage>;
463
464
 
464
465
  // Storage
@@ -112,7 +112,7 @@ TEST(FixedArrayTest, CopyCtor) {
112
112
  TEST(FixedArrayTest, MoveCtor) {
113
113
  absl::FixedArray<std::unique_ptr<int>, 10> on_stack(5);
114
114
  for (int i = 0; i < 5; ++i) {
115
- on_stack[i] = absl::make_unique<int>(i);
115
+ on_stack[i] = std::make_unique<int>(i);
116
116
  }
117
117
 
118
118
  absl::FixedArray<std::unique_ptr<int>, 10> stack_copy = std::move(on_stack);
@@ -121,7 +121,7 @@ TEST(FixedArrayTest, MoveCtor) {
121
121
 
122
122
  absl::FixedArray<std::unique_ptr<int>, 10> allocated(15);
123
123
  for (int i = 0; i < 15; ++i) {
124
- allocated[i] = absl::make_unique<int>(i);
124
+ allocated[i] = std::make_unique<int>(i);
125
125
  }
126
126
 
127
127
  absl::FixedArray<std::unique_ptr<int>, 10> alloced_copy =
@@ -307,7 +307,7 @@ static void TestArrayOfArrays(int n) {
307
307
  using InnerArray = ConstructionTester[elements_per_inner_array];
308
308
  // Heap-allocate the FixedArray to avoid blowing the stack frame.
309
309
  auto array_ptr =
310
- absl::make_unique<absl::FixedArray<InnerArray, inline_elements>>(n);
310
+ std::make_unique<absl::FixedArray<InnerArray, inline_elements>>(n);
311
311
  auto& array = *array_ptr;
312
312
 
313
313
  ASSERT_EQ(array.size(), n);
@@ -171,16 +171,28 @@ class ABSL_ATTRIBUTE_OWNER flat_hash_map
171
171
  // // Move is guaranteed efficient
172
172
  // absl::flat_hash_map<int, std::string> map5(std::move(map4));
173
173
  //
174
+ // // After the move, map4 is in a valid but unspecified state. The only
175
+ // // operations guaranteed to be safe on a moved-from map are destruction,
176
+ // // assignment, and clear(). Any other operation (e.g. size(), empty(),
177
+ // // iteration) results in undefined behavior.
178
+ //
174
179
  // * Move assignment operator
175
180
  //
176
181
  // // May be efficient if allocators are compatible
177
182
  // absl::flat_hash_map<int, std::string> map6;
178
183
  // map6 = std::move(map5);
179
184
  //
185
+ // // Same moved-from guarantees apply to map5 after this operation.
186
+ //
180
187
  // * Range constructor
181
188
  //
182
189
  // std::vector<std::pair<int, std::string>> v = {{1, "a"}, {2, "b"}};
183
190
  // absl::flat_hash_map<int, std::string> map7(v.begin(), v.end());
191
+ //
192
+ // * from_range constructor (C++23)
193
+ //
194
+ // std::vector<std::pair<int, std::string>> v = {{1, "a"}, {2, "b"}};
195
+ // absl::flat_hash_map<int, std::string> map8(std::from_range, v);
184
196
  flat_hash_map() {}
185
197
  using Base::Base;
186
198
 
@@ -609,22 +621,22 @@ namespace container_internal {
609
621
  // Erasure and/or insertion of elements in the function is not allowed.
610
622
  template <typename K, typename V, typename H, typename E, typename A,
611
623
  typename Function>
612
- decay_t<Function> c_for_each_fast(const flat_hash_map<K, V, H, E, A>& c,
613
- Function&& f) {
624
+ std::decay_t<Function> c_for_each_fast(const flat_hash_map<K, V, H, E, A>& c,
625
+ Function&& f) {
614
626
  container_internal::ForEach(f, &c);
615
627
  return f;
616
628
  }
617
629
  template <typename K, typename V, typename H, typename E, typename A,
618
630
  typename Function>
619
- decay_t<Function> c_for_each_fast(flat_hash_map<K, V, H, E, A>& c,
620
- Function&& f) {
631
+ std::decay_t<Function> c_for_each_fast(flat_hash_map<K, V, H, E, A>& c,
632
+ Function&& f) {
621
633
  container_internal::ForEach(f, &c);
622
634
  return f;
623
635
  }
624
636
  template <typename K, typename V, typename H, typename E, typename A,
625
637
  typename Function>
626
- decay_t<Function> c_for_each_fast(flat_hash_map<K, V, H, E, A>&& c,
627
- Function&& f) {
638
+ std::decay_t<Function> c_for_each_fast(flat_hash_map<K, V, H, E, A>&& c,
639
+ Function&& f) {
628
640
  container_internal::ForEach(f, &c);
629
641
  return f;
630
642
  }
@@ -33,7 +33,10 @@
33
33
  #include "absl/container/internal/unordered_map_modifiers_test.h"
34
34
  #include "absl/log/check.h"
35
35
  #include "absl/meta/type_traits.h"
36
- #include "absl/types/any.h"
36
+
37
+ #if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
38
+ #include <ranges> // NOLINT(build/c++20)
39
+ #endif
37
40
 
38
41
  namespace absl {
39
42
  ABSL_NAMESPACE_BEGIN
@@ -445,6 +448,36 @@ TEST(Iterator, InconsistentHashEqFunctorsValidation) {
445
448
  EXPECT_DEATH_IF_SUPPORTED(insert_conflicting_elems(), crash_message);
446
449
  }
447
450
 
451
+ #if defined(__cpp_lib_containers_ranges) && \
452
+ __cpp_lib_containers_ranges >= 202202L
453
+ TEST(FlatHashMap, FromRange) {
454
+ std::vector<std::pair<int, int>> v = {{1, 2}, {3, 4}, {5, 6}};
455
+ absl::flat_hash_map<int, int> m(std::from_range, v);
456
+ EXPECT_THAT(m, UnorderedElementsAre(Pair(1, 2), Pair(3, 4), Pair(5, 6)));
457
+ }
458
+
459
+ TEST(FlatHashMap, FromRangeWithAllocator) {
460
+ std::vector<std::pair<int, int>> v = {{1, 2}, {3, 4}, {5, 6}};
461
+ absl::flat_hash_map<int, int,
462
+ absl::container_internal::hash_default_hash<int>,
463
+ absl::container_internal::hash_default_eq<int>,
464
+ Alloc<std::pair<const int, int>>>
465
+ m(std::from_range, v, 0, Alloc<std::pair<const int, int>>());
466
+ EXPECT_THAT(m, UnorderedElementsAre(Pair(1, 2), Pair(3, 4), Pair(5, 6)));
467
+ }
468
+
469
+ TEST(FlatHashMap, FromRangeWithHasherAndAllocator) {
470
+ std::vector<std::pair<int, int>> v = {{1, 2}, {3, 4}, {5, 6}};
471
+ using TestingHash = absl::container_internal::StatefulTestingHash;
472
+ absl::flat_hash_map<int, int, TestingHash,
473
+ absl::container_internal::hash_default_eq<int>,
474
+ Alloc<std::pair<const int, int>>>
475
+ m(std::from_range, v, 0, TestingHash{},
476
+ Alloc<std::pair<const int, int>>());
477
+ EXPECT_THAT(m, UnorderedElementsAre(Pair(1, 2), Pair(3, 4), Pair(5, 6)));
478
+ }
479
+ #endif
480
+
448
481
  } // namespace
449
482
  } // namespace container_internal
450
483
  ABSL_NAMESPACE_END
@@ -167,16 +167,28 @@ class ABSL_ATTRIBUTE_OWNER flat_hash_set
167
167
  // // Move is guaranteed efficient
168
168
  // absl::flat_hash_set<std::string> set5(std::move(set4));
169
169
  //
170
+ // // After the move, set4 is in a valid but unspecified state. The only
171
+ // // operations guaranteed to be safe on a moved-from set are destruction,
172
+ // // assignment, and clear(). Any other operation (e.g. size(), empty(),
173
+ // // iteration) results in undefined behavior.
174
+ //
170
175
  // * Move assignment operator
171
176
  //
172
177
  // // May be efficient if allocators are compatible
173
178
  // absl::flat_hash_set<std::string> set6;
174
179
  // set6 = std::move(set5);
175
180
  //
181
+ // // Same moved-from guarantees apply to set5 after this operation.
182
+ //
176
183
  // * Range constructor
177
184
  //
178
185
  // std::vector<std::string> v = {"a", "b"};
179
186
  // absl::flat_hash_set<std::string> set7(v.begin(), v.end());
187
+ //
188
+ // * from_range constructor (C++23)
189
+ //
190
+ // std::vector<std::string> v = {"a", "b"};
191
+ // absl::flat_hash_set<std::string> set8(std::from_range, v);
180
192
  flat_hash_set() {}
181
193
  using Base::Base;
182
194
 
@@ -512,18 +524,20 @@ namespace container_internal {
512
524
  // There is no guarantees on the order of the function calls.
513
525
  // Erasure and/or insertion of elements in the function is not allowed.
514
526
  template <typename T, typename H, typename E, typename A, typename Function>
515
- decay_t<Function> c_for_each_fast(const flat_hash_set<T, H, E, A>& c,
516
- Function&& f) {
527
+ std::decay_t<Function> c_for_each_fast(const flat_hash_set<T, H, E, A>& c,
528
+ Function&& f) {
517
529
  container_internal::ForEach(f, &c);
518
530
  return f;
519
531
  }
520
532
  template <typename T, typename H, typename E, typename A, typename Function>
521
- decay_t<Function> c_for_each_fast(flat_hash_set<T, H, E, A>& c, Function&& f) {
533
+ std::decay_t<Function> c_for_each_fast(flat_hash_set<T, H, E, A>& c,
534
+ Function&& f) {
522
535
  container_internal::ForEach(f, &c);
523
536
  return f;
524
537
  }
525
538
  template <typename T, typename H, typename E, typename A, typename Function>
526
- decay_t<Function> c_for_each_fast(flat_hash_set<T, H, E, A>&& c, Function&& f) {
539
+ std::decay_t<Function> c_for_each_fast(flat_hash_set<T, H, E, A>&& c,
540
+ Function&& f) {
527
541
  container_internal::ForEach(f, &c);
528
542
  return f;
529
543
  }
@@ -545,14 +559,14 @@ struct FlatHashSetPolicy {
545
559
 
546
560
  template <class Allocator, class... Args>
547
561
  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
548
- absl::allocator_traits<Allocator>::construct(*alloc, slot,
549
- std::forward<Args>(args)...);
562
+ std::allocator_traits<Allocator>::construct(*alloc, slot,
563
+ std::forward<Args>(args)...);
550
564
  }
551
565
 
552
566
  // Return std::true_type in case destroy is trivial.
553
567
  template <class Allocator>
554
568
  static auto destroy(Allocator* alloc, slot_type* slot) {
555
- absl::allocator_traits<Allocator>::destroy(*alloc, slot);
569
+ std::allocator_traits<Allocator>::destroy(*alloc, slot);
556
570
  return IsDestructionTrivial<Allocator, slot_type>();
557
571
  }
558
572
 
@@ -38,6 +38,10 @@
38
38
  #include "absl/memory/memory.h"
39
39
  #include "absl/strings/string_view.h"
40
40
 
41
+ #if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
42
+ #include <ranges> // NOLINT(build/c++20)
43
+ #endif
44
+
41
45
  namespace absl {
42
46
  ABSL_NAMESPACE_BEGIN
43
47
  namespace container_internal {
@@ -105,11 +109,11 @@ TEST(FlatHashSet, MergeExtractInsert) {
105
109
  }
106
110
  };
107
111
  absl::flat_hash_set<std::unique_ptr<int>, Hash, Eq> set1, set2;
108
- set1.insert(absl::make_unique<int>(7));
109
- set1.insert(absl::make_unique<int>(17));
112
+ set1.insert(std::make_unique<int>(7));
113
+ set1.insert(std::make_unique<int>(17));
110
114
 
111
- set2.insert(absl::make_unique<int>(7));
112
- set2.insert(absl::make_unique<int>(19));
115
+ set2.insert(std::make_unique<int>(7));
116
+ set2.insert(std::make_unique<int>(19));
113
117
 
114
118
  EXPECT_THAT(set1, UnorderedElementsAre(Pointee(7), Pointee(17)));
115
119
  EXPECT_THAT(set2, UnorderedElementsAre(Pointee(7), Pointee(19)));
@@ -119,7 +123,7 @@ TEST(FlatHashSet, MergeExtractInsert) {
119
123
  EXPECT_THAT(set1, UnorderedElementsAre(Pointee(7), Pointee(17), Pointee(19)));
120
124
  EXPECT_THAT(set2, UnorderedElementsAre(Pointee(7)));
121
125
 
122
- auto node = set1.extract(absl::make_unique<int>(7));
126
+ auto node = set1.extract(std::make_unique<int>(7));
123
127
  EXPECT_TRUE(node);
124
128
  EXPECT_THAT(node.value(), Pointee(7));
125
129
  EXPECT_THAT(set1, UnorderedElementsAre(Pointee(17), Pointee(19)));
@@ -133,12 +137,12 @@ TEST(FlatHashSet, MergeExtractInsert) {
133
137
  EXPECT_NE(insert_result.position->get(), insert_result.node.value().get());
134
138
  EXPECT_THAT(set2, UnorderedElementsAre(Pointee(7)));
135
139
 
136
- node = set1.extract(absl::make_unique<int>(17));
140
+ node = set1.extract(std::make_unique<int>(17));
137
141
  EXPECT_TRUE(node);
138
142
  EXPECT_THAT(node.value(), Pointee(17));
139
143
  EXPECT_THAT(set1, UnorderedElementsAre(Pointee(19)));
140
144
 
141
- node.value() = absl::make_unique<int>(23);
145
+ node.value() = std::make_unique<int>(23);
142
146
 
143
147
  insert_result = set2.insert(std::move(node));
144
148
  EXPECT_FALSE(node);
@@ -395,6 +399,34 @@ TEST(FlatHashSet, IsDefaultHash) {
395
399
  false);
396
400
  }
397
401
 
402
+ #if defined(__cpp_lib_containers_ranges) && \
403
+ __cpp_lib_containers_ranges >= 202202L
404
+ TEST(FlatHashSet, FromRange) {
405
+ std::vector<int> v = {1, 2, 3, 4, 5};
406
+ absl::flat_hash_set<int> s(std::from_range, v);
407
+ EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3, 4, 5));
408
+ }
409
+
410
+ TEST(FlatHashSet, FromRangeWithAllocator) {
411
+ std::vector<int> v = {1, 2, 3, 4, 5};
412
+ absl::flat_hash_set<int, absl::container_internal::hash_default_hash<int>,
413
+ absl::container_internal::hash_default_eq<int>,
414
+ Alloc<int>>
415
+ s(std::from_range, v, 0, Alloc<int>());
416
+ EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3, 4, 5));
417
+ }
418
+
419
+ TEST(FlatHashSet, FromRangeWithHasherAndAllocator) {
420
+ std::vector<int> v = {1, 2, 3, 4, 5};
421
+ using TestingHash = absl::container_internal::StatefulTestingHash;
422
+ absl::flat_hash_set<int, TestingHash,
423
+ absl::container_internal::hash_default_eq<int>,
424
+ Alloc<int>>
425
+ s(std::from_range, v, 0, TestingHash{}, Alloc<int>());
426
+ EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3, 4, 5));
427
+ }
428
+ #endif
429
+
398
430
  } // namespace
399
431
  } // namespace container_internal
400
432
  ABSL_NAMESPACE_END