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
@@ -26,7 +26,6 @@
26
26
  #include <unordered_set>
27
27
  #include <vector>
28
28
 
29
- #include "benchmark/benchmark.h"
30
29
  #include "absl/algorithm/container.h"
31
30
  #include "absl/base/internal/raw_logging.h"
32
31
  #include "absl/container/btree_map.h"
@@ -42,6 +41,7 @@
42
41
  #include "absl/strings/cord.h"
43
42
  #include "absl/strings/str_format.h"
44
43
  #include "absl/time/time.h"
44
+ #include "benchmark/benchmark.h"
45
45
 
46
46
  namespace absl {
47
47
  ABSL_NAMESPACE_BEGIN
@@ -406,22 +406,18 @@ void BM_Fifo(benchmark::State& state) {
406
406
  template <typename T>
407
407
  void BM_FwdIter(benchmark::State& state) {
408
408
  using V = typename remove_pair_const<typename T::value_type>::type;
409
- using R = typename T::value_type const*;
410
409
 
411
410
  std::vector<V> values = GenerateValues<V>(kBenchmarkValues);
412
411
  T container(values.begin(), values.end());
413
412
 
414
413
  auto iter = container.end();
415
414
 
416
- R r = nullptr;
417
-
418
415
  while (state.KeepRunning()) {
419
416
  if (iter == container.end()) iter = container.begin();
420
- r = &(*iter);
421
- ++iter;
417
+ auto *v = &(*iter);
418
+ benchmark::DoNotOptimize(v);
419
+ benchmark::DoNotOptimize(++iter);
422
420
  }
423
-
424
- benchmark::DoNotOptimize(r);
425
421
  }
426
422
 
427
423
  // Benchmark random range-construction of a container.
@@ -735,7 +731,7 @@ double ContainerInfo(const btree_map<int, BigTypePtr<Size>>& b) {
735
731
 
736
732
  BIG_TYPE_PTR_BENCHMARKS(32);
737
733
 
738
- void BM_BtreeSet_IteratorSubtraction(benchmark::State& state) {
734
+ void BM_BtreeSet_IteratorDifference(benchmark::State& state) {
739
735
  absl::InsecureBitGen bitgen;
740
736
  std::vector<int> vec;
741
737
  // Randomize the set's insertion order so the nodes aren't all full.
@@ -756,6 +752,52 @@ void BM_BtreeSet_IteratorSubtraction(benchmark::State& state) {
756
752
  }
757
753
  }
758
754
 
755
+ BENCHMARK(BM_BtreeSet_IteratorDifference)->Range(1 << 10, 1 << 20);
756
+
757
+ void BM_BtreeSet_IteratorAddition(benchmark::State& state) {
758
+ absl::InsecureBitGen bitgen;
759
+ std::vector<int> vec;
760
+ // Randomize the set's insertion order so the nodes aren't all full.
761
+ vec.reserve(static_cast<size_t>(state.range(0)));
762
+ for (int i = 0; i < state.range(0); ++i) vec.push_back(i);
763
+ absl::c_shuffle(vec, bitgen);
764
+
765
+ absl::btree_set<int> set;
766
+ for (int i : vec) set.insert(i);
767
+
768
+ size_t distance = absl::Uniform(bitgen, 0u, set.size());
769
+ while (state.KeepRunningBatch(distance)) {
770
+ // Let the increment go all the way to the `end` iterator.
771
+ const size_t begin =
772
+ absl::Uniform(absl::IntervalClosed, bitgen, 0u, set.size() - distance);
773
+ auto it = set.find(static_cast<int>(begin));
774
+ benchmark::DoNotOptimize(it += static_cast<int>(distance));
775
+ distance = absl::Uniform(bitgen, 0u, set.size());
776
+ }
777
+ }
778
+
779
+ BENCHMARK(BM_BtreeSet_IteratorAddition)->Range(1 << 10, 1 << 20);
780
+
781
+ void BM_BtreeSet_IteratorSubtraction(benchmark::State& state) {
782
+ absl::InsecureBitGen bitgen;
783
+ std::vector<int> vec;
784
+ // Randomize the set's insertion order so the nodes aren't all full.
785
+ vec.reserve(static_cast<size_t>(state.range(0)));
786
+ for (int i = 0; i < state.range(0); ++i) vec.push_back(i);
787
+ absl::c_shuffle(vec, bitgen);
788
+
789
+ absl::btree_set<int> set;
790
+ for (int i : vec) set.insert(i);
791
+
792
+ size_t distance = absl::Uniform(bitgen, 0u, set.size());
793
+ while (state.KeepRunningBatch(distance)) {
794
+ size_t end = absl::Uniform(bitgen, distance, set.size());
795
+ auto it = set.find(static_cast<int>(end));
796
+ benchmark::DoNotOptimize(it -= static_cast<int>(distance));
797
+ distance = absl::Uniform(bitgen, 0u, set.size());
798
+ }
799
+ }
800
+
759
801
  BENCHMARK(BM_BtreeSet_IteratorSubtraction)->Range(1 << 10, 1 << 20);
760
802
 
761
803
  } // namespace
@@ -47,8 +47,10 @@
47
47
  // iterator at the current position. Another important difference is that
48
48
  // key-types must be copy-constructible.
49
49
  //
50
- // Another API difference is that btree iterators can be subtracted, and this
51
- // is faster than using std::distance.
50
+ // There are other API differences: first, btree iterators can be subtracted,
51
+ // and this is faster than using `std::distance`. Additionally, btree
52
+ // iterators can be advanced via `operator+=` and `operator-=`, which is faster
53
+ // than using `std::advance`.
52
54
  //
53
55
  // B-tree maps are not exception-safe.
54
56
 
@@ -115,8 +117,8 @@ class ABSL_ATTRIBUTE_OWNER btree_map
115
117
  //
116
118
  // * Copy assignment operator
117
119
  //
118
- // absl::btree_map<int, std::string> map4;
119
- // map4 = map3;
120
+ // absl::btree_map<int, std::string> map4;
121
+ // map4 = map3;
120
122
  //
121
123
  // * Move constructor
122
124
  //
@@ -553,8 +555,8 @@ class ABSL_ATTRIBUTE_OWNER btree_multimap
553
555
  //
554
556
  // * Copy assignment operator
555
557
  //
556
- // absl::btree_multimap<int, std::string> map4;
557
- // map4 = map3;
558
+ // absl::btree_multimap<int, std::string> map4;
559
+ // map4 = map3;
558
560
  //
559
561
  // * Move constructor
560
562
  //
@@ -46,8 +46,10 @@
46
46
  // reason, `insert()`, `erase()`, and `extract_and_get_next()` return a valid
47
47
  // iterator at the current position.
48
48
  //
49
- // Another API difference is that btree iterators can be subtracted, and this
50
- // is faster than using std::distance.
49
+ // There are other API differences: first, btree iterators can be subtracted,
50
+ // and this is faster than using `std::distance`. Additionally, btree
51
+ // iterators can be advanced via `operator+=` and `operator-=`, which is faster
52
+ // than using `std::advance`.
51
53
  //
52
54
  // B-tree sets are not exception-safe.
53
55
 
@@ -117,8 +119,8 @@ class ABSL_ATTRIBUTE_OWNER btree_set
117
119
  //
118
120
  // * Copy assignment operator
119
121
  //
120
- // absl::btree_set<std::string> set4;
121
- // set4 = set3;
122
+ // absl::btree_set<std::string> set4;
123
+ // set4 = set3;
122
124
  //
123
125
  // * Move constructor
124
126
  //
@@ -473,8 +475,8 @@ class ABSL_ATTRIBUTE_OWNER btree_multiset
473
475
  //
474
476
  // * Copy assignment operator
475
477
  //
476
- // absl::btree_multiset<std::string> set4;
477
- // set4 = set3;
478
+ // absl::btree_multiset<std::string> set4;
479
+ // set4 = set3;
478
480
  //
479
481
  // * Move constructor
480
482
  //
@@ -2674,8 +2674,6 @@ TEST(Btree, HeterogeneousInsertOrAssign) {
2674
2674
  }
2675
2675
  #endif
2676
2676
 
2677
- // This test requires std::launder for mutable key access in node handles.
2678
- #if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
2679
2677
  TEST(Btree, NodeHandleMutableKeyAccess) {
2680
2678
  {
2681
2679
  absl::btree_map<std::string, std::string> map;
@@ -2701,7 +2699,6 @@ TEST(Btree, NodeHandleMutableKeyAccess) {
2701
2699
  EXPECT_THAT(map, ElementsAre(Pair("key", "mapped")));
2702
2700
  }
2703
2701
  }
2704
- #endif
2705
2702
 
2706
2703
  struct MultiKey {
2707
2704
  int i1;
@@ -3354,7 +3351,7 @@ TEST(Btree, ReusePoisonMemory) {
3354
3351
  set.insert(0);
3355
3352
  }
3356
3353
 
3357
- TEST(Btree, IteratorSubtraction) {
3354
+ TEST(Btree, IteratorDifference) {
3358
3355
  absl::BitGen bitgen;
3359
3356
  std::vector<int> vec;
3360
3357
  // Randomize the set's insertion order so the nodes aren't all full.
@@ -3372,6 +3369,94 @@ TEST(Btree, IteratorSubtraction) {
3372
3369
  }
3373
3370
  }
3374
3371
 
3372
+ TEST(Btree, IteratorAddition) {
3373
+ absl::BitGen bitgen;
3374
+ std::vector<int> vec;
3375
+
3376
+ // Randomize the set's insertion order so the nodes aren't all full.
3377
+ constexpr int kSetSize = 1000000;
3378
+ for (int i = 0; i < kSetSize; ++i) vec.push_back(i);
3379
+ absl::c_shuffle(vec, bitgen);
3380
+
3381
+ absl::btree_set<int> set;
3382
+ for (int i : vec) set.insert(i);
3383
+
3384
+ for (int i = 0; i < 1000; ++i) {
3385
+ int begin = absl::Uniform(bitgen, 0, kSetSize);
3386
+ int end = absl::Uniform(bitgen, begin, kSetSize);
3387
+ ASSERT_LE(begin, end);
3388
+
3389
+ auto it = set.find(begin);
3390
+ it += end - begin;
3391
+ ASSERT_EQ(it, set.find(end)) << end;
3392
+
3393
+ it += begin - end;
3394
+ ASSERT_EQ(it, set.find(begin)) << begin;
3395
+ }
3396
+ }
3397
+
3398
+ TEST(Btree, IteratorAdditionOutOfBounds) {
3399
+ const absl::btree_set<int> set({5});
3400
+
3401
+ auto it = set.find(5);
3402
+
3403
+ auto forward = it;
3404
+ forward += 1;
3405
+ EXPECT_EQ(forward, set.end());
3406
+
3407
+ auto backward = it;
3408
+ EXPECT_EQ(backward, set.begin());
3409
+
3410
+ if (IsAssertEnabled()) {
3411
+ EXPECT_DEATH(forward += 1, "n == 0");
3412
+ EXPECT_DEATH(backward += -1, "position >= node->start");
3413
+ }
3414
+ }
3415
+
3416
+ TEST(Btree, IteratorSubtraction) {
3417
+ absl::BitGen bitgen;
3418
+ std::vector<int> vec;
3419
+
3420
+ // Randomize the set's insertion order so the nodes aren't all full.
3421
+ constexpr int kSetSize = 1000000;
3422
+ for (int i = 0; i < kSetSize; ++i) vec.push_back(i);
3423
+ absl::c_shuffle(vec, bitgen);
3424
+
3425
+ absl::btree_set<int> set;
3426
+ for (int i : vec) set.insert(i);
3427
+
3428
+ for (int i = 0; i < 1000; ++i) {
3429
+ int begin = absl::Uniform(bitgen, 0, kSetSize);
3430
+ int end = absl::Uniform(bitgen, begin, kSetSize);
3431
+ ASSERT_LE(begin, end);
3432
+
3433
+ auto it = set.find(end);
3434
+ it -= end - begin;
3435
+ ASSERT_EQ(it, set.find(begin)) << begin;
3436
+
3437
+ it -= begin - end;
3438
+ ASSERT_EQ(it, set.find(end)) << end;
3439
+ }
3440
+ }
3441
+
3442
+ TEST(Btree, IteratorSubtractionOutOfBounds) {
3443
+ const absl::btree_set<int> set({5});
3444
+
3445
+ auto it = set.find(5);
3446
+
3447
+ auto backward = it;
3448
+ EXPECT_EQ(backward, set.begin());
3449
+
3450
+ auto forward = it;
3451
+ forward -= -1;
3452
+ EXPECT_EQ(forward, set.end());
3453
+
3454
+ if (IsAssertEnabled()) {
3455
+ EXPECT_DEATH(backward -= 1, "position >= node->start");
3456
+ EXPECT_DEATH(forward -= -1, "n == 0");
3457
+ }
3458
+ }
3459
+
3375
3460
  TEST(Btree, DereferencingEndIterator) {
3376
3461
  if (!IsAssertEnabled()) GTEST_SKIP() << "Assertions not enabled.";
3377
3462
 
@@ -44,11 +44,13 @@
44
44
  #include "absl/base/attributes.h"
45
45
  #include "absl/base/config.h"
46
46
  #include "absl/base/dynamic_annotations.h"
47
+ #include "absl/base/internal/iterator_traits.h"
47
48
  #include "absl/base/internal/throw_delegate.h"
48
49
  #include "absl/base/macros.h"
49
50
  #include "absl/base/optimization.h"
50
51
  #include "absl/base/port.h"
51
52
  #include "absl/container/internal/compressed_tuple.h"
53
+ #include "absl/hash/internal/weakly_mixed_integer.h"
52
54
  #include "absl/memory/memory.h"
53
55
 
54
56
  namespace absl {
@@ -85,9 +87,8 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
85
87
  // std::iterator_traits isn't guaranteed to be SFINAE-friendly until C++17,
86
88
  // but this seems to be mostly pedantic.
87
89
  template <typename Iterator>
88
- using EnableIfForwardIterator = absl::enable_if_t<std::is_convertible<
89
- typename std::iterator_traits<Iterator>::iterator_category,
90
- std::forward_iterator_tag>::value>;
90
+ using EnableIfForwardIterator = std::enable_if_t<
91
+ base_internal::IsAtLeastForwardIterator<Iterator>::value>;
91
92
  static constexpr bool NoexceptCopyable() {
92
93
  return std::is_nothrow_copy_constructible<StorageElement>::value &&
93
94
  absl::allocator_is_nothrow<allocator_type>::value;
@@ -391,8 +392,7 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
391
392
 
392
393
  template <typename H>
393
394
  friend H AbslHashValue(H h, const FixedArray& v) {
394
- return H::combine(H::combine_contiguous(std::move(h), v.data(), v.size()),
395
- v.size());
395
+ return H::combine_contiguous(std::move(h), v.data(), v.size());
396
396
  }
397
397
 
398
398
  private:
@@ -447,7 +447,8 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
447
447
 
448
448
  private:
449
449
  ABSL_ADDRESS_SANITIZER_REDZONE(redzone_begin_);
450
- alignas(StorageElement) char buff_[sizeof(StorageElement[inline_elements])];
450
+ alignas(StorageElement) unsigned char buff_[sizeof(
451
+ StorageElement[inline_elements])];
451
452
  ABSL_ADDRESS_SANITIZER_REDZONE(redzone_end_);
452
453
  };
453
454
 
@@ -517,15 +518,6 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
517
518
  Storage storage_;
518
519
  };
519
520
 
520
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
521
- template <typename T, size_t N, typename A>
522
- constexpr size_t FixedArray<T, N, A>::kInlineBytesDefault;
523
-
524
- template <typename T, size_t N, typename A>
525
- constexpr typename FixedArray<T, N, A>::size_type
526
- FixedArray<T, N, A>::inline_elements;
527
- #endif
528
-
529
521
  template <typename T, size_t N, typename A>
530
522
  void FixedArray<T, N, A>::NonEmptyInlinedStorage::AnnotateConstruct(
531
523
  typename FixedArray<T, N, A>::size_type n) {
@@ -17,18 +17,21 @@
17
17
  #include <stdio.h>
18
18
 
19
19
  #include <cstring>
20
+ #include <forward_list>
20
21
  #include <list>
21
22
  #include <memory>
22
23
  #include <numeric>
23
24
  #include <scoped_allocator>
24
25
  #include <stdexcept>
25
26
  #include <string>
27
+ #include <utility>
26
28
  #include <vector>
27
29
 
28
30
  #include "gmock/gmock.h"
29
31
  #include "gtest/gtest.h"
30
32
  #include "absl/base/config.h"
31
33
  #include "absl/base/internal/exception_testing.h"
34
+ #include "absl/base/internal/iterator_traits_test_helper.h"
32
35
  #include "absl/base/options.h"
33
36
  #include "absl/container/internal/test_allocator.h"
34
37
  #include "absl/hash/hash_testing.h"
@@ -409,6 +412,20 @@ TEST(IteratorConstructorTest, FromBidirectionalIteratorRange) {
409
412
  EXPECT_THAT(fixed, testing::ElementsAreArray(kInput));
410
413
  }
411
414
 
415
+ TEST(IteratorConstructorTest, FromCpp20ForwardIteratorRange) {
416
+ std::forward_list<int> const kUnzippedInput = {2, 3, 5, 7, 11, 13, 17};
417
+ absl::base_internal::Cpp20ForwardZipIterator<
418
+ std::forward_list<int>::const_iterator> const
419
+ begin(std::begin(kUnzippedInput), std::begin(kUnzippedInput));
420
+ absl::base_internal::
421
+ Cpp20ForwardZipIterator<std::forward_list<int>::const_iterator> const end(
422
+ std::end(kUnzippedInput), std::end(kUnzippedInput));
423
+
424
+ std::forward_list<std::pair<int, int>> const items(begin, end);
425
+ absl::FixedArray<std::pair<int, int>> const fixed(begin, end);
426
+ EXPECT_THAT(fixed, testing::ElementsAreArray(items));
427
+ }
428
+
412
429
  TEST(InitListConstructorTest, InitListConstruction) {
413
430
  absl::FixedArray<int> fixed = {1, 2, 3};
414
431
  EXPECT_THAT(fixed, testing::ElementsAreArray({1, 2, 3}));
@@ -104,24 +104,29 @@ struct FlatHashMapPolicy;
104
104
  // If your types are not moveable or you require pointer stability for keys,
105
105
  // consider `absl::node_hash_map`.
106
106
  //
107
+ // PERFORMANCE WARNING: Erasure & sparsity can negatively affect performance:
108
+ // * Iteration takes O(capacity) time, not O(size).
109
+ // * erase() slows down begin() and ++iterator.
110
+ // * Capacity only shrinks on rehash() or clear() -- not on erase().
111
+ //
107
112
  // Example:
108
113
  //
109
114
  // // Create a flat hash map of three strings (that map to strings)
110
115
  // absl::flat_hash_map<std::string, std::string> ducks =
111
116
  // {{"a", "huey"}, {"b", "dewey"}, {"c", "louie"}};
112
117
  //
113
- // // Insert a new element into the flat hash map
114
- // ducks.insert({"d", "donald"});
118
+ // // Insert a new element into the flat hash map
119
+ // ducks.insert({"d", "donald"});
115
120
  //
116
- // // Force a rehash of the flat hash map
117
- // ducks.rehash(0);
121
+ // // Force a rehash of the flat hash map
122
+ // ducks.rehash(0);
118
123
  //
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
- // }
124
+ // // Find the element with the key "b"
125
+ // std::string search_key = "b";
126
+ // auto result = ducks.find(search_key);
127
+ // if (result != ducks.end()) {
128
+ // std::cout << "Result: " << result->second << std::endl;
129
+ // }
125
130
  template <class K, class V, class Hash = DefaultHashContainerHash<K>,
126
131
  class Eq = DefaultHashContainerEq<K>,
127
132
  class Allocator = std::allocator<std::pair<const K, V>>>
@@ -153,9 +158,9 @@ class ABSL_ATTRIBUTE_OWNER flat_hash_map
153
158
  //
154
159
  // * Copy assignment operator
155
160
  //
156
- // // Hash functor and Comparator are copied as well
157
- // absl::flat_hash_map<int, std::string> map4;
158
- // map4 = map3;
161
+ // // Hash functor and Comparator are copied as well
162
+ // absl::flat_hash_map<int, std::string> map4;
163
+ // map4 = map3;
159
164
  //
160
165
  // * Move constructor
161
166
  //
@@ -655,10 +660,10 @@ struct FlatHashMapPolicy {
655
660
  std::forward<Args>(args)...);
656
661
  }
657
662
 
658
- template <class Hash>
663
+ template <class Hash, bool kIsDefault>
659
664
  static constexpr HashSlotFn get_hash_slot_fn() {
660
665
  return memory_internal::IsLayoutCompatible<K, V>::value
661
- ? &TypeErasedApplyToSlotFn<Hash, K>
666
+ ? &TypeErasedApplyToSlotFn<Hash, K, kIsDefault>
662
667
  : nullptr;
663
668
  }
664
669
 
@@ -115,23 +115,20 @@ TEST(FlatHashMap, StandardLayout) {
115
115
  }
116
116
 
117
117
  TEST(FlatHashMap, Relocatability) {
118
- static_assert(absl::is_trivially_relocatable<int>::value, "");
119
- static_assert(
120
- absl::is_trivially_relocatable<std::pair<const int, int>>::value, "");
118
+ static_assert(absl::is_trivially_relocatable<int>::value);
121
119
  static_assert(
122
120
  std::is_same<decltype(absl::container_internal::FlatHashMapPolicy<
123
121
  int, int>::transfer<std::allocator<char>>(nullptr,
124
122
  nullptr,
125
123
  nullptr)),
126
- std::true_type>::value,
127
- "");
124
+ std::true_type>::value);
128
125
 
129
- struct NonRelocatable {
130
- NonRelocatable() = default;
131
- NonRelocatable(NonRelocatable&&) {}
132
- NonRelocatable& operator=(NonRelocatable&&) { return *this; }
133
- void* self = nullptr;
134
- };
126
+ struct NonRelocatable {
127
+ NonRelocatable() = default;
128
+ NonRelocatable(NonRelocatable&&) {}
129
+ NonRelocatable& operator=(NonRelocatable&&) { return *this; }
130
+ void* self = nullptr;
131
+ };
135
132
 
136
133
  EXPECT_FALSE(absl::is_trivially_relocatable<NonRelocatable>::value);
137
134
  EXPECT_TRUE(
@@ -360,8 +357,6 @@ TEST(FlatHashMap, CForEachMutate) {
360
357
  }
361
358
  }
362
359
 
363
- // This test requires std::launder for mutable key access in node handles.
364
- #if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
365
360
  TEST(FlatHashMap, NodeHandleMutableKeyAccess) {
366
361
  flat_hash_map<std::string, std::string> map;
367
362
 
@@ -373,7 +368,6 @@ TEST(FlatHashMap, NodeHandleMutableKeyAccess) {
373
368
 
374
369
  EXPECT_THAT(map, testing::ElementsAre(Pair("key", "mapped")));
375
370
  }
376
- #endif
377
371
 
378
372
  TEST(FlatHashMap, Reserve) {
379
373
  // Verify that if we reserve(size() + n) then we can perform n insertions
@@ -62,7 +62,7 @@ struct FlatHashSetPolicy;
62
62
  // Its interface is similar to that of `std::unordered_set<T>` with the
63
63
  // following notable differences:
64
64
  //
65
- // * Requires keys that are CopyConstructible
65
+ // * Requires keys that are MoveConstructible
66
66
  // * Supports heterogeneous lookup, through `find()` and `insert()`, provided
67
67
  // that the set is provided a compatible heterogeneous hashing function and
68
68
  // equality operator. See below for details.
@@ -103,22 +103,27 @@ struct FlatHashSetPolicy;
103
103
  // `absl::flat_hash_set<std::unique_ptr<T>>`. If your type is not moveable and
104
104
  // you require pointer stability, consider `absl::node_hash_set` instead.
105
105
  //
106
+ // PERFORMANCE WARNING: Erasure & sparsity can negatively affect performance:
107
+ // * Iteration takes O(capacity) time, not O(size).
108
+ // * erase() slows down begin() and ++iterator.
109
+ // * Capacity only shrinks on rehash() or clear() -- not on erase().
110
+ //
106
111
  // Example:
107
112
  //
108
113
  // // Create a flat hash set of three strings
109
114
  // absl::flat_hash_set<std::string> ducks =
110
115
  // {"huey", "dewey", "louie"};
111
116
  //
112
- // // Insert a new element into the flat hash set
113
- // ducks.insert("donald");
117
+ // // Insert a new element into the flat hash set
118
+ // ducks.insert("donald");
114
119
  //
115
- // // Force a rehash of the flat hash set
116
- // ducks.rehash(0);
120
+ // // Force a rehash of the flat hash set
121
+ // ducks.rehash(0);
117
122
  //
118
- // // See if "dewey" is present
119
- // if (ducks.contains("dewey")) {
120
- // std::cout << "We found dewey!" << std::endl;
121
- // }
123
+ // // See if "dewey" is present
124
+ // if (ducks.contains("dewey")) {
125
+ // std::cout << "We found dewey!" << std::endl;
126
+ // }
122
127
  template <class T, class Hash = DefaultHashContainerHash<T>,
123
128
  class Eq = DefaultHashContainerEq<T>,
124
129
  class Allocator = std::allocator<T>>
@@ -149,9 +154,9 @@ class ABSL_ATTRIBUTE_OWNER flat_hash_set
149
154
  //
150
155
  // * Copy assignment operator
151
156
  //
152
- // // Hash functor and Comparator are copied as well
153
- // absl::flat_hash_set<std::string> set4;
154
- // set4 = set3;
157
+ // // Hash functor and Comparator are copied as well
158
+ // absl::flat_hash_set<std::string> set4;
159
+ // set4 = set3;
155
160
  //
156
161
  // * Move constructor
157
162
  //
@@ -553,9 +558,9 @@ struct FlatHashSetPolicy {
553
558
 
554
559
  static size_t space_used(const T*) { return 0; }
555
560
 
556
- template <class Hash>
561
+ template <class Hash, bool kIsDefault>
557
562
  static constexpr HashSlotFn get_hash_slot_fn() {
558
- return &TypeErasedApplyToSlotFn<Hash, T>;
563
+ return &TypeErasedApplyToSlotFn<Hash, T, kIsDefault>;
559
564
  }
560
565
  };
561
566
  } // namespace container_internal
@@ -351,6 +351,52 @@ TEST(FlatHashSet, Equality) {
351
351
  }
352
352
  }
353
353
 
354
+ class MoveOnlyInt {
355
+ public:
356
+ explicit MoveOnlyInt(int value) : value_(value) {}
357
+
358
+ MoveOnlyInt(const MoveOnlyInt& other) = delete;
359
+ MoveOnlyInt& operator=(const MoveOnlyInt& other) = delete;
360
+
361
+ MoveOnlyInt(MoveOnlyInt&& other) = default;
362
+ MoveOnlyInt& operator=(MoveOnlyInt&& other) = default;
363
+
364
+ bool operator==(const MoveOnlyInt& other) const {
365
+ return value_ == other.value_;
366
+ }
367
+ bool operator==(int other) const { return value_ == other; }
368
+
369
+ private:
370
+ template <typename H>
371
+ friend H AbslHashValue(H h, const MoveOnlyInt& m) {
372
+ return H::combine(std::move(h), m.value_);
373
+ }
374
+
375
+ int value_;
376
+ };
377
+
378
+ TEST(FlatHashSet, MoveOnlyKey) {
379
+ flat_hash_set<MoveOnlyInt> s;
380
+ s.insert(MoveOnlyInt(1));
381
+ s.insert(MoveOnlyInt(2));
382
+ s.insert(MoveOnlyInt(3));
383
+ EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3));
384
+ }
385
+
386
+ TEST(FlatHashSet, IsDefaultHash) {
387
+ using absl::container_internal::hashtable_debug_internal::
388
+ HashtableDebugAccess;
389
+ EXPECT_EQ(HashtableDebugAccess<flat_hash_set<int>>::kIsDefaultHash, true);
390
+ EXPECT_EQ(HashtableDebugAccess<flat_hash_set<std::string>>::kIsDefaultHash,
391
+ true);
392
+
393
+ struct Hash {
394
+ size_t operator()(size_t i) const { return i; }
395
+ };
396
+ EXPECT_EQ((HashtableDebugAccess<flat_hash_set<size_t, Hash>>::kIsDefaultHash),
397
+ false);
398
+ }
399
+
354
400
  } // namespace
355
401
  } // namespace container_internal
356
402
  ABSL_NAMESPACE_END
@@ -47,11 +47,13 @@
47
47
 
48
48
  #include "absl/algorithm/algorithm.h"
49
49
  #include "absl/base/attributes.h"
50
+ #include "absl/base/internal/iterator_traits.h"
50
51
  #include "absl/base/internal/throw_delegate.h"
51
52
  #include "absl/base/macros.h"
52
53
  #include "absl/base/optimization.h"
53
54
  #include "absl/base/port.h"
54
55
  #include "absl/container/internal/inlined_vector.h"
56
+ #include "absl/hash/internal/weakly_mixed_integer.h"
55
57
  #include "absl/memory/memory.h"
56
58
  #include "absl/meta/type_traits.h"
57
59
 
@@ -90,11 +92,11 @@ class ABSL_ATTRIBUTE_WARN_UNUSED InlinedVector {
90
92
  inlined_vector_internal::DefaultValueAdapter<TheA>;
91
93
 
92
94
  template <typename Iterator>
93
- using EnableIfAtLeastForwardIterator = absl::enable_if_t<
94
- inlined_vector_internal::IsAtLeastForwardIterator<Iterator>::value, int>;
95
+ using EnableIfAtLeastForwardIterator = std::enable_if_t<
96
+ base_internal::IsAtLeastForwardIterator<Iterator>::value, int>;
95
97
  template <typename Iterator>
96
- using DisableIfAtLeastForwardIterator = absl::enable_if_t<
97
- !inlined_vector_internal::IsAtLeastForwardIterator<Iterator>::value, int>;
98
+ using DisableIfAtLeastForwardIterator = std::enable_if_t<
99
+ !base_internal::IsAtLeastForwardIterator<Iterator>::value, int>;
98
100
 
99
101
  using MemcpyPolicy = typename Storage::MemcpyPolicy;
100
102
  using ElementwiseAssignPolicy = typename Storage::ElementwiseAssignPolicy;
@@ -1006,8 +1008,7 @@ bool operator>=(const absl::InlinedVector<T, N, A>& a,
1006
1008
  // call this directly.
1007
1009
  template <typename H, typename T, size_t N, typename A>
1008
1010
  H AbslHashValue(H h, const absl::InlinedVector<T, N, A>& a) {
1009
- auto size = a.size();
1010
- return H::combine(H::combine_contiguous(std::move(h), a.data(), size), size);
1011
+ return H::combine_contiguous(std::move(h), a.data(), a.size());
1011
1012
  }
1012
1013
 
1013
1014
  ABSL_NAMESPACE_END