re2 1.23.0 → 1.23.2

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 (280) hide show
  1. package/README.md +2 -0
  2. package/binding.gyp +3 -2
  3. package/package.json +5 -5
  4. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +25 -4
  5. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +6 -1
  6. package/vendor/abseil-cpp/CMakeLists.txt +2 -2
  7. package/vendor/abseil-cpp/MODULE.bazel +2 -2
  8. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +0 -1
  9. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +0 -2
  10. package/vendor/abseil-cpp/absl/algorithm/container.h +191 -140
  11. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +818 -0
  12. package/vendor/abseil-cpp/absl/base/BUILD.bazel +44 -5
  13. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +42 -3
  14. package/vendor/abseil-cpp/absl/base/attributes.h +5 -1
  15. package/vendor/abseil-cpp/absl/base/call_once_test.cc +10 -10
  16. package/vendor/abseil-cpp/absl/base/casts.cc +61 -0
  17. package/vendor/abseil-cpp/absl/base/casts.h +128 -2
  18. package/vendor/abseil-cpp/absl/base/casts_test.cc +151 -0
  19. package/vendor/abseil-cpp/absl/base/config.h +13 -37
  20. package/vendor/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  21. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +4 -0
  22. package/vendor/abseil-cpp/absl/base/internal/nullability_traits.h +71 -0
  23. package/vendor/abseil-cpp/absl/base/internal/nullability_traits_test.cc +98 -0
  24. package/vendor/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  25. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +13 -7
  26. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +16 -11
  27. package/vendor/abseil-cpp/absl/base/internal/strerror_test.cc +2 -1
  28. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +0 -9
  29. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +0 -6
  30. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -1
  31. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  32. package/vendor/abseil-cpp/absl/base/macros.h +40 -17
  33. package/vendor/abseil-cpp/absl/base/nullability.h +1 -1
  34. package/vendor/abseil-cpp/absl/base/optimization.h +1 -3
  35. package/vendor/abseil-cpp/absl/base/options.h +1 -27
  36. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +5 -8
  37. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +4 -0
  38. package/vendor/abseil-cpp/absl/container/BUILD.bazel +195 -2
  39. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +136 -2
  40. package/vendor/abseil-cpp/absl/container/btree_map.h +56 -6
  41. package/vendor/abseil-cpp/absl/container/btree_set.h +52 -6
  42. package/vendor/abseil-cpp/absl/container/btree_test.cc +107 -1
  43. package/vendor/abseil-cpp/absl/container/chunked_queue.h +755 -0
  44. package/vendor/abseil-cpp/absl/container/chunked_queue_benchmark.cc +386 -0
  45. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +768 -0
  46. package/vendor/abseil-cpp/absl/container/fixed_array.h +4 -6
  47. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +16 -6
  48. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +1 -2
  49. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +16 -6
  50. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +0 -2
  51. package/vendor/abseil-cpp/absl/container/inlined_vector.h +12 -4
  52. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +21 -0
  53. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +14 -5
  54. package/vendor/abseil-cpp/absl/container/internal/chunked_queue.h +173 -0
  55. package/vendor/abseil-cpp/absl/container/internal/common.h +51 -0
  56. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +7 -1
  57. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +11 -0
  58. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +0 -2
  59. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +1 -2
  60. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +0 -14
  61. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +11 -8
  62. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +3 -4
  63. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +23 -6
  64. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +31 -15
  65. package/vendor/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +80 -0
  66. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +4 -12
  67. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +35 -10
  68. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +149 -23
  69. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +120 -126
  70. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +4 -0
  71. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +8 -0
  72. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +14 -59
  73. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +111 -22
  74. package/vendor/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h +53 -112
  75. package/vendor/abseil-cpp/absl/container/internal/unordered_map_lookup_test.h +10 -15
  76. package/vendor/abseil-cpp/absl/container/internal/unordered_map_members_test.h +3 -3
  77. package/vendor/abseil-cpp/absl/container/internal/unordered_map_modifiers_test.h +45 -61
  78. package/vendor/abseil-cpp/absl/container/internal/unordered_set_constructor_test.h +53 -112
  79. package/vendor/abseil-cpp/absl/container/internal/unordered_set_lookup_test.h +6 -9
  80. package/vendor/abseil-cpp/absl/container/internal/unordered_set_members_test.h +3 -3
  81. package/vendor/abseil-cpp/absl/container/internal/unordered_set_modifiers_test.h +25 -31
  82. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +666 -0
  83. package/vendor/abseil-cpp/absl/container/linked_hash_map_benchmark.cc +140 -0
  84. package/vendor/abseil-cpp/absl/container/linked_hash_map_test.cc +987 -0
  85. package/vendor/abseil-cpp/absl/container/linked_hash_set.h +527 -0
  86. package/vendor/abseil-cpp/absl/container/linked_hash_set_benchmark.cc +84 -0
  87. package/vendor/abseil-cpp/absl/container/linked_hash_set_test.cc +947 -0
  88. package/vendor/abseil-cpp/absl/container/node_hash_map.h +17 -6
  89. package/vendor/abseil-cpp/absl/container/node_hash_set.h +16 -5
  90. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +1 -2
  91. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +79 -0
  92. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +79 -0
  93. package/vendor/abseil-cpp/absl/copts/copts.py +17 -4
  94. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +67 -13
  95. package/vendor/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  96. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +31 -0
  97. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +34 -0
  98. package/vendor/abseil-cpp/absl/debugging/failure_signal_handler.cc +2 -2
  99. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +118 -0
  100. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +71 -0
  101. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +97 -0
  102. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  103. package/vendor/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  104. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +4 -0
  105. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -0
  106. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +1 -1
  107. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +0 -7
  108. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  109. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +2 -1
  110. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  111. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +2 -2
  112. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +35 -67
  113. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +3 -0
  114. package/vendor/abseil-cpp/absl/debugging/stacktrace_benchmark.cc +24 -1
  115. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +39 -15
  116. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  117. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +25 -40
  118. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  119. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +1 -0
  120. package/vendor/abseil-cpp/absl/flags/declare.h +9 -0
  121. package/vendor/abseil-cpp/absl/flags/flag.h +2 -1
  122. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  123. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +3 -2
  124. package/vendor/abseil-cpp/absl/flags/marshalling.cc +1 -16
  125. package/vendor/abseil-cpp/absl/flags/parse.cc +4 -2
  126. package/vendor/abseil-cpp/absl/flags/parse_test.cc +1 -1
  127. package/vendor/abseil-cpp/absl/flags/reflection.cc +4 -3
  128. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +4 -0
  129. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +4 -0
  130. package/vendor/abseil-cpp/absl/functional/any_invocable.h +3 -1
  131. package/vendor/abseil-cpp/absl/functional/function_ref.h +125 -20
  132. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +122 -9
  133. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +13 -2
  134. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +42 -4
  135. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +11 -0
  136. package/vendor/abseil-cpp/absl/hash/hash_test.cc +5 -2
  137. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +184 -53
  138. package/vendor/abseil-cpp/absl/hash/internal/hash.h +116 -10
  139. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +43 -4
  140. package/vendor/abseil-cpp/absl/log/BUILD.bazel +2 -0
  141. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +35 -1
  142. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +59 -4
  143. package/vendor/abseil-cpp/absl/log/die_if_null.cc +3 -1
  144. package/vendor/abseil-cpp/absl/log/die_if_null.h +24 -3
  145. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +31 -1
  146. package/vendor/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  147. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +3 -1
  148. package/vendor/abseil-cpp/absl/log/internal/check_op.h +44 -18
  149. package/vendor/abseil-cpp/absl/log/internal/conditions.h +38 -35
  150. package/vendor/abseil-cpp/absl/log/internal/container.h +312 -0
  151. package/vendor/abseil-cpp/absl/log/internal/container_test.cc +254 -0
  152. package/vendor/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  153. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -2
  154. package/vendor/abseil-cpp/absl/log/internal/log_message.h +5 -1
  155. package/vendor/abseil-cpp/absl/log/internal/strip.h +30 -31
  156. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +19 -19
  157. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  158. package/vendor/abseil-cpp/absl/log/log.h +2 -2
  159. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +51 -0
  160. package/vendor/abseil-cpp/absl/meta/CMakeLists.txt +46 -0
  161. package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing.h +73 -0
  162. package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing_test.cc +40 -0
  163. package/vendor/abseil-cpp/absl/meta/internal/requires.h +67 -0
  164. package/vendor/abseil-cpp/absl/meta/internal/requires_test.cc +66 -0
  165. package/vendor/abseil-cpp/absl/meta/type_traits.h +42 -1
  166. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +14 -0
  167. package/vendor/abseil-cpp/absl/numeric/int128.h +41 -21
  168. package/vendor/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  169. package/vendor/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  170. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +52 -5
  171. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +1 -0
  172. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +1 -0
  173. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +18 -7
  174. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +1 -0
  175. package/vendor/abseil-cpp/absl/random/internal/fastmath_test.cc +3 -5
  176. package/vendor/abseil-cpp/absl/random/internal/platform.h +0 -13
  177. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +0 -1
  178. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +1 -27
  179. package/vendor/abseil-cpp/absl/status/BUILD.bazel +17 -0
  180. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +16 -0
  181. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +4 -2
  182. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +2 -2
  183. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +2 -1
  184. package/vendor/abseil-cpp/absl/status/status.cc +4 -0
  185. package/vendor/abseil-cpp/absl/status/status.h +5 -0
  186. package/vendor/abseil-cpp/absl/status/status_matchers.h +48 -0
  187. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +27 -0
  188. package/vendor/abseil-cpp/absl/status/status_test.cc +1 -0
  189. package/vendor/abseil-cpp/absl/status/statusor.h +1 -1
  190. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +101 -21
  191. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +99 -5
  192. package/vendor/abseil-cpp/absl/strings/ascii.h +9 -4
  193. package/vendor/abseil-cpp/absl/strings/cord.cc +15 -10
  194. package/vendor/abseil-cpp/absl/strings/cord.h +1 -1
  195. package/vendor/abseil-cpp/absl/strings/escaping.cc +126 -94
  196. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  197. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite_test.cc +95 -0
  198. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +2 -0
  199. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree_test.cc +8 -8
  200. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +24 -18
  201. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +10 -16
  202. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +9 -7
  203. package/vendor/abseil-cpp/absl/strings/internal/generic_printer.cc +107 -0
  204. package/vendor/abseil-cpp/absl/strings/internal/generic_printer.h +115 -0
  205. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +423 -0
  206. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +685 -0
  207. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +0 -12
  208. package/vendor/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  209. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +21 -7
  210. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +495 -8
  211. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -15
  212. package/vendor/abseil-cpp/absl/strings/numbers.cc +71 -8
  213. package/vendor/abseil-cpp/absl/strings/numbers.h +25 -12
  214. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +70 -0
  215. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +194 -0
  216. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite_test.cc +154 -0
  217. package/vendor/abseil-cpp/absl/strings/str_cat.cc +96 -91
  218. package/vendor/abseil-cpp/absl/strings/str_cat.h +17 -12
  219. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +4 -4
  220. package/vendor/abseil-cpp/absl/strings/str_split.h +1 -1
  221. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +1 -1
  222. package/vendor/abseil-cpp/absl/strings/string_view.h +8 -718
  223. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +1 -1265
  224. package/vendor/abseil-cpp/absl/strings/substitute.cc +24 -24
  225. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +2 -3
  226. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +1 -0
  227. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  228. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout_test.cc +15 -5
  229. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +2 -1
  230. package/vendor/abseil-cpp/absl/synchronization/mutex.h +47 -23
  231. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  232. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +2 -0
  233. package/vendor/abseil-cpp/absl/time/civil_time_benchmark.cc +1 -2
  234. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +58 -103
  235. package/vendor/abseil-cpp/absl/time/clock.cc +18 -16
  236. package/vendor/abseil-cpp/absl/time/clock_test.cc +2 -2
  237. package/vendor/abseil-cpp/absl/time/duration_benchmark.cc +144 -0
  238. package/vendor/abseil-cpp/absl/time/duration_test.cc +26 -29
  239. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +7 -1
  240. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +4 -2
  241. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  242. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +186 -0
  243. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  244. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  245. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ensenada +0 -0
  246. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santa_Isabel +0 -0
  247. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tijuana +0 -0
  248. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaNorte +0 -0
  249. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab +9 -9
  250. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +12 -12
  251. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +47 -47
  252. package/vendor/abseil-cpp/absl/time/time.cc +4 -4
  253. package/vendor/abseil-cpp/absl/time/time.h +10 -10
  254. package/vendor/abseil-cpp/absl/time/time_test.cc +1 -0
  255. package/vendor/abseil-cpp/absl/types/compare.h +62 -61
  256. package/vendor/abseil-cpp/absl/types/compare_test.cc +3 -3
  257. package/vendor/abseil-cpp/absl/types/internal/span.h +1 -0
  258. package/vendor/abseil-cpp/absl/types/optional.h +2 -2
  259. package/vendor/abseil-cpp/absl/types/span.h +10 -2
  260. package/vendor/abseil-cpp/absl/utility/utility.h +13 -0
  261. package/vendor/abseil-cpp/ci/absl_alternate_options.h +0 -1
  262. package/vendor/abseil-cpp/ci/cmake_common.sh +1 -1
  263. package/vendor/abseil-cpp/ci/cmake_install_test.sh +6 -0
  264. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +1 -0
  265. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +2 -0
  266. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +1 -0
  267. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +1 -0
  268. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +1 -0
  269. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +1 -0
  270. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +1 -0
  271. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +6 -0
  272. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +6 -0
  273. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +3 -2
  274. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +5 -0
  275. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -0
  276. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -0
  277. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +6 -1
  278. package/vendor/abseil-cpp/absl/base/internal/identity.h +0 -39
  279. package/vendor/abseil-cpp/absl/strings/string_view.cc +0 -257
  280. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +0 -380
@@ -461,15 +461,6 @@ class PerTableSeed {
461
461
  const uint16_t seed_;
462
462
  };
463
463
 
464
- // Returns next per-table seed.
465
- inline uint16_t NextSeed() {
466
- static_assert(PerTableSeed::kBitCount == 16);
467
- thread_local uint16_t seed =
468
- static_cast<uint16_t>(reinterpret_cast<uintptr_t>(&seed));
469
- seed += uint16_t{0xad53};
470
- return seed;
471
- }
472
-
473
464
  // The size and also has additionally
474
465
  // 1) one bit that stores whether we have infoz.
475
466
  // 2) PerTableSeed::kBitCount bits for the seed.
@@ -517,6 +508,9 @@ class HashtableSize {
517
508
 
518
509
  void set_no_seed_for_testing() { data_ &= ~kSeedMask; }
519
510
 
511
+ // Returns next per-table seed.
512
+ static uint16_t NextSeed();
513
+
520
514
  private:
521
515
  void set_seed(uint16_t seed) {
522
516
  data_ = (data_ & ~kSeedMask) | (seed | PerTableSeed::kSignBit);
@@ -1144,7 +1138,7 @@ class CommonFields : public CommonFieldsGenerationInfo {
1144
1138
  HeapOrSoo heap_or_soo_;
1145
1139
  };
1146
1140
 
1147
- template <class Policy, class Hash, class Eq, class Alloc>
1141
+ template <class Policy, class... Params>
1148
1142
  class raw_hash_set;
1149
1143
 
1150
1144
  // Returns the next valid capacity after `n`.
@@ -1474,81 +1468,11 @@ extern template size_t TryFindNewIndexWithoutProbing(size_t h1,
1474
1468
  ctrl_t* new_ctrl,
1475
1469
  size_t new_capacity);
1476
1470
 
1477
- // Sets sanitizer poisoning for slot corresponding to control byte being set.
1478
- inline void DoSanitizeOnSetCtrl(const CommonFields& c, size_t i, ctrl_t h,
1479
- size_t slot_size) {
1480
- ABSL_SWISSTABLE_ASSERT(i < c.capacity());
1481
- auto* slot_i = static_cast<const char*>(c.slot_array()) + i * slot_size;
1482
- if (IsFull(h)) {
1483
- SanitizerUnpoisonMemoryRegion(slot_i, slot_size);
1484
- } else {
1485
- SanitizerPoisonMemoryRegion(slot_i, slot_size);
1486
- }
1487
- }
1488
-
1489
- // Sets `ctrl[i]` to `h`.
1490
- //
1491
- // Unlike setting it directly, this function will perform bounds checks and
1492
- // mirror the value to the cloned tail if necessary.
1493
- inline void SetCtrl(const CommonFields& c, size_t i, ctrl_t h,
1494
- size_t slot_size) {
1495
- ABSL_SWISSTABLE_ASSERT(!c.is_small());
1496
- DoSanitizeOnSetCtrl(c, i, h, slot_size);
1497
- ctrl_t* ctrl = c.control();
1498
- ctrl[i] = h;
1499
- ctrl[((i - NumClonedBytes()) & c.capacity()) +
1500
- (NumClonedBytes() & c.capacity())] = h;
1501
- }
1502
- // Overload for setting to an occupied `h2_t` rather than a special `ctrl_t`.
1503
- inline void SetCtrl(const CommonFields& c, size_t i, h2_t h, size_t slot_size) {
1504
- SetCtrl(c, i, static_cast<ctrl_t>(h), slot_size);
1505
- }
1506
-
1507
- // Like SetCtrl, but in a single group table, we can save some operations when
1508
- // setting the cloned control byte.
1509
- inline void SetCtrlInSingleGroupTable(const CommonFields& c, size_t i, ctrl_t h,
1510
- size_t slot_size) {
1511
- ABSL_SWISSTABLE_ASSERT(!c.is_small());
1512
- ABSL_SWISSTABLE_ASSERT(is_single_group(c.capacity()));
1513
- DoSanitizeOnSetCtrl(c, i, h, slot_size);
1514
- ctrl_t* ctrl = c.control();
1515
- ctrl[i] = h;
1516
- ctrl[i + c.capacity() + 1] = h;
1517
- }
1518
- // Overload for setting to an occupied `h2_t` rather than a special `ctrl_t`.
1519
- inline void SetCtrlInSingleGroupTable(const CommonFields& c, size_t i, h2_t h,
1520
- size_t slot_size) {
1521
- SetCtrlInSingleGroupTable(c, i, static_cast<ctrl_t>(h), slot_size);
1522
- }
1523
-
1524
- // Like SetCtrl, but in a table with capacity >= Group::kWidth - 1,
1525
- // we can save some operations when setting the cloned control byte.
1526
- inline void SetCtrlInLargeTable(const CommonFields& c, size_t i, ctrl_t h,
1527
- size_t slot_size) {
1528
- ABSL_SWISSTABLE_ASSERT(c.capacity() >= Group::kWidth - 1);
1529
- DoSanitizeOnSetCtrl(c, i, h, slot_size);
1530
- ctrl_t* ctrl = c.control();
1531
- ctrl[i] = h;
1532
- ctrl[((i - NumClonedBytes()) & c.capacity()) + NumClonedBytes()] = h;
1533
- }
1534
- // Overload for setting to an occupied `h2_t` rather than a special `ctrl_t`.
1535
- inline void SetCtrlInLargeTable(const CommonFields& c, size_t i, h2_t h,
1536
- size_t slot_size) {
1537
- SetCtrlInLargeTable(c, i, static_cast<ctrl_t>(h), slot_size);
1538
- }
1539
-
1540
1471
  // growth_info (which is a size_t) is stored with the backing array.
1541
1472
  constexpr size_t BackingArrayAlignment(size_t align_of_slot) {
1542
1473
  return (std::max)(align_of_slot, alignof(GrowthInfo));
1543
1474
  }
1544
1475
 
1545
- // Returns the address of the ith slot in slots where each slot occupies
1546
- // slot_size.
1547
- inline void* SlotAddress(void* slot_array, size_t slot, size_t slot_size) {
1548
- return static_cast<void*>(static_cast<char*>(slot_array) +
1549
- (slot * slot_size));
1550
- }
1551
-
1552
1476
  // Iterates over all full slots and calls `cb(const ctrl_t*, void*)`.
1553
1477
  // No insertion to the table is allowed during `cb` call.
1554
1478
  // Erasure is allowed only for the element passed to the callback.
@@ -1568,10 +1492,12 @@ constexpr bool ShouldSampleHashtablezInfoForAlloc() {
1568
1492
 
1569
1493
  // Allocates `n` bytes for a backing array.
1570
1494
  template <size_t AlignOfBackingArray, typename Alloc>
1571
- ABSL_ATTRIBUTE_NOINLINE void* AllocateBackingArray(void* alloc, size_t n) {
1495
+ void* AllocateBackingArray(void* alloc, size_t n) {
1572
1496
  return Allocate<AlignOfBackingArray>(static_cast<Alloc*>(alloc), n);
1573
1497
  }
1574
1498
 
1499
+ // Note: we mark this function as ABSL_ATTRIBUTE_NOINLINE because we don't want
1500
+ // it to be inlined into e.g. the destructor to save code size.
1575
1501
  template <size_t AlignOfBackingArray, typename Alloc>
1576
1502
  ABSL_ATTRIBUTE_NOINLINE void DeallocateBackingArray(
1577
1503
  void* alloc, size_t capacity, ctrl_t* ctrl, size_t slot_size,
@@ -1804,29 +1730,44 @@ ABSL_ATTRIBUTE_NOINLINE void TransferNRelocatable(void*, void* dst, void* src,
1804
1730
  // empty class cases.
1805
1731
  void* GetRefForEmptyClass(CommonFields& common);
1806
1732
 
1807
- // Given the hash of a value not currently in the table and the first empty
1808
- // slot in the probe sequence, finds a viable slot index to insert it at.
1733
+ // Given the hash of a value not currently in the table and the first group with
1734
+ // an empty slot in the probe sequence, finds a viable slot index to insert it
1735
+ // at.
1809
1736
  //
1810
1737
  // In case there's no space left, the table can be resized or rehashed
1811
1738
  // (for tables with deleted slots, see FindInsertPositionWithGrowthOrRehash).
1812
1739
  //
1813
1740
  // In the case of absence of deleted slots and positive growth_left, the element
1814
- // can be inserted in the provided `target` position.
1741
+ // can be inserted in one of the empty slots in the provided `target_group`.
1815
1742
  //
1816
1743
  // When the table has deleted slots (according to GrowthInfo), the target
1817
1744
  // position will be searched one more time using `find_first_non_full`.
1818
1745
  //
1819
1746
  // REQUIRES: `!common.is_small()`.
1820
1747
  // REQUIRES: At least one non-full slot available.
1821
- // REQUIRES: `target` is a valid empty position to insert.
1748
+ // REQUIRES: `mask_empty` is a mask containing empty slots for the
1749
+ // `target_group`.
1750
+ // REQUIRES: `target_group` is a starting position for the group that has
1751
+ // at least one empty slot.
1822
1752
  size_t PrepareInsertLarge(CommonFields& common, const PolicyFunctions& policy,
1823
- size_t hash, FindInfo target);
1753
+ size_t hash, Group::NonIterableBitMaskType mask_empty,
1754
+ FindInfo target_group);
1824
1755
 
1825
1756
  // Same as above, but with generations enabled, we may end up changing the seed,
1826
1757
  // which means we need to be able to recompute the hash.
1827
1758
  size_t PrepareInsertLargeGenerationsEnabled(
1828
1759
  CommonFields& common, const PolicyFunctions& policy, size_t hash,
1829
- FindInfo target, absl::FunctionRef<size_t(size_t)> recompute_hash);
1760
+ Group::NonIterableBitMaskType mask_empty, FindInfo target_group,
1761
+ absl::FunctionRef<size_t(size_t)> recompute_hash);
1762
+
1763
+ template <typename Policy, typename Hash, typename Eq, typename Alloc>
1764
+ struct InstantiateRawHashSet {
1765
+ using type = typename ApplyWithoutDefaultSuffix<
1766
+ raw_hash_set,
1767
+ TypeList<void, typename Policy::DefaultHash, typename Policy::DefaultEq,
1768
+ typename Policy::DefaultAlloc>,
1769
+ TypeList<Policy, Hash, Eq, Alloc>>::type;
1770
+ };
1830
1771
 
1831
1772
  // A SwissTable.
1832
1773
  //
@@ -1834,26 +1775,47 @@ size_t PrepareInsertLargeGenerationsEnabled(
1834
1775
  // the slots of the hashtable (see hash_policy_traits.h for the full interface
1835
1776
  // of policy).
1836
1777
  //
1778
+ // Params...: a variadic list of parameters that allows us to omit default
1779
+ // types. This reduces the mangled name of the class and the size of
1780
+ // debug strings like __PRETTY_FUNCTION__. Default types do not give
1781
+ // any new information.
1782
+ //
1837
1783
  // Hash: a (possibly polymorphic) functor that hashes keys of the hashtable. The
1838
1784
  // functor should accept a key and return size_t as hash. For best performance
1839
1785
  // it is important that the hash function provides high entropy across all bits
1840
1786
  // of the hash.
1787
+ // This is the first element in `Params...` if it exists, or Policy::DefaultHash
1788
+ // otherwise.
1841
1789
  //
1842
1790
  // Eq: a (possibly polymorphic) functor that compares two keys for equality. It
1843
1791
  // should accept two (of possibly different type) keys and return a bool: true
1844
1792
  // if they are equal, false if they are not. If two keys compare equal, then
1845
1793
  // their hash values as defined by Hash MUST be equal.
1794
+ // This is the second element in `Params...` if it exists, or Policy::DefaultEq
1795
+ // otherwise.
1846
1796
  //
1847
1797
  // Allocator: an Allocator
1848
1798
  // [https://en.cppreference.com/w/cpp/named_req/Allocator] with which
1849
1799
  // the storage of the hashtable will be allocated and the elements will be
1850
1800
  // constructed and destroyed.
1851
- template <class Policy, class Hash, class Eq, class Alloc>
1801
+ // This is the third element in `Params...` if it exists, or
1802
+ // Policy::DefaultAlloc otherwise.
1803
+ template <class Policy, class... Params>
1852
1804
  class raw_hash_set {
1853
1805
  using PolicyTraits = hash_policy_traits<Policy>;
1806
+ using Hash = GetFromListOr<typename Policy::DefaultHash, 0, Params...>;
1807
+ using Eq = GetFromListOr<typename Policy::DefaultEq, 1, Params...>;
1808
+ using Alloc = GetFromListOr<typename Policy::DefaultAlloc, 2, Params...>;
1854
1809
  using KeyArgImpl =
1855
1810
  KeyArg<IsTransparent<Eq>::value && IsTransparent<Hash>::value>;
1856
1811
 
1812
+ static_assert(
1813
+ std::is_same_v<
1814
+ typename InstantiateRawHashSet<Policy, Hash, Eq, Alloc>::type,
1815
+ raw_hash_set>,
1816
+ "Redundant template parameters were passed. Use InstantiateRawHashSet<> "
1817
+ "instead");
1818
+
1857
1819
  public:
1858
1820
  using init_type = typename PolicyTraits::init_type;
1859
1821
  using key_type = typename PolicyTraits::key_type;
@@ -2466,13 +2428,13 @@ class raw_hash_set {
2466
2428
  // s.insert({"abc", 42});
2467
2429
  std::pair<iterator, bool> insert(init_type&& value)
2468
2430
  ABSL_ATTRIBUTE_LIFETIME_BOUND
2469
- #if __cplusplus >= 202002L
2431
+ #if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
2470
2432
  requires(!IsLifetimeBoundAssignmentFrom<init_type>::value)
2471
2433
  #endif
2472
2434
  {
2473
2435
  return emplace(std::move(value));
2474
2436
  }
2475
- #if __cplusplus >= 202002L
2437
+ #if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
2476
2438
  std::pair<iterator, bool> insert(
2477
2439
  init_type&& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
2478
2440
  ABSL_ATTRIBUTE_LIFETIME_BOUND
@@ -2515,17 +2477,17 @@ class raw_hash_set {
2515
2477
 
2516
2478
  template <class InputIt>
2517
2479
  void insert(InputIt first, InputIt last) {
2518
- for (; first != last; ++first) emplace(*first);
2480
+ insert_range(first, last);
2519
2481
  }
2520
2482
 
2521
2483
  template <class T, RequiresNotInit<T> = 0,
2522
2484
  std::enable_if_t<Insertable<const T&>::value, int> = 0>
2523
2485
  void insert(std::initializer_list<T> ilist) {
2524
- insert(ilist.begin(), ilist.end());
2486
+ insert_range(ilist.begin(), ilist.end());
2525
2487
  }
2526
2488
 
2527
2489
  void insert(std::initializer_list<init_type> ilist) {
2528
- insert(ilist.begin(), ilist.end());
2490
+ insert_range(ilist.begin(), ilist.end());
2529
2491
  }
2530
2492
 
2531
2493
  insert_return_type insert(node_type&& node) ABSL_ATTRIBUTE_LIFETIME_BOUND {
@@ -2708,8 +2670,11 @@ class raw_hash_set {
2708
2670
 
2709
2671
  // Moves elements from `src` into `this`.
2710
2672
  // If the element already exists in `this`, it is left unmodified in `src`.
2711
- template <typename H, typename E>
2712
- void merge(raw_hash_set<Policy, H, E, Alloc>& src) { // NOLINT
2673
+ template <
2674
+ typename... Params2,
2675
+ typename = std::enable_if_t<std::is_same_v<
2676
+ Alloc, typename raw_hash_set<Policy, Params2...>::allocator_type>>>
2677
+ void merge(raw_hash_set<Policy, Params2...>& src) { // NOLINT
2713
2678
  AssertNotDebugCapacity();
2714
2679
  src.AssertNotDebugCapacity();
2715
2680
  assert(this != &src);
@@ -2733,8 +2698,11 @@ class raw_hash_set {
2733
2698
  }
2734
2699
  }
2735
2700
 
2736
- template <typename H, typename E>
2737
- void merge(raw_hash_set<Policy, H, E, Alloc>&& src) {
2701
+ template <
2702
+ typename... Params2,
2703
+ typename = std::enable_if_t<std::is_same_v<
2704
+ Alloc, typename raw_hash_set<Policy, Params2...>::allocator_type>>>
2705
+ void merge(raw_hash_set<Policy, Params2...>&& src) { // NOLINT
2738
2706
  merge(src);
2739
2707
  }
2740
2708
 
@@ -3243,6 +3211,7 @@ class raw_hash_set {
3243
3211
  }
3244
3212
  if (!empty()) {
3245
3213
  if (equal_to(key, single_slot())) {
3214
+ common().infoz().RecordInsertHit();
3246
3215
  return {single_iterator(), false};
3247
3216
  }
3248
3217
  }
@@ -3260,31 +3229,48 @@ class raw_hash_set {
3260
3229
  auto seq = probe(common(), hash);
3261
3230
  const h2_t h2 = H2(hash);
3262
3231
  const ctrl_t* ctrl = control();
3263
- while (true) {
3232
+ size_t index;
3233
+ bool inserted;
3234
+ // We use a lambda function to be able to exit from the nested loop without
3235
+ // duplicating generated code for the return statement (e.g. iterator_at).
3236
+ [&]() ABSL_ATTRIBUTE_ALWAYS_INLINE {
3237
+ while (true) {
3264
3238
  #ifndef ABSL_HAVE_MEMORY_SANITIZER
3265
- absl::PrefetchToLocalCache(slot_array() + seq.offset());
3239
+ absl::PrefetchToLocalCache(slot_array() + seq.offset());
3266
3240
  #endif
3267
- Group g{ctrl + seq.offset()};
3268
- for (uint32_t i : g.Match(h2)) {
3269
- if (ABSL_PREDICT_TRUE(equal_to(key, slot_array() + seq.offset(i))))
3270
- return {iterator_at(seq.offset(i)), false};
3271
- }
3272
- auto mask_empty = g.MaskEmpty();
3273
- if (ABSL_PREDICT_TRUE(mask_empty)) {
3274
- size_t target = seq.offset(mask_empty.LowestBitSet());
3275
- size_t index =
3276
- SwisstableGenerationsEnabled()
3277
- ? PrepareInsertLargeGenerationsEnabled(
3278
- common(), GetPolicyFunctions(), hash,
3279
- FindInfo{target, seq.index()},
3280
- HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})
3281
- : PrepareInsertLarge(common(), GetPolicyFunctions(), hash,
3282
- FindInfo{target, seq.index()});
3283
- return {iterator_at(index), true};
3241
+ Group g{ctrl + seq.offset()};
3242
+ for (uint32_t i : g.Match(h2)) {
3243
+ if (ABSL_PREDICT_TRUE(equal_to(key, slot_array() + seq.offset(i)))) {
3244
+ index = seq.offset(i);
3245
+ inserted = false;
3246
+ common().infoz().RecordInsertHit();
3247
+ return;
3248
+ }
3249
+ }
3250
+ auto mask_empty = g.MaskEmpty();
3251
+ if (ABSL_PREDICT_TRUE(mask_empty)) {
3252
+ size_t target_group_offset = seq.offset();
3253
+ index = SwisstableGenerationsEnabled()
3254
+ ? PrepareInsertLargeGenerationsEnabled(
3255
+ common(), GetPolicyFunctions(), hash, mask_empty,
3256
+ FindInfo{target_group_offset, seq.index()},
3257
+ HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})
3258
+ : PrepareInsertLarge(
3259
+ common(), GetPolicyFunctions(), hash, mask_empty,
3260
+ FindInfo{target_group_offset, seq.index()});
3261
+ inserted = true;
3262
+ return;
3263
+ }
3264
+ seq.next();
3265
+ ABSL_SWISSTABLE_ASSERT(seq.index() <= capacity() && "full table!");
3284
3266
  }
3285
- seq.next();
3286
- ABSL_SWISSTABLE_ASSERT(seq.index() <= capacity() && "full table!");
3287
- }
3267
+ }();
3268
+ return {iterator_at(index), inserted};
3269
+ }
3270
+
3271
+ template <class InputIt>
3272
+ void insert_range(InputIt first, InputIt last) {
3273
+ for (; first != last; ++first) emplace(*first);
3288
3274
  }
3289
3275
 
3290
3276
  protected:
@@ -3672,19 +3658,19 @@ struct HashtableFreeFunctionsAccess {
3672
3658
  };
3673
3659
 
3674
3660
  // Erases all elements that satisfy the predicate `pred` from the container `c`.
3675
- template <typename P, typename H, typename E, typename A, typename Predicate>
3676
- typename raw_hash_set<P, H, E, A>::size_type EraseIf(
3677
- Predicate& pred, raw_hash_set<P, H, E, A>* c) {
3661
+ template <typename P, typename... Params, typename Predicate>
3662
+ typename raw_hash_set<P, Params...>::size_type EraseIf(
3663
+ Predicate& pred, raw_hash_set<P, Params...>* c) {
3678
3664
  return HashtableFreeFunctionsAccess::EraseIf(pred, c);
3679
3665
  }
3680
3666
 
3681
3667
  // Calls `cb` for all elements in the container `c`.
3682
- template <typename P, typename H, typename E, typename A, typename Callback>
3683
- void ForEach(Callback& cb, raw_hash_set<P, H, E, A>* c) {
3668
+ template <typename P, typename... Params, typename Callback>
3669
+ void ForEach(Callback& cb, raw_hash_set<P, Params...>* c) {
3684
3670
  return HashtableFreeFunctionsAccess::ForEach(cb, c);
3685
3671
  }
3686
- template <typename P, typename H, typename E, typename A, typename Callback>
3687
- void ForEach(Callback& cb, const raw_hash_set<P, H, E, A>* c) {
3672
+ template <typename P, typename... Params, typename Callback>
3673
+ void ForEach(Callback& cb, const raw_hash_set<P, Params...>* c) {
3688
3674
  return HashtableFreeFunctionsAccess::ForEach(cb, c);
3689
3675
  }
3690
3676
 
@@ -3757,6 +3743,14 @@ extern template size_t GrowSooTableToNextCapacityAndPrepareInsert<16, true>(
3757
3743
  bool);
3758
3744
  #endif
3759
3745
 
3746
+ extern template void* AllocateBackingArray<
3747
+ BackingArrayAlignment(alignof(size_t)), std::allocator<char>>(void* alloc,
3748
+ size_t n);
3749
+ extern template void DeallocateBackingArray<
3750
+ BackingArrayAlignment(alignof(size_t)), std::allocator<char>>(
3751
+ void* alloc, size_t capacity, ctrl_t* ctrl, size_t slot_size,
3752
+ size_t slot_align, bool had_infoz);
3753
+
3760
3754
  } // namespace container_internal
3761
3755
  ABSL_NAMESPACE_END
3762
3756
  } // namespace absl
@@ -142,6 +142,10 @@ struct Policy {
142
142
  using init_type = Tracked<int32_t>;
143
143
  using key_type = int32_t;
144
144
 
145
+ using DefaultHash = void;
146
+ using DefaultEq = void;
147
+ using DefaultAlloc = void;
148
+
145
149
  template <class allocator_type, class... Args>
146
150
  static void construct(allocator_type* alloc, slot_type* slot,
147
151
  Args&&... args) {
@@ -51,6 +51,10 @@ struct IntPolicy {
51
51
  using key_type = int64_t;
52
52
  using init_type = int64_t;
53
53
 
54
+ using DefaultHash = void;
55
+ using DefaultEq = void;
56
+ using DefaultAlloc = void;
57
+
54
58
  static void construct(void*, int64_t* slot, int64_t v) { *slot = v; }
55
59
  static void destroy(void*, int64_t*) {}
56
60
  static void transfer(void*, int64_t* new_slot, int64_t* old_slot) {
@@ -97,6 +101,10 @@ class StringPolicy {
97
101
  using key_type = std::string;
98
102
  using init_type = std::pair<std::string, std::string>;
99
103
 
104
+ using DefaultHash = void;
105
+ using DefaultEq = void;
106
+ using DefaultAlloc = void;
107
+
100
108
  template <class allocator_type, class... Args>
101
109
  static void construct(allocator_type* alloc, slot_type* slot, Args... args) {
102
110
  std::allocator_traits<allocator_type>::construct(
@@ -15,8 +15,14 @@
15
15
  // Generates probe length statistics for many combinations of key types and key
16
16
  // distributions, all using the default hash function for swisstable.
17
17
 
18
+ #include <algorithm>
19
+ #include <cstddef>
20
+ #include <cstdint>
21
+ #include <limits>
18
22
  #include <memory>
19
23
  #include <regex> // NOLINT
24
+ #include <string>
25
+ #include <utility>
20
26
  #include <vector>
21
27
 
22
28
  #include "absl/base/no_destructor.h"
@@ -52,6 +58,10 @@ struct Policy {
52
58
  using key_type = T;
53
59
  using init_type = T;
54
60
 
61
+ using DefaultHash = void;
62
+ using DefaultEq = void;
63
+ using DefaultAlloc = void;
64
+
55
65
  template <class allocator_type, class Arg>
56
66
  static void construct(allocator_type* alloc, slot_type* slot,
57
67
  const Arg& arg) {
@@ -227,24 +237,6 @@ Ptr<Align>* MakePtr(uintptr_t v) {
227
237
  return reinterpret_cast<Ptr<Align>*>(v);
228
238
  }
229
239
 
230
- struct IntIdentity {
231
- uint64_t i;
232
- friend bool operator==(IntIdentity a, IntIdentity b) { return a.i == b.i; }
233
- IntIdentity operator++(int) { return IntIdentity{i++}; }
234
- };
235
-
236
- template <int Align>
237
- struct PtrIdentity {
238
- explicit PtrIdentity(uintptr_t val = PointerForAlignment<Align>()) : i(val) {}
239
- uintptr_t i;
240
- friend bool operator==(PtrIdentity a, PtrIdentity b) { return a.i == b.i; }
241
- PtrIdentity operator++(int) {
242
- PtrIdentity p(i);
243
- i += Align;
244
- return p;
245
- }
246
- };
247
-
248
240
  enum class StringSize { kSmall, kMedium, kLarge, kExtraLarge };
249
241
  constexpr char kStringFormat[] = "%s/name-%07d-of-9999999.txt";
250
242
 
@@ -270,20 +262,6 @@ struct String {
270
262
  }
271
263
  };
272
264
 
273
- template <>
274
- struct DefaultHash<IntIdentity> {
275
- struct type {
276
- size_t operator()(IntIdentity t) const { return t.i; }
277
- };
278
- };
279
-
280
- template <int Align>
281
- struct DefaultHash<PtrIdentity<Align>> {
282
- struct type {
283
- size_t operator()(PtrIdentity<Align> t) const { return t.i; }
284
- };
285
- };
286
-
287
265
  template <class T>
288
266
  struct Sequential {
289
267
  T operator()() const { return current++; }
@@ -389,20 +367,6 @@ struct Random<Ptr<Align>*, Dist> {
389
367
  }
390
368
  };
391
369
 
392
- template <class Dist>
393
- struct Random<IntIdentity, Dist> {
394
- IntIdentity operator()() const {
395
- return IntIdentity{Random<uint64_t, Dist>{}()};
396
- }
397
- };
398
-
399
- template <class Dist, int Align>
400
- struct Random<PtrIdentity<Align>, Dist> {
401
- PtrIdentity<Align> operator()() const {
402
- return PtrIdentity<Align>{Random<uintptr_t, Dist>{}() * Align};
403
- }
404
- };
405
-
406
370
  template <class Dist, StringSize size>
407
371
  struct Random<String<size>, Dist> {
408
372
  std::string operator()() const {
@@ -423,18 +387,12 @@ std::string Name();
423
387
 
424
388
  std::string Name(uint32_t*) { return "u32"; }
425
389
  std::string Name(uint64_t*) { return "u64"; }
426
- std::string Name(IntIdentity*) { return "IntIdentity"; }
427
390
 
428
391
  template <int Align>
429
392
  std::string Name(Ptr<Align>**) {
430
393
  return absl::StrCat("Ptr", Align);
431
394
  }
432
395
 
433
- template <int Align>
434
- std::string Name(PtrIdentity<Align>*) {
435
- return absl::StrCat("PtrIdentity", Align);
436
- }
437
-
438
396
  template <StringSize size>
439
397
  std::string Name(String<size>*) {
440
398
  switch (size) {
@@ -558,15 +516,10 @@ int main(int argc, char** argv) {
558
516
 
559
517
  std::vector<Result> results;
560
518
  RunForType<uint64_t>(results);
561
- RunForType<IntIdentity>(results);
562
519
  RunForType<Ptr<8>*>(results);
563
520
  RunForType<Ptr<16>*>(results);
564
521
  RunForType<Ptr<32>*>(results);
565
522
  RunForType<Ptr<64>*>(results);
566
- RunForType<PtrIdentity<8>>(results);
567
- RunForType<PtrIdentity<16>>(results);
568
- RunForType<PtrIdentity<32>>(results);
569
- RunForType<PtrIdentity<64>>(results);
570
523
  RunForType<std::pair<uint32_t, uint32_t>>(results);
571
524
  RunForType<String<StringSize::kSmall>>(results);
572
525
  RunForType<String<StringSize::kMedium>>(results);
@@ -603,9 +556,11 @@ int main(int argc, char** argv) {
603
556
  // Check the regex again. We might had have enabled only one of the
604
557
  // stats for the benchmark.
605
558
  if (!CanRunBenchmark(name)) return;
559
+ // Report at least 1, because benchy drops results with zero.
560
+ double reported_value = std::max(1e9 * result.ratios.*val, 1.0);
606
561
  absl::PrintF(" %s{\n", comma);
607
- absl::PrintF(" \"cpu_time\": %f,\n", 1e9 * result.ratios.*val);
608
- absl::PrintF(" \"real_time\": %f,\n", 1e9 * result.ratios.*val);
562
+ absl::PrintF(" \"cpu_time\": %f,\n", reported_value);
563
+ absl::PrintF(" \"real_time\": %f,\n", reported_value);
609
564
  absl::PrintF(" \"iterations\": 1,\n");
610
565
  absl::PrintF(" \"name\": \"%s\",\n", name);
611
566
  absl::PrintF(" \"time_unit\": \"ns\"\n");