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
@@ -43,8 +43,8 @@
43
43
 
44
44
  #include "absl/base/attributes.h"
45
45
  #include "absl/base/config.h"
46
- #include "absl/base/internal/throw_delegate.h"
47
46
  #include "absl/base/optimization.h"
47
+ #include "absl/base/throw_delegate.h"
48
48
  #include "absl/container/flat_hash_set.h"
49
49
  #include "absl/container/internal/common.h"
50
50
 
@@ -377,7 +377,7 @@ class linked_hash_map {
377
377
  mapped_type& at(const key_arg<K>& key) {
378
378
  auto it = find(key);
379
379
  if (ABSL_PREDICT_FALSE(it == end())) {
380
- absl::base_internal::ThrowStdOutOfRange("absl::linked_hash_map::at");
380
+ ThrowStdOutOfRange("absl::linked_hash_map::at");
381
381
  }
382
382
  return it->second;
383
383
  }
@@ -167,16 +167,28 @@ class ABSL_ATTRIBUTE_OWNER node_hash_map
167
167
  // // Move is guaranteed efficient
168
168
  // absl::node_hash_map<int, std::string> map5(std::move(map4));
169
169
  //
170
+ // // After the move, map4 is in a valid but unspecified state. The only
171
+ // // operations guaranteed to be safe on a moved-from map 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::node_hash_map<int, std::string> map6;
174
179
  // map6 = std::move(map5);
175
180
  //
181
+ // // Same moved-from guarantees apply to map5 after this operation.
182
+ //
176
183
  // * Range constructor
177
184
  //
178
185
  // std::vector<std::pair<int, std::string>> v = {{1, "a"}, {2, "b"}};
179
186
  // absl::node_hash_map<int, std::string> map7(v.begin(), v.end());
187
+ //
188
+ // * from_range constructor (C++23)
189
+ //
190
+ // std::vector<std::pair<int, std::string>> v = {{1, "a"}, {2, "b"}};
191
+ // absl::node_hash_map<int, std::string> map8(std::from_range, v);
180
192
  node_hash_map() {}
181
193
  using Base::Base;
182
194
 
@@ -599,22 +611,22 @@ namespace container_internal {
599
611
  // Erasure and/or insertion of elements in the function is not allowed.
600
612
  template <typename K, typename V, typename H, typename E, typename A,
601
613
  typename Function>
602
- decay_t<Function> c_for_each_fast(const node_hash_map<K, V, H, E, A>& c,
603
- Function&& f) {
614
+ std::decay_t<Function> c_for_each_fast(const node_hash_map<K, V, H, E, A>& c,
615
+ Function&& f) {
604
616
  container_internal::ForEach(f, &c);
605
617
  return f;
606
618
  }
607
619
  template <typename K, typename V, typename H, typename E, typename A,
608
620
  typename Function>
609
- decay_t<Function> c_for_each_fast(node_hash_map<K, V, H, E, A>& c,
610
- Function&& f) {
621
+ std::decay_t<Function> c_for_each_fast(node_hash_map<K, V, H, E, A>& c,
622
+ Function&& f) {
611
623
  container_internal::ForEach(f, &c);
612
624
  return f;
613
625
  }
614
626
  template <typename K, typename V, typename H, typename E, typename A,
615
627
  typename Function>
616
- decay_t<Function> c_for_each_fast(node_hash_map<K, V, H, E, A>&& c,
617
- Function&& f) {
628
+ std::decay_t<Function> c_for_each_fast(node_hash_map<K, V, H, E, A>&& c,
629
+ Function&& f) {
618
630
  container_internal::ForEach(f, &c);
619
631
  return f;
620
632
  }
@@ -640,23 +652,22 @@ class NodeHashMapPolicy
640
652
 
641
653
  template <class Allocator, class... Args>
642
654
  static value_type* new_element(Allocator* alloc, Args&&... args) {
643
- using PairAlloc = typename absl::allocator_traits<
655
+ using PairAlloc = typename std::allocator_traits<
644
656
  Allocator>::template rebind_alloc<value_type>;
645
657
  PairAlloc pair_alloc(*alloc);
646
- value_type* res =
647
- absl::allocator_traits<PairAlloc>::allocate(pair_alloc, 1);
648
- absl::allocator_traits<PairAlloc>::construct(pair_alloc, res,
649
- std::forward<Args>(args)...);
658
+ value_type* res = std::allocator_traits<PairAlloc>::allocate(pair_alloc, 1);
659
+ std::allocator_traits<PairAlloc>::construct(pair_alloc, res,
660
+ std::forward<Args>(args)...);
650
661
  return res;
651
662
  }
652
663
 
653
664
  template <class Allocator>
654
665
  static void delete_element(Allocator* alloc, value_type* pair) {
655
- using PairAlloc = typename absl::allocator_traits<
666
+ using PairAlloc = typename std::allocator_traits<
656
667
  Allocator>::template rebind_alloc<value_type>;
657
668
  PairAlloc pair_alloc(*alloc);
658
- absl::allocator_traits<PairAlloc>::destroy(pair_alloc, pair);
659
- absl::allocator_traits<PairAlloc>::deallocate(pair_alloc, pair, 1);
669
+ std::allocator_traits<PairAlloc>::destroy(pair_alloc, pair);
670
+ std::allocator_traits<PairAlloc>::deallocate(pair_alloc, pair, 1);
660
671
  }
661
672
 
662
673
  template <class F, class... Args>
@@ -677,7 +688,8 @@ class NodeHashMapPolicy
677
688
  template <class Hash, bool kIsDefault>
678
689
  static constexpr HashSlotFn get_hash_slot_fn() {
679
690
  return memory_internal::IsLayoutCompatible<Key, Value>::value
680
- ? &TypeErasedDerefAndApplyToSlotFn<Hash, Key, kIsDefault>
691
+ ? &TypeErasedDerefAndApplyToSlotFirstFn<Hash, value_type,
692
+ kIsDefault>
681
693
  : nullptr;
682
694
  }
683
695
  };
@@ -32,6 +32,10 @@
32
32
  #include "absl/container/internal/unordered_map_members_test.h"
33
33
  #include "absl/container/internal/unordered_map_modifiers_test.h"
34
34
 
35
+ #if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
36
+ #include <ranges> // NOLINT(build/c++20)
37
+ #endif
38
+
35
39
  namespace absl {
36
40
  ABSL_NAMESPACE_BEGIN
37
41
  namespace container_internal {
@@ -342,6 +346,36 @@ TEST(NodeHashMap, RecursiveTypeCompiles) {
342
346
  t.m[0] = RecursiveType{};
343
347
  }
344
348
 
349
+ #if defined(__cpp_lib_containers_ranges) && \
350
+ __cpp_lib_containers_ranges >= 202202L
351
+ TEST(NodeHashMap, FromRange) {
352
+ std::vector<std::pair<int, int>> v = {{1, 2}, {3, 4}, {5, 6}};
353
+ absl::node_hash_map<int, int> m(std::from_range, v);
354
+ EXPECT_THAT(m, UnorderedElementsAre(Pair(1, 2), Pair(3, 4), Pair(5, 6)));
355
+ }
356
+
357
+ TEST(NodeHashMap, FromRangeWithAllocator) {
358
+ std::vector<std::pair<int, int>> v = {{1, 2}, {3, 4}, {5, 6}};
359
+ absl::node_hash_map<int, int,
360
+ absl::container_internal::hash_default_hash<int>,
361
+ absl::container_internal::hash_default_eq<int>,
362
+ Alloc<std::pair<const int, int>>>
363
+ m(std::from_range, v, 0, Alloc<std::pair<const int, int>>());
364
+ EXPECT_THAT(m, UnorderedElementsAre(Pair(1, 2), Pair(3, 4), Pair(5, 6)));
365
+ }
366
+
367
+ TEST(NodeHashMap, FromRangeWithHasherAndAllocator) {
368
+ std::vector<std::pair<int, int>> v = {{1, 2}, {3, 4}, {5, 6}};
369
+ using TestingHash = absl::container_internal::StatefulTestingHash;
370
+ absl::node_hash_map<int, int, TestingHash,
371
+ absl::container_internal::hash_default_eq<int>,
372
+ Alloc<std::pair<const int, int>>>
373
+ m(std::from_range, v, 0, TestingHash{},
374
+ Alloc<std::pair<const int, int>>());
375
+ EXPECT_THAT(m, UnorderedElementsAre(Pair(1, 2), Pair(3, 4), Pair(5, 6)));
376
+ }
377
+ #endif
378
+
345
379
  } // namespace
346
380
  } // namespace container_internal
347
381
  ABSL_NAMESPACE_END
@@ -161,16 +161,28 @@ class ABSL_ATTRIBUTE_OWNER node_hash_set
161
161
  // // Move is guaranteed efficient
162
162
  // absl::node_hash_set<std::string> set5(std::move(set4));
163
163
  //
164
+ // // After the move, set4 is in a valid but unspecified state. The only
165
+ // // operations guaranteed to be safe on a moved-from set are destruction,
166
+ // // assignment, and clear(). Any other operation (e.g. size(), empty(),
167
+ // // iteration) results in undefined behavior.
168
+ //
164
169
  // * Move assignment operator
165
170
  //
166
171
  // // May be efficient if allocators are compatible
167
172
  // absl::node_hash_set<std::string> set6;
168
173
  // set6 = std::move(set5);
169
174
  //
175
+ // // Same moved-from guarantees apply to set5 after this operation.
176
+ //
170
177
  // * Range constructor
171
178
  //
172
179
  // std::vector<std::string> v = {"a", "b"};
173
180
  // absl::node_hash_set<std::string> set7(v.begin(), v.end());
181
+ //
182
+ // * from_range constructor (C++23)
183
+ //
184
+ // std::vector<std::string> v = {"a", "b"};
185
+ // absl::node_hash_set<std::string> set8(std::from_range, v);
174
186
  node_hash_set() {}
175
187
  using Base::Base;
176
188
 
@@ -507,18 +519,20 @@ namespace container_internal {
507
519
  // There is no guarantees on the order of the function calls.
508
520
  // Erasure and/or insertion of elements in the function is not allowed.
509
521
  template <typename T, typename H, typename E, typename A, typename Function>
510
- decay_t<Function> c_for_each_fast(const node_hash_set<T, H, E, A>& c,
511
- Function&& f) {
522
+ std::decay_t<Function> c_for_each_fast(const node_hash_set<T, H, E, A>& c,
523
+ Function&& f) {
512
524
  container_internal::ForEach(f, &c);
513
525
  return f;
514
526
  }
515
527
  template <typename T, typename H, typename E, typename A, typename Function>
516
- decay_t<Function> c_for_each_fast(node_hash_set<T, H, E, A>& c, Function&& f) {
528
+ std::decay_t<Function> c_for_each_fast(node_hash_set<T, H, E, A>& c,
529
+ Function&& f) {
517
530
  container_internal::ForEach(f, &c);
518
531
  return f;
519
532
  }
520
533
  template <typename T, typename H, typename E, typename A, typename Function>
521
- decay_t<Function> c_for_each_fast(node_hash_set<T, H, E, A>&& c, Function&& f) {
534
+ std::decay_t<Function> c_for_each_fast(node_hash_set<T, H, E, A>&& c,
535
+ Function&& f) {
522
536
  container_internal::ForEach(f, &c);
523
537
  return f;
524
538
  }
@@ -541,21 +555,21 @@ struct NodeHashSetPolicy
541
555
  template <class Allocator, class... Args>
542
556
  static T* new_element(Allocator* alloc, Args&&... args) {
543
557
  using ValueAlloc =
544
- typename absl::allocator_traits<Allocator>::template rebind_alloc<T>;
558
+ typename std::allocator_traits<Allocator>::template rebind_alloc<T>;
545
559
  ValueAlloc value_alloc(*alloc);
546
- T* res = absl::allocator_traits<ValueAlloc>::allocate(value_alloc, 1);
547
- absl::allocator_traits<ValueAlloc>::construct(value_alloc, res,
548
- std::forward<Args>(args)...);
560
+ T* res = std::allocator_traits<ValueAlloc>::allocate(value_alloc, 1);
561
+ std::allocator_traits<ValueAlloc>::construct(value_alloc, res,
562
+ std::forward<Args>(args)...);
549
563
  return res;
550
564
  }
551
565
 
552
566
  template <class Allocator>
553
567
  static void delete_element(Allocator* alloc, T* elem) {
554
568
  using ValueAlloc =
555
- typename absl::allocator_traits<Allocator>::template rebind_alloc<T>;
569
+ typename std::allocator_traits<Allocator>::template rebind_alloc<T>;
556
570
  ValueAlloc value_alloc(*alloc);
557
- absl::allocator_traits<ValueAlloc>::destroy(value_alloc, elem);
558
- absl::allocator_traits<ValueAlloc>::deallocate(value_alloc, elem, 1);
571
+ std::allocator_traits<ValueAlloc>::destroy(value_alloc, elem);
572
+ std::allocator_traits<ValueAlloc>::deallocate(value_alloc, elem, 1);
559
573
  }
560
574
 
561
575
  template <class F, class... Args>
@@ -31,6 +31,10 @@
31
31
  #include "absl/container/internal/unordered_set_modifiers_test.h"
32
32
  #include "absl/memory/memory.h"
33
33
 
34
+ #if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
35
+ #include <ranges> // NOLINT(build/c++20)
36
+ #endif
37
+
34
38
  namespace absl {
35
39
  ABSL_NAMESPACE_BEGIN
36
40
  namespace container_internal {
@@ -71,11 +75,11 @@ TEST(NodeHashSet, MergeExtractInsert) {
71
75
  }
72
76
  };
73
77
  absl::node_hash_set<std::unique_ptr<int>, Hash, Eq> set1, set2;
74
- set1.insert(absl::make_unique<int>(7));
75
- set1.insert(absl::make_unique<int>(17));
78
+ set1.insert(std::make_unique<int>(7));
79
+ set1.insert(std::make_unique<int>(17));
76
80
 
77
- set2.insert(absl::make_unique<int>(7));
78
- set2.insert(absl::make_unique<int>(19));
81
+ set2.insert(std::make_unique<int>(7));
82
+ set2.insert(std::make_unique<int>(19));
79
83
 
80
84
  EXPECT_THAT(set1, UnorderedElementsAre(Pointee(7), Pointee(17)));
81
85
  EXPECT_THAT(set2, UnorderedElementsAre(Pointee(7), Pointee(19)));
@@ -85,7 +89,7 @@ TEST(NodeHashSet, MergeExtractInsert) {
85
89
  EXPECT_THAT(set1, UnorderedElementsAre(Pointee(7), Pointee(17), Pointee(19)));
86
90
  EXPECT_THAT(set2, UnorderedElementsAre(Pointee(7)));
87
91
 
88
- auto node = set1.extract(absl::make_unique<int>(7));
92
+ auto node = set1.extract(std::make_unique<int>(7));
89
93
  EXPECT_TRUE(node);
90
94
  EXPECT_THAT(node.value(), Pointee(7));
91
95
  EXPECT_THAT(set1, UnorderedElementsAre(Pointee(17), Pointee(19)));
@@ -99,12 +103,12 @@ TEST(NodeHashSet, MergeExtractInsert) {
99
103
  EXPECT_NE(insert_result.position->get(), insert_result.node.value().get());
100
104
  EXPECT_THAT(set2, UnorderedElementsAre(Pointee(7)));
101
105
 
102
- node = set1.extract(absl::make_unique<int>(17));
106
+ node = set1.extract(std::make_unique<int>(17));
103
107
  EXPECT_TRUE(node);
104
108
  EXPECT_THAT(node.value(), Pointee(17));
105
109
  EXPECT_THAT(set1, UnorderedElementsAre(Pointee(19)));
106
110
 
107
- node.value() = absl::make_unique<int>(23);
111
+ node.value() = std::make_unique<int>(23);
108
112
 
109
113
  insert_result = set2.insert(std::move(node));
110
114
  EXPECT_FALSE(node);
@@ -182,6 +186,34 @@ TEST(NodeHashSet, CForEach) {
182
186
  }
183
187
  }
184
188
 
189
+ #if defined(__cpp_lib_containers_ranges) && \
190
+ __cpp_lib_containers_ranges >= 202202L
191
+ TEST(NodeHashSet, FromRange) {
192
+ std::vector<int> v = {1, 2, 3, 4, 5};
193
+ absl::node_hash_set<int> s(std::from_range, v);
194
+ EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3, 4, 5));
195
+ }
196
+
197
+ TEST(NodeHashSet, FromRangeWithAllocator) {
198
+ std::vector<int> v = {1, 2, 3, 4, 5};
199
+ absl::node_hash_set<int, absl::container_internal::hash_default_hash<int>,
200
+ absl::container_internal::hash_default_eq<int>,
201
+ Alloc<int>>
202
+ s(std::from_range, v, 0, Alloc<int>());
203
+ EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3, 4, 5));
204
+ }
205
+
206
+ TEST(NodeHashSet, FromRangeWithHasherAndAllocator) {
207
+ std::vector<int> v = {1, 2, 3, 4, 5};
208
+ using TestingHash = absl::container_internal::StatefulTestingHash;
209
+ absl::node_hash_set<int, TestingHash,
210
+ absl::container_internal::hash_default_eq<int>,
211
+ Alloc<int>>
212
+ s(std::from_range, v, 0, TestingHash{}, Alloc<int>());
213
+ EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3, 4, 5));
214
+ }
215
+ #endif
216
+
185
217
  } // namespace
186
218
  } // namespace container_internal
187
219
  ABSL_NAMESPACE_END
@@ -57,12 +57,13 @@ void TestInlineElementSize(
57
57
  tables.back().insert(values.begin(), values.end());
58
58
  }
59
59
  size_t new_count = 0;
60
- sampler.Iterate([&](const HashtablezInfo& info) {
60
+ EXPECT_EQ(sampler.Iterate([&](const HashtablezInfo& info) {
61
61
  if (preexisting_info.insert(&info).second) {
62
62
  EXPECT_EQ(info.inline_element_size, expected_element_size);
63
63
  ++new_count;
64
64
  }
65
- });
65
+ }),
66
+ 0);
66
67
  // Make sure we actually did get a new hashtablez.
67
68
  EXPECT_GT(new_count, 0);
68
69
  }
@@ -99,8 +100,10 @@ TEST(FlatHashMap, SampleElementSize) {
99
100
  // cannot be a flat_hash_set, however, since that would introduce a mutex
100
101
  // deadlock.
101
102
  std::unordered_set<const HashtablezInfo*> preexisting_info; // NOLINT
102
- sampler.Iterate(
103
- [&](const HashtablezInfo& info) { preexisting_info.insert(&info); });
103
+ EXPECT_EQ(sampler.Iterate([&](const HashtablezInfo& info) {
104
+ preexisting_info.insert(&info);
105
+ }),
106
+ 0);
104
107
  TestInlineElementSize(sampler, preexisting_info, flat_map_tables, map_values,
105
108
  sizeof(int) + sizeof(bigstruct));
106
109
  TestInlineElementSize(sampler, preexisting_info, node_map_tables, map_values,
@@ -45,7 +45,6 @@ cc_library(
45
45
  deps = [
46
46
  "//absl/base",
47
47
  "//absl/base:config",
48
- "//absl/types:optional",
49
48
  ],
50
49
  )
51
50
 
@@ -25,7 +25,6 @@ absl_cc_library(
25
25
  DEPS
26
26
  absl::base
27
27
  absl::config
28
- absl::optional
29
28
  )
30
29
 
31
30
  # Internal-only target, do not depend on directly.
@@ -43,13 +42,13 @@ absl_cc_library(
43
42
  ${ABSL_DEFAULT_COPTS}
44
43
  DEPS
45
44
  absl::crc_cpu_detect
45
+ absl::bits
46
46
  absl::config
47
47
  absl::core_headers
48
48
  absl::endian
49
+ absl::memory
49
50
  absl::prefetch
50
51
  absl::raw_logging_internal
51
- absl::memory
52
- absl::bits
53
52
  )
54
53
 
55
54
  absl_cc_library(
@@ -12,6 +12,7 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
+ #include <memory>
15
16
  #include <string>
16
17
 
17
18
  #include "absl/crc/crc32c.h"
@@ -144,7 +145,7 @@ void BM_Memcpy(benchmark::State& state) {
144
145
  int string_len = state.range(0);
145
146
 
146
147
  std::string source = TestString(string_len);
147
- auto dest = absl::make_unique<char[]>(string_len);
148
+ auto dest = std::make_unique<char[]>(string_len);
148
149
 
149
150
  for (auto s : state) {
150
151
  benchmark::DoNotOptimize(source);
@@ -15,10 +15,10 @@
15
15
  #include "absl/crc/internal/cpu_detect.h"
16
16
 
17
17
  #include <cstdint>
18
+ #include <optional> // IWYU pragma: keep
18
19
  #include <string>
19
20
 
20
21
  #include "absl/base/config.h"
21
- #include "absl/types/optional.h" // IWYU pragma: keep
22
22
 
23
23
  #if defined(__aarch64__) && defined(__linux__)
24
24
  #include <asm/hwcap.h>
@@ -308,12 +308,12 @@ bool SupportsArmCRC32PMULL() {
308
308
  CpuType GetCpuType() { return CpuType::kUnknown; }
309
309
 
310
310
  template <typename T>
311
- static absl::optional<T> ReadSysctlByName(const char* name) {
311
+ static std::optional<T> ReadSysctlByName(const char* name) {
312
312
  T val;
313
313
  size_t val_size = sizeof(T);
314
314
  int ret = sysctlbyname(name, &val, &val_size, nullptr, 0);
315
315
  if (ret == -1) {
316
- return absl::nullopt;
316
+ return std::nullopt;
317
317
  }
318
318
  return val;
319
319
  }
@@ -322,7 +322,7 @@ bool SupportsArmCRC32PMULL() {
322
322
  // Newer XNU kernels support querying all capabilities in a single
323
323
  // sysctlbyname.
324
324
  #if defined(CAP_BIT_CRC32) && defined(CAP_BIT_FEAT_PMULL)
325
- static const absl::optional<uint64_t> caps =
325
+ static const std::optional<uint64_t> caps =
326
326
  ReadSysctlByName<uint64_t>("hw.optional.arm.caps");
327
327
  if (caps.has_value()) {
328
328
  constexpr uint64_t kCrc32AndPmullCaps =
@@ -332,13 +332,13 @@ bool SupportsArmCRC32PMULL() {
332
332
  #endif
333
333
 
334
334
  // https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3915619
335
- static const absl::optional<int> armv8_crc32 =
335
+ static const std::optional<int> armv8_crc32 =
336
336
  ReadSysctlByName<int>("hw.optional.armv8_crc32");
337
337
  if (armv8_crc32.value_or(0) == 0) {
338
338
  return false;
339
339
  }
340
340
  // https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3918855
341
- static const absl::optional<int> feat_pmull =
341
+ static const std::optional<int> feat_pmull =
342
342
  ReadSysctlByName<int>("hw.optional.arm.FEAT_PMULL");
343
343
  if (feat_pmull.value_or(0) == 0) {
344
344
  return false;
@@ -47,6 +47,7 @@
47
47
  #include "absl/base/internal/raw_logging.h"
48
48
  #include "absl/base/prefetch.h"
49
49
  #include "absl/crc/internal/crc_internal.h"
50
+ #include "absl/numeric/bits.h"
50
51
 
51
52
  namespace absl {
52
53
  ABSL_NAMESPACE_BEGIN
@@ -410,16 +411,13 @@ void CRC32::Scramble(uint32_t* crc) const {
410
411
  // Rotate by near half the word size plus 1. See the scramble comment in
411
412
  // crc_internal.h for an explanation.
412
413
  constexpr int scramble_rotate = (32 / 2) + 1;
413
- *crc = RotateRight<uint32_t>(static_cast<unsigned int>(*crc + kScrambleLo),
414
- 32, scramble_rotate) &
415
- MaskOfLength<uint32_t>(32);
414
+ *crc = absl::rotr(static_cast<uint32_t>(*crc + kScrambleLo), scramble_rotate);
416
415
  }
417
416
 
418
417
  void CRC32::Unscramble(uint32_t* crc) const {
419
418
  constexpr int scramble_rotate = (32 / 2) + 1;
420
- uint64_t rotated = RotateRight<uint32_t>(static_cast<unsigned int>(*crc), 32,
421
- 32 - scramble_rotate);
422
- *crc = (rotated - kScrambleLo) & MaskOfLength<uint32_t>(32);
419
+ uint64_t rotated = absl::rotl(*crc, scramble_rotate);
420
+ *crc = static_cast<uint32_t>(rotated - kScrambleLo);
423
421
  }
424
422
 
425
423
  // Constructor and destructor for base class CRC.
@@ -15,6 +15,7 @@
15
15
  #ifndef ABSL_CRC_INTERNAL_CRC32_X86_ARM_COMBINED_SIMD_H_
16
16
  #define ABSL_CRC_INTERNAL_CRC32_X86_ARM_COMBINED_SIMD_H_
17
17
 
18
+ #include <array>
18
19
  #include <cstdint>
19
20
 
20
21
  #include "absl/base/config.h"
@@ -65,6 +66,13 @@ using V128 = uint64x2_t;
65
66
  using V128 = __m128i;
66
67
  #endif
67
68
 
69
+ #if defined(__AVX__)
70
+ using V256 = __m256i;
71
+ #else
72
+ // Placeholder for V256 when AVX is not available.
73
+ using V256 = std::array<uint64_t, 4>;
74
+ #endif
75
+
68
76
  // Starting with the initial value in |crc|, accumulates a CRC32 value for
69
77
  // unsigned integers of different sizes.
70
78
  uint32_t CRC32_u8(uint32_t crc, uint8_t v);
@@ -119,6 +127,17 @@ int64_t V128_Low64(const V128 l);
119
127
  // Add packed 64-bit integers in |l| and |r|.
120
128
  V128 V128_Add64(const V128 l, const V128 r);
121
129
 
130
+ #if defined(__AVX__)
131
+ inline V256 V256_LoadU(const V256* src);
132
+ inline V256 V256_Broadcast128(const V128* src);
133
+ #else
134
+ template <typename T = V256>
135
+ T V256_LoadU(const T* src);
136
+
137
+ template <typename T = V256>
138
+ T V256_Broadcast128(const V128* src);
139
+ #endif
140
+
122
141
  #endif
123
142
 
124
143
  #if defined(ABSL_CRC_INTERNAL_HAVE_X86_SIMD)
@@ -271,6 +290,28 @@ inline V128 V128_Add64(const V128 l, const V128 r) { return vaddq_u64(l, r); }
271
290
 
272
291
  #endif
273
292
 
293
+ #if defined(__AVX__) && defined(ABSL_CRC_INTERNAL_HAVE_X86_SIMD)
294
+ inline V256 V256_LoadU(const V256* src) { return _mm256_loadu_si256(src); }
295
+
296
+ inline V256 V256_Broadcast128(const V128* src) {
297
+ return _mm256_castps_si256(
298
+ _mm256_broadcast_ps(reinterpret_cast<const __m128*>(src)));
299
+ }
300
+ #elif defined(ABSL_CRC_INTERNAL_HAVE_X86_SIMD) || \
301
+ defined(ABSL_CRC_INTERNAL_HAVE_ARM_SIMD)
302
+ template <typename T>
303
+ inline T V256_LoadU(const T* src) {
304
+ (void)src;
305
+ return T{};
306
+ }
307
+
308
+ template <typename T>
309
+ inline T V256_Broadcast128(const V128* src) {
310
+ (void)src;
311
+ return T{};
312
+ }
313
+ #endif
314
+
274
315
  } // namespace crc_internal
275
316
  ABSL_NAMESPACE_END
276
317
  } // namespace absl
@@ -137,22 +137,6 @@ class CRC32 : public CRCImpl {
137
137
 
138
138
  // Helpers
139
139
 
140
- // Return a bit mask containing len 1-bits.
141
- // Requires 0 < len <= sizeof(T)
142
- template <typename T>
143
- T MaskOfLength(int len) {
144
- // shift 2 by len-1 rather than 1 by len because shifts of wordsize
145
- // are undefined.
146
- return (T(2) << (len - 1)) - 1;
147
- }
148
-
149
- // Rotate low-order "width" bits of "in" right by "r" bits,
150
- // setting other bits in word to arbitrary values.
151
- template <typename T>
152
- T RotateRight(T in, int width, int r) {
153
- return (in << (width - r)) | ((in >> r) & MaskOfLength<T>(width - r));
154
- }
155
-
156
140
  // RoundUp<N>(p) returns the lowest address >= p aligned to an N-byte
157
141
  // boundary. Requires that N is a power of 2.
158
142
  template <int alignment>