re2 1.22.2 → 1.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. package/README.md +60 -4
  2. package/binding.gyp +5 -1
  3. package/lib/addon.cc +4 -0
  4. package/lib/new.cc +1 -246
  5. package/lib/pattern.cc +252 -0
  6. package/lib/pattern.h +10 -0
  7. package/lib/set.cc +777 -0
  8. package/lib/wrapped_re2_set.h +42 -0
  9. package/package.json +21 -9
  10. package/re2.d.ts +46 -9
  11. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
  12. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
  13. package/vendor/abseil-cpp/CMake/README.md +2 -2
  14. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  15. package/vendor/abseil-cpp/MODULE.bazel +6 -9
  16. package/vendor/abseil-cpp/README.md +6 -8
  17. package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
  18. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
  19. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
  20. package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
  21. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
  22. package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
  23. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
  24. package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
  25. package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
  26. package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
  27. package/vendor/abseil-cpp/absl/base/config.h +22 -129
  28. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
  29. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  30. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
  31. package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  32. package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  33. package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
  34. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  35. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
  36. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  37. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
  38. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  39. package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
  40. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
  41. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
  42. package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
  43. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
  44. package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
  45. package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
  46. package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  47. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
  48. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  49. package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
  50. package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
  51. package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
  52. package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
  53. package/vendor/abseil-cpp/absl/base/options.h +3 -80
  54. package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
  55. package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
  56. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
  57. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
  58. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
  59. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  60. package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
  61. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  62. package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
  63. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
  64. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
  65. package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
  68. package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
  69. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
  70. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
  71. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
  72. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
  73. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
  74. package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
  75. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
  76. package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
  77. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  78. package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
  79. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  80. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
  81. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
  82. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
  83. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
  84. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
  87. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
  88. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
  89. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
  90. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
  91. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
  92. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
  93. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
  94. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
  95. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
  96. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  97. package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
  101. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
  102. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
  103. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
  104. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  105. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
  106. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
  107. package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
  108. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
  109. package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
  110. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
  111. package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
  112. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
  113. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
  114. package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
  115. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
  116. package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
  117. package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
  118. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
  119. package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
  120. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
  121. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  122. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  123. package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  124. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
  125. package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
  126. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
  127. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
  128. package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  129. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  130. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  131. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  132. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  133. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
  134. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  135. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  136. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  137. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  138. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  139. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  140. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  141. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  142. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  143. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
  144. package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  145. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
  146. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  147. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
  148. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
  149. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  150. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  151. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
  152. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
  153. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  154. package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
  155. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  156. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
  157. package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
  158. package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  159. package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
  160. package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
  161. package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
  162. package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
  163. package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
  164. package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
  165. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
  166. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
  167. package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
  168. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
  169. package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
  170. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
  171. package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
  172. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
  173. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  174. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  175. package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
  176. package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
  177. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
  178. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
  179. package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
  180. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
  181. package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
  182. package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
  183. package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
  184. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
  185. package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
  186. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
  187. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
  188. package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
  189. package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
  190. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
  191. package/vendor/abseil-cpp/absl/log/check.h +2 -1
  192. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
  193. package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
  194. package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
  195. package/vendor/abseil-cpp/absl/log/globals.h +4 -5
  196. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
  197. package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  198. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
  199. package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
  200. package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  201. package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
  202. package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
  203. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  204. package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
  205. package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  206. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  207. package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
  208. package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
  209. package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
  210. package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
  211. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
  212. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  213. package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
  214. package/vendor/abseil-cpp/absl/log/log.h +48 -35
  215. package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
  216. package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
  217. package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
  218. package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
  219. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
  220. package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  221. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
  222. package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
  223. package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
  224. package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
  225. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  226. package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
  227. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
  228. package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
  229. package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
  230. package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
  231. package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
  232. package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
  233. package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
  234. package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
  235. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
  236. package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
  237. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
  238. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
  239. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
  240. package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
  241. package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  242. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
  243. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
  244. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  245. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
  246. package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
  247. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
  248. package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
  249. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  250. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
  251. package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
  252. package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  253. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
  254. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  255. package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
  256. package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
  257. package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
  258. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
  259. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  260. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
  261. package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
  262. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  263. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  264. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  265. package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
  266. package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
  267. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
  268. package/vendor/abseil-cpp/absl/random/random.h +88 -53
  269. package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  270. package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
  271. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  272. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  273. package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
  274. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
  275. package/vendor/abseil-cpp/absl/status/status.cc +4 -8
  276. package/vendor/abseil-cpp/absl/status/status.h +8 -8
  277. package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
  278. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
  279. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  280. package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
  281. package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
  282. package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
  283. package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
  284. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
  285. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
  286. package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
  287. package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
  288. package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
  289. package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
  290. package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
  291. package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
  292. package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
  293. package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
  294. package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
  295. package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  296. package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  297. package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
  298. package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
  299. package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
  300. package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
  301. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
  302. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
  303. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  304. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
  305. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
  306. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  307. package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  308. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
  309. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
  310. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
  311. package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
  312. package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
  313. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  314. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  315. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
  316. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  317. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
  318. package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  319. package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  320. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  321. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
  322. package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  323. package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  324. package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  325. package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
  326. package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
  327. package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
  328. package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
  329. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
  330. package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
  331. package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
  332. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
  333. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
  334. package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
  335. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
  336. package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
  337. package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
  338. package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
  339. package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
  340. package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
  341. package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
  342. package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
  343. package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
  344. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
  345. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
  346. package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
  347. package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
  348. package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
  349. package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
  350. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
  351. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
  352. package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  353. package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
  354. package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  355. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  356. package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  357. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  358. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
  359. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
  360. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  361. package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  362. package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  363. package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  364. package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
  365. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  366. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
  367. package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  368. package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
  369. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
  370. package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
  371. package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
  372. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
  373. package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
  374. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  375. package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
  376. package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
  377. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
  378. package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
  379. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
  380. package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
  381. package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
  382. package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
  383. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
  384. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  385. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  386. package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
  387. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
  388. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  389. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
  390. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
  391. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  392. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
  393. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  394. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  395. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  396. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  397. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
  398. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
  399. package/vendor/abseil-cpp/absl/time/time.h +24 -18
  400. package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
  401. package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
  402. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
  403. package/vendor/abseil-cpp/absl/types/any.h +9 -484
  404. package/vendor/abseil-cpp/absl/types/optional.h +7 -747
  405. package/vendor/abseil-cpp/absl/types/span.h +46 -19
  406. package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
  407. package/vendor/abseil-cpp/absl/types/variant.h +5 -784
  408. package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
  409. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
  410. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
  411. package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
  412. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
  413. package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
  414. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
  415. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
  416. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
  417. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
  418. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
  419. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  420. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
  421. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
  422. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
  423. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
  424. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
  425. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
  426. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
  427. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
  428. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
  429. package/vendor/re2/.bazelrc +4 -4
  430. package/vendor/re2/.bcr/metadata.template.json +16 -0
  431. package/vendor/re2/.bcr/presubmit.yml +57 -0
  432. package/vendor/re2/.bcr/source.template.json +5 -0
  433. package/vendor/re2/.github/bazel.sh +1 -7
  434. package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
  435. package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
  436. package/vendor/re2/.github/workflows/ci.yml +5 -6
  437. package/vendor/re2/.github/workflows/pages.yml +3 -3
  438. package/vendor/re2/.github/workflows/python.yml +29 -24
  439. package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
  440. package/vendor/re2/.github/workflows/release.yml +15 -4
  441. package/vendor/re2/BUILD.bazel +25 -0
  442. package/vendor/re2/CMakeLists.txt +100 -85
  443. package/vendor/re2/CONTRIBUTING.md +0 -1
  444. package/vendor/re2/MODULE.bazel +10 -10
  445. package/vendor/re2/Makefile +1 -1
  446. package/vendor/re2/README.md +259 -0
  447. package/vendor/re2/python/BUILD.bazel +8 -0
  448. package/vendor/re2/python/re2.py +1 -1
  449. package/vendor/re2/python/re2_test.py +6 -0
  450. package/vendor/re2/python/setup.py +3 -3
  451. package/vendor/re2/re2/bitmap256.cc +3 -4
  452. package/vendor/re2/re2/bitstate.cc +15 -10
  453. package/vendor/re2/re2/dfa.cc +1 -2
  454. package/vendor/re2/re2/parse.cc +3 -4
  455. package/vendor/re2/re2/prog.cc +1 -2
  456. package/vendor/re2/re2/prog.h +1 -0
  457. package/vendor/re2/re2/re2.cc +5 -0
  458. package/vendor/re2/re2/re2.h +9 -9
  459. package/vendor/re2/re2/set.cc +6 -0
  460. package/vendor/re2/re2/set.h +5 -0
  461. package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
  462. package/vendor/re2/re2/testing/re2_test.cc +8 -0
  463. package/vendor/re2/re2/testing/set_test.cc +5 -0
  464. package/vendor/re2/re2/walker-inl.h +1 -1
  465. package/vendor/abseil-cpp/WORKSPACE +0 -76
  466. package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
  467. package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
  468. package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  469. package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
  470. package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
  471. package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
  472. package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
  473. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
  474. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
  475. package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  476. package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
  477. package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
  478. package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
  479. package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
  480. package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
  481. package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  482. package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  483. package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  484. package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  485. package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
  486. package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
  487. package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
  488. package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
  489. package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
  490. package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
  491. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
  492. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
  493. package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
  494. package/vendor/re2/.github/workflows/pr.yml +0 -34
  495. package/vendor/re2/README +0 -47
@@ -99,24 +99,29 @@ class NodeHashMapPolicy;
99
99
  // In most cases `T` needs only to provide the `absl_container_hash`. In this
100
100
  // case `std::equal_to<void>` will be used instead of `eq` part.
101
101
  //
102
+ // PERFORMANCE WARNING: Erasure & sparsity can negatively affect performance:
103
+ // * Iteration takes O(capacity) time, not O(size).
104
+ // * erase() slows down begin() and ++iterator.
105
+ // * Capacity only shrinks on rehash() or clear() -- not on erase().
106
+ //
102
107
  // Example:
103
108
  //
104
109
  // // Create a node hash map of three strings (that map to strings)
105
110
  // absl::node_hash_map<std::string, std::string> ducks =
106
111
  // {{"a", "huey"}, {"b", "dewey"}, {"c", "louie"}};
107
112
  //
108
- // // Insert a new element into the node hash map
109
- // ducks.insert({"d", "donald"}};
113
+ // // Insert a new element into the node hash map
114
+ // ducks.insert({"d", "donald"}};
110
115
  //
111
- // // Force a rehash of the node hash map
112
- // ducks.rehash(0);
116
+ // // Force a rehash of the node hash map
117
+ // ducks.rehash(0);
113
118
  //
114
- // // Find the element with the key "b"
115
- // std::string search_key = "b";
116
- // auto result = ducks.find(search_key);
117
- // if (result != ducks.end()) {
118
- // std::cout << "Result: " << result->second << std::endl;
119
- // }
119
+ // // Find the element with the key "b"
120
+ // std::string search_key = "b";
121
+ // auto result = ducks.find(search_key);
122
+ // if (result != ducks.end()) {
123
+ // std::cout << "Result: " << result->second << std::endl;
124
+ // }
120
125
  template <class Key, class Value, class Hash = DefaultHashContainerHash<Key>,
121
126
  class Eq = DefaultHashContainerEq<Key>,
122
127
  class Alloc = std::allocator<std::pair<const Key, Value>>>
@@ -148,9 +153,9 @@ class ABSL_ATTRIBUTE_OWNER node_hash_map
148
153
  //
149
154
  // * Copy assignment operator
150
155
  //
151
- // // Hash functor and Comparator are copied as well
152
- // absl::node_hash_map<int, std::string> map4;
153
- // map4 = map3;
156
+ // // Hash functor and Comparator are copied as well
157
+ // absl::node_hash_map<int, std::string> map4;
158
+ // map4 = map3;
154
159
  //
155
160
  // * Move constructor
156
161
  //
@@ -658,10 +663,10 @@ class NodeHashMapPolicy
658
663
  static Value& value(value_type* elem) { return elem->second; }
659
664
  static const Value& value(const value_type* elem) { return elem->second; }
660
665
 
661
- template <class Hash>
666
+ template <class Hash, bool kIsDefault>
662
667
  static constexpr HashSlotFn get_hash_slot_fn() {
663
668
  return memory_internal::IsLayoutCompatible<Key, Value>::value
664
- ? &TypeErasedDerefAndApplyToSlotFn<Hash, Key>
669
+ ? &TypeErasedDerefAndApplyToSlotFn<Hash, Key, kIsDefault>
665
670
  : nullptr;
666
671
  }
667
672
  };
@@ -322,8 +322,6 @@ TEST(NodeHashMap, CForEachMutate) {
322
322
  }
323
323
  }
324
324
 
325
- // This test requires std::launder for mutable key access in node handles.
326
- #if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
327
325
  TEST(NodeHashMap, NodeHandleMutableKeyAccess) {
328
326
  node_hash_map<std::string, std::string> map;
329
327
 
@@ -335,7 +333,6 @@ TEST(NodeHashMap, NodeHandleMutableKeyAccess) {
335
333
 
336
334
  EXPECT_THAT(map, testing::ElementsAre(Pair("key", "mapped")));
337
335
  }
338
- #endif
339
336
 
340
337
  TEST(NodeHashMap, RecursiveTypeCompiles) {
341
338
  struct RecursiveType {
@@ -97,22 +97,27 @@ struct NodeHashSetPolicy;
97
97
  // In most cases `T` needs only to provide the `absl_container_hash`. In this
98
98
  // case `std::equal_to<void>` will be used instead of `eq` part.
99
99
  //
100
+ // PERFORMANCE WARNING: Erasure & sparsity can negatively affect performance:
101
+ // * Iteration takes O(capacity) time, not O(size).
102
+ // * erase() slows down begin() and ++iterator.
103
+ // * Capacity only shrinks on rehash() or clear() -- not on erase().
104
+ //
100
105
  // Example:
101
106
  //
102
107
  // // Create a node hash set of three strings
103
108
  // absl::node_hash_set<std::string> ducks =
104
109
  // {"huey", "dewey", "louie"};
105
110
  //
106
- // // Insert a new element into the node hash set
107
- // ducks.insert("donald");
111
+ // // Insert a new element into the node hash set
112
+ // ducks.insert("donald");
108
113
  //
109
- // // Force a rehash of the node hash set
110
- // ducks.rehash(0);
114
+ // // Force a rehash of the node hash set
115
+ // ducks.rehash(0);
111
116
  //
112
- // // See if "dewey" is present
113
- // if (ducks.contains("dewey")) {
114
- // std::cout << "We found dewey!" << std::endl;
115
- // }
117
+ // // See if "dewey" is present
118
+ // if (ducks.contains("dewey")) {
119
+ // std::cout << "We found dewey!" << std::endl;
120
+ // }
116
121
  template <class T, class Hash = DefaultHashContainerHash<T>,
117
122
  class Eq = DefaultHashContainerEq<T>, class Alloc = std::allocator<T>>
118
123
  class ABSL_ATTRIBUTE_OWNER node_hash_set
@@ -142,9 +147,9 @@ class ABSL_ATTRIBUTE_OWNER node_hash_set
142
147
  //
143
148
  // * Copy assignment operator
144
149
  //
145
- // // Hash functor and Comparator are copied as well
146
- // absl::node_hash_set<std::string> set4;
147
- // set4 = set3;
150
+ // // Hash functor and Comparator are copied as well
151
+ // absl::node_hash_set<std::string> set4;
152
+ // set4 = set3;
148
153
  //
149
154
  // * Move constructor
150
155
  //
@@ -552,9 +557,9 @@ struct NodeHashSetPolicy
552
557
 
553
558
  static size_t element_space_used(const T*) { return sizeof(T); }
554
559
 
555
- template <class Hash>
560
+ template <class Hash, bool kIsDefault>
556
561
  static constexpr HashSlotFn get_hash_slot_fn() {
557
- return &TypeErasedDerefAndApplyToSlotFn<Hash, T>;
562
+ return &TypeErasedDerefAndApplyToSlotFn<Hash, T, kIsDefault>;
558
563
  }
559
564
  };
560
565
  } // namespace container_internal
@@ -21,6 +21,7 @@
21
21
  #include "gtest/gtest.h"
22
22
  #include "absl/container/flat_hash_map.h"
23
23
  #include "absl/container/flat_hash_set.h"
24
+ #include "absl/container/internal/hashtablez_sampler.h"
24
25
  #include "absl/container/node_hash_map.h"
25
26
  #include "absl/container/node_hash_set.h"
26
27
 
@@ -46,6 +47,7 @@ void TestInlineElementSize(
46
47
  std::vector<Table>& tables,
47
48
  const std::vector<typename Table::value_type>& values,
48
49
  size_t expected_element_size) {
50
+ EXPECT_GT(values.size(), 0);
49
51
  for (int i = 0; i < 10; ++i) {
50
52
  // We create a new table and must store it somewhere so that when we store
51
53
  // a pointer to the resulting `HashtablezInfo` into `preexisting_info`
@@ -82,6 +84,7 @@ TEST(FlatHashMap, SampleElementSize) {
82
84
  // Enable sampling even if the prod default is off.
83
85
  SetHashtablezEnabled(true);
84
86
  SetHashtablezSampleParameter(1);
87
+ TestOnlyRefreshSamplingStateForCurrentThread();
85
88
 
86
89
  auto& sampler = GlobalHashtablezSampler();
87
90
  std::vector<flat_hash_map<int, bigstruct>> flat_map_tables;
@@ -92,14 +95,6 @@ TEST(FlatHashMap, SampleElementSize) {
92
95
  std::vector<std::pair<const int, bigstruct>> map_values = {{0, bigstruct{}},
93
96
  {1, bigstruct{}}};
94
97
 
95
- // It takes thousands of new tables after changing the sampling parameters
96
- // before you actually get some instrumentation. And if you must actually
97
- // put something into those tables.
98
- for (int i = 0; i < 10000; ++i) {
99
- flat_map_tables.emplace_back();
100
- flat_map_tables.back()[i] = bigstruct{};
101
- }
102
-
103
98
  // clang-tidy gives a false positive on this declaration. This unordered set
104
99
  // cannot be a flat_hash_set, however, since that would introduce a mutex
105
100
  // deadlock.
@@ -71,7 +71,7 @@ else()
71
71
  endif()
72
72
 
73
73
 
74
- if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
74
+ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "QCC")
75
75
  set(ABSL_DEFAULT_COPTS "${ABSL_GCC_FLAGS}")
76
76
  set(ABSL_TEST_COPTS "${ABSL_GCC_TEST_FLAGS}")
77
77
  elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") # MATCHES so we get both Clang and AppleClang
@@ -23,6 +23,7 @@ list(APPEND ABSL_CLANG_CL_TEST_FLAGS
23
23
  "-Wno-implicit-int-conversion"
24
24
  "-Wno-missing-prototypes"
25
25
  "-Wno-missing-variable-declarations"
26
+ "-Wno-nullability-completeness"
26
27
  "-Wno-shadow"
27
28
  "-Wno-shorten-64-to-32"
28
29
  "-Wno-sign-compare"
@@ -97,6 +98,7 @@ list(APPEND ABSL_LLVM_FLAGS
97
98
  "-Winvalid-constexpr"
98
99
  "-Wliteral-conversion"
99
100
  "-Wmissing-declarations"
101
+ "-Wnullability-completeness"
100
102
  "-Woverlength-strings"
101
103
  "-Wpointer-arith"
102
104
  "-Wself-assign"
@@ -106,6 +108,7 @@ list(APPEND ABSL_LLVM_FLAGS
106
108
  "-Wstring-conversion"
107
109
  "-Wtautological-overlap-compare"
108
110
  "-Wtautological-unsigned-zero-compare"
111
+ "-Wthread-safety"
109
112
  "-Wundef"
110
113
  "-Wuninitialized"
111
114
  "-Wunreachable-code"
@@ -118,6 +121,7 @@ list(APPEND ABSL_LLVM_FLAGS
118
121
  "-Wno-implicit-float-conversion"
119
122
  "-Wno-implicit-int-float-conversion"
120
123
  "-Wno-unknown-warning-option"
124
+ "-Wno-unused-command-line-argument"
121
125
  "-DNOMINMAX"
122
126
  )
123
127
 
@@ -144,6 +148,7 @@ list(APPEND ABSL_LLVM_TEST_FLAGS
144
148
  "-Wstring-conversion"
145
149
  "-Wtautological-overlap-compare"
146
150
  "-Wtautological-unsigned-zero-compare"
151
+ "-Wthread-safety"
147
152
  "-Wundef"
148
153
  "-Wuninitialized"
149
154
  "-Wunreachable-code"
@@ -156,11 +161,13 @@ list(APPEND ABSL_LLVM_TEST_FLAGS
156
161
  "-Wno-implicit-float-conversion"
157
162
  "-Wno-implicit-int-float-conversion"
158
163
  "-Wno-unknown-warning-option"
164
+ "-Wno-unused-command-line-argument"
159
165
  "-DNOMINMAX"
160
166
  "-Wno-deprecated-declarations"
161
167
  "-Wno-implicit-int-conversion"
162
168
  "-Wno-missing-prototypes"
163
169
  "-Wno-missing-variable-declarations"
170
+ "-Wno-nullability-completeness"
164
171
  "-Wno-shadow"
165
172
  "-Wno-shorten-64-to-32"
166
173
  "-Wno-sign-compare"
@@ -181,8 +188,6 @@ list(APPEND ABSL_MSVC_FLAGS
181
188
  "/wd4005"
182
189
  "/wd4068"
183
190
  "/wd4180"
184
- "/wd4244"
185
- "/wd4267"
186
191
  "/wd4503"
187
192
  "/wd4800"
188
193
  "/DNOMINMAX"
@@ -202,8 +207,6 @@ list(APPEND ABSL_MSVC_TEST_FLAGS
202
207
  "/wd4005"
203
208
  "/wd4068"
204
209
  "/wd4180"
205
- "/wd4244"
206
- "/wd4267"
207
210
  "/wd4503"
208
211
  "/wd4800"
209
212
  "/DNOMINMAX"
@@ -213,23 +216,9 @@ list(APPEND ABSL_MSVC_TEST_FLAGS
213
216
  "/D_ENABLE_EXTENDED_ALIGNED_STORAGE"
214
217
  "/wd4018"
215
218
  "/wd4101"
219
+ "/wd4244"
220
+ "/wd4267"
216
221
  "/wd4503"
217
222
  "/wd4996"
218
223
  "/DNOMINMAX"
219
224
  )
220
-
221
- list(APPEND ABSL_RANDOM_HWAES_ARM32_FLAGS
222
- "-mfpu=neon"
223
- )
224
-
225
- list(APPEND ABSL_RANDOM_HWAES_ARM64_FLAGS
226
- "-march=armv8-a+crypto"
227
- )
228
-
229
- list(APPEND ABSL_RANDOM_HWAES_MSVC_X64_FLAGS
230
- )
231
-
232
- list(APPEND ABSL_RANDOM_HWAES_X64_FLAGS
233
- "-maes"
234
- "-msse4.1"
235
- )
@@ -24,6 +24,7 @@ ABSL_CLANG_CL_TEST_FLAGS = [
24
24
  "-Wno-implicit-int-conversion",
25
25
  "-Wno-missing-prototypes",
26
26
  "-Wno-missing-variable-declarations",
27
+ "-Wno-nullability-completeness",
27
28
  "-Wno-shadow",
28
29
  "-Wno-shorten-64-to-32",
29
30
  "-Wno-sign-compare",
@@ -98,6 +99,7 @@ ABSL_LLVM_FLAGS = [
98
99
  "-Winvalid-constexpr",
99
100
  "-Wliteral-conversion",
100
101
  "-Wmissing-declarations",
102
+ "-Wnullability-completeness",
101
103
  "-Woverlength-strings",
102
104
  "-Wpointer-arith",
103
105
  "-Wself-assign",
@@ -107,6 +109,7 @@ ABSL_LLVM_FLAGS = [
107
109
  "-Wstring-conversion",
108
110
  "-Wtautological-overlap-compare",
109
111
  "-Wtautological-unsigned-zero-compare",
112
+ "-Wthread-safety",
110
113
  "-Wundef",
111
114
  "-Wuninitialized",
112
115
  "-Wunreachable-code",
@@ -119,6 +122,7 @@ ABSL_LLVM_FLAGS = [
119
122
  "-Wno-implicit-float-conversion",
120
123
  "-Wno-implicit-int-float-conversion",
121
124
  "-Wno-unknown-warning-option",
125
+ "-Wno-unused-command-line-argument",
122
126
  "-DNOMINMAX",
123
127
  ]
124
128
 
@@ -145,6 +149,7 @@ ABSL_LLVM_TEST_FLAGS = [
145
149
  "-Wstring-conversion",
146
150
  "-Wtautological-overlap-compare",
147
151
  "-Wtautological-unsigned-zero-compare",
152
+ "-Wthread-safety",
148
153
  "-Wundef",
149
154
  "-Wuninitialized",
150
155
  "-Wunreachable-code",
@@ -157,11 +162,13 @@ ABSL_LLVM_TEST_FLAGS = [
157
162
  "-Wno-implicit-float-conversion",
158
163
  "-Wno-implicit-int-float-conversion",
159
164
  "-Wno-unknown-warning-option",
165
+ "-Wno-unused-command-line-argument",
160
166
  "-DNOMINMAX",
161
167
  "-Wno-deprecated-declarations",
162
168
  "-Wno-implicit-int-conversion",
163
169
  "-Wno-missing-prototypes",
164
170
  "-Wno-missing-variable-declarations",
171
+ "-Wno-nullability-completeness",
165
172
  "-Wno-shadow",
166
173
  "-Wno-shorten-64-to-32",
167
174
  "-Wno-sign-compare",
@@ -182,8 +189,6 @@ ABSL_MSVC_FLAGS = [
182
189
  "/wd4005",
183
190
  "/wd4068",
184
191
  "/wd4180",
185
- "/wd4244",
186
- "/wd4267",
187
192
  "/wd4503",
188
193
  "/wd4800",
189
194
  "/DNOMINMAX",
@@ -203,8 +208,6 @@ ABSL_MSVC_TEST_FLAGS = [
203
208
  "/wd4005",
204
209
  "/wd4068",
205
210
  "/wd4180",
206
- "/wd4244",
207
- "/wd4267",
208
211
  "/wd4503",
209
212
  "/wd4800",
210
213
  "/DNOMINMAX",
@@ -214,23 +217,9 @@ ABSL_MSVC_TEST_FLAGS = [
214
217
  "/D_ENABLE_EXTENDED_ALIGNED_STORAGE",
215
218
  "/wd4018",
216
219
  "/wd4101",
220
+ "/wd4244",
221
+ "/wd4267",
217
222
  "/wd4503",
218
223
  "/wd4996",
219
224
  "/DNOMINMAX",
220
225
  ]
221
-
222
- ABSL_RANDOM_HWAES_ARM32_FLAGS = [
223
- "-mfpu=neon",
224
- ]
225
-
226
- ABSL_RANDOM_HWAES_ARM64_FLAGS = [
227
- "-march=armv8-a+crypto",
228
- ]
229
-
230
- ABSL_RANDOM_HWAES_MSVC_X64_FLAGS = [
231
- ]
232
-
233
- ABSL_RANDOM_HWAES_X64_FLAGS = [
234
- "-maes",
235
- "-msse4.1",
236
- ]
@@ -57,6 +57,7 @@ ABSL_LLVM_FLAGS = [
57
57
  "-Winvalid-constexpr",
58
58
  "-Wliteral-conversion",
59
59
  "-Wmissing-declarations",
60
+ "-Wnullability-completeness",
60
61
  "-Woverlength-strings",
61
62
  "-Wpointer-arith",
62
63
  "-Wself-assign",
@@ -66,6 +67,7 @@ ABSL_LLVM_FLAGS = [
66
67
  "-Wstring-conversion",
67
68
  "-Wtautological-overlap-compare",
68
69
  "-Wtautological-unsigned-zero-compare",
70
+ "-Wthread-safety",
69
71
  "-Wundef",
70
72
  "-Wuninitialized",
71
73
  "-Wunreachable-code",
@@ -82,6 +84,7 @@ ABSL_LLVM_FLAGS = [
82
84
  # Disable warnings on unknown warning flags (when warning flags are
83
85
  # unknown on older compiler versions)
84
86
  "-Wno-unknown-warning-option",
87
+ "-Wno-unused-command-line-argument",
85
88
  # Don't define min and max macros (Build on Windows using clang)
86
89
  "-DNOMINMAX",
87
90
  ]
@@ -91,6 +94,7 @@ ABSL_LLVM_TEST_ADDITIONAL_FLAGS = [
91
94
  "-Wno-implicit-int-conversion",
92
95
  "-Wno-missing-prototypes",
93
96
  "-Wno-missing-variable-declarations",
97
+ "-Wno-nullability-completeness",
94
98
  "-Wno-shadow",
95
99
  "-Wno-shorten-64-to-32",
96
100
  "-Wno-sign-compare",
@@ -118,10 +122,6 @@ MSVC_WARNING_FLAGS = [
118
122
  "/wd4068", # unknown pragma
119
123
  # qualifier applied to function type has no meaning; ignored
120
124
  "/wd4180",
121
- # conversion from 'type1' to 'type2', possible loss of data
122
- "/wd4244",
123
- # conversion from 'size_t' to 'type', possible loss of data
124
- "/wd4267",
125
125
  # The decorated name was longer than the compiler limit
126
126
  "/wd4503",
127
127
  # forcing value to bool 'true' or 'false' (performance warning)
@@ -158,24 +158,33 @@ def GccStyleFilterAndCombine(default_flags, test_flags):
158
158
  COPT_VARS = {
159
159
  "ABSL_GCC_FLAGS": ABSL_GCC_FLAGS,
160
160
  "ABSL_GCC_TEST_FLAGS": GccStyleFilterAndCombine(
161
- ABSL_GCC_FLAGS, ABSL_GCC_TEST_ADDITIONAL_FLAGS),
161
+ ABSL_GCC_FLAGS, ABSL_GCC_TEST_ADDITIONAL_FLAGS
162
+ ),
162
163
  "ABSL_LLVM_FLAGS": ABSL_LLVM_FLAGS,
163
164
  "ABSL_LLVM_TEST_FLAGS": GccStyleFilterAndCombine(
164
- ABSL_LLVM_FLAGS, ABSL_LLVM_TEST_ADDITIONAL_FLAGS),
165
- "ABSL_CLANG_CL_FLAGS":
166
- MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES,
167
- "ABSL_CLANG_CL_TEST_FLAGS":
168
- MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES + ABSL_LLVM_TEST_ADDITIONAL_FLAGS,
169
- "ABSL_MSVC_FLAGS":
170
- MSVC_BIG_WARNING_FLAGS + MSVC_WARNING_FLAGS + MSVC_DEFINES,
171
- "ABSL_MSVC_TEST_FLAGS":
172
- MSVC_BIG_WARNING_FLAGS + MSVC_WARNING_FLAGS + MSVC_DEFINES + [
165
+ ABSL_LLVM_FLAGS, ABSL_LLVM_TEST_ADDITIONAL_FLAGS
166
+ ),
167
+ "ABSL_CLANG_CL_FLAGS": MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES,
168
+ "ABSL_CLANG_CL_TEST_FLAGS": (
169
+ MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES + ABSL_LLVM_TEST_ADDITIONAL_FLAGS
170
+ ),
171
+ "ABSL_MSVC_FLAGS": (
172
+ MSVC_BIG_WARNING_FLAGS + MSVC_WARNING_FLAGS + MSVC_DEFINES
173
+ ),
174
+ "ABSL_MSVC_TEST_FLAGS": (
175
+ MSVC_BIG_WARNING_FLAGS
176
+ + MSVC_WARNING_FLAGS
177
+ + MSVC_DEFINES
178
+ + [
173
179
  "/wd4018", # signed/unsigned mismatch
174
180
  "/wd4101", # unreferenced local variable
181
+ "/wd4244", # shortening conversion
182
+ "/wd4267", # shortening conversion
175
183
  "/wd4503", # decorated name length exceeded, name was truncated
176
184
  "/wd4996", # use of deprecated symbol
177
185
  "/DNOMINMAX", # disable the min() and max() macros from <windows.h>
178
- ],
186
+ ]
187
+ ),
179
188
  "ABSL_MSVC_LINKOPTS": [
180
189
  # Object file doesn't export any previously undefined symbols
181
190
  "-ignore:4221",
@@ -12,6 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
16
+ load("@rules_cc//cc:cc_library.bzl", "cc_library")
17
+ load("@rules_cc//cc:cc_test.bzl", "cc_test")
15
18
  load(
16
19
  "//absl:copts/configure_copts.bzl",
17
20
  "ABSL_DEFAULT_COPTS",
@@ -54,10 +54,6 @@ crc32c_t ExtendCrc32cInternal(crc32c_t initial_crc,
54
54
 
55
55
  } // namespace crc_internal
56
56
 
57
- crc32c_t ComputeCrc32c(absl::string_view buf) {
58
- return ExtendCrc32c(crc32c_t{0}, buf);
59
- }
60
-
61
57
  crc32c_t ExtendCrc32cByZeroes(crc32c_t initial_crc, size_t length) {
62
58
  uint32_t crc = static_cast<uint32_t>(initial_crc) ^ kCRC32Xor;
63
59
  CrcEngine()->ExtendByZeroes(&crc, length);
@@ -83,11 +83,6 @@ crc32c_t ExtendCrc32cInternal(crc32c_t initial_crc,
83
83
  // CRC32C Computation Functions
84
84
  // -----------------------------------------------------------------------------
85
85
 
86
- // ComputeCrc32c()
87
- //
88
- // Returns the CRC32C value of the provided string.
89
- crc32c_t ComputeCrc32c(absl::string_view buf);
90
-
91
86
  // ExtendCrc32c()
92
87
  //
93
88
  // Computes a CRC32C value from an `initial_crc` CRC32C value including the
@@ -112,6 +107,13 @@ inline crc32c_t ExtendCrc32c(crc32c_t initial_crc,
112
107
  return crc_internal::ExtendCrc32cInternal(initial_crc, buf_to_add);
113
108
  }
114
109
 
110
+ // ComputeCrc32c()
111
+ //
112
+ // Returns the CRC32C value of the provided string.
113
+ inline crc32c_t ComputeCrc32c(absl::string_view buf) {
114
+ return ExtendCrc32c(crc32c_t{0}, buf);
115
+ }
116
+
115
117
  // ExtendCrc32cByZeroes()
116
118
  //
117
119
  // Computes a CRC32C value for a buffer with an `initial_crc` CRC32C value,
@@ -40,7 +40,13 @@ void BM_Calculate(benchmark::State& state) {
40
40
  benchmark::DoNotOptimize(crc);
41
41
  }
42
42
  }
43
- BENCHMARK(BM_Calculate)->Arg(0)->Arg(1)->Arg(100)->Arg(10000)->Arg(500000);
43
+ BENCHMARK(BM_Calculate)
44
+ ->Arg(0)
45
+ ->Arg(1)
46
+ ->Arg(100)
47
+ ->Arg(2048)
48
+ ->Arg(10000)
49
+ ->Arg(500000);
44
50
 
45
51
  void BM_Extend(benchmark::State& state) {
46
52
  int len = state.range(0);
@@ -53,8 +59,14 @@ void BM_Extend(benchmark::State& state) {
53
59
  benchmark::DoNotOptimize(crc);
54
60
  }
55
61
  }
56
- BENCHMARK(BM_Extend)->Arg(0)->Arg(1)->Arg(100)->Arg(10000)->Arg(500000)->Arg(
57
- 100 * 1000 * 1000);
62
+ BENCHMARK(BM_Extend)
63
+ ->Arg(0)
64
+ ->Arg(1)
65
+ ->Arg(100)
66
+ ->Arg(2048)
67
+ ->Arg(10000)
68
+ ->Arg(500000)
69
+ ->Arg(100 * 1000 * 1000);
58
70
 
59
71
  // Make working set >> CPU cache size to benchmark prefetches better
60
72
  void BM_ExtendCacheMiss(benchmark::State& state) {
@@ -147,7 +159,8 @@ void BM_Memcpy(benchmark::State& state) {
147
159
  state.SetBytesProcessed(static_cast<int64_t>(state.iterations()) *
148
160
  state.range(0));
149
161
  }
150
- BENCHMARK(BM_Memcpy)->Arg(0)->Arg(1)->Arg(100)->Arg(10000)->Arg(500000);
162
+ BENCHMARK(BM_Memcpy)->Arg(0)->Arg(1)->Arg(100)->Arg(2048)->Arg(10000)->Arg(
163
+ 500000);
151
164
 
152
165
  void BM_RemoveSuffix(benchmark::State& state) {
153
166
  int full_string_len = state.range(0);
@@ -15,11 +15,14 @@
15
15
  #include "absl/crc/crc32c.h"
16
16
 
17
17
  #include <algorithm>
18
+ #include <array>
18
19
  #include <cstddef>
19
20
  #include <cstdint>
20
21
  #include <cstring>
22
+ #include <limits>
21
23
  #include <sstream>
22
24
  #include <string>
25
+ #include <tuple>
23
26
 
24
27
  #include "gtest/gtest.h"
25
28
  #include "absl/crc/internal/crc32c.h"
@@ -101,6 +104,33 @@ TEST(CRC32C, ExtendByZeroes) {
101
104
  }
102
105
  }
103
106
 
107
+ // Test ExtendCrc32cByZeroes() for the full range of the size_t length,
108
+ // including every bit. This is important because ExtendCrc32cByZeroes() is
109
+ // implemented using an array of constants, where each entry in the array is
110
+ // used only when a particular bit in the size_t length is set. This test
111
+ // verifies that every entry in that array is correct.
112
+ TEST(CRC32C, ExtendByZeroesAllLengthBits) {
113
+ absl::crc32c_t base_crc = absl::crc32c_t{0xc99465aa};
114
+ const std::array<std::tuple<uint64_t, absl::crc32c_t>, 5> kTestCases = {{
115
+ {0, absl::crc32c_t(0xc99465aa)},
116
+ {std::numeric_limits<uint32_t>::max(), absl::crc32c_t(0x9b1d5aaa)},
117
+ {0x12345678, absl::crc32c_t(0xcf0e9553)},
118
+ {std::numeric_limits<uint64_t>::max(), absl::crc32c_t(0xf5bff489)},
119
+ {0x12345678abcdefff, absl::crc32c_t(0xaa1ffb0b)},
120
+ }};
121
+ for (const auto &test_case : kTestCases) {
122
+ uint64_t length = std::get<0>(test_case);
123
+ absl::crc32c_t expected_value = std::get<1>(test_case);
124
+ SCOPED_TRACE(length);
125
+ if (length > std::numeric_limits<size_t>::max()) {
126
+ // On 32-bit platforms, 64-bit lengths cannot be used or tested.
127
+ continue;
128
+ }
129
+ EXPECT_EQ(absl::ExtendCrc32cByZeroes(base_crc, static_cast<size_t>(length)),
130
+ expected_value);
131
+ }
132
+ }
133
+
104
134
  TEST(CRC32C, UnextendByZeroes) {
105
135
  constexpr size_t kExtendByValues[] = {2, 200, 20000, 200000, 20000000};
106
136
  constexpr size_t kUnextendByValues[] = {0, 100, 10000, 100000, 10000000};
@@ -145,6 +145,14 @@ CpuType GetIntelCpuType() {
145
145
  }
146
146
  case 0x5e: // Skylake (client)
147
147
  return CpuType::kIntelSkylake;
148
+ case 0x6a: // Ice Lake
149
+ return CpuType::kIntelIcelake;
150
+ case 0x8f: // Sapphire Rapids
151
+ return CpuType::kIntelSapphirerapids;
152
+ case 0xcf: // Emerald Rapids
153
+ return CpuType::kIntelEmeraldrapids;
154
+ case 0xad: // Granite Rapids
155
+ return CpuType::kIntelGraniterapidsap;
148
156
  default:
149
157
  return CpuType::kUnknown;
150
158
  }
@@ -210,6 +218,14 @@ CpuType GetAmdCpuType() {
210
218
  return CpuType::kUnknown;
211
219
  }
212
220
  break;
221
+ case 0x1A:
222
+ switch (model_num) {
223
+ case 0x2:
224
+ return CpuType::kAmdTurin;
225
+ default:
226
+ return CpuType::kUnknown;
227
+ }
228
+ break;
213
229
  default:
214
230
  return CpuType::kUnknown;
215
231
  }
@@ -259,6 +275,7 @@ CpuType GetCpuType() {
259
275
  case 0xd40: return CpuType::kArmNeoverseV1;
260
276
  case 0xd49: return CpuType::kArmNeoverseN2;
261
277
  case 0xd4f: return CpuType::kArmNeoverseV2;
278
+ case 0xd8e: return CpuType::kArmNeoverseN3;
262
279
  default:
263
280
  return CpuType::kUnknown;
264
281
  }
@@ -30,10 +30,15 @@ enum class CpuType {
30
30
  kAmdNaples,
31
31
  kAmdMilan,
32
32
  kAmdGenoa,
33
+ kAmdTurin,
33
34
  kAmdRyzenV3000,
34
35
  kIntelCascadelakeXeon,
35
36
  kIntelSkylakeXeon,
36
37
  kIntelBroadwell,
38
+ kIntelIcelake,
39
+ kIntelSapphirerapids,
40
+ kIntelEmeraldrapids,
41
+ kIntelGraniterapidsap,
37
42
  kIntelSkylake,
38
43
  kIntelIvybridge,
39
44
  kIntelSandybridge,
@@ -42,7 +47,8 @@ enum class CpuType {
42
47
  kArmNeoverseV1,
43
48
  kAmpereSiryn,
44
49
  kArmNeoverseN2,
45
- kArmNeoverseV2
50
+ kArmNeoverseV2,
51
+ kArmNeoverseN3,
46
52
  };
47
53
 
48
54
  // Returns the type of host CPU this code is running on. Returns kUnknown if