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
@@ -14,7 +14,9 @@
14
14
 
15
15
  #include "absl/container/internal/compressed_tuple.h"
16
16
 
17
+ #include <any>
17
18
  #include <memory>
19
+ #include <optional>
18
20
  #include <set>
19
21
  #include <string>
20
22
  #include <type_traits>
@@ -25,8 +27,6 @@
25
27
  #include "gtest/gtest.h"
26
28
  #include "absl/container/internal/test_instance_tracker.h"
27
29
  #include "absl/memory/memory.h"
28
- #include "absl/types/any.h"
29
- #include "absl/types/optional.h"
30
30
  #include "absl/utility/utility.h"
31
31
 
32
32
  // These are declared at global scope purely so that error messages
@@ -337,11 +337,11 @@ TEST(CompressedTupleTest, NoElements) {
337
337
 
338
338
  TEST(CompressedTupleTest, MoveOnlyElements) {
339
339
  CompressedTuple<std::unique_ptr<std::string>> str_tup(
340
- absl::make_unique<std::string>("str"));
340
+ std::make_unique<std::string>("str"));
341
341
 
342
342
  CompressedTuple<CompressedTuple<std::unique_ptr<std::string>>,
343
343
  std::unique_ptr<int>>
344
- x(std::move(str_tup), absl::make_unique<int>(5));
344
+ x(std::move(str_tup), std::make_unique<int>(5));
345
345
 
346
346
  EXPECT_EQ(*x.get<0>().get<0>(), "str");
347
347
  EXPECT_EQ(*x.get<1>(), 5);
@@ -355,7 +355,7 @@ TEST(CompressedTupleTest, MoveOnlyElements) {
355
355
 
356
356
  TEST(CompressedTupleTest, MoveConstructionMoveOnlyElements) {
357
357
  CompressedTuple<std::unique_ptr<std::string>> base(
358
- absl::make_unique<std::string>("str"));
358
+ std::make_unique<std::string>("str"));
359
359
  EXPECT_EQ(*base.get<0>(), "str");
360
360
 
361
361
  CompressedTuple<std::unique_ptr<std::string>> copy(std::move(base));
@@ -363,13 +363,13 @@ TEST(CompressedTupleTest, MoveConstructionMoveOnlyElements) {
363
363
  }
364
364
 
365
365
  TEST(CompressedTupleTest, AnyElements) {
366
- any a(std::string("str"));
367
- CompressedTuple<any, any&> x(any(5), a);
368
- EXPECT_EQ(absl::any_cast<int>(x.get<0>()), 5);
369
- EXPECT_EQ(absl::any_cast<std::string>(x.get<1>()), "str");
366
+ std::any a(std::string("str"));
367
+ CompressedTuple<std::any, std::any&> x(std::any(5), a);
368
+ EXPECT_EQ(std::any_cast<int>(x.get<0>()), 5);
369
+ EXPECT_EQ(std::any_cast<std::string>(x.get<1>()), "str");
370
370
 
371
371
  a = 0.5f;
372
- EXPECT_EQ(absl::any_cast<float>(x.get<1>()), 0.5);
372
+ EXPECT_EQ(std::any_cast<float>(x.get<1>()), 0.5);
373
373
  }
374
374
 
375
375
  TEST(CompressedTupleTest, Constexpr) {
@@ -418,15 +418,15 @@ TEST(CompressedTupleTest, Constexpr) {
418
418
  EXPECT_EQ(trivial1, 0);
419
419
  EXPECT_EQ(trivial2, 0);
420
420
 
421
- constexpr CompressedTuple<Empty<0>, NonTrivialStruct, absl::optional<int>>
421
+ constexpr CompressedTuple<Empty<0>, NonTrivialStruct, std::optional<int>>
422
422
  non_trivial = {};
423
423
  constexpr CallType non_trivial0 = non_trivial.get<0>().value();
424
424
  constexpr int non_trivial1 = non_trivial.get<1>().value();
425
- constexpr absl::optional<int> non_trivial2 = non_trivial.get<2>();
425
+ constexpr std::optional<int> non_trivial2 = non_trivial.get<2>();
426
426
 
427
427
  EXPECT_EQ(non_trivial0, CallType::kConstRef);
428
428
  EXPECT_EQ(non_trivial1, 5);
429
- EXPECT_EQ(non_trivial2, absl::nullopt);
429
+ EXPECT_EQ(non_trivial2, std::nullopt);
430
430
 
431
431
  static constexpr char data[] = "DEF";
432
432
  constexpr CompressedTuple<const char*> z(data);
@@ -63,8 +63,8 @@ void* Allocate(Alloc* alloc, size_t n) {
63
63
  static_assert(Alignment > 0, "");
64
64
  assert(n && "n must be positive");
65
65
  using M = AlignedType<Alignment>;
66
- using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
67
- using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
66
+ using A = typename std::allocator_traits<Alloc>::template rebind_alloc<M>;
67
+ using AT = typename std::allocator_traits<Alloc>::template rebind_traits<M>;
68
68
  // On macOS, "mem_alloc" is a #define with one argument defined in
69
69
  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
70
70
  // with the "foo(bar)" syntax.
@@ -81,7 +81,7 @@ template <class Allocator, class ValueType>
81
81
  constexpr auto IsDestructionTrivial() {
82
82
  constexpr bool result =
83
83
  std::is_trivially_destructible<ValueType>::value &&
84
- std::is_same<typename absl::allocator_traits<
84
+ std::is_same<typename std::allocator_traits<
85
85
  Allocator>::template rebind_alloc<char>,
86
86
  std::allocator<char>>::value;
87
87
  return std::integral_constant<bool, result>();
@@ -94,8 +94,8 @@ void Deallocate(Alloc* alloc, void* p, size_t n) {
94
94
  static_assert(Alignment > 0, "");
95
95
  assert(n && "n must be positive");
96
96
  using M = AlignedType<Alignment>;
97
- using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
98
- using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
97
+ using A = typename std::allocator_traits<Alloc>::template rebind_alloc<M>;
98
+ using AT = typename std::allocator_traits<Alloc>::template rebind_traits<M>;
99
99
  // On macOS, "mem_alloc" is a #define with one argument defined in
100
100
  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
101
101
  // with the "foo(bar)" syntax.
@@ -110,8 +110,8 @@ namespace memory_internal {
110
110
  // specified in the tuple.
111
111
  template <class Alloc, class T, class Tuple, size_t... I>
112
112
  void ConstructFromTupleImpl(Alloc* alloc, T* ptr, Tuple&& t,
113
- absl::index_sequence<I...>) {
114
- absl::allocator_traits<Alloc>::construct(
113
+ std::index_sequence<I...>) {
114
+ std::allocator_traits<Alloc>::construct(
115
115
  *alloc, ptr, std::get<I>(std::forward<Tuple>(t))...);
116
116
  }
117
117
 
@@ -127,13 +127,13 @@ struct WithConstructedImplF {
127
127
 
128
128
  template <class T, class Tuple, size_t... Is, class F>
129
129
  decltype(std::declval<F>()(std::declval<T>())) WithConstructedImpl(
130
- Tuple&& t, absl::index_sequence<Is...>, F&& f) {
130
+ Tuple&& t, std::index_sequence<Is...>, F&& f) {
131
131
  return WithConstructedImplF<T, F>{std::forward<F>(f)}(
132
132
  std::get<Is>(std::forward<Tuple>(t))...);
133
133
  }
134
134
 
135
135
  template <class T, size_t... Is>
136
- auto TupleRefImpl(T&& t, absl::index_sequence<Is...>)
136
+ auto TupleRefImpl(T&& t, std::index_sequence<Is...>)
137
137
  -> decltype(std::forward_as_tuple(std::get<Is>(std::forward<T>(t))...)) {
138
138
  // NOLINTNEXTLINE(bugprone-use-after-move)
139
139
  return std::forward_as_tuple(std::get<Is>(std::forward<T>(t))...);
@@ -144,11 +144,11 @@ auto TupleRefImpl(T&& t, absl::index_sequence<Is...>)
144
144
  template <class T>
145
145
  auto TupleRef(T&& t) -> decltype(TupleRefImpl(
146
146
  std::forward<T>(t),
147
- absl::make_index_sequence<
147
+ std::make_index_sequence<
148
148
  std::tuple_size<typename std::decay<T>::type>::value>())) {
149
149
  return TupleRefImpl(
150
150
  std::forward<T>(t),
151
- absl::make_index_sequence<
151
+ std::make_index_sequence<
152
152
  std::tuple_size<typename std::decay<T>::type>::value>());
153
153
  }
154
154
 
@@ -169,7 +169,7 @@ template <class Alloc, class T, class Tuple>
169
169
  void ConstructFromTuple(Alloc* alloc, T* ptr, Tuple&& t) {
170
170
  memory_internal::ConstructFromTupleImpl(
171
171
  alloc, ptr, std::forward<Tuple>(t),
172
- absl::make_index_sequence<
172
+ std::make_index_sequence<
173
173
  std::tuple_size<typename std::decay<Tuple>::type>::value>());
174
174
  }
175
175
 
@@ -180,7 +180,7 @@ decltype(std::declval<F>()(std::declval<T>())) WithConstructed(Tuple&& t,
180
180
  F&& f) {
181
181
  return memory_internal::WithConstructedImpl<T>(
182
182
  std::forward<Tuple>(t),
183
- absl::make_index_sequence<
183
+ std::make_index_sequence<
184
184
  std::tuple_size<typename std::decay<Tuple>::type>::value>(),
185
185
  std::forward<F>(f));
186
186
  }
@@ -350,11 +350,11 @@ union map_slot_type {
350
350
  ~map_slot_type() = delete;
351
351
  using value_type = std::pair<const K, V>;
352
352
  using mutable_value_type =
353
- std::pair<absl::remove_const_t<K>, absl::remove_const_t<V>>;
353
+ std::pair<std::remove_const_t<K>, std::remove_const_t<V>>;
354
354
 
355
355
  value_type value;
356
356
  mutable_value_type mutable_value;
357
- absl::remove_const_t<K> key;
357
+ std::remove_const_t<K> key;
358
358
  };
359
359
 
360
360
  template <class K, class V>
@@ -362,7 +362,7 @@ struct map_slot_policy {
362
362
  using slot_type = map_slot_type<K, V>;
363
363
  using value_type = std::pair<const K, V>;
364
364
  using mutable_value_type =
365
- std::pair<absl::remove_const_t<K>, absl::remove_const_t<V>>;
365
+ std::pair<std::remove_const_t<K>, std::remove_const_t<V>>;
366
366
 
367
367
  private:
368
368
  static void emplace(slot_type* slot) {
@@ -397,11 +397,11 @@ struct map_slot_policy {
397
397
  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
398
398
  emplace(slot);
399
399
  if (kMutableKeys::value) {
400
- absl::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
401
- std::forward<Args>(args)...);
400
+ std::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
401
+ std::forward<Args>(args)...);
402
402
  } else {
403
- absl::allocator_traits<Allocator>::construct(*alloc, &slot->value,
404
- std::forward<Args>(args)...);
403
+ std::allocator_traits<Allocator>::construct(*alloc, &slot->value,
404
+ std::forward<Args>(args)...);
405
405
  }
406
406
  }
407
407
 
@@ -410,11 +410,11 @@ struct map_slot_policy {
410
410
  static void construct(Allocator* alloc, slot_type* slot, slot_type* other) {
411
411
  emplace(slot);
412
412
  if (kMutableKeys::value) {
413
- absl::allocator_traits<Allocator>::construct(
413
+ std::allocator_traits<Allocator>::construct(
414
414
  *alloc, &slot->mutable_value, std::move(other->mutable_value));
415
415
  } else {
416
- absl::allocator_traits<Allocator>::construct(*alloc, &slot->value,
417
- std::move(other->value));
416
+ std::allocator_traits<Allocator>::construct(*alloc, &slot->value,
417
+ std::move(other->value));
418
418
  }
419
419
  }
420
420
 
@@ -423,16 +423,16 @@ struct map_slot_policy {
423
423
  static void construct(Allocator* alloc, slot_type* slot,
424
424
  const slot_type* other) {
425
425
  emplace(slot);
426
- absl::allocator_traits<Allocator>::construct(*alloc, &slot->value,
427
- other->value);
426
+ std::allocator_traits<Allocator>::construct(*alloc, &slot->value,
427
+ other->value);
428
428
  }
429
429
 
430
430
  template <class Allocator>
431
431
  static auto destroy(Allocator* alloc, slot_type* slot) {
432
432
  if (kMutableKeys::value) {
433
- absl::allocator_traits<Allocator>::destroy(*alloc, &slot->mutable_value);
433
+ std::allocator_traits<Allocator>::destroy(*alloc, &slot->mutable_value);
434
434
  } else {
435
- absl::allocator_traits<Allocator>::destroy(*alloc, &slot->value);
435
+ std::allocator_traits<Allocator>::destroy(*alloc, &slot->value);
436
436
  }
437
437
  return IsDestructionTrivial<Allocator, value_type>();
438
438
  }
@@ -460,11 +460,11 @@ struct map_slot_policy {
460
460
  }
461
461
 
462
462
  if (kMutableKeys::value) {
463
- absl::allocator_traits<Allocator>::construct(
463
+ std::allocator_traits<Allocator>::construct(
464
464
  *alloc, &new_slot->mutable_value, std::move(old_slot->mutable_value));
465
465
  } else {
466
- absl::allocator_traits<Allocator>::construct(*alloc, &new_slot->value,
467
- std::move(old_slot->value));
466
+ std::allocator_traits<Allocator>::construct(*alloc, &new_slot->value,
467
+ std::move(old_slot->value));
468
468
  }
469
469
  destroy(alloc, old_slot);
470
470
  return is_relocatable;
@@ -550,10 +550,20 @@ template <class Fn, class T, bool kIsDefault>
550
550
  size_t TypeErasedDerefAndApplyToSlotFn(const void* fn, void* slot_ptr,
551
551
  size_t seed) {
552
552
  const auto* f = static_cast<const Fn*>(fn);
553
- const T* slot = *static_cast<const T**>(slot_ptr);
553
+ const T* slot = *static_cast<T**>(slot_ptr);
554
554
  return HashElement<Fn, kIsDefault>{*f, seed}(*slot);
555
555
  }
556
556
 
557
+ // Type erased function to apply `Fn` to data inside of the `slot_ptr->first`.
558
+ // The data is expected to have type `T`.
559
+ template <class Fn, class T, bool kIsDefault>
560
+ size_t TypeErasedDerefAndApplyToSlotFirstFn(const void* fn, void* slot_ptr,
561
+ size_t seed) {
562
+ const auto* f = static_cast<const Fn*>(fn);
563
+ const T* slot = *static_cast<T**>(slot_ptr);
564
+ return HashElement<Fn, kIsDefault>{*f, seed}(slot->first);
565
+ }
566
+
557
567
  } // namespace container_internal
558
568
  ABSL_NAMESPACE_END
559
569
  } // namespace absl
@@ -199,14 +199,14 @@ template <typename T, typename E = void>
199
199
  struct HasAbslContainerHash : std::false_type {};
200
200
 
201
201
  template <typename T>
202
- struct HasAbslContainerHash<T, absl::void_t<typename T::absl_container_hash>>
202
+ struct HasAbslContainerHash<T, std::void_t<typename T::absl_container_hash>>
203
203
  : std::true_type {};
204
204
 
205
205
  template <typename T, typename E = void>
206
206
  struct HasAbslContainerEq : std::false_type {};
207
207
 
208
208
  template <typename T>
209
- struct HasAbslContainerEq<T, absl::void_t<typename T::absl_container_eq>>
209
+ struct HasAbslContainerEq<T, std::void_t<typename T::absl_container_eq>>
210
210
  : std::true_type {};
211
211
 
212
212
  template <typename T, typename E = void>
@@ -47,7 +47,7 @@ template <class Container, class = void>
47
47
  struct IsMap : std::false_type {};
48
48
 
49
49
  template <class Map>
50
- struct IsMap<Map, absl::void_t<typename Map::mapped_type>> : std::true_type {};
50
+ struct IsMap<Map, std::void_t<typename Map::mapped_type>> : std::true_type {};
51
51
 
52
52
  } // namespace generator_internal
53
53
 
@@ -128,13 +128,13 @@ struct Generator<std::tuple<Ts...>> {
128
128
  template <class T>
129
129
  struct Generator<std::unique_ptr<T>> {
130
130
  std::unique_ptr<T> operator()() const {
131
- return absl::make_unique<T>(Generator<T>()());
131
+ return std::make_unique<T>(Generator<T>()());
132
132
  }
133
133
  };
134
134
 
135
135
  template <class U>
136
- struct Generator<U, absl::void_t<decltype(std::declval<U&>().key()),
137
- decltype(std::declval<U&>().value())>>
136
+ struct Generator<U, std::void_t<decltype(std::declval<U&>().key()),
137
+ decltype(std::declval<U&>().value())>>
138
138
  : Generator<std::pair<
139
139
  typename std::decay<decltype(std::declval<U&>().key())>::type,
140
140
  typename std::decay<decltype(std::declval<U&>().value())>::type>> {};
@@ -31,14 +31,14 @@ namespace container_internal {
31
31
 
32
32
  // Defines how slots are initialized/destroyed/moved.
33
33
  template <class Policy, class = void>
34
- struct hash_policy_traits : common_policy_traits<Policy> {
34
+ struct hash_policy_traits : common_policy_traits<Policy> {
35
35
  // The type of the keys stored in the hashtable.
36
36
  using key_type = typename Policy::key_type;
37
37
 
38
38
  private:
39
39
  struct ReturnKey {
40
40
  template <class Key,
41
- absl::enable_if_t<std::is_lvalue_reference<Key>::value, int> = 0>
41
+ std::enable_if_t<std::is_lvalue_reference<Key>::value, int> = 0>
42
42
  static key_type& Impl(Key&& k, int) {
43
43
  return *std::launder(
44
44
  const_cast<key_type*>(std::addressof(std::forward<Key>(k))));
@@ -63,7 +63,7 @@ struct hash_policy_traits : common_policy_traits<Policy> {
63
63
  struct ConstantIteratorsImpl : std::false_type {};
64
64
 
65
65
  template <class P>
66
- struct ConstantIteratorsImpl<P, absl::void_t<typename P::constant_iterators>>
66
+ struct ConstantIteratorsImpl<P, std::void_t<typename P::constant_iterators>>
67
67
  : P::constant_iterators {};
68
68
 
69
69
  public:
@@ -84,7 +84,7 @@ class NonIterableBitMask {
84
84
  public:
85
85
  explicit NonIterableBitMask(T mask) : mask_(mask) {}
86
86
 
87
- explicit operator bool() const { return this->mask_ != 0; }
87
+ explicit operator bool() const { return mask_ != 0; }
88
88
 
89
89
  // Returns the index of the lowest *abstract* bit set in `self`.
90
90
  uint32_t LowestBitSet() const {
@@ -274,8 +274,12 @@ inline __m128i _mm_cmpgt_epi8_fixed(__m128i a, __m128i b) {
274
274
 
275
275
  struct GroupSse2Impl {
276
276
  static constexpr size_t kWidth = 16; // the number of slots per group
277
- using BitMaskType = BitMask<uint16_t, kWidth>;
278
- using NonIterableBitMaskType = NonIterableBitMask<uint16_t, kWidth>;
277
+ // There are only 16 bits, but using uint32_t instead of uint16_t allows for
278
+ // better codegen. In particular, there is no blsr instruction for a 16 bit
279
+ // register, but there is for a 32 bit register (used in BitMask::operator++).
280
+ using MaskInt = uint32_t;
281
+ using BitMaskType = BitMask<MaskInt, kWidth>;
282
+ using NonIterableBitMaskType = NonIterableBitMask<MaskInt, kWidth>;
279
283
 
280
284
  explicit GroupSse2Impl(const ctrl_t* pos) {
281
285
  ctrl = _mm_loadu_si128(reinterpret_cast<const __m128i*>(pos));
@@ -284,42 +288,35 @@ struct GroupSse2Impl {
284
288
  // Returns a bitmask representing the positions of slots that match hash.
285
289
  BitMaskType Match(h2_t hash) const {
286
290
  auto match = _mm_set1_epi8(static_cast<char>(hash));
287
- return BitMaskType(
288
- static_cast<uint16_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
291
+ return BitMaskType(MoveMask(_mm_cmpeq_epi8(match, ctrl)));
289
292
  }
290
293
 
291
294
  // Returns a bitmask representing the positions of empty slots.
292
295
  NonIterableBitMaskType MaskEmpty() const {
293
296
  #ifdef ABSL_INTERNAL_HAVE_SSSE3
294
297
  // This only works because ctrl_t::kEmpty is -128.
295
- return NonIterableBitMaskType(
296
- static_cast<uint16_t>(_mm_movemask_epi8(_mm_sign_epi8(ctrl, ctrl))));
298
+ return NonIterableBitMaskType(MoveMask(_mm_sign_epi8(ctrl, ctrl)));
297
299
  #else
298
300
  auto match = _mm_set1_epi8(static_cast<char>(ctrl_t::kEmpty));
299
- return NonIterableBitMaskType(
300
- static_cast<uint16_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
301
+ return NonIterableBitMaskType(MoveMask(_mm_cmpeq_epi8(match, ctrl)));
301
302
  #endif
302
303
  }
303
304
 
304
305
  // Returns a bitmask representing the positions of full slots.
305
306
  // Note: for `is_small()` tables group may contain the "same" slot twice:
306
307
  // original and mirrored.
307
- BitMaskType MaskFull() const {
308
- return BitMaskType(static_cast<uint16_t>(_mm_movemask_epi8(ctrl) ^ 0xffff));
309
- }
308
+ BitMaskType MaskFull() const { return BitMaskType(MoveMask(ctrl) ^ 0xffff); }
310
309
 
311
310
  // Returns a bitmask representing the positions of non full slots.
312
311
  // Note: this includes: kEmpty, kDeleted, kSentinel.
313
312
  // It is useful in contexts when kSentinel is not present.
314
- auto MaskNonFull() const {
315
- return BitMaskType(static_cast<uint16_t>(_mm_movemask_epi8(ctrl)));
316
- }
313
+ auto MaskNonFull() const { return BitMaskType(MoveMask(ctrl)); }
317
314
 
318
315
  // Returns a bitmask representing the positions of empty or deleted slots.
319
316
  NonIterableBitMaskType MaskEmptyOrDeleted() const {
320
317
  auto special = _mm_set1_epi8(static_cast<char>(ctrl_t::kSentinel));
321
- return NonIterableBitMaskType(static_cast<uint16_t>(
322
- _mm_movemask_epi8(_mm_cmpgt_epi8_fixed(special, ctrl))));
318
+ return NonIterableBitMaskType(
319
+ MoveMask(_mm_cmpgt_epi8_fixed(special, ctrl)));
323
320
  }
324
321
 
325
322
  // Returns a bitmask representing the positions of full or sentinel slots.
@@ -327,8 +324,8 @@ struct GroupSse2Impl {
327
324
  // original and mirrored.
328
325
  NonIterableBitMaskType MaskFullOrSentinel() const {
329
326
  auto special = _mm_set1_epi8(static_cast<char>(ctrl_t::kSentinel) - 1);
330
- return NonIterableBitMaskType(static_cast<uint16_t>(
331
- _mm_movemask_epi8(_mm_cmpgt_epi8_fixed(ctrl, special))));
327
+ return NonIterableBitMaskType(
328
+ MoveMask(_mm_cmpgt_epi8_fixed(ctrl, special)));
332
329
  }
333
330
 
334
331
  void ConvertSpecialToEmptyAndFullToDeleted(ctrl_t* dst) const {
@@ -344,6 +341,17 @@ struct GroupSse2Impl {
344
341
  _mm_storeu_si128(reinterpret_cast<__m128i*>(dst), res);
345
342
  }
346
343
 
344
+ static MaskInt MoveMask(__m128i xmm) {
345
+ auto mask = static_cast<MaskInt>(_mm_movemask_epi8(xmm));
346
+ #ifdef __clang__
347
+ // TODO(b/472522597): Without the inline asm, clang ends up generating an
348
+ // unnecessary movzx to zero the upper bits of the output, but those bits
349
+ // are already zero. See https://godbolt.org/z/G6xW1Ecbx.
350
+ asm("" : "+r"(mask)); // NOLINT
351
+ #endif
352
+ return mask;
353
+ }
354
+
347
355
  __m128i ctrl;
348
356
  };
349
357
  #endif // ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
@@ -22,6 +22,7 @@
22
22
  #include <cstdint>
23
23
  #include <functional>
24
24
  #include <limits>
25
+ #include <utility>
25
26
 
26
27
  #include "absl/base/attributes.h"
27
28
  #include "absl/base/config.h"
@@ -81,7 +82,6 @@ void HashtablezInfo::PrepareForSampling(int64_t stride,
81
82
  capacity.store(0, std::memory_order_relaxed);
82
83
  size.store(0, std::memory_order_relaxed);
83
84
  num_erases.store(0, std::memory_order_relaxed);
84
- num_insert_hits.store(0, std::memory_order_relaxed);
85
85
  num_rehashes.store(0, std::memory_order_relaxed);
86
86
  max_probe_length.store(0, std::memory_order_relaxed);
87
87
  total_probe_length.store(0, std::memory_order_relaxed);
@@ -148,7 +148,7 @@ HashtablezInfo* SampleSlow(SamplingState& next_sample,
148
148
  size_t value_size, uint16_t soo_capacity) {
149
149
  if (ABSL_PREDICT_FALSE(ShouldForceSampling())) {
150
150
  next_sample.next_sample = 1;
151
- const int64_t old_stride = exchange(next_sample.sample_stride, 1);
151
+ const int64_t old_stride = std::exchange(next_sample.sample_stride, 1);
152
152
  HashtablezInfo* result = GlobalHashtablezSampler().Register(
153
153
  old_stride, inline_element_size, key_size, value_size, soo_capacity);
154
154
  return result;
@@ -82,7 +82,6 @@ struct HashtablezInfo : public profiling_internal::Sample<HashtablezInfo> {
82
82
  std::atomic<size_t> capacity;
83
83
  std::atomic<size_t> size;
84
84
  std::atomic<size_t> num_erases;
85
- std::atomic<size_t> num_insert_hits;
86
85
  std::atomic<size_t> num_rehashes;
87
86
  std::atomic<size_t> max_probe_length;
88
87
  std::atomic<size_t> total_probe_length;
@@ -111,16 +110,6 @@ struct HashtablezInfo : public profiling_internal::Sample<HashtablezInfo> {
111
110
 
112
111
  void RecordRehashSlow(HashtablezInfo* info, size_t total_probe_length);
113
112
 
114
- // This is inline to avoid calling convention overhead for an otherwise
115
- // lightweight operation.
116
- inline void RecordInsertHitSlow(HashtablezInfo* info) {
117
- // We avoid fetch_add since no other thread should be mutating the table
118
- // simultaneously without synchronization.
119
- info->num_insert_hits.store(
120
- info->num_insert_hits.load(std::memory_order_relaxed) + 1,
121
- std::memory_order_relaxed);
122
- }
123
-
124
113
  void RecordReservationSlow(HashtablezInfo* info, size_t target_capacity);
125
114
 
126
115
  void RecordClearedReservationSlow(HashtablezInfo* info);
@@ -194,11 +183,6 @@ class HashtablezInfoHandle {
194
183
  RecordEraseSlow(info_);
195
184
  }
196
185
 
197
- inline void RecordInsertHit() {
198
- if (ABSL_PREDICT_TRUE(info_ == nullptr)) return;
199
- RecordInsertHitSlow(info_);
200
- }
201
-
202
186
  friend inline void swap(HashtablezInfoHandle& lhs,
203
187
  HashtablezInfoHandle& rhs) {
204
188
  std::swap(lhs.info_, rhs.info_);
@@ -225,7 +209,6 @@ class HashtablezInfoHandle {
225
209
  inline void RecordInsertMiss(size_t /*hash*/,
226
210
  size_t /*distance_from_desired*/) {}
227
211
  inline void RecordErase() {}
228
- inline void RecordInsertHit() {}
229
212
 
230
213
  friend inline void swap(HashtablezInfoHandle& /*lhs*/,
231
214
  HashtablezInfoHandle& /*rhs*/) {}
@@ -63,9 +63,10 @@ using ::testing::UnorderedElementsAre;
63
63
 
64
64
  std::vector<size_t> GetSizes(HashtablezSampler* s) {
65
65
  std::vector<size_t> res;
66
- s->Iterate([&](const HashtablezInfo& info) {
66
+ EXPECT_EQ(s->Iterate([&](const HashtablezInfo& info) {
67
67
  res.push_back(info.size.load(std::memory_order_acquire));
68
- });
68
+ }),
69
+ 0);
69
70
  return res;
70
71
  }
71
72
 
@@ -99,7 +100,6 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
99
100
  EXPECT_EQ(info.capacity.load(), 0);
100
101
  EXPECT_EQ(info.size.load(), 0);
101
102
  EXPECT_EQ(info.num_erases.load(), 0);
102
- EXPECT_EQ(info.num_insert_hits.load(), 0);
103
103
  EXPECT_EQ(info.num_rehashes.load(), 0);
104
104
  EXPECT_EQ(info.max_probe_length.load(), 0);
105
105
  EXPECT_EQ(info.total_probe_length.load(), 0);
@@ -116,7 +116,6 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
116
116
  info.capacity.store(1, std::memory_order_relaxed);
117
117
  info.size.store(1, std::memory_order_relaxed);
118
118
  info.num_erases.store(1, std::memory_order_relaxed);
119
- info.num_insert_hits.store(1, std::memory_order_relaxed);
120
119
  info.max_probe_length.store(1, std::memory_order_relaxed);
121
120
  info.total_probe_length.store(1, std::memory_order_relaxed);
122
121
  info.hashes_bitwise_or.store(1, std::memory_order_relaxed);
@@ -131,7 +130,6 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
131
130
  EXPECT_EQ(info.capacity.load(), 0);
132
131
  EXPECT_EQ(info.size.load(), 0);
133
132
  EXPECT_EQ(info.num_erases.load(), 0);
134
- EXPECT_EQ(info.num_insert_hits.load(), 0);
135
133
  EXPECT_EQ(info.num_rehashes.load(), 0);
136
134
  EXPECT_EQ(info.max_probe_length.load(), 0);
137
135
  EXPECT_EQ(info.total_probe_length.load(), 0);
@@ -218,25 +216,6 @@ TEST(HashtablezInfoTest, RecordErase) {
218
216
  EXPECT_EQ(info.soo_capacity, 1);
219
217
  }
220
218
 
221
- TEST(HashtablezInfoTest, RecordInsertHit) {
222
- const int64_t test_stride = 31;
223
- const size_t test_element_size = 29;
224
- const size_t test_key_size = 27;
225
- const size_t test_value_size = 25;
226
-
227
- HashtablezInfo info;
228
- absl::MutexLock l(info.init_mu);
229
- info.PrepareForSampling(test_stride, test_element_size,
230
- /*key_size=*/test_key_size,
231
- /*value_size=*/test_value_size,
232
- /*soo_capacity_value=*/1);
233
- EXPECT_EQ(info.num_insert_hits.load(), 0);
234
- RecordInsertHitSlow(&info);
235
- EXPECT_EQ(info.num_insert_hits.load(), 1);
236
- RecordInsertHitSlow(&info);
237
- EXPECT_EQ(info.num_insert_hits.load(), 2);
238
- }
239
-
240
219
  TEST(HashtablezInfoTest, RecordRehash) {
241
220
  const int64_t test_stride = 33;
242
221
  const size_t test_element_size = 31;
@@ -381,19 +360,20 @@ TEST(HashtablezSamplerTest, Handle) {
381
360
  info->hashes_bitwise_and.store(0x12345678, std::memory_order_relaxed);
382
361
 
383
362
  bool found = false;
384
- sampler.Iterate([&](const HashtablezInfo& h) {
363
+ EXPECT_EQ(sampler.Iterate([&](const HashtablezInfo& h) {
385
364
  if (&h == info) {
386
365
  EXPECT_EQ(h.weight, test_stride);
387
366
  EXPECT_EQ(h.hashes_bitwise_and.load(), 0x12345678);
388
367
  found = true;
389
368
  }
390
- });
369
+ }),
370
+ 0);
391
371
  EXPECT_TRUE(found);
392
372
 
393
373
  h.Unregister();
394
374
  h = HashtablezInfoHandle();
395
375
  found = false;
396
- sampler.Iterate([&](const HashtablezInfo& h) {
376
+ EXPECT_EQ(sampler.Iterate([&](const HashtablezInfo& h) {
397
377
  if (&h == info) {
398
378
  // this will only happen if some other thread has resurrected the info
399
379
  // the old handle was using.
@@ -401,7 +381,8 @@ TEST(HashtablezSamplerTest, Handle) {
401
381
  found = true;
402
382
  }
403
383
  }
404
- });
384
+ }),
385
+ 0);
405
386
  EXPECT_FALSE(found);
406
387
  }
407
388
  #endif
@@ -487,9 +468,10 @@ TEST(HashtablezSamplerTest, MultiThreaded) {
487
468
  }
488
469
  case 2: {
489
470
  absl::Duration oldest = absl::ZeroDuration();
490
- sampler.Iterate([&](const HashtablezInfo& info) {
471
+ EXPECT_EQ(sampler.Iterate([&](const HashtablezInfo& info) {
491
472
  oldest = std::max(oldest, absl::Now() - info.create_time);
492
- });
473
+ }),
474
+ 0);
493
475
  ASSERT_GE(oldest, absl::ZeroDuration());
494
476
  break;
495
477
  }