@nxtedition/rocksdb 15.2.2 → 15.2.4

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 (1707) hide show
  1. package/.claude/settings.local.json +15 -1
  2. package/binding.cc +186 -128
  3. package/binding.gyp +32 -113
  4. package/build.sh +3 -0
  5. package/deps/rocksdb/rocksdb.gyp +3 -1
  6. package/index.js +3 -5
  7. package/package.json +1 -1
  8. package/prebuilds/darwin-arm64/@nxtedition+rocksdb.node +0 -0
  9. package/prebuilds/linux-x64/@nxtedition+rocksdb.node +0 -0
  10. package/util.h +62 -63
  11. package/deps/abseil-cpp/BUILD.bazel +0 -35
  12. package/deps/abseil-cpp/CMake/AbseilDll.cmake +0 -938
  13. package/deps/abseil-cpp/CMake/AbseilHelpers.cmake +0 -465
  14. package/deps/abseil-cpp/CMake/Googletest/CMakeLists.txt.in +0 -14
  15. package/deps/abseil-cpp/CMake/Googletest/DownloadGTest.cmake +0 -41
  16. package/deps/abseil-cpp/CMake/abslConfig.cmake.in +0 -8
  17. package/deps/abseil-cpp/CMake/install_test_project/CMakeLists.txt +0 -25
  18. package/deps/abseil-cpp/CMake/install_test_project/simple.cc +0 -32
  19. package/deps/abseil-cpp/CMake/install_test_project/test.sh +0 -113
  20. package/deps/abseil-cpp/CMakeLists.txt +0 -280
  21. package/deps/abseil-cpp/LICENSE +0 -203
  22. package/deps/abseil-cpp/MODULE.bazel +0 -43
  23. package/deps/abseil-cpp/PrivacyInfo.xcprivacy +0 -14
  24. package/deps/abseil-cpp/absl/BUILD.bazel +0 -62
  25. package/deps/abseil-cpp/absl/CMakeLists.txt +0 -45
  26. package/deps/abseil-cpp/absl/abseil.podspec.gen.py +0 -245
  27. package/deps/abseil-cpp/absl/algorithm/BUILD.bazel +0 -92
  28. package/deps/abseil-cpp/absl/algorithm/CMakeLists.txt +0 -72
  29. package/deps/abseil-cpp/absl/algorithm/algorithm.h +0 -64
  30. package/deps/abseil-cpp/absl/algorithm/algorithm_test.cc +0 -60
  31. package/deps/abseil-cpp/absl/algorithm/container.h +0 -1864
  32. package/deps/abseil-cpp/absl/algorithm/container_test.cc +0 -2232
  33. package/deps/abseil-cpp/absl/base/BUILD.bazel +0 -1036
  34. package/deps/abseil-cpp/absl/base/CMakeLists.txt +0 -881
  35. package/deps/abseil-cpp/absl/base/attributes.h +0 -1081
  36. package/deps/abseil-cpp/absl/base/attributes_test.cc +0 -43
  37. package/deps/abseil-cpp/absl/base/bit_cast_test.cc +0 -109
  38. package/deps/abseil-cpp/absl/base/c_header_test.c +0 -30
  39. package/deps/abseil-cpp/absl/base/call_once.h +0 -228
  40. package/deps/abseil-cpp/absl/base/call_once_test.cc +0 -107
  41. package/deps/abseil-cpp/absl/base/casts.cc +0 -61
  42. package/deps/abseil-cpp/absl/base/casts.h +0 -313
  43. package/deps/abseil-cpp/absl/base/casts_test.cc +0 -148
  44. package/deps/abseil-cpp/absl/base/config.h +0 -854
  45. package/deps/abseil-cpp/absl/base/config_test.cc +0 -60
  46. package/deps/abseil-cpp/absl/base/const_init.h +0 -76
  47. package/deps/abseil-cpp/absl/base/dynamic_annotations.h +0 -480
  48. package/deps/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -958
  49. package/deps/abseil-cpp/absl/base/fast_type_id.h +0 -73
  50. package/deps/abseil-cpp/absl/base/fast_type_id_test.cc +0 -130
  51. package/deps/abseil-cpp/absl/base/internal/atomic_hook.h +0 -200
  52. package/deps/abseil-cpp/absl/base/internal/atomic_hook_test.cc +0 -97
  53. package/deps/abseil-cpp/absl/base/internal/atomic_hook_test_helper.cc +0 -32
  54. package/deps/abseil-cpp/absl/base/internal/atomic_hook_test_helper.h +0 -34
  55. package/deps/abseil-cpp/absl/base/internal/cmake_thread_test.cc +0 -22
  56. package/deps/abseil-cpp/absl/base/internal/cycleclock.cc +0 -72
  57. package/deps/abseil-cpp/absl/base/internal/cycleclock.h +0 -144
  58. package/deps/abseil-cpp/absl/base/internal/cycleclock_config.h +0 -55
  59. package/deps/abseil-cpp/absl/base/internal/direct_mmap.h +0 -170
  60. package/deps/abseil-cpp/absl/base/internal/dynamic_annotations.h +0 -398
  61. package/deps/abseil-cpp/absl/base/internal/endian.h +0 -279
  62. package/deps/abseil-cpp/absl/base/internal/endian_test.cc +0 -263
  63. package/deps/abseil-cpp/absl/base/internal/errno_saver.h +0 -43
  64. package/deps/abseil-cpp/absl/base/internal/errno_saver_test.cc +0 -45
  65. package/deps/abseil-cpp/absl/base/internal/exception_safety_testing.cc +0 -79
  66. package/deps/abseil-cpp/absl/base/internal/exception_safety_testing.h +0 -1109
  67. package/deps/abseil-cpp/absl/base/internal/exception_testing.h +0 -42
  68. package/deps/abseil-cpp/absl/base/internal/hide_ptr.h +0 -51
  69. package/deps/abseil-cpp/absl/base/internal/iterator_traits.h +0 -75
  70. package/deps/abseil-cpp/absl/base/internal/iterator_traits_test.cc +0 -85
  71. package/deps/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +0 -97
  72. package/deps/abseil-cpp/absl/base/internal/low_level_alloc.cc +0 -661
  73. package/deps/abseil-cpp/absl/base/internal/low_level_alloc.h +0 -133
  74. package/deps/abseil-cpp/absl/base/internal/low_level_alloc_test.cc +0 -180
  75. package/deps/abseil-cpp/absl/base/internal/low_level_scheduling.h +0 -134
  76. package/deps/abseil-cpp/absl/base/internal/nullability_traits.h +0 -71
  77. package/deps/abseil-cpp/absl/base/internal/nullability_traits_test.cc +0 -98
  78. package/deps/abseil-cpp/absl/base/internal/per_thread_tls.h +0 -52
  79. package/deps/abseil-cpp/absl/base/internal/poison.cc +0 -85
  80. package/deps/abseil-cpp/absl/base/internal/poison.h +0 -59
  81. package/deps/abseil-cpp/absl/base/internal/poison_test.cc +0 -41
  82. package/deps/abseil-cpp/absl/base/internal/pretty_function.h +0 -33
  83. package/deps/abseil-cpp/absl/base/internal/raw_logging.cc +0 -279
  84. package/deps/abseil-cpp/absl/base/internal/raw_logging.h +0 -217
  85. package/deps/abseil-cpp/absl/base/internal/scheduling_mode.h +0 -58
  86. package/deps/abseil-cpp/absl/base/internal/scoped_set_env.cc +0 -81
  87. package/deps/abseil-cpp/absl/base/internal/scoped_set_env.h +0 -45
  88. package/deps/abseil-cpp/absl/base/internal/scoped_set_env_test.cc +0 -99
  89. package/deps/abseil-cpp/absl/base/internal/spinlock.cc +0 -225
  90. package/deps/abseil-cpp/absl/base/internal/spinlock.h +0 -310
  91. package/deps/abseil-cpp/absl/base/internal/spinlock_akaros.inc +0 -35
  92. package/deps/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +0 -80
  93. package/deps/abseil-cpp/absl/base/internal/spinlock_linux.inc +0 -71
  94. package/deps/abseil-cpp/absl/base/internal/spinlock_posix.inc +0 -46
  95. package/deps/abseil-cpp/absl/base/internal/spinlock_wait.cc +0 -81
  96. package/deps/abseil-cpp/absl/base/internal/spinlock_wait.h +0 -95
  97. package/deps/abseil-cpp/absl/base/internal/spinlock_win32.inc +0 -40
  98. package/deps/abseil-cpp/absl/base/internal/strerror.cc +0 -88
  99. package/deps/abseil-cpp/absl/base/internal/strerror.h +0 -39
  100. package/deps/abseil-cpp/absl/base/internal/strerror_benchmark.cc +0 -29
  101. package/deps/abseil-cpp/absl/base/internal/strerror_test.cc +0 -89
  102. package/deps/abseil-cpp/absl/base/internal/sysinfo.cc +0 -494
  103. package/deps/abseil-cpp/absl/base/internal/sysinfo.h +0 -74
  104. package/deps/abseil-cpp/absl/base/internal/sysinfo_test.cc +0 -82
  105. package/deps/abseil-cpp/absl/base/internal/thread_identity.cc +0 -163
  106. package/deps/abseil-cpp/absl/base/internal/thread_identity.h +0 -273
  107. package/deps/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +0 -38
  108. package/deps/abseil-cpp/absl/base/internal/thread_identity_test.cc +0 -129
  109. package/deps/abseil-cpp/absl/base/internal/throw_delegate.cc +0 -203
  110. package/deps/abseil-cpp/absl/base/internal/throw_delegate.h +0 -75
  111. package/deps/abseil-cpp/absl/base/internal/tracing.cc +0 -39
  112. package/deps/abseil-cpp/absl/base/internal/tracing.h +0 -81
  113. package/deps/abseil-cpp/absl/base/internal/tracing_strong_test.cc +0 -117
  114. package/deps/abseil-cpp/absl/base/internal/tracing_weak_test.cc +0 -34
  115. package/deps/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +0 -68
  116. package/deps/abseil-cpp/absl/base/internal/unaligned_access.h +0 -89
  117. package/deps/abseil-cpp/absl/base/internal/unique_small_name_test.cc +0 -77
  118. package/deps/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +0 -134
  119. package/deps/abseil-cpp/absl/base/internal/unscaledcycleclock.h +0 -113
  120. package/deps/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +0 -62
  121. package/deps/abseil-cpp/absl/base/log_severity.cc +0 -56
  122. package/deps/abseil-cpp/absl/base/log_severity.h +0 -185
  123. package/deps/abseil-cpp/absl/base/log_severity_test.cc +0 -251
  124. package/deps/abseil-cpp/absl/base/macros.h +0 -243
  125. package/deps/abseil-cpp/absl/base/no_destructor.h +0 -191
  126. package/deps/abseil-cpp/absl/base/no_destructor_benchmark.cc +0 -165
  127. package/deps/abseil-cpp/absl/base/no_destructor_test.cc +0 -205
  128. package/deps/abseil-cpp/absl/base/nullability.h +0 -317
  129. package/deps/abseil-cpp/absl/base/nullability_default_nonnull_test.cc +0 -44
  130. package/deps/abseil-cpp/absl/base/nullability_test.cc +0 -90
  131. package/deps/abseil-cpp/absl/base/optimization.h +0 -310
  132. package/deps/abseil-cpp/absl/base/optimization_test.cc +0 -141
  133. package/deps/abseil-cpp/absl/base/options.h +0 -158
  134. package/deps/abseil-cpp/absl/base/policy_checks.h +0 -115
  135. package/deps/abseil-cpp/absl/base/port.h +0 -25
  136. package/deps/abseil-cpp/absl/base/prefetch.h +0 -209
  137. package/deps/abseil-cpp/absl/base/prefetch_test.cc +0 -64
  138. package/deps/abseil-cpp/absl/base/raw_logging_test.cc +0 -98
  139. package/deps/abseil-cpp/absl/base/spinlock_test_common.cc +0 -302
  140. package/deps/abseil-cpp/absl/base/thread_annotations.h +0 -333
  141. package/deps/abseil-cpp/absl/base/throw_delegate_test.cc +0 -175
  142. package/deps/abseil-cpp/absl/cleanup/BUILD.bazel +0 -74
  143. package/deps/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -55
  144. package/deps/abseil-cpp/absl/cleanup/cleanup.h +0 -142
  145. package/deps/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -309
  146. package/deps/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -99
  147. package/deps/abseil-cpp/absl/container/BUILD.bazel +0 -1394
  148. package/deps/abseil-cpp/absl/container/CMakeLists.txt +0 -1239
  149. package/deps/abseil-cpp/absl/container/btree_benchmark.cc +0 -806
  150. package/deps/abseil-cpp/absl/container/btree_map.h +0 -941
  151. package/deps/abseil-cpp/absl/container/btree_set.h +0 -872
  152. package/deps/abseil-cpp/absl/container/btree_test.cc +0 -3653
  153. package/deps/abseil-cpp/absl/container/btree_test.h +0 -166
  154. package/deps/abseil-cpp/absl/container/chunked_queue.h +0 -755
  155. package/deps/abseil-cpp/absl/container/chunked_queue_benchmark.cc +0 -386
  156. package/deps/abseil-cpp/absl/container/chunked_queue_test.cc +0 -768
  157. package/deps/abseil-cpp/absl/container/fixed_array.h +0 -547
  158. package/deps/abseil-cpp/absl/container/fixed_array_benchmark.cc +0 -67
  159. package/deps/abseil-cpp/absl/container/fixed_array_exception_safety_test.cc +0 -201
  160. package/deps/abseil-cpp/absl/container/fixed_array_test.cc +0 -874
  161. package/deps/abseil-cpp/absl/container/flat_hash_map.h +0 -702
  162. package/deps/abseil-cpp/absl/container/flat_hash_map_test.cc +0 -451
  163. package/deps/abseil-cpp/absl/container/flat_hash_set.h +0 -590
  164. package/deps/abseil-cpp/absl/container/flat_hash_set_test.cc +0 -401
  165. package/deps/abseil-cpp/absl/container/hash_container_defaults.h +0 -45
  166. package/deps/abseil-cpp/absl/container/inlined_vector.h +0 -1025
  167. package/deps/abseil-cpp/absl/container/inlined_vector_benchmark.cc +0 -829
  168. package/deps/abseil-cpp/absl/container/inlined_vector_exception_safety_test.cc +0 -508
  169. package/deps/abseil-cpp/absl/container/inlined_vector_test.cc +0 -2278
  170. package/deps/abseil-cpp/absl/container/internal/btree.h +0 -3149
  171. package/deps/abseil-cpp/absl/container/internal/btree_container.h +0 -876
  172. package/deps/abseil-cpp/absl/container/internal/chunked_queue.h +0 -173
  173. package/deps/abseil-cpp/absl/container/internal/common.h +0 -301
  174. package/deps/abseil-cpp/absl/container/internal/common_policy_traits.h +0 -151
  175. package/deps/abseil-cpp/absl/container/internal/common_policy_traits_test.cc +0 -157
  176. package/deps/abseil-cpp/absl/container/internal/compressed_tuple.h +0 -275
  177. package/deps/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +0 -469
  178. package/deps/abseil-cpp/absl/container/internal/container_memory.h +0 -561
  179. package/deps/abseil-cpp/absl/container/internal/container_memory_test.cc +0 -359
  180. package/deps/abseil-cpp/absl/container/internal/hash_function_defaults.h +0 -281
  181. package/deps/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +0 -633
  182. package/deps/abseil-cpp/absl/container/internal/hash_generator_testing.cc +0 -54
  183. package/deps/abseil-cpp/absl/container/internal/hash_generator_testing.h +0 -172
  184. package/deps/abseil-cpp/absl/container/internal/hash_policy_testing.h +0 -173
  185. package/deps/abseil-cpp/absl/container/internal/hash_policy_testing_test.cc +0 -45
  186. package/deps/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -195
  187. package/deps/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +0 -149
  188. package/deps/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +0 -527
  189. package/deps/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +0 -259
  190. package/deps/abseil-cpp/absl/container/internal/hashtable_debug.h +0 -102
  191. package/deps/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +0 -85
  192. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +0 -316
  193. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -311
  194. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +0 -31
  195. package/deps/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +0 -534
  196. package/deps/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +0 -80
  197. package/deps/abseil-cpp/absl/container/internal/inlined_vector.h +0 -1094
  198. package/deps/abseil-cpp/absl/container/internal/layout.h +0 -828
  199. package/deps/abseil-cpp/absl/container/internal/layout_benchmark.cc +0 -295
  200. package/deps/abseil-cpp/absl/container/internal/layout_test.cc +0 -2034
  201. package/deps/abseil-cpp/absl/container/internal/node_slot_policy.h +0 -95
  202. package/deps/abseil-cpp/absl/container/internal/node_slot_policy_test.cc +0 -71
  203. package/deps/abseil-cpp/absl/container/internal/raw_hash_map.h +0 -382
  204. package/deps/abseil-cpp/absl/container/internal/raw_hash_set.cc +0 -2090
  205. package/deps/abseil-cpp/absl/container/internal/raw_hash_set.h +0 -3763
  206. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +0 -525
  207. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +0 -696
  208. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +0 -583
  209. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -79
  210. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +0 -66
  211. package/deps/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +0 -4184
  212. package/deps/abseil-cpp/absl/container/internal/test_allocator.h +0 -387
  213. package/deps/abseil-cpp/absl/container/internal/test_instance_tracker.cc +0 -29
  214. package/deps/abseil-cpp/absl/container/internal/test_instance_tracker.h +0 -274
  215. package/deps/abseil-cpp/absl/container/internal/test_instance_tracker_test.cc +0 -184
  216. package/deps/abseil-cpp/absl/container/internal/tracked.h +0 -83
  217. package/deps/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h +0 -435
  218. package/deps/abseil-cpp/absl/container/internal/unordered_map_lookup_test.h +0 -112
  219. package/deps/abseil-cpp/absl/container/internal/unordered_map_members_test.h +0 -87
  220. package/deps/abseil-cpp/absl/container/internal/unordered_map_modifiers_test.h +0 -336
  221. package/deps/abseil-cpp/absl/container/internal/unordered_map_test.cc +0 -50
  222. package/deps/abseil-cpp/absl/container/internal/unordered_set_constructor_test.h +0 -437
  223. package/deps/abseil-cpp/absl/container/internal/unordered_set_lookup_test.h +0 -88
  224. package/deps/abseil-cpp/absl/container/internal/unordered_set_members_test.h +0 -86
  225. package/deps/abseil-cpp/absl/container/internal/unordered_set_modifiers_test.h +0 -215
  226. package/deps/abseil-cpp/absl/container/internal/unordered_set_test.cc +0 -41
  227. package/deps/abseil-cpp/absl/container/linked_hash_map.h +0 -666
  228. package/deps/abseil-cpp/absl/container/linked_hash_map_benchmark.cc +0 -140
  229. package/deps/abseil-cpp/absl/container/linked_hash_map_test.cc +0 -987
  230. package/deps/abseil-cpp/absl/container/linked_hash_set.h +0 -527
  231. package/deps/abseil-cpp/absl/container/linked_hash_set_benchmark.cc +0 -84
  232. package/deps/abseil-cpp/absl/container/linked_hash_set_test.cc +0 -947
  233. package/deps/abseil-cpp/absl/container/node_hash_map.h +0 -698
  234. package/deps/abseil-cpp/absl/container/node_hash_map_test.cc +0 -348
  235. package/deps/abseil-cpp/absl/container/node_hash_set.h +0 -589
  236. package/deps/abseil-cpp/absl/container/node_hash_set_test.cc +0 -188
  237. package/deps/abseil-cpp/absl/container/sample_element_size_test.cc +0 -118
  238. package/deps/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +0 -106
  239. package/deps/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +0 -303
  240. package/deps/abseil-cpp/absl/copts/GENERATED_copts.bzl +0 -304
  241. package/deps/abseil-cpp/absl/copts/configure_copts.bzl +0 -39
  242. package/deps/abseil-cpp/absl/copts/copts.py +0 -205
  243. package/deps/abseil-cpp/absl/copts/generate_copts.py +0 -109
  244. package/deps/abseil-cpp/absl/crc/BUILD.bazel +0 -228
  245. package/deps/abseil-cpp/absl/crc/CMakeLists.txt +0 -177
  246. package/deps/abseil-cpp/absl/crc/crc32c.cc +0 -95
  247. package/deps/abseil-cpp/absl/crc/crc32c.h +0 -192
  248. package/deps/abseil-cpp/absl/crc/crc32c_benchmark.cc +0 -196
  249. package/deps/abseil-cpp/absl/crc/crc32c_test.cc +0 -257
  250. package/deps/abseil-cpp/absl/crc/internal/cpu_detect.cc +0 -359
  251. package/deps/abseil-cpp/absl/crc/internal/cpu_detect.h +0 -69
  252. package/deps/abseil-cpp/absl/crc/internal/crc.cc +0 -435
  253. package/deps/abseil-cpp/absl/crc/internal/crc.h +0 -83
  254. package/deps/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -278
  255. package/deps/abseil-cpp/absl/crc/internal/crc32c.h +0 -39
  256. package/deps/abseil-cpp/absl/crc/internal/crc32c_inline.h +0 -72
  257. package/deps/abseil-cpp/absl/crc/internal/crc_cord_state.cc +0 -131
  258. package/deps/abseil-cpp/absl/crc/internal/crc_cord_state.h +0 -159
  259. package/deps/abseil-cpp/absl/crc/internal/crc_cord_state_test.cc +0 -124
  260. package/deps/abseil-cpp/absl/crc/internal/crc_internal.h +0 -161
  261. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy.h +0 -122
  262. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +0 -78
  263. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy_test.cc +0 -177
  264. package/deps/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +0 -459
  265. package/deps/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +0 -93
  266. package/deps/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +0 -762
  267. package/deps/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +0 -90
  268. package/deps/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +0 -81
  269. package/deps/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +0 -195
  270. package/deps/abseil-cpp/absl/crc/internal/non_temporal_memcpy_test.cc +0 -90
  271. package/deps/abseil-cpp/absl/debugging/BUILD.bazel +0 -483
  272. package/deps/abseil-cpp/absl/debugging/CMakeLists.txt +0 -448
  273. package/deps/abseil-cpp/absl/debugging/failure_signal_handler.cc +0 -434
  274. package/deps/abseil-cpp/absl/debugging/failure_signal_handler.h +0 -121
  275. package/deps/abseil-cpp/absl/debugging/failure_signal_handler_test.cc +0 -166
  276. package/deps/abseil-cpp/absl/debugging/internal/address_is_readable.cc +0 -98
  277. package/deps/abseil-cpp/absl/debugging/internal/address_is_readable.h +0 -32
  278. package/deps/abseil-cpp/absl/debugging/internal/addresses.h +0 -57
  279. package/deps/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
  280. package/deps/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
  281. package/deps/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
  282. package/deps/abseil-cpp/absl/debugging/internal/bounded_utf8_length_sequence.h +0 -126
  283. package/deps/abseil-cpp/absl/debugging/internal/bounded_utf8_length_sequence_test.cc +0 -126
  284. package/deps/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +0 -258
  285. package/deps/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +0 -55
  286. package/deps/abseil-cpp/absl/debugging/internal/decode_rust_punycode_test.cc +0 -606
  287. package/deps/abseil-cpp/absl/debugging/internal/demangle.cc +0 -2958
  288. package/deps/abseil-cpp/absl/debugging/internal/demangle.h +0 -76
  289. package/deps/abseil-cpp/absl/debugging/internal/demangle_rust.cc +0 -925
  290. package/deps/abseil-cpp/absl/debugging/internal/demangle_rust.h +0 -42
  291. package/deps/abseil-cpp/absl/debugging/internal/demangle_rust_test.cc +0 -584
  292. package/deps/abseil-cpp/absl/debugging/internal/demangle_test.cc +0 -2050
  293. package/deps/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +0 -413
  294. package/deps/abseil-cpp/absl/debugging/internal/elf_mem_image.h +0 -141
  295. package/deps/abseil-cpp/absl/debugging/internal/examine_stack.cc +0 -334
  296. package/deps/abseil-cpp/absl/debugging/internal/examine_stack.h +0 -70
  297. package/deps/abseil-cpp/absl/debugging/internal/stack_consumption.cc +0 -206
  298. package/deps/abseil-cpp/absl/debugging/internal/stack_consumption.h +0 -50
  299. package/deps/abseil-cpp/absl/debugging/internal/stack_consumption_test.cc +0 -50
  300. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +0 -288
  301. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +0 -148
  302. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_config.h +0 -96
  303. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +0 -112
  304. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +0 -114
  305. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +0 -270
  306. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +0 -204
  307. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +0 -25
  308. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +0 -81
  309. package/deps/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +0 -410
  310. package/deps/abseil-cpp/absl/debugging/internal/symbolize.h +0 -153
  311. package/deps/abseil-cpp/absl/debugging/internal/utf8_for_code_point.cc +0 -70
  312. package/deps/abseil-cpp/absl/debugging/internal/utf8_for_code_point.h +0 -47
  313. package/deps/abseil-cpp/absl/debugging/internal/utf8_for_code_point_test.cc +0 -175
  314. package/deps/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -209
  315. package/deps/abseil-cpp/absl/debugging/internal/vdso_support.h +0 -158
  316. package/deps/abseil-cpp/absl/debugging/leak_check.cc +0 -73
  317. package/deps/abseil-cpp/absl/debugging/leak_check.h +0 -150
  318. package/deps/abseil-cpp/absl/debugging/leak_check_fail_test.cc +0 -41
  319. package/deps/abseil-cpp/absl/debugging/leak_check_test.cc +0 -41
  320. package/deps/abseil-cpp/absl/debugging/stacktrace.cc +0 -244
  321. package/deps/abseil-cpp/absl/debugging/stacktrace.h +0 -302
  322. package/deps/abseil-cpp/absl/debugging/stacktrace_benchmark.cc +0 -78
  323. package/deps/abseil-cpp/absl/debugging/stacktrace_test.cc +0 -505
  324. package/deps/abseil-cpp/absl/debugging/symbolize.cc +0 -44
  325. package/deps/abseil-cpp/absl/debugging/symbolize.h +0 -99
  326. package/deps/abseil-cpp/absl/debugging/symbolize_darwin.inc +0 -102
  327. package/deps/abseil-cpp/absl/debugging/symbolize_elf.inc +0 -1756
  328. package/deps/abseil-cpp/absl/debugging/symbolize_emscripten.inc +0 -63
  329. package/deps/abseil-cpp/absl/debugging/symbolize_test.cc +0 -619
  330. package/deps/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +0 -40
  331. package/deps/abseil-cpp/absl/debugging/symbolize_win32.inc +0 -99
  332. package/deps/abseil-cpp/absl/extend/CMakeLists.txt +0 -140
  333. package/deps/abseil-cpp/absl/extend/internal/BUILD.bazel +0 -127
  334. package/deps/abseil-cpp/absl/extend/internal/aggregate.h +0 -1687
  335. package/deps/abseil-cpp/absl/extend/internal/aggregate_test.cc +0 -867
  336. package/deps/abseil-cpp/absl/extend/internal/dependencies.h +0 -83
  337. package/deps/abseil-cpp/absl/extend/internal/dependencies_test.cc +0 -117
  338. package/deps/abseil-cpp/absl/extend/internal/is_tuple_hashable.h +0 -45
  339. package/deps/abseil-cpp/absl/extend/internal/num_bases.h +0 -87
  340. package/deps/abseil-cpp/absl/extend/internal/num_bases_test.cc +0 -91
  341. package/deps/abseil-cpp/absl/extend/internal/num_initializers.h +0 -113
  342. package/deps/abseil-cpp/absl/extend/internal/num_initializers_test.cc +0 -250
  343. package/deps/abseil-cpp/absl/extend/internal/reflection.cc +0 -112
  344. package/deps/abseil-cpp/absl/extend/internal/reflection.h +0 -75
  345. package/deps/abseil-cpp/absl/extend/internal/tuple.h +0 -51
  346. package/deps/abseil-cpp/absl/flags/BUILD.bazel +0 -618
  347. package/deps/abseil-cpp/absl/flags/CMakeLists.txt +0 -482
  348. package/deps/abseil-cpp/absl/flags/commandlineflag.cc +0 -35
  349. package/deps/abseil-cpp/absl/flags/commandlineflag.h +0 -219
  350. package/deps/abseil-cpp/absl/flags/commandlineflag_test.cc +0 -236
  351. package/deps/abseil-cpp/absl/flags/config.h +0 -68
  352. package/deps/abseil-cpp/absl/flags/config_test.cc +0 -61
  353. package/deps/abseil-cpp/absl/flags/declare.h +0 -77
  354. package/deps/abseil-cpp/absl/flags/flag.h +0 -307
  355. package/deps/abseil-cpp/absl/flags/flag_benchmark.cc +0 -251
  356. package/deps/abseil-cpp/absl/flags/flag_benchmark.lds +0 -13
  357. package/deps/abseil-cpp/absl/flags/flag_test.cc +0 -1381
  358. package/deps/abseil-cpp/absl/flags/flag_test_defs.cc +0 -24
  359. package/deps/abseil-cpp/absl/flags/internal/commandlineflag.cc +0 -26
  360. package/deps/abseil-cpp/absl/flags/internal/commandlineflag.h +0 -68
  361. package/deps/abseil-cpp/absl/flags/internal/flag.cc +0 -712
  362. package/deps/abseil-cpp/absl/flags/internal/flag.h +0 -969
  363. package/deps/abseil-cpp/absl/flags/internal/parse.h +0 -70
  364. package/deps/abseil-cpp/absl/flags/internal/path_util.h +0 -62
  365. package/deps/abseil-cpp/absl/flags/internal/path_util_test.cc +0 -46
  366. package/deps/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +0 -69
  367. package/deps/abseil-cpp/absl/flags/internal/private_handle_accessor.h +0 -64
  368. package/deps/abseil-cpp/absl/flags/internal/program_name.cc +0 -61
  369. package/deps/abseil-cpp/absl/flags/internal/program_name.h +0 -50
  370. package/deps/abseil-cpp/absl/flags/internal/program_name_test.cc +0 -61
  371. package/deps/abseil-cpp/absl/flags/internal/registry.h +0 -98
  372. package/deps/abseil-cpp/absl/flags/internal/sequence_lock.h +0 -187
  373. package/deps/abseil-cpp/absl/flags/internal/sequence_lock_test.cc +0 -169
  374. package/deps/abseil-cpp/absl/flags/internal/usage.cc +0 -558
  375. package/deps/abseil-cpp/absl/flags/internal/usage.h +0 -106
  376. package/deps/abseil-cpp/absl/flags/internal/usage_test.cc +0 -550
  377. package/deps/abseil-cpp/absl/flags/marshalling.cc +0 -276
  378. package/deps/abseil-cpp/absl/flags/marshalling.h +0 -361
  379. package/deps/abseil-cpp/absl/flags/marshalling_test.cc +0 -1220
  380. package/deps/abseil-cpp/absl/flags/parse.cc +0 -952
  381. package/deps/abseil-cpp/absl/flags/parse.h +0 -130
  382. package/deps/abseil-cpp/absl/flags/parse_test.cc +0 -1094
  383. package/deps/abseil-cpp/absl/flags/reflection.cc +0 -368
  384. package/deps/abseil-cpp/absl/flags/reflection.h +0 -90
  385. package/deps/abseil-cpp/absl/flags/reflection_test.cc +0 -268
  386. package/deps/abseil-cpp/absl/flags/usage.cc +0 -66
  387. package/deps/abseil-cpp/absl/flags/usage.h +0 -43
  388. package/deps/abseil-cpp/absl/flags/usage_config.cc +0 -170
  389. package/deps/abseil-cpp/absl/flags/usage_config.h +0 -135
  390. package/deps/abseil-cpp/absl/flags/usage_config_test.cc +0 -205
  391. package/deps/abseil-cpp/absl/functional/BUILD.bazel +0 -173
  392. package/deps/abseil-cpp/absl/functional/CMakeLists.txt +0 -140
  393. package/deps/abseil-cpp/absl/functional/any_invocable.h +0 -336
  394. package/deps/abseil-cpp/absl/functional/any_invocable_test.cc +0 -1687
  395. package/deps/abseil-cpp/absl/functional/bind_front.h +0 -200
  396. package/deps/abseil-cpp/absl/functional/bind_front_test.cc +0 -227
  397. package/deps/abseil-cpp/absl/functional/function_ref.h +0 -249
  398. package/deps/abseil-cpp/absl/functional/function_ref_test.cc +0 -416
  399. package/deps/abseil-cpp/absl/functional/function_type_benchmark.cc +0 -176
  400. package/deps/abseil-cpp/absl/functional/internal/any_invocable.h +0 -787
  401. package/deps/abseil-cpp/absl/functional/internal/front_binder.h +0 -93
  402. package/deps/abseil-cpp/absl/functional/internal/function_ref.h +0 -151
  403. package/deps/abseil-cpp/absl/functional/overload.h +0 -72
  404. package/deps/abseil-cpp/absl/functional/overload_test.cc +0 -207
  405. package/deps/abseil-cpp/absl/hash/BUILD.bazel +0 -220
  406. package/deps/abseil-cpp/absl/hash/CMakeLists.txt +0 -179
  407. package/deps/abseil-cpp/absl/hash/hash.h +0 -466
  408. package/deps/abseil-cpp/absl/hash/hash_benchmark.cc +0 -398
  409. package/deps/abseil-cpp/absl/hash/hash_instantiated_test.cc +0 -224
  410. package/deps/abseil-cpp/absl/hash/hash_test.cc +0 -1320
  411. package/deps/abseil-cpp/absl/hash/hash_testing.h +0 -380
  412. package/deps/abseil-cpp/absl/hash/internal/city.cc +0 -337
  413. package/deps/abseil-cpp/absl/hash/internal/city.h +0 -78
  414. package/deps/abseil-cpp/absl/hash/internal/city_test.cc +0 -597
  415. package/deps/abseil-cpp/absl/hash/internal/hash.cc +0 -430
  416. package/deps/abseil-cpp/absl/hash/internal/hash.h +0 -1563
  417. package/deps/abseil-cpp/absl/hash/internal/hash_test.h +0 -87
  418. package/deps/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +0 -509
  419. package/deps/abseil-cpp/absl/hash/internal/print_hash_of.cc +0 -23
  420. package/deps/abseil-cpp/absl/hash/internal/spy_hash_state.h +0 -286
  421. package/deps/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +0 -38
  422. package/deps/abseil-cpp/absl/log/BUILD.bazel +0 -686
  423. package/deps/abseil-cpp/absl/log/CMakeLists.txt +0 -1239
  424. package/deps/abseil-cpp/absl/log/absl_check.h +0 -117
  425. package/deps/abseil-cpp/absl/log/absl_check_test.cc +0 -58
  426. package/deps/abseil-cpp/absl/log/absl_log.h +0 -115
  427. package/deps/abseil-cpp/absl/log/absl_log_basic_test.cc +0 -22
  428. package/deps/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -95
  429. package/deps/abseil-cpp/absl/log/check.h +0 -210
  430. package/deps/abseil-cpp/absl/log/check_test.cc +0 -58
  431. package/deps/abseil-cpp/absl/log/check_test_impl.inc +0 -1035
  432. package/deps/abseil-cpp/absl/log/die_if_null.cc +0 -34
  433. package/deps/abseil-cpp/absl/log/die_if_null.h +0 -97
  434. package/deps/abseil-cpp/absl/log/die_if_null_test.cc +0 -107
  435. package/deps/abseil-cpp/absl/log/flags.cc +0 -143
  436. package/deps/abseil-cpp/absl/log/flags.h +0 -43
  437. package/deps/abseil-cpp/absl/log/flags_test.cc +0 -195
  438. package/deps/abseil-cpp/absl/log/globals.cc +0 -178
  439. package/deps/abseil-cpp/absl/log/globals.h +0 -230
  440. package/deps/abseil-cpp/absl/log/globals_test.cc +0 -156
  441. package/deps/abseil-cpp/absl/log/initialize.cc +0 -38
  442. package/deps/abseil-cpp/absl/log/initialize.h +0 -45
  443. package/deps/abseil-cpp/absl/log/internal/BUILD.bazel +0 -581
  444. package/deps/abseil-cpp/absl/log/internal/append_truncated.h +0 -75
  445. package/deps/abseil-cpp/absl/log/internal/check_impl.h +0 -151
  446. package/deps/abseil-cpp/absl/log/internal/check_op.cc +0 -147
  447. package/deps/abseil-cpp/absl/log/internal/check_op.h +0 -565
  448. package/deps/abseil-cpp/absl/log/internal/conditions.cc +0 -85
  449. package/deps/abseil-cpp/absl/log/internal/conditions.h +0 -247
  450. package/deps/abseil-cpp/absl/log/internal/config.h +0 -45
  451. package/deps/abseil-cpp/absl/log/internal/container.h +0 -312
  452. package/deps/abseil-cpp/absl/log/internal/container_test.cc +0 -254
  453. package/deps/abseil-cpp/absl/log/internal/flags.h +0 -59
  454. package/deps/abseil-cpp/absl/log/internal/fnmatch.cc +0 -73
  455. package/deps/abseil-cpp/absl/log/internal/fnmatch.h +0 -35
  456. package/deps/abseil-cpp/absl/log/internal/fnmatch_benchmark.cc +0 -29
  457. package/deps/abseil-cpp/absl/log/internal/fnmatch_test.cc +0 -60
  458. package/deps/abseil-cpp/absl/log/internal/globals.cc +0 -145
  459. package/deps/abseil-cpp/absl/log/internal/globals.h +0 -101
  460. package/deps/abseil-cpp/absl/log/internal/log_format.cc +0 -205
  461. package/deps/abseil-cpp/absl/log/internal/log_format.h +0 -78
  462. package/deps/abseil-cpp/absl/log/internal/log_impl.h +0 -280
  463. package/deps/abseil-cpp/absl/log/internal/log_message.cc +0 -787
  464. package/deps/abseil-cpp/absl/log/internal/log_message.h +0 -455
  465. package/deps/abseil-cpp/absl/log/internal/log_sink_set.cc +0 -296
  466. package/deps/abseil-cpp/absl/log/internal/log_sink_set.h +0 -54
  467. package/deps/abseil-cpp/absl/log/internal/nullguard.cc +0 -35
  468. package/deps/abseil-cpp/absl/log/internal/nullguard.h +0 -88
  469. package/deps/abseil-cpp/absl/log/internal/nullstream.h +0 -128
  470. package/deps/abseil-cpp/absl/log/internal/proto.cc +0 -218
  471. package/deps/abseil-cpp/absl/log/internal/proto.h +0 -298
  472. package/deps/abseil-cpp/absl/log/internal/stderr_log_sink_test.cc +0 -105
  473. package/deps/abseil-cpp/absl/log/internal/strip.h +0 -99
  474. package/deps/abseil-cpp/absl/log/internal/structured.h +0 -160
  475. package/deps/abseil-cpp/absl/log/internal/structured_proto.cc +0 -115
  476. package/deps/abseil-cpp/absl/log/internal/structured_proto.h +0 -107
  477. package/deps/abseil-cpp/absl/log/internal/structured_proto_test.cc +0 -120
  478. package/deps/abseil-cpp/absl/log/internal/test_actions.cc +0 -75
  479. package/deps/abseil-cpp/absl/log/internal/test_actions.h +0 -90
  480. package/deps/abseil-cpp/absl/log/internal/test_helpers.cc +0 -82
  481. package/deps/abseil-cpp/absl/log/internal/test_helpers.h +0 -71
  482. package/deps/abseil-cpp/absl/log/internal/test_matchers.cc +0 -216
  483. package/deps/abseil-cpp/absl/log/internal/test_matchers.h +0 -94
  484. package/deps/abseil-cpp/absl/log/internal/vlog_config.cc +0 -347
  485. package/deps/abseil-cpp/absl/log/internal/vlog_config.h +0 -164
  486. package/deps/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +0 -187
  487. package/deps/abseil-cpp/absl/log/internal/voidify.h +0 -50
  488. package/deps/abseil-cpp/absl/log/log.h +0 -378
  489. package/deps/abseil-cpp/absl/log/log_basic_test.cc +0 -22
  490. package/deps/abseil-cpp/absl/log/log_basic_test_impl.inc +0 -654
  491. package/deps/abseil-cpp/absl/log/log_benchmark.cc +0 -164
  492. package/deps/abseil-cpp/absl/log/log_entry.cc +0 -263
  493. package/deps/abseil-cpp/absl/log/log_entry.h +0 -223
  494. package/deps/abseil-cpp/absl/log/log_entry_test.cc +0 -468
  495. package/deps/abseil-cpp/absl/log/log_format_test.cc +0 -2261
  496. package/deps/abseil-cpp/absl/log/log_macro_hygiene_test.cc +0 -187
  497. package/deps/abseil-cpp/absl/log/log_modifier_methods_test.cc +0 -244
  498. package/deps/abseil-cpp/absl/log/log_sink.cc +0 -23
  499. package/deps/abseil-cpp/absl/log/log_sink.h +0 -71
  500. package/deps/abseil-cpp/absl/log/log_sink_registry.h +0 -64
  501. package/deps/abseil-cpp/absl/log/log_sink_test.cc +0 -418
  502. package/deps/abseil-cpp/absl/log/log_streamer.h +0 -181
  503. package/deps/abseil-cpp/absl/log/log_streamer_test.cc +0 -451
  504. package/deps/abseil-cpp/absl/log/scoped_mock_log.cc +0 -86
  505. package/deps/abseil-cpp/absl/log/scoped_mock_log.h +0 -203
  506. package/deps/abseil-cpp/absl/log/scoped_mock_log_test.cc +0 -295
  507. package/deps/abseil-cpp/absl/log/stripping_test.cc +0 -502
  508. package/deps/abseil-cpp/absl/log/structured.h +0 -75
  509. package/deps/abseil-cpp/absl/log/structured_test.cc +0 -64
  510. package/deps/abseil-cpp/absl/log/vlog_is_on.h +0 -74
  511. package/deps/abseil-cpp/absl/log/vlog_is_on_test.cc +0 -233
  512. package/deps/abseil-cpp/absl/memory/BUILD.bazel +0 -62
  513. package/deps/abseil-cpp/absl/memory/CMakeLists.txt +0 -41
  514. package/deps/abseil-cpp/absl/memory/memory.h +0 -278
  515. package/deps/abseil-cpp/absl/memory/memory_test.cc +0 -222
  516. package/deps/abseil-cpp/absl/meta/BUILD.bazel +0 -112
  517. package/deps/abseil-cpp/absl/meta/CMakeLists.txt +0 -100
  518. package/deps/abseil-cpp/absl/meta/internal/constexpr_testing.h +0 -73
  519. package/deps/abseil-cpp/absl/meta/internal/constexpr_testing_test.cc +0 -40
  520. package/deps/abseil-cpp/absl/meta/internal/requires.h +0 -67
  521. package/deps/abseil-cpp/absl/meta/internal/requires_test.cc +0 -66
  522. package/deps/abseil-cpp/absl/meta/type_traits.h +0 -582
  523. package/deps/abseil-cpp/absl/meta/type_traits_test.cc +0 -378
  524. package/deps/abseil-cpp/absl/numeric/BUILD.bazel +0 -145
  525. package/deps/abseil-cpp/absl/numeric/CMakeLists.txt +0 -104
  526. package/deps/abseil-cpp/absl/numeric/bits.h +0 -262
  527. package/deps/abseil-cpp/absl/numeric/bits_benchmark.cc +0 -73
  528. package/deps/abseil-cpp/absl/numeric/bits_test.cc +0 -724
  529. package/deps/abseil-cpp/absl/numeric/int128.cc +0 -344
  530. package/deps/abseil-cpp/absl/numeric/int128.h +0 -1224
  531. package/deps/abseil-cpp/absl/numeric/int128_benchmark.cc +0 -281
  532. package/deps/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +0 -303
  533. package/deps/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +0 -347
  534. package/deps/abseil-cpp/absl/numeric/int128_stream_test.cc +0 -1400
  535. package/deps/abseil-cpp/absl/numeric/int128_test.cc +0 -1407
  536. package/deps/abseil-cpp/absl/numeric/internal/bits.h +0 -394
  537. package/deps/abseil-cpp/absl/numeric/internal/representation.h +0 -55
  538. package/deps/abseil-cpp/absl/profiling/BUILD.bazel +0 -188
  539. package/deps/abseil-cpp/absl/profiling/CMakeLists.txt +0 -132
  540. package/deps/abseil-cpp/absl/profiling/hashtable.cc +0 -135
  541. package/deps/abseil-cpp/absl/profiling/hashtable.h +0 -40
  542. package/deps/abseil-cpp/absl/profiling/internal/exponential_biased.cc +0 -93
  543. package/deps/abseil-cpp/absl/profiling/internal/exponential_biased.h +0 -130
  544. package/deps/abseil-cpp/absl/profiling/internal/exponential_biased_test.cc +0 -203
  545. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler.cc +0 -53
  546. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler.h +0 -211
  547. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler_benchmark.cc +0 -79
  548. package/deps/abseil-cpp/absl/profiling/internal/periodic_sampler_test.cc +0 -177
  549. package/deps/abseil-cpp/absl/profiling/internal/profile_builder.cc +0 -463
  550. package/deps/abseil-cpp/absl/profiling/internal/profile_builder.h +0 -161
  551. package/deps/abseil-cpp/absl/profiling/internal/sample_recorder.h +0 -253
  552. package/deps/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +0 -188
  553. package/deps/abseil-cpp/absl/random/BUILD.bazel +0 -550
  554. package/deps/abseil-cpp/absl/random/CMakeLists.txt +0 -1250
  555. package/deps/abseil-cpp/absl/random/benchmarks.cc +0 -376
  556. package/deps/abseil-cpp/absl/random/bernoulli_distribution.h +0 -202
  557. package/deps/abseil-cpp/absl/random/bernoulli_distribution_test.cc +0 -217
  558. package/deps/abseil-cpp/absl/random/beta_distribution.h +0 -429
  559. package/deps/abseil-cpp/absl/random/beta_distribution_test.cc +0 -615
  560. package/deps/abseil-cpp/absl/random/bit_gen_ref.h +0 -187
  561. package/deps/abseil-cpp/absl/random/bit_gen_ref_test.cc +0 -107
  562. package/deps/abseil-cpp/absl/random/discrete_distribution.cc +0 -108
  563. package/deps/abseil-cpp/absl/random/discrete_distribution.h +0 -249
  564. package/deps/abseil-cpp/absl/random/discrete_distribution_test.cc +0 -251
  565. package/deps/abseil-cpp/absl/random/distributions.h +0 -450
  566. package/deps/abseil-cpp/absl/random/distributions_test.cc +0 -516
  567. package/deps/abseil-cpp/absl/random/examples_test.cc +0 -98
  568. package/deps/abseil-cpp/absl/random/exponential_distribution.h +0 -166
  569. package/deps/abseil-cpp/absl/random/exponential_distribution_test.cc +0 -426
  570. package/deps/abseil-cpp/absl/random/gaussian_distribution.cc +0 -104
  571. package/deps/abseil-cpp/absl/random/gaussian_distribution.h +0 -276
  572. package/deps/abseil-cpp/absl/random/gaussian_distribution_test.cc +0 -561
  573. package/deps/abseil-cpp/absl/random/generators_test.cc +0 -185
  574. package/deps/abseil-cpp/absl/random/internal/BUILD.bazel +0 -863
  575. package/deps/abseil-cpp/absl/random/internal/chi_square.cc +0 -230
  576. package/deps/abseil-cpp/absl/random/internal/chi_square.h +0 -89
  577. package/deps/abseil-cpp/absl/random/internal/chi_square_test.cc +0 -364
  578. package/deps/abseil-cpp/absl/random/internal/distribution_caller.h +0 -96
  579. package/deps/abseil-cpp/absl/random/internal/distribution_test_util.cc +0 -418
  580. package/deps/abseil-cpp/absl/random/internal/distribution_test_util.h +0 -113
  581. package/deps/abseil-cpp/absl/random/internal/distribution_test_util_test.cc +0 -193
  582. package/deps/abseil-cpp/absl/random/internal/entropy_pool.cc +0 -185
  583. package/deps/abseil-cpp/absl/random/internal/entropy_pool.h +0 -35
  584. package/deps/abseil-cpp/absl/random/internal/entropy_pool_test.cc +0 -119
  585. package/deps/abseil-cpp/absl/random/internal/explicit_seed_seq.h +0 -92
  586. package/deps/abseil-cpp/absl/random/internal/explicit_seed_seq_test.cc +0 -241
  587. package/deps/abseil-cpp/absl/random/internal/fast_uniform_bits.h +0 -271
  588. package/deps/abseil-cpp/absl/random/internal/fast_uniform_bits_test.cc +0 -336
  589. package/deps/abseil-cpp/absl/random/internal/fastmath.h +0 -57
  590. package/deps/abseil-cpp/absl/random/internal/fastmath_test.cc +0 -95
  591. package/deps/abseil-cpp/absl/random/internal/gaussian_distribution_gentables.cc +0 -142
  592. package/deps/abseil-cpp/absl/random/internal/generate_real.h +0 -144
  593. package/deps/abseil-cpp/absl/random/internal/generate_real_test.cc +0 -496
  594. package/deps/abseil-cpp/absl/random/internal/iostream_state_saver.h +0 -248
  595. package/deps/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +0 -373
  596. package/deps/abseil-cpp/absl/random/internal/mock_helpers.h +0 -160
  597. package/deps/abseil-cpp/absl/random/internal/mock_overload_set.h +0 -122
  598. package/deps/abseil-cpp/absl/random/internal/mock_validators.h +0 -98
  599. package/deps/abseil-cpp/absl/random/internal/nanobenchmark.cc +0 -804
  600. package/deps/abseil-cpp/absl/random/internal/nanobenchmark.h +0 -172
  601. package/deps/abseil-cpp/absl/random/internal/nanobenchmark_test.cc +0 -79
  602. package/deps/abseil-cpp/absl/random/internal/nonsecure_base.h +0 -160
  603. package/deps/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +0 -267
  604. package/deps/abseil-cpp/absl/random/internal/pcg_engine.h +0 -287
  605. package/deps/abseil-cpp/absl/random/internal/pcg_engine_test.cc +0 -638
  606. package/deps/abseil-cpp/absl/random/internal/platform.h +0 -158
  607. package/deps/abseil-cpp/absl/random/internal/randen.cc +0 -91
  608. package/deps/abseil-cpp/absl/random/internal/randen.h +0 -96
  609. package/deps/abseil-cpp/absl/random/internal/randen_benchmarks.cc +0 -177
  610. package/deps/abseil-cpp/absl/random/internal/randen_detect.cc +0 -280
  611. package/deps/abseil-cpp/absl/random/internal/randen_detect.h +0 -33
  612. package/deps/abseil-cpp/absl/random/internal/randen_engine.h +0 -265
  613. package/deps/abseil-cpp/absl/random/internal/randen_engine_test.cc +0 -654
  614. package/deps/abseil-cpp/absl/random/internal/randen_hwaes.cc +0 -526
  615. package/deps/abseil-cpp/absl/random/internal/randen_hwaes.h +0 -50
  616. package/deps/abseil-cpp/absl/random/internal/randen_hwaes_test.cc +0 -99
  617. package/deps/abseil-cpp/absl/random/internal/randen_round_keys.cc +0 -462
  618. package/deps/abseil-cpp/absl/random/internal/randen_slow.cc +0 -471
  619. package/deps/abseil-cpp/absl/random/internal/randen_slow.h +0 -40
  620. package/deps/abseil-cpp/absl/random/internal/randen_slow_test.cc +0 -61
  621. package/deps/abseil-cpp/absl/random/internal/randen_test.cc +0 -75
  622. package/deps/abseil-cpp/absl/random/internal/randen_traits.h +0 -88
  623. package/deps/abseil-cpp/absl/random/internal/salted_seed_seq.h +0 -165
  624. package/deps/abseil-cpp/absl/random/internal/salted_seed_seq_test.cc +0 -172
  625. package/deps/abseil-cpp/absl/random/internal/seed_material.cc +0 -249
  626. package/deps/abseil-cpp/absl/random/internal/seed_material.h +0 -104
  627. package/deps/abseil-cpp/absl/random/internal/seed_material_test.cc +0 -205
  628. package/deps/abseil-cpp/absl/random/internal/sequence_urbg.h +0 -60
  629. package/deps/abseil-cpp/absl/random/internal/traits.h +0 -149
  630. package/deps/abseil-cpp/absl/random/internal/traits_test.cc +0 -123
  631. package/deps/abseil-cpp/absl/random/internal/uniform_helper.h +0 -244
  632. package/deps/abseil-cpp/absl/random/internal/uniform_helper_test.cc +0 -279
  633. package/deps/abseil-cpp/absl/random/internal/wide_multiply.h +0 -95
  634. package/deps/abseil-cpp/absl/random/internal/wide_multiply_test.cc +0 -119
  635. package/deps/abseil-cpp/absl/random/log_uniform_int_distribution.h +0 -253
  636. package/deps/abseil-cpp/absl/random/log_uniform_int_distribution_test.cc +0 -277
  637. package/deps/abseil-cpp/absl/random/mock_distributions.h +0 -269
  638. package/deps/abseil-cpp/absl/random/mock_distributions_test.cc +0 -281
  639. package/deps/abseil-cpp/absl/random/mocking_bit_gen.h +0 -237
  640. package/deps/abseil-cpp/absl/random/mocking_bit_gen_test.cc +0 -403
  641. package/deps/abseil-cpp/absl/random/poisson_distribution.h +0 -262
  642. package/deps/abseil-cpp/absl/random/poisson_distribution_test.cc +0 -569
  643. package/deps/abseil-cpp/absl/random/random.h +0 -224
  644. package/deps/abseil-cpp/absl/random/seed_gen_exception.cc +0 -45
  645. package/deps/abseil-cpp/absl/random/seed_gen_exception.h +0 -55
  646. package/deps/abseil-cpp/absl/random/seed_sequences.cc +0 -33
  647. package/deps/abseil-cpp/absl/random/seed_sequences.h +0 -112
  648. package/deps/abseil-cpp/absl/random/seed_sequences_test.cc +0 -126
  649. package/deps/abseil-cpp/absl/random/uniform_int_distribution.h +0 -276
  650. package/deps/abseil-cpp/absl/random/uniform_int_distribution_test.cc +0 -259
  651. package/deps/abseil-cpp/absl/random/uniform_real_distribution.h +0 -204
  652. package/deps/abseil-cpp/absl/random/uniform_real_distribution_test.cc +0 -394
  653. package/deps/abseil-cpp/absl/random/zipf_distribution.h +0 -273
  654. package/deps/abseil-cpp/absl/random/zipf_distribution_test.cc +0 -423
  655. package/deps/abseil-cpp/absl/status/BUILD.bazel +0 -211
  656. package/deps/abseil-cpp/absl/status/CMakeLists.txt +0 -159
  657. package/deps/abseil-cpp/absl/status/internal/status_internal.cc +0 -251
  658. package/deps/abseil-cpp/absl/status/internal/status_internal.h +0 -133
  659. package/deps/abseil-cpp/absl/status/internal/status_matchers.cc +0 -69
  660. package/deps/abseil-cpp/absl/status/internal/status_matchers.h +0 -246
  661. package/deps/abseil-cpp/absl/status/internal/statusor_internal.h +0 -657
  662. package/deps/abseil-cpp/absl/status/status.cc +0 -421
  663. package/deps/abseil-cpp/absl/status/status.h +0 -948
  664. package/deps/abseil-cpp/absl/status/status_benchmark.cc +0 -37
  665. package/deps/abseil-cpp/absl/status/status_matchers.h +0 -166
  666. package/deps/abseil-cpp/absl/status/status_matchers_test.cc +0 -211
  667. package/deps/abseil-cpp/absl/status/status_payload_printer.cc +0 -36
  668. package/deps/abseil-cpp/absl/status/status_payload_printer.h +0 -52
  669. package/deps/abseil-cpp/absl/status/status_test.cc +0 -580
  670. package/deps/abseil-cpp/absl/status/statusor.cc +0 -106
  671. package/deps/abseil-cpp/absl/status/statusor.h +0 -743
  672. package/deps/abseil-cpp/absl/status/statusor_benchmark.cc +0 -480
  673. package/deps/abseil-cpp/absl/status/statusor_test.cc +0 -2124
  674. package/deps/abseil-cpp/absl/strings/BUILD.bazel +0 -1593
  675. package/deps/abseil-cpp/absl/strings/CMakeLists.txt +0 -1295
  676. package/deps/abseil-cpp/absl/strings/ascii.cc +0 -296
  677. package/deps/abseil-cpp/absl/strings/ascii.h +0 -289
  678. package/deps/abseil-cpp/absl/strings/ascii_benchmark.cc +0 -157
  679. package/deps/abseil-cpp/absl/strings/ascii_test.cc +0 -374
  680. package/deps/abseil-cpp/absl/strings/atod_manual_test.cc +0 -193
  681. package/deps/abseil-cpp/absl/strings/char_formatting_test.cc +0 -169
  682. package/deps/abseil-cpp/absl/strings/charconv.cc +0 -1442
  683. package/deps/abseil-cpp/absl/strings/charconv.h +0 -123
  684. package/deps/abseil-cpp/absl/strings/charconv_benchmark.cc +0 -203
  685. package/deps/abseil-cpp/absl/strings/charconv_test.cc +0 -787
  686. package/deps/abseil-cpp/absl/strings/charset.h +0 -163
  687. package/deps/abseil-cpp/absl/strings/charset_benchmark.cc +0 -57
  688. package/deps/abseil-cpp/absl/strings/charset_test.cc +0 -181
  689. package/deps/abseil-cpp/absl/strings/cord.cc +0 -1582
  690. package/deps/abseil-cpp/absl/strings/cord.h +0 -1763
  691. package/deps/abseil-cpp/absl/strings/cord_analysis.cc +0 -196
  692. package/deps/abseil-cpp/absl/strings/cord_analysis.h +0 -63
  693. package/deps/abseil-cpp/absl/strings/cord_buffer.h +0 -572
  694. package/deps/abseil-cpp/absl/strings/cord_buffer_test.cc +0 -322
  695. package/deps/abseil-cpp/absl/strings/cord_test.cc +0 -3421
  696. package/deps/abseil-cpp/absl/strings/cord_test_helpers.h +0 -122
  697. package/deps/abseil-cpp/absl/strings/cordz_test.cc +0 -468
  698. package/deps/abseil-cpp/absl/strings/cordz_test_helpers.h +0 -152
  699. package/deps/abseil-cpp/absl/strings/escaping.cc +0 -1035
  700. package/deps/abseil-cpp/absl/strings/escaping.h +0 -185
  701. package/deps/abseil-cpp/absl/strings/escaping_benchmark.cc +0 -124
  702. package/deps/abseil-cpp/absl/strings/escaping_test.cc +0 -760
  703. package/deps/abseil-cpp/absl/strings/has_absl_stringify.h +0 -64
  704. package/deps/abseil-cpp/absl/strings/has_absl_stringify_test.cc +0 -40
  705. package/deps/abseil-cpp/absl/strings/has_ostream_operator.h +0 -42
  706. package/deps/abseil-cpp/absl/strings/has_ostream_operator_test.cc +0 -41
  707. package/deps/abseil-cpp/absl/strings/internal/append_and_overwrite.h +0 -93
  708. package/deps/abseil-cpp/absl/strings/internal/append_and_overwrite_test.cc +0 -95
  709. package/deps/abseil-cpp/absl/strings/internal/charconv_bigint.cc +0 -357
  710. package/deps/abseil-cpp/absl/strings/internal/charconv_bigint.h +0 -433
  711. package/deps/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +0 -260
  712. package/deps/abseil-cpp/absl/strings/internal/charconv_parse.cc +0 -504
  713. package/deps/abseil-cpp/absl/strings/internal/charconv_parse.h +0 -99
  714. package/deps/abseil-cpp/absl/strings/internal/charconv_parse_test.cc +0 -357
  715. package/deps/abseil-cpp/absl/strings/internal/cord_data_edge.h +0 -63
  716. package/deps/abseil-cpp/absl/strings/internal/cord_data_edge_test.cc +0 -130
  717. package/deps/abseil-cpp/absl/strings/internal/cord_internal.cc +0 -70
  718. package/deps/abseil-cpp/absl/strings/internal/cord_internal.h +0 -942
  719. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -1237
  720. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree.h +0 -944
  721. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +0 -187
  722. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +0 -267
  723. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator_test.cc +0 -346
  724. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +0 -69
  725. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +0 -212
  726. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_reader_test.cc +0 -293
  727. package/deps/abseil-cpp/absl/strings/internal/cord_rep_btree_test.cc +0 -1568
  728. package/deps/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +0 -64
  729. package/deps/abseil-cpp/absl/strings/internal/cord_rep_consume.h +0 -47
  730. package/deps/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +0 -56
  731. package/deps/abseil-cpp/absl/strings/internal/cord_rep_crc.h +0 -103
  732. package/deps/abseil-cpp/absl/strings/internal/cord_rep_crc_test.cc +0 -130
  733. package/deps/abseil-cpp/absl/strings/internal/cord_rep_flat.h +0 -195
  734. package/deps/abseil-cpp/absl/strings/internal/cord_rep_test_util.h +0 -205
  735. package/deps/abseil-cpp/absl/strings/internal/cordz_functions.cc +0 -102
  736. package/deps/abseil-cpp/absl/strings/internal/cordz_functions.h +0 -87
  737. package/deps/abseil-cpp/absl/strings/internal/cordz_functions_test.cc +0 -147
  738. package/deps/abseil-cpp/absl/strings/internal/cordz_handle.cc +0 -165
  739. package/deps/abseil-cpp/absl/strings/internal/cordz_handle.h +0 -98
  740. package/deps/abseil-cpp/absl/strings/internal/cordz_handle_test.cc +0 -265
  741. package/deps/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -424
  742. package/deps/abseil-cpp/absl/strings/internal/cordz_info.h +0 -295
  743. package/deps/abseil-cpp/absl/strings/internal/cordz_info_statistics_test.cc +0 -510
  744. package/deps/abseil-cpp/absl/strings/internal/cordz_info_test.cc +0 -342
  745. package/deps/abseil-cpp/absl/strings/internal/cordz_sample_token.cc +0 -64
  746. package/deps/abseil-cpp/absl/strings/internal/cordz_sample_token.h +0 -97
  747. package/deps/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +0 -208
  748. package/deps/abseil-cpp/absl/strings/internal/cordz_statistics.h +0 -88
  749. package/deps/abseil-cpp/absl/strings/internal/cordz_update_scope.h +0 -71
  750. package/deps/abseil-cpp/absl/strings/internal/cordz_update_scope_test.cc +0 -49
  751. package/deps/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +0 -123
  752. package/deps/abseil-cpp/absl/strings/internal/cordz_update_tracker_test.cc +0 -147
  753. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +0 -99
  754. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +0 -35
  755. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +0 -56
  756. package/deps/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_test.cc +0 -99
  757. package/deps/abseil-cpp/absl/strings/internal/escaping.cc +0 -209
  758. package/deps/abseil-cpp/absl/strings/internal/escaping.h +0 -59
  759. package/deps/abseil-cpp/absl/strings/internal/escaping_test_common.h +0 -133
  760. package/deps/abseil-cpp/absl/strings/internal/generic_printer.cc +0 -107
  761. package/deps/abseil-cpp/absl/strings/internal/generic_printer.h +0 -115
  762. package/deps/abseil-cpp/absl/strings/internal/generic_printer_internal.h +0 -423
  763. package/deps/abseil-cpp/absl/strings/internal/generic_printer_test.cc +0 -685
  764. package/deps/abseil-cpp/absl/strings/internal/memutil.cc +0 -48
  765. package/deps/abseil-cpp/absl/strings/internal/memutil.h +0 -40
  766. package/deps/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +0 -127
  767. package/deps/abseil-cpp/absl/strings/internal/memutil_test.cc +0 -41
  768. package/deps/abseil-cpp/absl/strings/internal/numbers_test_common.h +0 -184
  769. package/deps/abseil-cpp/absl/strings/internal/ostringstream.cc +0 -43
  770. package/deps/abseil-cpp/absl/strings/internal/ostringstream.h +0 -114
  771. package/deps/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +0 -105
  772. package/deps/abseil-cpp/absl/strings/internal/ostringstream_test.cc +0 -131
  773. package/deps/abseil-cpp/absl/strings/internal/pow10_helper.cc +0 -122
  774. package/deps/abseil-cpp/absl/strings/internal/pow10_helper.h +0 -40
  775. package/deps/abseil-cpp/absl/strings/internal/pow10_helper_test.cc +0 -122
  776. package/deps/abseil-cpp/absl/strings/internal/resize_uninitialized.h +0 -119
  777. package/deps/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +0 -108
  778. package/deps/abseil-cpp/absl/strings/internal/stl_type_traits.h +0 -248
  779. package/deps/abseil-cpp/absl/strings/internal/str_format/arg.cc +0 -615
  780. package/deps/abseil-cpp/absl/strings/internal/str_format/arg.h +0 -661
  781. package/deps/abseil-cpp/absl/strings/internal/str_format/arg_test.cc +0 -162
  782. package/deps/abseil-cpp/absl/strings/internal/str_format/bind.cc +0 -275
  783. package/deps/abseil-cpp/absl/strings/internal/str_format/bind.h +0 -237
  784. package/deps/abseil-cpp/absl/strings/internal/str_format/bind_test.cc +0 -157
  785. package/deps/abseil-cpp/absl/strings/internal/str_format/checker.h +0 -98
  786. package/deps/abseil-cpp/absl/strings/internal/str_format/checker_test.cc +0 -176
  787. package/deps/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +0 -357
  788. package/deps/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +0 -1471
  789. package/deps/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -53
  790. package/deps/abseil-cpp/absl/strings/internal/str_format/extension.h +0 -456
  791. package/deps/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +0 -110
  792. package/deps/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +0 -1945
  793. package/deps/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +0 -37
  794. package/deps/abseil-cpp/absl/strings/internal/str_format/output.cc +0 -74
  795. package/deps/abseil-cpp/absl/strings/internal/str_format/output.h +0 -97
  796. package/deps/abseil-cpp/absl/strings/internal/str_format/output_test.cc +0 -79
  797. package/deps/abseil-cpp/absl/strings/internal/str_format/parser.cc +0 -140
  798. package/deps/abseil-cpp/absl/strings/internal/str_format/parser.h +0 -271
  799. package/deps/abseil-cpp/absl/strings/internal/str_format/parser_test.cc +0 -446
  800. package/deps/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -341
  801. package/deps/abseil-cpp/absl/strings/internal/str_split_internal.h +0 -525
  802. package/deps/abseil-cpp/absl/strings/internal/string_constant.h +0 -67
  803. package/deps/abseil-cpp/absl/strings/internal/string_constant_test.cc +0 -60
  804. package/deps/abseil-cpp/absl/strings/internal/stringify_sink.cc +0 -28
  805. package/deps/abseil-cpp/absl/strings/internal/stringify_sink.h +0 -57
  806. package/deps/abseil-cpp/absl/strings/internal/utf8.cc +0 -148
  807. package/deps/abseil-cpp/absl/strings/internal/utf8.h +0 -64
  808. package/deps/abseil-cpp/absl/strings/internal/utf8_test.cc +0 -259
  809. package/deps/abseil-cpp/absl/strings/match.cc +0 -133
  810. package/deps/abseil-cpp/absl/strings/match.h +0 -129
  811. package/deps/abseil-cpp/absl/strings/match_test.cc +0 -291
  812. package/deps/abseil-cpp/absl/strings/numbers.cc +0 -1230
  813. package/deps/abseil-cpp/absl/strings/numbers.h +0 -359
  814. package/deps/abseil-cpp/absl/strings/numbers_benchmark.cc +0 -288
  815. package/deps/abseil-cpp/absl/strings/numbers_test.cc +0 -2324
  816. package/deps/abseil-cpp/absl/strings/resize_and_overwrite.h +0 -194
  817. package/deps/abseil-cpp/absl/strings/resize_and_overwrite_test.cc +0 -154
  818. package/deps/abseil-cpp/absl/strings/str_cat.cc +0 -247
  819. package/deps/abseil-cpp/absl/strings/str_cat.h +0 -633
  820. package/deps/abseil-cpp/absl/strings/str_cat_benchmark.cc +0 -288
  821. package/deps/abseil-cpp/absl/strings/str_cat_test.cc +0 -692
  822. package/deps/abseil-cpp/absl/strings/str_format.h +0 -887
  823. package/deps/abseil-cpp/absl/strings/str_format_test.cc +0 -1230
  824. package/deps/abseil-cpp/absl/strings/str_join.h +0 -301
  825. package/deps/abseil-cpp/absl/strings/str_join_benchmark.cc +0 -106
  826. package/deps/abseil-cpp/absl/strings/str_join_test.cc +0 -645
  827. package/deps/abseil-cpp/absl/strings/str_replace.cc +0 -91
  828. package/deps/abseil-cpp/absl/strings/str_replace.h +0 -222
  829. package/deps/abseil-cpp/absl/strings/str_replace_benchmark.cc +0 -121
  830. package/deps/abseil-cpp/absl/strings/str_replace_test.cc +0 -345
  831. package/deps/abseil-cpp/absl/strings/str_split.cc +0 -144
  832. package/deps/abseil-cpp/absl/strings/str_split.h +0 -582
  833. package/deps/abseil-cpp/absl/strings/str_split_benchmark.cc +0 -180
  834. package/deps/abseil-cpp/absl/strings/str_split_test.cc +0 -1069
  835. package/deps/abseil-cpp/absl/strings/string_view.h +0 -60
  836. package/deps/abseil-cpp/absl/strings/string_view_test.cc +0 -86
  837. package/deps/abseil-cpp/absl/strings/strip.h +0 -99
  838. package/deps/abseil-cpp/absl/strings/strip_test.cc +0 -198
  839. package/deps/abseil-cpp/absl/strings/substitute.cc +0 -187
  840. package/deps/abseil-cpp/absl/strings/substitute.h +0 -769
  841. package/deps/abseil-cpp/absl/strings/substitute_benchmark.cc +0 -158
  842. package/deps/abseil-cpp/absl/strings/substitute_test.cc +0 -288
  843. package/deps/abseil-cpp/absl/synchronization/BUILD.bazel +0 -410
  844. package/deps/abseil-cpp/absl/synchronization/CMakeLists.txt +0 -293
  845. package/deps/abseil-cpp/absl/synchronization/barrier.cc +0 -52
  846. package/deps/abseil-cpp/absl/synchronization/barrier.h +0 -79
  847. package/deps/abseil-cpp/absl/synchronization/barrier_test.cc +0 -75
  848. package/deps/abseil-cpp/absl/synchronization/blocking_counter.cc +0 -73
  849. package/deps/abseil-cpp/absl/synchronization/blocking_counter.h +0 -107
  850. package/deps/abseil-cpp/absl/synchronization/blocking_counter_benchmark.cc +0 -84
  851. package/deps/abseil-cpp/absl/synchronization/blocking_counter_test.cc +0 -146
  852. package/deps/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +0 -152
  853. package/deps/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -56
  854. package/deps/abseil-cpp/absl/synchronization/internal/futex.h +0 -177
  855. package/deps/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -107
  856. package/deps/abseil-cpp/absl/synchronization/internal/futex_waiter.h +0 -63
  857. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles.cc +0 -714
  858. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles.h +0 -146
  859. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +0 -43
  860. package/deps/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +0 -483
  861. package/deps/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -220
  862. package/deps/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +0 -178
  863. package/deps/abseil-cpp/absl/synchronization/internal/kernel_timeout_test.cc +0 -406
  864. package/deps/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -106
  865. package/deps/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +0 -119
  866. package/deps/abseil-cpp/absl/synchronization/internal/per_thread_sem_test.cc +0 -194
  867. package/deps/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -163
  868. package/deps/abseil-cpp/absl/synchronization/internal/pthread_waiter.h +0 -60
  869. package/deps/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -118
  870. package/deps/abseil-cpp/absl/synchronization/internal/sem_waiter.h +0 -65
  871. package/deps/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -87
  872. package/deps/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.h +0 -56
  873. package/deps/abseil-cpp/absl/synchronization/internal/thread_pool.h +0 -96
  874. package/deps/abseil-cpp/absl/synchronization/internal/waiter.h +0 -69
  875. package/deps/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -38
  876. package/deps/abseil-cpp/absl/synchronization/internal/waiter_base.h +0 -90
  877. package/deps/abseil-cpp/absl/synchronization/internal/waiter_test.cc +0 -192
  878. package/deps/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -147
  879. package/deps/abseil-cpp/absl/synchronization/internal/win32_waiter.h +0 -72
  880. package/deps/abseil-cpp/absl/synchronization/lifetime_test.cc +0 -180
  881. package/deps/abseil-cpp/absl/synchronization/mutex.cc +0 -2820
  882. package/deps/abseil-cpp/absl/synchronization/mutex.h +0 -1352
  883. package/deps/abseil-cpp/absl/synchronization/mutex_benchmark.cc +0 -321
  884. package/deps/abseil-cpp/absl/synchronization/mutex_method_pointer_test.cc +0 -138
  885. package/deps/abseil-cpp/absl/synchronization/mutex_test.cc +0 -2065
  886. package/deps/abseil-cpp/absl/synchronization/notification.cc +0 -85
  887. package/deps/abseil-cpp/absl/synchronization/notification.h +0 -133
  888. package/deps/abseil-cpp/absl/synchronization/notification_test.cc +0 -230
  889. package/deps/abseil-cpp/absl/time/BUILD.bazel +0 -244
  890. package/deps/abseil-cpp/absl/time/CMakeLists.txt +0 -218
  891. package/deps/abseil-cpp/absl/time/civil_time.cc +0 -200
  892. package/deps/abseil-cpp/absl/time/civil_time.h +0 -589
  893. package/deps/abseil-cpp/absl/time/civil_time_benchmark.cc +0 -129
  894. package/deps/abseil-cpp/absl/time/civil_time_test.cc +0 -1351
  895. package/deps/abseil-cpp/absl/time/clock.cc +0 -603
  896. package/deps/abseil-cpp/absl/time/clock.h +0 -78
  897. package/deps/abseil-cpp/absl/time/clock_benchmark.cc +0 -74
  898. package/deps/abseil-cpp/absl/time/clock_interface.cc +0 -71
  899. package/deps/abseil-cpp/absl/time/clock_interface.h +0 -91
  900. package/deps/abseil-cpp/absl/time/clock_interface_test.cc +0 -128
  901. package/deps/abseil-cpp/absl/time/clock_test.cc +0 -122
  902. package/deps/abseil-cpp/absl/time/duration.cc +0 -918
  903. package/deps/abseil-cpp/absl/time/duration_benchmark.cc +0 -608
  904. package/deps/abseil-cpp/absl/time/duration_test.cc +0 -1901
  905. package/deps/abseil-cpp/absl/time/flag_test.cc +0 -147
  906. package/deps/abseil-cpp/absl/time/format.cc +0 -162
  907. package/deps/abseil-cpp/absl/time/format_benchmark.cc +0 -64
  908. package/deps/abseil-cpp/absl/time/format_test.cc +0 -441
  909. package/deps/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +0 -195
  910. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +0 -332
  911. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +0 -644
  912. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +0 -460
  913. package/deps/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +0 -102
  914. package/deps/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +0 -436
  915. package/deps/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +0 -94
  916. package/deps/abseil-cpp/absl/time/internal/cctz/src/civil_time_test.cc +0 -1066
  917. package/deps/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +0 -515
  918. package/deps/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +0 -33
  919. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +0 -140
  920. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +0 -52
  921. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +0 -1068
  922. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +0 -1773
  923. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +0 -47
  924. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +0 -80
  925. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +0 -115
  926. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +0 -97
  927. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +0 -1070
  928. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +0 -128
  929. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +0 -333
  930. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +0 -60
  931. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +0 -217
  932. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +0 -918
  933. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +0 -186
  934. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +0 -37
  935. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +0 -159
  936. package/deps/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +0 -132
  937. package/deps/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +0 -120
  938. package/deps/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +0 -116
  939. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/README.zoneinfo +0 -38
  940. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/version +0 -1
  941. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Abidjan +0 -0
  942. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Accra +0 -0
  943. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Addis_Ababa +0 -0
  944. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Algiers +0 -0
  945. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Asmara +0 -0
  946. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Asmera +0 -0
  947. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bamako +0 -0
  948. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bangui +0 -0
  949. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Banjul +0 -0
  950. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bissau +0 -0
  951. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Blantyre +0 -0
  952. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Brazzaville +0 -0
  953. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Bujumbura +0 -0
  954. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Cairo +0 -0
  955. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Casablanca +0 -0
  956. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Ceuta +0 -0
  957. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Conakry +0 -0
  958. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Dakar +0 -0
  959. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Dar_es_Salaam +0 -0
  960. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Djibouti +0 -0
  961. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Douala +0 -0
  962. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/El_Aaiun +0 -0
  963. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Freetown +0 -0
  964. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Gaborone +0 -0
  965. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Harare +0 -0
  966. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Johannesburg +0 -0
  967. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Juba +0 -0
  968. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Kampala +0 -0
  969. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Khartoum +0 -0
  970. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Kigali +0 -0
  971. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Kinshasa +0 -0
  972. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lagos +0 -0
  973. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Libreville +0 -0
  974. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lome +0 -0
  975. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Luanda +0 -0
  976. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lubumbashi +0 -0
  977. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Lusaka +0 -0
  978. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Malabo +0 -0
  979. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Maputo +0 -0
  980. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Maseru +0 -0
  981. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Mbabane +0 -0
  982. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Mogadishu +0 -0
  983. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Monrovia +0 -0
  984. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Nairobi +0 -0
  985. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Ndjamena +0 -0
  986. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Niamey +0 -0
  987. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Nouakchott +0 -0
  988. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Ouagadougou +0 -0
  989. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Porto-Novo +0 -0
  990. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Sao_Tome +0 -0
  991. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Timbuktu +0 -0
  992. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Tripoli +0 -0
  993. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Tunis +0 -0
  994. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Africa/Windhoek +0 -0
  995. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Adak +0 -0
  996. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Anchorage +0 -0
  997. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Anguilla +0 -0
  998. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Antigua +0 -0
  999. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Araguaina +0 -0
  1000. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Buenos_Aires +0 -0
  1001. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Catamarca +0 -0
  1002. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/ComodRivadavia +0 -0
  1003. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Cordoba +0 -0
  1004. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Jujuy +0 -0
  1005. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/La_Rioja +0 -0
  1006. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Mendoza +0 -0
  1007. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Rio_Gallegos +0 -0
  1008. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Salta +0 -0
  1009. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/San_Juan +0 -0
  1010. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/San_Luis +0 -0
  1011. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Tucuman +0 -0
  1012. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Argentina/Ushuaia +0 -0
  1013. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Aruba +0 -0
  1014. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Asuncion +0 -0
  1015. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Atikokan +0 -0
  1016. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Atka +0 -0
  1017. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bahia +0 -0
  1018. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bahia_Banderas +0 -0
  1019. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Barbados +0 -0
  1020. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Belem +0 -0
  1021. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Belize +0 -0
  1022. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Blanc-Sablon +0 -0
  1023. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Boa_Vista +0 -0
  1024. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bogota +0 -0
  1025. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Boise +0 -0
  1026. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Buenos_Aires +0 -0
  1027. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cambridge_Bay +0 -0
  1028. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Campo_Grande +0 -0
  1029. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cancun +0 -0
  1030. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Caracas +0 -0
  1031. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Catamarca +0 -0
  1032. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cayenne +0 -0
  1033. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cayman +0 -0
  1034. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Chicago +0 -0
  1035. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Chihuahua +0 -0
  1036. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ciudad_Juarez +0 -0
  1037. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coral_Harbour +0 -0
  1038. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cordoba +0 -0
  1039. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Costa_Rica +0 -0
  1040. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  1041. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Creston +0 -0
  1042. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Cuiaba +0 -0
  1043. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Curacao +0 -0
  1044. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Danmarkshavn +0 -0
  1045. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Dawson +0 -0
  1046. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Dawson_Creek +0 -0
  1047. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Denver +0 -0
  1048. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Detroit +0 -0
  1049. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Dominica +0 -0
  1050. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Edmonton +0 -0
  1051. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Eirunepe +0 -0
  1052. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/El_Salvador +0 -0
  1053. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ensenada +0 -0
  1054. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Fort_Nelson +0 -0
  1055. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Fort_Wayne +0 -0
  1056. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Fortaleza +0 -0
  1057. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Glace_Bay +0 -0
  1058. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Godthab +0 -0
  1059. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Goose_Bay +0 -0
  1060. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Grand_Turk +0 -0
  1061. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Grenada +0 -0
  1062. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guadeloupe +0 -0
  1063. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guatemala +0 -0
  1064. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guayaquil +0 -0
  1065. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Guyana +0 -0
  1066. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Halifax +0 -0
  1067. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Havana +0 -0
  1068. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Hermosillo +0 -0
  1069. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Indianapolis +0 -0
  1070. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Knox +0 -0
  1071. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Marengo +0 -0
  1072. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Petersburg +0 -0
  1073. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Tell_City +0 -0
  1074. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Vevay +0 -0
  1075. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Vincennes +0 -0
  1076. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indiana/Winamac +0 -0
  1077. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Indianapolis +0 -0
  1078. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Inuvik +0 -0
  1079. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Iqaluit +0 -0
  1080. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Jamaica +0 -0
  1081. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Jujuy +0 -0
  1082. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Juneau +0 -0
  1083. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Kentucky/Louisville +0 -0
  1084. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Kentucky/Monticello +0 -0
  1085. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Knox_IN +0 -0
  1086. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Kralendijk +0 -0
  1087. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/La_Paz +0 -0
  1088. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Lima +0 -0
  1089. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Los_Angeles +0 -0
  1090. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Louisville +0 -0
  1091. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Lower_Princes +0 -0
  1092. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Maceio +0 -0
  1093. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Managua +0 -0
  1094. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Manaus +0 -0
  1095. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Marigot +0 -0
  1096. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Martinique +0 -0
  1097. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Matamoros +0 -0
  1098. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mazatlan +0 -0
  1099. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mendoza +0 -0
  1100. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Menominee +0 -0
  1101. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Merida +0 -0
  1102. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Metlakatla +0 -0
  1103. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mexico_City +0 -0
  1104. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Miquelon +0 -0
  1105. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Moncton +0 -0
  1106. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Monterrey +0 -0
  1107. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Montevideo +0 -0
  1108. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Montreal +0 -0
  1109. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Montserrat +0 -0
  1110. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nassau +0 -0
  1111. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/New_York +0 -0
  1112. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nipigon +0 -0
  1113. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nome +0 -0
  1114. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Noronha +0 -0
  1115. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/North_Dakota/Beulah +0 -0
  1116. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/North_Dakota/Center +0 -0
  1117. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/North_Dakota/New_Salem +0 -0
  1118. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nuuk +0 -0
  1119. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ojinaga +0 -0
  1120. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Panama +0 -0
  1121. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Pangnirtung +0 -0
  1122. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Paramaribo +0 -0
  1123. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Phoenix +0 -0
  1124. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Port-au-Prince +0 -0
  1125. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Port_of_Spain +0 -0
  1126. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Porto_Acre +0 -0
  1127. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Porto_Velho +0 -0
  1128. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Puerto_Rico +0 -0
  1129. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Punta_Arenas +0 -0
  1130. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rainy_River +0 -0
  1131. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rankin_Inlet +0 -0
  1132. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Recife +0 -0
  1133. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Regina +0 -0
  1134. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Resolute +0 -0
  1135. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rio_Branco +0 -0
  1136. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rosario +0 -0
  1137. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santa_Isabel +0 -0
  1138. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santarem +0 -0
  1139. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santiago +0 -0
  1140. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santo_Domingo +0 -0
  1141. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Sao_Paulo +0 -0
  1142. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Scoresbysund +0 -0
  1143. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Shiprock +0 -0
  1144. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Sitka +0 -0
  1145. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Barthelemy +0 -0
  1146. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Johns +0 -0
  1147. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Kitts +0 -0
  1148. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Lucia +0 -0
  1149. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Thomas +0 -0
  1150. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/St_Vincent +0 -0
  1151. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Swift_Current +0 -0
  1152. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tegucigalpa +0 -0
  1153. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Thule +0 -0
  1154. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Thunder_Bay +0 -0
  1155. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tijuana +0 -0
  1156. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Toronto +0 -0
  1157. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tortola +0 -0
  1158. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
  1159. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Virgin +0 -0
  1160. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Whitehorse +0 -0
  1161. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Winnipeg +0 -0
  1162. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Yakutat +0 -0
  1163. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Yellowknife +0 -0
  1164. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Casey +0 -0
  1165. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Davis +0 -0
  1166. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/DumontDUrville +0 -0
  1167. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Macquarie +0 -0
  1168. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Mawson +0 -0
  1169. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/McMurdo +0 -0
  1170. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Palmer +0 -0
  1171. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Rothera +0 -0
  1172. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/South_Pole +0 -0
  1173. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Syowa +0 -0
  1174. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Troll +0 -0
  1175. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Antarctica/Vostok +0 -0
  1176. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Arctic/Longyearbyen +0 -0
  1177. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Aden +0 -0
  1178. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Almaty +0 -0
  1179. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Amman +0 -0
  1180. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Anadyr +0 -0
  1181. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Aqtau +0 -0
  1182. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Aqtobe +0 -0
  1183. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ashgabat +0 -0
  1184. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ashkhabad +0 -0
  1185. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Atyrau +0 -0
  1186. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Baghdad +0 -0
  1187. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Bahrain +0 -0
  1188. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Baku +0 -0
  1189. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Bangkok +0 -0
  1190. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Barnaul +0 -0
  1191. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Beirut +0 -0
  1192. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Bishkek +0 -0
  1193. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Brunei +0 -0
  1194. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Calcutta +0 -0
  1195. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Chita +0 -0
  1196. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Choibalsan +0 -0
  1197. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Chongqing +0 -0
  1198. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Chungking +0 -0
  1199. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Colombo +0 -0
  1200. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dacca +0 -0
  1201. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Damascus +0 -0
  1202. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dhaka +0 -0
  1203. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dili +0 -0
  1204. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dubai +0 -0
  1205. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Dushanbe +0 -0
  1206. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Famagusta +0 -0
  1207. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Gaza +0 -0
  1208. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Harbin +0 -0
  1209. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hebron +0 -0
  1210. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  1211. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hong_Kong +0 -0
  1212. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Hovd +0 -0
  1213. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Irkutsk +0 -0
  1214. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Istanbul +0 -0
  1215. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jakarta +0 -0
  1216. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jayapura +0 -0
  1217. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Jerusalem +0 -0
  1218. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kabul +0 -0
  1219. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kamchatka +0 -0
  1220. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Karachi +0 -0
  1221. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kashgar +0 -0
  1222. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kathmandu +0 -0
  1223. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Katmandu +0 -0
  1224. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Khandyga +0 -0
  1225. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kolkata +0 -0
  1226. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Krasnoyarsk +0 -0
  1227. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kuala_Lumpur +0 -0
  1228. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kuching +0 -0
  1229. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Kuwait +0 -0
  1230. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Macao +0 -0
  1231. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Macau +0 -0
  1232. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Magadan +0 -0
  1233. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Makassar +0 -0
  1234. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Manila +0 -0
  1235. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Muscat +0 -0
  1236. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Nicosia +0 -0
  1237. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Novokuznetsk +0 -0
  1238. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Novosibirsk +0 -0
  1239. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Omsk +0 -0
  1240. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Oral +0 -0
  1241. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
  1242. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Pontianak +0 -0
  1243. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Pyongyang +0 -0
  1244. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qatar +0 -0
  1245. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qostanay +0 -0
  1246. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Qyzylorda +0 -0
  1247. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Rangoon +0 -0
  1248. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Riyadh +0 -0
  1249. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
  1250. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Sakhalin +0 -0
  1251. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Samarkand +0 -0
  1252. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Seoul +0 -0
  1253. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Shanghai +0 -0
  1254. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Singapore +0 -0
  1255. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Srednekolymsk +0 -0
  1256. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Taipei +0 -0
  1257. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tashkent +0 -0
  1258. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
  1259. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  1260. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tel_Aviv +0 -0
  1261. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Thimbu +0 -0
  1262. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Thimphu +0 -0
  1263. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tokyo +0 -0
  1264. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tomsk +0 -0
  1265. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ujung_Pandang +0 -0
  1266. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ulaanbaatar +0 -0
  1267. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ulan_Bator +0 -0
  1268. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Urumqi +0 -0
  1269. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ust-Nera +0 -0
  1270. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
  1271. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vladivostok +0 -0
  1272. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yakutsk +0 -0
  1273. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yangon +0 -0
  1274. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yekaterinburg +0 -0
  1275. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Yerevan +0 -0
  1276. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Azores +0 -0
  1277. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Bermuda +0 -0
  1278. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Canary +0 -0
  1279. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Cape_Verde +0 -0
  1280. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Faeroe +0 -0
  1281. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Faroe +0 -0
  1282. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Jan_Mayen +0 -0
  1283. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Madeira +0 -0
  1284. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Reykjavik +0 -0
  1285. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/South_Georgia +0 -0
  1286. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/St_Helena +0 -0
  1287. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Atlantic/Stanley +0 -0
  1288. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/ACT +0 -0
  1289. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Adelaide +0 -0
  1290. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Brisbane +0 -0
  1291. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Broken_Hill +0 -0
  1292. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Canberra +0 -0
  1293. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Currie +0 -0
  1294. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Darwin +0 -0
  1295. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Eucla +0 -0
  1296. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Hobart +0 -0
  1297. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/LHI +0 -0
  1298. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Lindeman +0 -0
  1299. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Lord_Howe +0 -0
  1300. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Melbourne +0 -0
  1301. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/NSW +0 -0
  1302. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/North +0 -0
  1303. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Perth +0 -0
  1304. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Queensland +0 -0
  1305. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/South +0 -0
  1306. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Sydney +0 -0
  1307. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Tasmania +0 -0
  1308. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Victoria +0 -0
  1309. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/West +0 -0
  1310. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Australia/Yancowinna +0 -0
  1311. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/Acre +0 -0
  1312. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/DeNoronha +0 -0
  1313. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/East +0 -0
  1314. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Brazil/West +0 -0
  1315. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/CET +0 -0
  1316. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/CST6CDT +0 -0
  1317. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Atlantic +0 -0
  1318. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Central +0 -0
  1319. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Eastern +0 -0
  1320. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Mountain +0 -0
  1321. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Newfoundland +0 -0
  1322. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
  1323. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Saskatchewan +0 -0
  1324. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Yukon +0 -0
  1325. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Chile/Continental +0 -0
  1326. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Chile/EasterIsland +0 -0
  1327. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Cuba +0 -0
  1328. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/EET +0 -0
  1329. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/EST +0 -0
  1330. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/EST5EDT +0 -0
  1331. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Egypt +0 -0
  1332. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Eire +0 -0
  1333. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT +0 -0
  1334. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+0 +0 -0
  1335. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+1 +0 -0
  1336. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+10 +0 -0
  1337. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+11 +0 -0
  1338. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+12 +0 -0
  1339. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+2 +0 -0
  1340. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+3 +0 -0
  1341. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+4 +0 -0
  1342. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+5 +0 -0
  1343. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+6 +0 -0
  1344. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+7 +0 -0
  1345. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+8 +0 -0
  1346. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT+9 +0 -0
  1347. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-0 +0 -0
  1348. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-1 +0 -0
  1349. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-10 +0 -0
  1350. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-11 +0 -0
  1351. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-12 +0 -0
  1352. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-13 +0 -0
  1353. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-14 +0 -0
  1354. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-2 +0 -0
  1355. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-3 +0 -0
  1356. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-4 +0 -0
  1357. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-5 +0 -0
  1358. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-6 +0 -0
  1359. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-7 +0 -0
  1360. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-8 +0 -0
  1361. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT-9 +0 -0
  1362. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/GMT0 +0 -0
  1363. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/Greenwich +0 -0
  1364. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/UCT +0 -0
  1365. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/UTC +0 -0
  1366. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/Universal +0 -0
  1367. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Etc/Zulu +0 -0
  1368. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Amsterdam +0 -0
  1369. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Andorra +0 -0
  1370. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Astrakhan +0 -0
  1371. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Athens +0 -0
  1372. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Belfast +0 -0
  1373. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Belgrade +0 -0
  1374. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Berlin +0 -0
  1375. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Bratislava +0 -0
  1376. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Brussels +0 -0
  1377. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Bucharest +0 -0
  1378. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Budapest +0 -0
  1379. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Busingen +0 -0
  1380. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
  1381. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Copenhagen +0 -0
  1382. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Dublin +0 -0
  1383. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Gibraltar +0 -0
  1384. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Guernsey +0 -0
  1385. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Helsinki +0 -0
  1386. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Isle_of_Man +0 -0
  1387. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Istanbul +0 -0
  1388. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Jersey +0 -0
  1389. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kaliningrad +0 -0
  1390. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kiev +0 -0
  1391. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kirov +0 -0
  1392. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Kyiv +0 -0
  1393. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Lisbon +0 -0
  1394. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Ljubljana +0 -0
  1395. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/London +0 -0
  1396. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Luxembourg +0 -0
  1397. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Madrid +0 -0
  1398. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Malta +0 -0
  1399. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Mariehamn +0 -0
  1400. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Minsk +0 -0
  1401. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Monaco +0 -0
  1402. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Moscow +0 -0
  1403. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Nicosia +0 -0
  1404. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Oslo +0 -0
  1405. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Paris +0 -0
  1406. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Podgorica +0 -0
  1407. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Prague +0 -0
  1408. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Riga +0 -0
  1409. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Rome +0 -0
  1410. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Samara +0 -0
  1411. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/San_Marino +0 -0
  1412. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Sarajevo +0 -0
  1413. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Saratov +0 -0
  1414. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Simferopol +0 -0
  1415. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Skopje +0 -0
  1416. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Sofia +0 -0
  1417. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Stockholm +0 -0
  1418. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tallinn +0 -0
  1419. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tirane +0 -0
  1420. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
  1421. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Ulyanovsk +0 -0
  1422. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Uzhgorod +0 -0
  1423. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vaduz +0 -0
  1424. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vatican +0 -0
  1425. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vienna +0 -0
  1426. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Vilnius +0 -0
  1427. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Volgograd +0 -0
  1428. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Warsaw +0 -0
  1429. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Zagreb +0 -0
  1430. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Zaporozhye +0 -0
  1431. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Zurich +0 -0
  1432. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Factory +0 -0
  1433. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GB +0 -0
  1434. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GB-Eire +0 -0
  1435. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT +0 -0
  1436. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT+0 +0 -0
  1437. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT-0 +0 -0
  1438. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/GMT0 +0 -0
  1439. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Greenwich +0 -0
  1440. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/HST +0 -0
  1441. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Hongkong +0 -0
  1442. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iceland +0 -0
  1443. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Antananarivo +0 -0
  1444. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Chagos +0 -0
  1445. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Christmas +0 -0
  1446. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Cocos +0 -0
  1447. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Comoro +0 -0
  1448. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Kerguelen +0 -0
  1449. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Mahe +0 -0
  1450. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Maldives +0 -0
  1451. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Mauritius +0 -0
  1452. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Mayotte +0 -0
  1453. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Indian/Reunion +0 -0
  1454. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  1455. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Israel +0 -0
  1456. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Jamaica +0 -0
  1457. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Japan +0 -0
  1458. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Kwajalein +0 -0
  1459. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Libya +0 -0
  1460. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/MET +0 -0
  1461. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/MST +0 -0
  1462. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/MST7MDT +0 -0
  1463. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaNorte +0 -0
  1464. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaSur +0 -0
  1465. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/General +0 -0
  1466. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/NZ +0 -0
  1467. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/NZ-CHAT +0 -0
  1468. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Navajo +0 -0
  1469. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/PRC +0 -0
  1470. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/PST8PDT +0 -0
  1471. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Apia +0 -0
  1472. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Auckland +0 -0
  1473. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Bougainville +0 -0
  1474. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Chatham +0 -0
  1475. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Chuuk +0 -0
  1476. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Easter +0 -0
  1477. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Efate +0 -0
  1478. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Enderbury +0 -0
  1479. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Fakaofo +0 -0
  1480. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Fiji +0 -0
  1481. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Funafuti +0 -0
  1482. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Galapagos +0 -0
  1483. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Gambier +0 -0
  1484. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Guadalcanal +0 -0
  1485. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Guam +0 -0
  1486. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Honolulu +0 -0
  1487. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Johnston +0 -0
  1488. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kanton +0 -0
  1489. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kiritimati +0 -0
  1490. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kosrae +0 -0
  1491. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Kwajalein +0 -0
  1492. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Majuro +0 -0
  1493. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Marquesas +0 -0
  1494. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Midway +0 -0
  1495. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Nauru +0 -0
  1496. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Niue +0 -0
  1497. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Norfolk +0 -0
  1498. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Noumea +0 -0
  1499. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pago_Pago +0 -0
  1500. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Palau +0 -0
  1501. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pitcairn +0 -0
  1502. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Pohnpei +0 -0
  1503. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Ponape +0 -0
  1504. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Port_Moresby +0 -0
  1505. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Rarotonga +0 -0
  1506. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Saipan +0 -0
  1507. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Samoa +0 -0
  1508. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Tahiti +0 -0
  1509. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Tarawa +0 -0
  1510. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Tongatapu +0 -0
  1511. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Truk +0 -0
  1512. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Wake +0 -0
  1513. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Wallis +0 -0
  1514. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Yap +0 -0
  1515. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Poland +0 -0
  1516. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Portugal +0 -0
  1517. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/ROC +0 -0
  1518. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/ROK +0 -0
  1519. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Singapore +0 -0
  1520. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Turkey +0 -0
  1521. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/UCT +0 -0
  1522. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Alaska +0 -0
  1523. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Aleutian +0 -0
  1524. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Arizona +0 -0
  1525. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Central +0 -0
  1526. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/East-Indiana +0 -0
  1527. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Eastern +0 -0
  1528. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Hawaii +0 -0
  1529. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Indiana-Starke +0 -0
  1530. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Michigan +0 -0
  1531. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Mountain +0 -0
  1532. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Pacific +0 -0
  1533. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/US/Samoa +0 -0
  1534. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/UTC +0 -0
  1535. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Universal +0 -0
  1536. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/W-SU +0 -0
  1537. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/WET +0 -0
  1538. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Zulu +0 -0
  1539. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab +0 -279
  1540. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +0 -375
  1541. package/deps/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +0 -296
  1542. package/deps/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +0 -31
  1543. package/deps/abseil-cpp/absl/time/internal/get_current_time_posix.inc +0 -24
  1544. package/deps/abseil-cpp/absl/time/internal/test_util.cc +0 -32
  1545. package/deps/abseil-cpp/absl/time/internal/test_util.h +0 -33
  1546. package/deps/abseil-cpp/absl/time/simulated_clock.cc +0 -225
  1547. package/deps/abseil-cpp/absl/time/simulated_clock.h +0 -108
  1548. package/deps/abseil-cpp/absl/time/simulated_clock_test.cc +0 -614
  1549. package/deps/abseil-cpp/absl/time/time.cc +0 -507
  1550. package/deps/abseil-cpp/absl/time/time.h +0 -1926
  1551. package/deps/abseil-cpp/absl/time/time_benchmark.cc +0 -321
  1552. package/deps/abseil-cpp/absl/time/time_test.cc +0 -1365
  1553. package/deps/abseil-cpp/absl/time/time_zone_test.cc +0 -97
  1554. package/deps/abseil-cpp/absl/types/BUILD.bazel +0 -166
  1555. package/deps/abseil-cpp/absl/types/CMakeLists.txt +0 -179
  1556. package/deps/abseil-cpp/absl/types/any.h +0 -44
  1557. package/deps/abseil-cpp/absl/types/compare.h +0 -506
  1558. package/deps/abseil-cpp/absl/types/compare_test.cc +0 -300
  1559. package/deps/abseil-cpp/absl/types/internal/span.h +0 -141
  1560. package/deps/abseil-cpp/absl/types/optional.h +0 -41
  1561. package/deps/abseil-cpp/absl/types/span.h +0 -830
  1562. package/deps/abseil-cpp/absl/types/span_test.cc +0 -915
  1563. package/deps/abseil-cpp/absl/types/variant.h +0 -82
  1564. package/deps/abseil-cpp/absl/types/variant_test.cc +0 -164
  1565. package/deps/abseil-cpp/absl/utility/BUILD.bazel +0 -46
  1566. package/deps/abseil-cpp/absl/utility/CMakeLists.txt +0 -28
  1567. package/deps/abseil-cpp/absl/utility/utility.h +0 -68
  1568. package/deps/abseil-cpp/ci/absl_alternate_options.h +0 -28
  1569. package/deps/abseil-cpp/ci/cmake_common.sh +0 -19
  1570. package/deps/abseil-cpp/ci/cmake_install_test.sh +0 -64
  1571. package/deps/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +0 -106
  1572. package/deps/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +0 -114
  1573. package/deps/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +0 -107
  1574. package/deps/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +0 -106
  1575. package/deps/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +0 -104
  1576. package/deps/abseil-cpp/ci/linux_docker_containers.sh +0 -22
  1577. package/deps/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +0 -100
  1578. package/deps/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +0 -105
  1579. package/deps/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +0 -85
  1580. package/deps/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +0 -85
  1581. package/deps/abseil-cpp/ci/macos_xcode_bazel.sh +0 -70
  1582. package/deps/abseil-cpp/ci/macos_xcode_cmake.sh +0 -78
  1583. package/deps/abseil-cpp/ci/windows_clangcl_bazel.bat +0 -70
  1584. package/deps/abseil-cpp/ci/windows_msvc_bazel.bat +0 -61
  1585. package/deps/abseil-cpp/ci/windows_msvc_cmake.bat +0 -69
  1586. package/deps/abseil-cpp/conanfile.py +0 -51
  1587. package/deps/abseil-cpp/create_lts.py +0 -139
  1588. package/deps/re2/.bazelrc +0 -20
  1589. package/deps/re2/.bcr/metadata.template.json +0 -16
  1590. package/deps/re2/.bcr/presubmit.yml +0 -57
  1591. package/deps/re2/.bcr/source.template.json +0 -5
  1592. package/deps/re2/BUILD.bazel +0 -463
  1593. package/deps/re2/CMakeLists.txt +0 -283
  1594. package/deps/re2/LICENSE +0 -27
  1595. package/deps/re2/MODULE.bazel +0 -29
  1596. package/deps/re2/Makefile +0 -408
  1597. package/deps/re2/WORKSPACE.bazel +0 -7
  1598. package/deps/re2/WORKSPACE.bzlmod +0 -7
  1599. package/deps/re2/app/BUILD.bazel +0 -24
  1600. package/deps/re2/app/_re2.cc +0 -94
  1601. package/deps/re2/app/_re2.d.ts +0 -23
  1602. package/deps/re2/app/app.ts +0 -111
  1603. package/deps/re2/app/build.sh +0 -32
  1604. package/deps/re2/app/index.html +0 -5
  1605. package/deps/re2/app/package.json +0 -14
  1606. package/deps/re2/app/rollup.config.js +0 -28
  1607. package/deps/re2/app/tsconfig.json +0 -17
  1608. package/deps/re2/benchlog/benchplot.py +0 -98
  1609. package/deps/re2/benchlog/mktable +0 -155
  1610. package/deps/re2/doc/mksyntaxgo +0 -42
  1611. package/deps/re2/doc/mksyntaxhtml +0 -42
  1612. package/deps/re2/doc/mksyntaxwiki +0 -36
  1613. package/deps/re2/doc/syntax.html +0 -477
  1614. package/deps/re2/doc/syntax.txt +0 -463
  1615. package/deps/re2/lib/git/commit-msg.hook +0 -104
  1616. package/deps/re2/libre2.symbols +0 -16
  1617. package/deps/re2/libre2.symbols.darwin +0 -12
  1618. package/deps/re2/python/BUILD.bazel +0 -80
  1619. package/deps/re2/python/_re2.cc +0 -352
  1620. package/deps/re2/python/re2.py +0 -583
  1621. package/deps/re2/python/re2_test.py +0 -495
  1622. package/deps/re2/python/setup.py +0 -159
  1623. package/deps/re2/python/toolchains/generate.py +0 -100
  1624. package/deps/re2/re2/bitmap256.cc +0 -43
  1625. package/deps/re2/re2/bitmap256.h +0 -88
  1626. package/deps/re2/re2/bitstate.cc +0 -389
  1627. package/deps/re2/re2/compile.cc +0 -1265
  1628. package/deps/re2/re2/dfa.cc +0 -2135
  1629. package/deps/re2/re2/filtered_re2.cc +0 -138
  1630. package/deps/re2/re2/filtered_re2.h +0 -115
  1631. package/deps/re2/re2/fuzzing/re2_fuzzer.cc +0 -284
  1632. package/deps/re2/re2/make_perl_groups.pl +0 -116
  1633. package/deps/re2/re2/make_unicode_casefold.py +0 -151
  1634. package/deps/re2/re2/make_unicode_groups.py +0 -117
  1635. package/deps/re2/re2/mimics_pcre.cc +0 -196
  1636. package/deps/re2/re2/nfa.cc +0 -714
  1637. package/deps/re2/re2/onepass.cc +0 -623
  1638. package/deps/re2/re2/parse.cc +0 -2529
  1639. package/deps/re2/re2/perl_groups.cc +0 -119
  1640. package/deps/re2/re2/pod_array.h +0 -55
  1641. package/deps/re2/re2/prefilter.cc +0 -711
  1642. package/deps/re2/re2/prefilter.h +0 -168
  1643. package/deps/re2/re2/prefilter_tree.cc +0 -376
  1644. package/deps/re2/re2/prefilter_tree.h +0 -153
  1645. package/deps/re2/re2/prog.cc +0 -1181
  1646. package/deps/re2/re2/prog.h +0 -493
  1647. package/deps/re2/re2/re2.cc +0 -1355
  1648. package/deps/re2/re2/re2.h +0 -1074
  1649. package/deps/re2/re2/regexp.cc +0 -1004
  1650. package/deps/re2/re2/regexp.h +0 -693
  1651. package/deps/re2/re2/set.cc +0 -185
  1652. package/deps/re2/re2/set.h +0 -91
  1653. package/deps/re2/re2/simplify.cc +0 -689
  1654. package/deps/re2/re2/sparse_array.h +0 -394
  1655. package/deps/re2/re2/sparse_set.h +0 -266
  1656. package/deps/re2/re2/stringpiece.h +0 -18
  1657. package/deps/re2/re2/testing/backtrack.cc +0 -274
  1658. package/deps/re2/re2/testing/charclass_test.cc +0 -228
  1659. package/deps/re2/re2/testing/compile_test.cc +0 -431
  1660. package/deps/re2/re2/testing/dfa_test.cc +0 -376
  1661. package/deps/re2/re2/testing/dump.cc +0 -172
  1662. package/deps/re2/re2/testing/exhaustive1_test.cc +0 -40
  1663. package/deps/re2/re2/testing/exhaustive2_test.cc +0 -72
  1664. package/deps/re2/re2/testing/exhaustive3_test.cc +0 -100
  1665. package/deps/re2/re2/testing/exhaustive_test.cc +0 -35
  1666. package/deps/re2/re2/testing/exhaustive_tester.cc +0 -204
  1667. package/deps/re2/re2/testing/exhaustive_tester.h +0 -105
  1668. package/deps/re2/re2/testing/filtered_re2_test.cc +0 -343
  1669. package/deps/re2/re2/testing/mimics_pcre_test.cc +0 -79
  1670. package/deps/re2/re2/testing/null_walker.cc +0 -48
  1671. package/deps/re2/re2/testing/parse_test.cc +0 -586
  1672. package/deps/re2/re2/testing/possible_match_test.cc +0 -251
  1673. package/deps/re2/re2/testing/random_test.cc +0 -102
  1674. package/deps/re2/re2/testing/re2_arg_test.cc +0 -182
  1675. package/deps/re2/re2/testing/re2_test.cc +0 -1699
  1676. package/deps/re2/re2/testing/regexp_benchmark.cc +0 -1605
  1677. package/deps/re2/re2/testing/regexp_generator.cc +0 -284
  1678. package/deps/re2/re2/testing/regexp_generator.h +0 -77
  1679. package/deps/re2/re2/testing/regexp_test.cc +0 -87
  1680. package/deps/re2/re2/testing/required_prefix_test.cc +0 -201
  1681. package/deps/re2/re2/testing/search_test.cc +0 -338
  1682. package/deps/re2/re2/testing/set_test.cc +0 -235
  1683. package/deps/re2/re2/testing/simplify_test.cc +0 -289
  1684. package/deps/re2/re2/testing/string_generator.cc +0 -144
  1685. package/deps/re2/re2/testing/string_generator.h +0 -76
  1686. package/deps/re2/re2/testing/string_generator_test.cc +0 -114
  1687. package/deps/re2/re2/testing/tester.cc +0 -690
  1688. package/deps/re2/re2/testing/tester.h +0 -121
  1689. package/deps/re2/re2/tostring.cc +0 -351
  1690. package/deps/re2/re2/unicode.py +0 -284
  1691. package/deps/re2/re2/unicode_casefold.cc +0 -604
  1692. package/deps/re2/re2/unicode_casefold.h +0 -77
  1693. package/deps/re2/re2/unicode_groups.cc +0 -6517
  1694. package/deps/re2/re2/unicode_groups.h +0 -66
  1695. package/deps/re2/re2/walker-inl.h +0 -249
  1696. package/deps/re2/re2.pc.in +0 -9
  1697. package/deps/re2/re2Config.cmake.in +0 -26
  1698. package/deps/re2/runtests +0 -33
  1699. package/deps/re2/testinstall.cc +0 -27
  1700. package/deps/re2/ucs2.diff +0 -567
  1701. package/deps/re2/util/malloc_counter.h +0 -19
  1702. package/deps/re2/util/pcre.cc +0 -957
  1703. package/deps/re2/util/pcre.h +0 -671
  1704. package/deps/re2/util/rune.cc +0 -260
  1705. package/deps/re2/util/strutil.cc +0 -26
  1706. package/deps/re2/util/strutil.h +0 -16
  1707. package/deps/re2/util/utf.h +0 -44
@@ -1,3763 +0,0 @@
1
- // Copyright 2018 The Abseil Authors.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // https://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
- //
15
- // An open-addressing
16
- // hashtable with quadratic probing.
17
- //
18
- // This is a low level hashtable on top of which different interfaces can be
19
- // implemented, like flat_hash_set, node_hash_set, string_hash_set, etc.
20
- //
21
- // The table interface is similar to that of std::unordered_set. Notable
22
- // differences are that most member functions support heterogeneous keys when
23
- // BOTH the hash and eq functions are marked as transparent. They do so by
24
- // providing a typedef called `is_transparent`.
25
- //
26
- // When heterogeneous lookup is enabled, functions that take key_type act as if
27
- // they have an overload set like:
28
- //
29
- // iterator find(const key_type& key);
30
- // template <class K>
31
- // iterator find(const K& key);
32
- //
33
- // size_type erase(const key_type& key);
34
- // template <class K>
35
- // size_type erase(const K& key);
36
- //
37
- // std::pair<iterator, iterator> equal_range(const key_type& key);
38
- // template <class K>
39
- // std::pair<iterator, iterator> equal_range(const K& key);
40
- //
41
- // When heterogeneous lookup is disabled, only the explicit `key_type` overloads
42
- // exist.
43
- //
44
- // In addition the pointer to element and iterator stability guarantees are
45
- // weaker: all iterators and pointers are invalidated after a new element is
46
- // inserted.
47
- //
48
- // IMPLEMENTATION DETAILS
49
- //
50
- // # Table Layout
51
- //
52
- // A raw_hash_set's backing array consists of control bytes followed by slots
53
- // that may or may not contain objects.
54
- //
55
- // The layout of the backing array, for `capacity` slots, is thus, as a
56
- // pseudo-struct:
57
- //
58
- // struct BackingArray {
59
- // // Sampling handler. This field isn't present when the sampling is
60
- // // disabled or this allocation hasn't been selected for sampling.
61
- // HashtablezInfoHandle infoz_;
62
- // // The number of elements we can insert before growing the capacity.
63
- // size_t growth_left;
64
- // // Control bytes for the "real" slots.
65
- // ctrl_t ctrl[capacity];
66
- // // Always `ctrl_t::kSentinel`. This is used by iterators to find when to
67
- // // stop and serves no other purpose.
68
- // ctrl_t sentinel;
69
- // // A copy of the first `kWidth - 1` elements of `ctrl`. This is used so
70
- // // that if a probe sequence picks a value near the end of `ctrl`,
71
- // // `Group` will have valid control bytes to look at.
72
- // ctrl_t clones[kWidth - 1];
73
- // // The actual slot data.
74
- // slot_type slots[capacity];
75
- // };
76
- //
77
- // The length of this array is computed by `RawHashSetLayout::alloc_size` below.
78
- //
79
- // Control bytes (`ctrl_t`) are bytes (collected into groups of a
80
- // platform-specific size) that define the state of the corresponding slot in
81
- // the slot array. Group manipulation is tightly optimized to be as efficient
82
- // as possible: SSE and friends on x86, clever bit operations on other arches.
83
- //
84
- // Group 1 Group 2 Group 3
85
- // +---------------+---------------+---------------+
86
- // | | | | | | | | | | | | | | | | | | | | | | | | |
87
- // +---------------+---------------+---------------+
88
- //
89
- // Each control byte is either a special value for empty slots, deleted slots
90
- // (sometimes called *tombstones*), and a special end-of-table marker used by
91
- // iterators, or, if occupied, seven bits (H2) from the hash of the value in the
92
- // corresponding slot.
93
- //
94
- // Storing control bytes in a separate array also has beneficial cache effects,
95
- // since more logical slots will fit into a cache line.
96
- //
97
- // # Small Object Optimization (SOO)
98
- //
99
- // When the size/alignment of the value_type and the capacity of the table are
100
- // small, we enable small object optimization and store the values inline in
101
- // the raw_hash_set object. This optimization allows us to avoid
102
- // allocation/deallocation as well as cache/dTLB misses.
103
- //
104
- // # Hashing
105
- //
106
- // We compute two separate hashes, `H1` and `H2`, from the hash of an object.
107
- // `H1(hash(x))` is an index into `slots`, and essentially the starting point
108
- // for the probe sequence. `H2(hash(x))` is a 7-bit value used to filter out
109
- // objects that cannot possibly be the one we are looking for.
110
- //
111
- // # Table operations.
112
- //
113
- // The key operations are `insert`, `find`, and `erase`.
114
- //
115
- // Since `insert` and `erase` are implemented in terms of `find`, we describe
116
- // `find` first. To `find` a value `x`, we compute `hash(x)`. From
117
- // `H1(hash(x))` and the capacity, we construct a `probe_seq` that visits every
118
- // group of slots in some interesting order.
119
- //
120
- // We now walk through these indices. At each index, we select the entire group
121
- // starting with that index and extract potential candidates: occupied slots
122
- // with a control byte equal to `H2(hash(x))`. If we find an empty slot in the
123
- // group, we stop and return an error. Each candidate slot `y` is compared with
124
- // `x`; if `x == y`, we are done and return `&y`; otherwise we continue to the
125
- // next probe index. Tombstones effectively behave like full slots that never
126
- // match the value we're looking for.
127
- //
128
- // The `H2` bits ensure when we compare a slot to an object with `==`, we are
129
- // likely to have actually found the object. That is, the chance is low that
130
- // `==` is called and returns `false`. Thus, when we search for an object, we
131
- // are unlikely to call `==` many times. This likelyhood can be analyzed as
132
- // follows (assuming that H2 is a random enough hash function).
133
- //
134
- // Let's assume that there are `k` "wrong" objects that must be examined in a
135
- // probe sequence. For example, when doing a `find` on an object that is in the
136
- // table, `k` is the number of objects between the start of the probe sequence
137
- // and the final found object (not including the final found object). The
138
- // expected number of objects with an H2 match is then `k/128`. Measurements
139
- // and analysis indicate that even at high load factors, `k` is less than 32,
140
- // meaning that the number of "false positive" comparisons we must perform is
141
- // less than 1/8 per `find`.
142
-
143
- // `insert` is implemented in terms of `unchecked_insert`, which inserts a
144
- // value presumed to not be in the table (violating this requirement will cause
145
- // the table to behave erratically). Given `x` and its hash `hash(x)`, to insert
146
- // it, we construct a `probe_seq` once again, and use it to find the first
147
- // group with an unoccupied (empty *or* deleted) slot. We place `x` into the
148
- // first such slot in the group and mark it as full with `x`'s H2.
149
- //
150
- // To `insert`, we compose `unchecked_insert` with `find`. We compute `h(x)` and
151
- // perform a `find` to see if it's already present; if it is, we're done. If
152
- // it's not, we may decide the table is getting overcrowded (i.e. the load
153
- // factor is greater than 7/8 for big tables; tables smaller than one probing
154
- // group use a max load factor of 1); in this case, we allocate a bigger array,
155
- // `unchecked_insert` each element of the table into the new array (we know that
156
- // no insertion here will insert an already-present value), and discard the old
157
- // backing array. At this point, we may `unchecked_insert` the value `x`.
158
- //
159
- // Below, `unchecked_insert` is partly implemented by `prepare_insert`, which
160
- // presents a viable, initialized slot pointee to the caller.
161
- //
162
- // `erase` is implemented in terms of `erase_at`, which takes an index to a
163
- // slot. Given an offset, we simply create a tombstone and destroy its contents.
164
- // If we can prove that the slot would not appear in a probe sequence, we can
165
- // make the slot as empty, instead. We can prove this by observing that if a
166
- // group has any empty slots, it has never been full (assuming we never create
167
- // an empty slot in a group with no empties, which this heuristic guarantees we
168
- // never do) and find would stop at this group anyways (since it does not probe
169
- // beyond groups with empties).
170
- //
171
- // `erase` is `erase_at` composed with `find`: if we
172
- // have a value `x`, we can perform a `find`, and then `erase_at` the resulting
173
- // slot.
174
- //
175
- // To iterate, we simply traverse the array, skipping empty and deleted slots
176
- // and stopping when we hit a `kSentinel`.
177
-
178
- #ifndef ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_H_
179
- #define ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_H_
180
-
181
- #include <algorithm>
182
- #include <cassert>
183
- #include <cmath>
184
- #include <cstddef>
185
- #include <cstdint>
186
- #include <cstring>
187
- #include <functional>
188
- #include <initializer_list>
189
- #include <iterator>
190
- #include <limits>
191
- #include <memory>
192
- #include <tuple>
193
- #include <type_traits>
194
- #include <utility>
195
-
196
- #include "absl/base/attributes.h"
197
- #include "absl/base/casts.h"
198
- #include "absl/base/config.h"
199
- #include "absl/base/internal/endian.h"
200
- #include "absl/base/internal/iterator_traits.h"
201
- #include "absl/base/internal/raw_logging.h"
202
- #include "absl/base/macros.h"
203
- #include "absl/base/optimization.h"
204
- #include "absl/base/options.h"
205
- #include "absl/base/port.h"
206
- #include "absl/base/prefetch.h"
207
- #include "absl/container/internal/common.h" // IWYU pragma: export // for node_handle
208
- #include "absl/container/internal/common_policy_traits.h"
209
- #include "absl/container/internal/compressed_tuple.h"
210
- #include "absl/container/internal/container_memory.h"
211
- #include "absl/container/internal/hash_function_defaults.h"
212
- #include "absl/container/internal/hash_policy_traits.h"
213
- #include "absl/container/internal/hashtable_control_bytes.h"
214
- #include "absl/container/internal/hashtable_debug_hooks.h"
215
- #include "absl/container/internal/hashtablez_sampler.h"
216
- #include "absl/functional/function_ref.h"
217
- #include "absl/hash/hash.h"
218
- #include "absl/hash/internal/weakly_mixed_integer.h"
219
- #include "absl/memory/memory.h"
220
- #include "absl/meta/type_traits.h"
221
- #include "absl/numeric/bits.h"
222
- #include "absl/utility/utility.h"
223
-
224
- namespace absl {
225
- ABSL_NAMESPACE_BEGIN
226
- namespace container_internal {
227
-
228
- #ifdef ABSL_SWISSTABLE_ENABLE_GENERATIONS
229
- #error ABSL_SWISSTABLE_ENABLE_GENERATIONS cannot be directly set
230
- #elif (defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
231
- defined(ABSL_HAVE_HWADDRESS_SANITIZER) || \
232
- defined(ABSL_HAVE_MEMORY_SANITIZER)) && \
233
- !defined(NDEBUG_SANITIZER) // If defined, performance is important.
234
- // When compiled in sanitizer mode, we add generation integers to the backing
235
- // array and iterators. In the backing array, we store the generation between
236
- // the control bytes and the slots. When iterators are dereferenced, we assert
237
- // that the container has not been mutated in a way that could cause iterator
238
- // invalidation since the iterator was initialized.
239
- #define ABSL_SWISSTABLE_ENABLE_GENERATIONS
240
- #endif
241
-
242
- #ifdef ABSL_SWISSTABLE_ASSERT
243
- #error ABSL_SWISSTABLE_ASSERT cannot be directly set
244
- #else
245
- // We use this macro for assertions that users may see when the table is in an
246
- // invalid state that sanitizers may help diagnose.
247
- #define ABSL_SWISSTABLE_ASSERT(CONDITION) \
248
- assert((CONDITION) && "Try enabling sanitizers.")
249
- #endif
250
-
251
- // We use uint8_t so we don't need to worry about padding.
252
- using GenerationType = uint8_t;
253
-
254
- // A sentinel value for empty generations. Using 0 makes it easy to constexpr
255
- // initialize an array of this value.
256
- constexpr GenerationType SentinelEmptyGeneration() { return 0; }
257
-
258
- constexpr GenerationType NextGeneration(GenerationType generation) {
259
- return ++generation == SentinelEmptyGeneration() ? ++generation : generation;
260
- }
261
-
262
- #ifdef ABSL_SWISSTABLE_ENABLE_GENERATIONS
263
- constexpr bool SwisstableGenerationsEnabled() { return true; }
264
- constexpr size_t NumGenerationBytes() { return sizeof(GenerationType); }
265
- #else
266
- constexpr bool SwisstableGenerationsEnabled() { return false; }
267
- constexpr size_t NumGenerationBytes() { return 0; }
268
- #endif
269
-
270
- // Returns true if we should assert that the table is not accessed after it has
271
- // been destroyed or during the destruction of the table.
272
- constexpr bool SwisstableAssertAccessToDestroyedTable() {
273
- #ifndef NDEBUG
274
- return true;
275
- #endif
276
- return SwisstableGenerationsEnabled();
277
- }
278
-
279
- template <typename AllocType>
280
- void SwapAlloc(AllocType& lhs, AllocType& rhs,
281
- std::true_type /* propagate_on_container_swap */) {
282
- using std::swap;
283
- swap(lhs, rhs);
284
- }
285
- template <typename AllocType>
286
- void SwapAlloc([[maybe_unused]] AllocType& lhs, [[maybe_unused]] AllocType& rhs,
287
- std::false_type /* propagate_on_container_swap */) {
288
- assert(lhs == rhs &&
289
- "It's UB to call swap with unequal non-propagating allocators.");
290
- }
291
-
292
- template <typename AllocType>
293
- void CopyAlloc(AllocType& lhs, AllocType& rhs,
294
- std::true_type /* propagate_alloc */) {
295
- lhs = rhs;
296
- }
297
- template <typename AllocType>
298
- void CopyAlloc(AllocType&, AllocType&, std::false_type /* propagate_alloc */) {}
299
-
300
- // The state for a probe sequence.
301
- //
302
- // Currently, the sequence is a triangular progression of the form
303
- //
304
- // p(i) := Width * (i^2 + i)/2 + hash (mod mask + 1)
305
- //
306
- // The use of `Width` ensures that each probe step does not overlap groups;
307
- // the sequence effectively outputs the addresses of *groups* (although not
308
- // necessarily aligned to any boundary). The `Group` machinery allows us
309
- // to check an entire group with minimal branching.
310
- //
311
- // Wrapping around at `mask + 1` is important, but not for the obvious reason.
312
- // As described above, the first few entries of the control byte array
313
- // are mirrored at the end of the array, which `Group` will find and use
314
- // for selecting candidates. However, when those candidates' slots are
315
- // actually inspected, there are no corresponding slots for the cloned bytes,
316
- // so we need to make sure we've treated those offsets as "wrapping around".
317
- //
318
- // It turns out that this probe sequence visits every group exactly once if the
319
- // number of groups is a power of two, since (i^2+i)/2 is a bijection in
320
- // Z/(2^m). See https://en.wikipedia.org/wiki/Quadratic_probing
321
- template <size_t Width>
322
- class probe_seq {
323
- public:
324
- // Creates a new probe sequence using `hash` as the initial value of the
325
- // sequence and `mask` (usually the capacity of the table) as the mask to
326
- // apply to each value in the progression.
327
- probe_seq(size_t hash, size_t mask) {
328
- ABSL_SWISSTABLE_ASSERT(((mask + 1) & mask) == 0 && "not a mask");
329
- mask_ = mask;
330
- offset_ = hash & mask_;
331
- }
332
-
333
- // The offset within the table, i.e., the value `p(i)` above.
334
- size_t offset() const { return offset_; }
335
- size_t offset(size_t i) const { return (offset_ + i) & mask_; }
336
-
337
- void next() {
338
- index_ += Width;
339
- offset_ += index_;
340
- offset_ &= mask_;
341
- }
342
- // 0-based probe index, a multiple of `Width`.
343
- size_t index() const { return index_; }
344
-
345
- private:
346
- size_t mask_;
347
- size_t offset_;
348
- size_t index_ = 0;
349
- };
350
-
351
- template <class ContainerKey, class Hash, class Eq>
352
- struct RequireUsableKey {
353
- template <class PassedKey, class... Args>
354
- std::pair<
355
- decltype(std::declval<const Hash&>()(std::declval<const PassedKey&>())),
356
- decltype(std::declval<const Eq&>()(std::declval<const ContainerKey&>(),
357
- std::declval<const PassedKey&>()))>*
358
- operator()(const PassedKey&, const Args&...) const;
359
- };
360
-
361
- template <class E, class Policy, class Hash, class Eq, class... Ts>
362
- struct IsDecomposable : std::false_type {};
363
-
364
- template <class Policy, class Hash, class Eq, class... Ts>
365
- struct IsDecomposable<
366
- absl::void_t<decltype(Policy::apply(
367
- RequireUsableKey<typename Policy::key_type, Hash, Eq>(),
368
- std::declval<Ts>()...))>,
369
- Policy, Hash, Eq, Ts...> : std::true_type {};
370
-
371
- ABSL_DLL extern ctrl_t kDefaultIterControl;
372
-
373
- // We use these sentinel capacity values in debug mode to indicate different
374
- // classes of bugs.
375
- enum InvalidCapacity : size_t {
376
- kAboveMaxValidCapacity = ~size_t{} - 100,
377
- kReentrance,
378
- kDestroyed,
379
-
380
- // These two must be last because we use `>= kMovedFrom` to mean moved-from.
381
- kMovedFrom,
382
- kSelfMovedFrom,
383
- };
384
-
385
- // Returns a pointer to a control byte that can be used by default-constructed
386
- // iterators. We don't expect this pointer to be dereferenced.
387
- inline ctrl_t* DefaultIterControl() { return &kDefaultIterControl; }
388
-
389
- // For use in SOO iterators.
390
- // TODO(b/289225379): we could potentially get rid of this by adding an is_soo
391
- // bit in iterators. This would add branches but reduce cache misses.
392
- ABSL_DLL extern const ctrl_t kSooControl[2];
393
-
394
- // Returns a pointer to a full byte followed by a sentinel byte.
395
- inline ctrl_t* SooControl() {
396
- // Const must be cast away here; no uses of this function will actually write
397
- // to it because it is only used for SOO iterators.
398
- return const_cast<ctrl_t*>(kSooControl);
399
- }
400
- // Whether ctrl is from the SooControl array.
401
- inline bool IsSooControl(const ctrl_t* ctrl) { return ctrl == SooControl(); }
402
-
403
- // Returns a pointer to a generation to use for an empty hashtable.
404
- GenerationType* EmptyGeneration();
405
-
406
- // Returns whether `generation` is a generation for an empty hashtable that
407
- // could be returned by EmptyGeneration().
408
- inline bool IsEmptyGeneration(const GenerationType* generation) {
409
- return *generation == SentinelEmptyGeneration();
410
- }
411
-
412
- // We only allow a maximum of 1 SOO element, which makes the implementation
413
- // much simpler. Complications with multiple SOO elements include:
414
- // - Satisfying the guarantee that erasing one element doesn't invalidate
415
- // iterators to other elements means we would probably need actual SOO
416
- // control bytes.
417
- // - In order to prevent user code from depending on iteration order for small
418
- // tables, we would need to randomize the iteration order somehow.
419
- constexpr size_t SooCapacity() { return 1; }
420
- // Sentinel type to indicate SOO CommonFields construction.
421
- struct soo_tag_t {};
422
- // Sentinel type to indicate SOO CommonFields construction with full size.
423
- struct full_soo_tag_t {};
424
- // Sentinel type to indicate non-SOO CommonFields construction.
425
- struct non_soo_tag_t {};
426
- // Sentinel value to indicate an uninitialized value explicitly.
427
- struct uninitialized_tag_t {};
428
- // Sentinel value to indicate creation of an empty table without a seed.
429
- struct no_seed_empty_tag_t {};
430
-
431
- // Per table hash salt. This gets mixed into H1 to randomize iteration order
432
- // per-table.
433
- // The seed is needed to ensure non-determinism of iteration order.
434
- class PerTableSeed {
435
- public:
436
- // The number of bits in the seed.
437
- // It is big enough to ensure non-determinism of iteration order.
438
- // We store the seed inside a uint64_t together with size and other metadata.
439
- // Using 16 bits allows us to save one `and` instruction in H1 (we use
440
- // sign-extended move instead of mov+and).
441
- static constexpr size_t kBitCount = 16;
442
- static constexpr size_t kSignBit = uint64_t{1} << (kBitCount - 1);
443
-
444
- // Returns the seed for the table.
445
- size_t seed() const {
446
- // We use a sign-extended load to ensure high bits are non-zero.
447
- int16_t seed_signed = absl::bit_cast<int16_t>(seed_);
448
- auto seed_sign_extended =
449
- static_cast<std::make_signed_t<size_t>>(seed_signed);
450
- return absl::bit_cast<size_t>(seed_sign_extended);
451
- }
452
-
453
- private:
454
- friend class HashtableSize;
455
- explicit PerTableSeed(uint16_t seed) : seed_(seed) {
456
- ABSL_SWISSTABLE_ASSERT((seed & kSignBit) != 0 || seed == 0);
457
- }
458
-
459
- // The most significant bit of the seed is always 1 when there is a non-zero
460
- // seed. This way, when sign-extended the seed has non-zero high bits.
461
- const uint16_t seed_;
462
- };
463
-
464
- // The size and also has additionally
465
- // 1) one bit that stores whether we have infoz.
466
- // 2) PerTableSeed::kBitCount bits for the seed.
467
- class HashtableSize {
468
- public:
469
- static constexpr size_t kSizeBitCount = 64 - PerTableSeed::kBitCount - 1;
470
-
471
- explicit HashtableSize(uninitialized_tag_t) {}
472
- explicit HashtableSize(no_seed_empty_tag_t) : data_(0) {}
473
- explicit HashtableSize(full_soo_tag_t) : data_(kSizeOneNoMetadata) {}
474
-
475
- // Returns actual size of the table.
476
- size_t size() const { return static_cast<size_t>(data_ >> kSizeShift); }
477
- void increment_size() { data_ += kSizeOneNoMetadata; }
478
- void increment_size(size_t size) {
479
- data_ += static_cast<uint64_t>(size) * kSizeOneNoMetadata;
480
- }
481
- void decrement_size() { data_ -= kSizeOneNoMetadata; }
482
- // Returns true if the table is empty.
483
- bool empty() const { return data_ < kSizeOneNoMetadata; }
484
- // Sets the size to zero, but keeps all the metadata bits.
485
- void set_size_to_zero_keep_metadata() { data_ = data_ & kMetadataMask; }
486
-
487
- PerTableSeed seed() const {
488
- return PerTableSeed(static_cast<size_t>(data_) & kSeedMask);
489
- }
490
-
491
- void generate_new_seed() { set_seed(NextSeed()); }
492
-
493
- // We need to use a constant seed when the table is sampled so that sampled
494
- // hashes use the same seed and can e.g. identify stuck bits accurately.
495
- void set_sampled_seed() { set_seed(PerTableSeed::kSignBit); }
496
-
497
- bool is_sampled_seed() const {
498
- return (data_ & kSeedMask) == PerTableSeed::kSignBit;
499
- }
500
-
501
- // Returns true if the table has infoz.
502
- bool has_infoz() const {
503
- return ABSL_PREDICT_FALSE((data_ & kHasInfozMask) != 0);
504
- }
505
-
506
- // Sets the has_infoz bit.
507
- void set_has_infoz() { data_ |= kHasInfozMask; }
508
-
509
- void set_no_seed_for_testing() { data_ &= ~kSeedMask; }
510
-
511
- // Returns next per-table seed.
512
- static uint16_t NextSeed();
513
-
514
- private:
515
- void set_seed(uint16_t seed) {
516
- data_ = (data_ & ~kSeedMask) | (seed | PerTableSeed::kSignBit);
517
- }
518
- static constexpr size_t kSizeShift = 64 - kSizeBitCount;
519
- static constexpr uint64_t kSizeOneNoMetadata = uint64_t{1} << kSizeShift;
520
- static constexpr uint64_t kMetadataMask = kSizeOneNoMetadata - 1;
521
- static constexpr uint64_t kSeedMask =
522
- (uint64_t{1} << PerTableSeed::kBitCount) - 1;
523
- // The next bit after the seed.
524
- static constexpr uint64_t kHasInfozMask = kSeedMask + 1;
525
- uint64_t data_;
526
- };
527
-
528
- // H1 is just the low bits of the hash.
529
- inline size_t H1(size_t hash) { return hash; }
530
-
531
- // Extracts the H2 portion of a hash: the 7 most significant bits.
532
- //
533
- // These are used as an occupied control byte.
534
- inline h2_t H2(size_t hash) { return hash >> (sizeof(size_t) * 8 - 7); }
535
-
536
- // When there is an insertion with no reserved growth, we rehash with
537
- // probability `min(1, RehashProbabilityConstant() / capacity())`. Using a
538
- // constant divided by capacity ensures that inserting N elements is still O(N)
539
- // in the average case. Using the constant 16 means that we expect to rehash ~8
540
- // times more often than when generations are disabled. We are adding expected
541
- // rehash_probability * #insertions/capacity_growth = 16/capacity * ((7/8 -
542
- // 7/16) * capacity)/capacity_growth = ~7 extra rehashes per capacity growth.
543
- inline size_t RehashProbabilityConstant() { return 16; }
544
-
545
- class CommonFieldsGenerationInfoEnabled {
546
- // A sentinel value for reserved_growth_ indicating that we just ran out of
547
- // reserved growth on the last insertion. When reserve is called and then
548
- // insertions take place, reserved_growth_'s state machine is N, ..., 1,
549
- // kReservedGrowthJustRanOut, 0.
550
- static constexpr size_t kReservedGrowthJustRanOut =
551
- (std::numeric_limits<size_t>::max)();
552
-
553
- public:
554
- CommonFieldsGenerationInfoEnabled() = default;
555
- CommonFieldsGenerationInfoEnabled(CommonFieldsGenerationInfoEnabled&& that)
556
- : reserved_growth_(that.reserved_growth_),
557
- reservation_size_(that.reservation_size_),
558
- generation_(that.generation_) {
559
- that.reserved_growth_ = 0;
560
- that.reservation_size_ = 0;
561
- that.generation_ = EmptyGeneration();
562
- }
563
- CommonFieldsGenerationInfoEnabled& operator=(
564
- CommonFieldsGenerationInfoEnabled&&) = default;
565
-
566
- // Whether we should rehash on insert in order to detect bugs of using invalid
567
- // references. We rehash on the first insertion after reserved_growth_ reaches
568
- // 0 after a call to reserve. We also do a rehash with low probability
569
- // whenever reserved_growth_ is zero.
570
- bool should_rehash_for_bug_detection_on_insert(size_t capacity) const;
571
- // Similar to above, except that we don't depend on reserved_growth_.
572
- bool should_rehash_for_bug_detection_on_move(size_t capacity) const;
573
- void maybe_increment_generation_on_insert() {
574
- if (reserved_growth_ == kReservedGrowthJustRanOut) reserved_growth_ = 0;
575
-
576
- if (reserved_growth_ > 0) {
577
- if (--reserved_growth_ == 0) reserved_growth_ = kReservedGrowthJustRanOut;
578
- } else {
579
- increment_generation();
580
- }
581
- }
582
- void increment_generation() { *generation_ = NextGeneration(*generation_); }
583
- void reset_reserved_growth(size_t reservation, size_t size) {
584
- reserved_growth_ = reservation - size;
585
- }
586
- size_t reserved_growth() const { return reserved_growth_; }
587
- void set_reserved_growth(size_t r) { reserved_growth_ = r; }
588
- size_t reservation_size() const { return reservation_size_; }
589
- void set_reservation_size(size_t r) { reservation_size_ = r; }
590
- GenerationType generation() const { return *generation_; }
591
- void set_generation(GenerationType g) { *generation_ = g; }
592
- GenerationType* generation_ptr() const { return generation_; }
593
- void set_generation_ptr(GenerationType* g) { generation_ = g; }
594
-
595
- private:
596
- // The number of insertions remaining that are guaranteed to not rehash due to
597
- // a prior call to reserve. Note: we store reserved growth in addition to
598
- // reservation size because calls to erase() decrease size_ but don't decrease
599
- // reserved growth.
600
- size_t reserved_growth_ = 0;
601
- // The maximum argument to reserve() since the container was cleared. We need
602
- // to keep track of this, in addition to reserved growth, because we reset
603
- // reserved growth to this when erase(begin(), end()) is called.
604
- size_t reservation_size_ = 0;
605
- // Pointer to the generation counter, which is used to validate iterators and
606
- // is stored in the backing array between the control bytes and the slots.
607
- // Note that we can't store the generation inside the container itself and
608
- // keep a pointer to the container in the iterators because iterators must
609
- // remain valid when the container is moved.
610
- // Note: we could derive this pointer from the control pointer, but it makes
611
- // the code more complicated, and there's a benefit in having the sizes of
612
- // raw_hash_set in sanitizer mode and non-sanitizer mode a bit more different,
613
- // which is that tests are less likely to rely on the size remaining the same.
614
- GenerationType* generation_ = EmptyGeneration();
615
- };
616
-
617
- class CommonFieldsGenerationInfoDisabled {
618
- public:
619
- CommonFieldsGenerationInfoDisabled() = default;
620
- CommonFieldsGenerationInfoDisabled(CommonFieldsGenerationInfoDisabled&&) =
621
- default;
622
- CommonFieldsGenerationInfoDisabled& operator=(
623
- CommonFieldsGenerationInfoDisabled&&) = default;
624
-
625
- bool should_rehash_for_bug_detection_on_insert(size_t) const { return false; }
626
- bool should_rehash_for_bug_detection_on_move(size_t) const { return false; }
627
- void maybe_increment_generation_on_insert() {}
628
- void increment_generation() {}
629
- void reset_reserved_growth(size_t, size_t) {}
630
- size_t reserved_growth() const { return 0; }
631
- void set_reserved_growth(size_t) {}
632
- size_t reservation_size() const { return 0; }
633
- void set_reservation_size(size_t) {}
634
- GenerationType generation() const { return 0; }
635
- void set_generation(GenerationType) {}
636
- GenerationType* generation_ptr() const { return nullptr; }
637
- void set_generation_ptr(GenerationType*) {}
638
- };
639
-
640
- class HashSetIteratorGenerationInfoEnabled {
641
- public:
642
- HashSetIteratorGenerationInfoEnabled() = default;
643
- explicit HashSetIteratorGenerationInfoEnabled(
644
- const GenerationType* generation_ptr)
645
- : generation_ptr_(generation_ptr), generation_(*generation_ptr) {}
646
-
647
- GenerationType generation() const { return generation_; }
648
- void reset_generation() { generation_ = *generation_ptr_; }
649
- const GenerationType* generation_ptr() const { return generation_ptr_; }
650
- void set_generation_ptr(const GenerationType* ptr) { generation_ptr_ = ptr; }
651
-
652
- private:
653
- const GenerationType* generation_ptr_ = EmptyGeneration();
654
- GenerationType generation_ = *generation_ptr_;
655
- };
656
-
657
- class HashSetIteratorGenerationInfoDisabled {
658
- public:
659
- HashSetIteratorGenerationInfoDisabled() = default;
660
- explicit HashSetIteratorGenerationInfoDisabled(const GenerationType*) {}
661
-
662
- GenerationType generation() const { return 0; }
663
- void reset_generation() {}
664
- const GenerationType* generation_ptr() const { return nullptr; }
665
- void set_generation_ptr(const GenerationType*) {}
666
- };
667
-
668
- #ifdef ABSL_SWISSTABLE_ENABLE_GENERATIONS
669
- using CommonFieldsGenerationInfo = CommonFieldsGenerationInfoEnabled;
670
- using HashSetIteratorGenerationInfo = HashSetIteratorGenerationInfoEnabled;
671
- #else
672
- using CommonFieldsGenerationInfo = CommonFieldsGenerationInfoDisabled;
673
- using HashSetIteratorGenerationInfo = HashSetIteratorGenerationInfoDisabled;
674
- #endif
675
-
676
- // Stored the information regarding number of slots we can still fill
677
- // without needing to rehash.
678
- //
679
- // We want to ensure sufficient number of empty slots in the table in order
680
- // to keep probe sequences relatively short. Empty slot in the probe group
681
- // is required to stop probing.
682
- //
683
- // Tombstones (kDeleted slots) are not included in the growth capacity,
684
- // because we'd like to rehash when the table is filled with tombstones and/or
685
- // full slots.
686
- //
687
- // GrowthInfo also stores a bit that encodes whether table may have any
688
- // deleted slots.
689
- // Most of the tables (>95%) have no deleted slots, so some functions can
690
- // be more efficient with this information.
691
- //
692
- // Callers can also force a rehash via the standard `rehash(0)`,
693
- // which will recompute this value as a side-effect.
694
- //
695
- // See also `CapacityToGrowth()`.
696
- class GrowthInfo {
697
- public:
698
- // Leaves data member uninitialized.
699
- GrowthInfo() = default;
700
-
701
- // Initializes the GrowthInfo assuming we can grow `growth_left` elements
702
- // and there are no kDeleted slots in the table.
703
- void InitGrowthLeftNoDeleted(size_t growth_left) {
704
- growth_left_info_ = growth_left;
705
- }
706
-
707
- // Overwrites single full slot with an empty slot.
708
- void OverwriteFullAsEmpty() { ++growth_left_info_; }
709
-
710
- // Overwrites single empty slot with a full slot.
711
- void OverwriteEmptyAsFull() {
712
- ABSL_SWISSTABLE_ASSERT(GetGrowthLeft() > 0);
713
- --growth_left_info_;
714
- }
715
-
716
- // Overwrites several empty slots with full slots.
717
- void OverwriteManyEmptyAsFull(size_t count) {
718
- ABSL_SWISSTABLE_ASSERT(GetGrowthLeft() >= count);
719
- growth_left_info_ -= count;
720
- }
721
-
722
- // Overwrites specified control element with full slot.
723
- void OverwriteControlAsFull(ctrl_t ctrl) {
724
- ABSL_SWISSTABLE_ASSERT(GetGrowthLeft() >=
725
- static_cast<size_t>(IsEmpty(ctrl)));
726
- growth_left_info_ -= static_cast<size_t>(IsEmpty(ctrl));
727
- }
728
-
729
- // Overwrites single full slot with a deleted slot.
730
- void OverwriteFullAsDeleted() { growth_left_info_ |= kDeletedBit; }
731
-
732
- // Returns true if table satisfies two properties:
733
- // 1. Guaranteed to have no kDeleted slots.
734
- // 2. There is a place for at least one element to grow.
735
- bool HasNoDeletedAndGrowthLeft() const {
736
- return static_cast<std::make_signed_t<size_t>>(growth_left_info_) > 0;
737
- }
738
-
739
- // Returns true if the table satisfies two properties:
740
- // 1. Guaranteed to have no kDeleted slots.
741
- // 2. There is no growth left.
742
- bool HasNoGrowthLeftAndNoDeleted() const { return growth_left_info_ == 0; }
743
-
744
- // Returns true if GetGrowthLeft() == 0, but must be called only if
745
- // HasNoDeleted() is false. It is slightly more efficient.
746
- bool HasNoGrowthLeftAssumingMayHaveDeleted() const {
747
- ABSL_SWISSTABLE_ASSERT(!HasNoDeleted());
748
- return growth_left_info_ == kDeletedBit;
749
- }
750
-
751
- // Returns true if table guaranteed to have no kDeleted slots.
752
- bool HasNoDeleted() const {
753
- return static_cast<std::make_signed_t<size_t>>(growth_left_info_) >= 0;
754
- }
755
-
756
- // Returns the number of elements left to grow.
757
- size_t GetGrowthLeft() const { return growth_left_info_ & kGrowthLeftMask; }
758
-
759
- private:
760
- static constexpr size_t kGrowthLeftMask = ((~size_t{}) >> 1);
761
- static constexpr size_t kDeletedBit = ~kGrowthLeftMask;
762
- // Topmost bit signal whenever there are deleted slots.
763
- size_t growth_left_info_;
764
- };
765
-
766
- static_assert(sizeof(GrowthInfo) == sizeof(size_t), "");
767
- static_assert(alignof(GrowthInfo) == alignof(size_t), "");
768
-
769
- // Returns whether `n` is a valid capacity (i.e., number of slots).
770
- //
771
- // A valid capacity is a non-zero integer `2^m - 1`.
772
- constexpr bool IsValidCapacity(size_t n) { return ((n + 1) & n) == 0 && n > 0; }
773
-
774
- // Whether a table is small enough that we don't need to hash any keys.
775
- constexpr bool IsSmallCapacity(size_t capacity) { return capacity <= 1; }
776
-
777
- // Returns the number of "cloned control bytes".
778
- //
779
- // This is the number of control bytes that are present both at the beginning
780
- // of the control byte array and at the end, such that we can create a
781
- // `Group::kWidth`-width probe window starting from any control byte.
782
- constexpr size_t NumClonedBytes() { return Group::kWidth - 1; }
783
-
784
- // Returns the number of control bytes including cloned.
785
- constexpr size_t NumControlBytes(size_t capacity) {
786
- return IsSmallCapacity(capacity) ? 0 : capacity + 1 + NumClonedBytes();
787
- }
788
-
789
- // Computes the offset from the start of the backing allocation of control.
790
- // infoz and growth_info are stored at the beginning of the backing array.
791
- constexpr size_t ControlOffset(bool has_infoz) {
792
- return (has_infoz ? sizeof(HashtablezInfoHandle) : 0) + sizeof(GrowthInfo);
793
- }
794
-
795
- // Returns the offset of the next item after `offset` that is aligned to `align`
796
- // bytes. `align` must be a power of two.
797
- constexpr size_t AlignUpTo(size_t offset, size_t align) {
798
- return (offset + align - 1) & (~align + 1);
799
- }
800
-
801
- // Helper class for computing offsets and allocation size of hash set fields.
802
- class RawHashSetLayout {
803
- public:
804
- // TODO(b/413062340): maybe don't allocate growth info for capacity 1 tables.
805
- // Doing so may require additional branches/complexity so it might not be
806
- // worth it.
807
- explicit RawHashSetLayout(size_t capacity, size_t slot_size,
808
- size_t slot_align, bool has_infoz)
809
- : control_offset_(ControlOffset(has_infoz)),
810
- generation_offset_(control_offset_ + NumControlBytes(capacity)),
811
- slot_offset_(
812
- AlignUpTo(generation_offset_ + NumGenerationBytes(), slot_align)),
813
- alloc_size_(slot_offset_ + capacity * slot_size) {
814
- ABSL_SWISSTABLE_ASSERT(IsValidCapacity(capacity));
815
- ABSL_SWISSTABLE_ASSERT(
816
- slot_size <=
817
- ((std::numeric_limits<size_t>::max)() - slot_offset_) / capacity);
818
- }
819
-
820
- // Returns precomputed offset from the start of the backing allocation of
821
- // control.
822
- size_t control_offset() const { return control_offset_; }
823
-
824
- // Given the capacity of a table, computes the offset (from the start of the
825
- // backing allocation) of the generation counter (if it exists).
826
- size_t generation_offset() const { return generation_offset_; }
827
-
828
- // Given the capacity of a table, computes the offset (from the start of the
829
- // backing allocation) at which the slots begin.
830
- size_t slot_offset() const { return slot_offset_; }
831
-
832
- // Given the capacity of a table, computes the total size of the backing
833
- // array.
834
- size_t alloc_size() const { return alloc_size_; }
835
-
836
- private:
837
- size_t control_offset_;
838
- size_t generation_offset_;
839
- size_t slot_offset_;
840
- size_t alloc_size_;
841
- };
842
-
843
- struct HashtableFreeFunctionsAccess;
844
-
845
- // This allows us to work around an uninitialized memory warning when
846
- // constructing begin() iterators in empty hashtables.
847
- template <typename T>
848
- union MaybeInitializedPtr {
849
- T* get() const { ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(p); }
850
- void set(T* ptr) { p = ptr; }
851
-
852
- T* p;
853
- };
854
-
855
- struct HeapPtrs {
856
- // The control bytes (and, also, a pointer near to the base of the backing
857
- // array).
858
- //
859
- // This contains `capacity + 1 + NumClonedBytes()` entries.
860
- //
861
- // Note that growth_info is stored immediately before this pointer.
862
- // May be uninitialized for small tables.
863
- MaybeInitializedPtr<ctrl_t> control;
864
-
865
- // The beginning of the slots, located at `SlotOffset()` bytes after
866
- // `control`. May be uninitialized for empty tables.
867
- // Note: we can't use `slots` because Qt defines "slots" as a macro.
868
- MaybeInitializedPtr<void> slot_array;
869
- };
870
-
871
- // Returns the maximum size of the SOO slot.
872
- constexpr size_t MaxSooSlotSize() { return sizeof(HeapPtrs); }
873
-
874
- // Manages the backing array pointers or the SOO slot. When raw_hash_set::is_soo
875
- // is true, the SOO slot is stored in `soo_data`. Otherwise, we use `heap`.
876
- union HeapOrSoo {
877
- MaybeInitializedPtr<ctrl_t>& control() {
878
- ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(heap.control);
879
- }
880
- MaybeInitializedPtr<ctrl_t> control() const {
881
- ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(heap.control);
882
- }
883
- MaybeInitializedPtr<void>& slot_array() {
884
- ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(heap.slot_array);
885
- }
886
- MaybeInitializedPtr<void> slot_array() const {
887
- ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(heap.slot_array);
888
- }
889
- void* get_soo_data() {
890
- ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(soo_data);
891
- }
892
- const void* get_soo_data() const {
893
- ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(soo_data);
894
- }
895
-
896
- HeapPtrs heap;
897
- unsigned char soo_data[MaxSooSlotSize()];
898
- };
899
-
900
- // Returns a reference to the GrowthInfo object stored immediately before
901
- // `control`.
902
- inline GrowthInfo& GetGrowthInfoFromControl(ctrl_t* control) {
903
- auto* gl_ptr = reinterpret_cast<GrowthInfo*>(control) - 1;
904
- ABSL_SWISSTABLE_ASSERT(
905
- reinterpret_cast<uintptr_t>(gl_ptr) % alignof(GrowthInfo) == 0);
906
- return *gl_ptr;
907
- }
908
-
909
- // CommonFields hold the fields in raw_hash_set that do not depend
910
- // on template parameters. This allows us to conveniently pass all
911
- // of this state to helper functions as a single argument.
912
- class CommonFields : public CommonFieldsGenerationInfo {
913
- public:
914
- explicit CommonFields(soo_tag_t)
915
- : capacity_(SooCapacity()), size_(no_seed_empty_tag_t{}) {}
916
- explicit CommonFields(full_soo_tag_t)
917
- : capacity_(SooCapacity()), size_(full_soo_tag_t{}) {}
918
- explicit CommonFields(non_soo_tag_t)
919
- : capacity_(0), size_(no_seed_empty_tag_t{}) {}
920
- // For use in swapping.
921
- explicit CommonFields(uninitialized_tag_t) : size_(uninitialized_tag_t{}) {}
922
-
923
- // Not copyable
924
- CommonFields(const CommonFields&) = delete;
925
- CommonFields& operator=(const CommonFields&) = delete;
926
-
927
- // Copy with guarantee that it is not SOO.
928
- CommonFields(non_soo_tag_t, const CommonFields& that)
929
- : capacity_(that.capacity_),
930
- size_(that.size_),
931
- heap_or_soo_(that.heap_or_soo_) {
932
- }
933
-
934
- // Movable
935
- CommonFields(CommonFields&& that) = default;
936
- CommonFields& operator=(CommonFields&&) = default;
937
-
938
- template <bool kSooEnabled>
939
- static CommonFields CreateDefault() {
940
- return kSooEnabled ? CommonFields{soo_tag_t{}}
941
- : CommonFields{non_soo_tag_t{}};
942
- }
943
-
944
- // The inline data for SOO is written on top of control_/slots_.
945
- const void* soo_data() const { return heap_or_soo_.get_soo_data(); }
946
- void* soo_data() { return heap_or_soo_.get_soo_data(); }
947
-
948
- ctrl_t* control() const {
949
- ABSL_SWISSTABLE_ASSERT(capacity() > 0);
950
- // Assume that the control bytes don't alias `this`.
951
- ctrl_t* ctrl = heap_or_soo_.control().get();
952
- [[maybe_unused]] size_t num_control_bytes = NumControlBytes(capacity());
953
- ABSL_ASSUME(reinterpret_cast<uintptr_t>(ctrl + num_control_bytes) <=
954
- reinterpret_cast<uintptr_t>(this) ||
955
- reinterpret_cast<uintptr_t>(this + 1) <=
956
- reinterpret_cast<uintptr_t>(ctrl));
957
- ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(ctrl);
958
- }
959
-
960
- void set_control(ctrl_t* c) { heap_or_soo_.control().set(c); }
961
-
962
- // Note: we can't use slots() because Qt defines "slots" as a macro.
963
- void* slot_array() const { return heap_or_soo_.slot_array().get(); }
964
- MaybeInitializedPtr<void> slots_union() const {
965
- return heap_or_soo_.slot_array();
966
- }
967
- void set_slots(void* s) { heap_or_soo_.slot_array().set(s); }
968
-
969
- // The number of filled slots.
970
- size_t size() const { return size_.size(); }
971
- // Sets the size to zero, but keeps hashinfoz bit and seed.
972
- void set_size_to_zero() { size_.set_size_to_zero_keep_metadata(); }
973
- void set_empty_soo() {
974
- AssertInSooMode();
975
- size_ = HashtableSize(no_seed_empty_tag_t{});
976
- }
977
- void set_full_soo() {
978
- AssertInSooMode();
979
- size_ = HashtableSize(full_soo_tag_t{});
980
- }
981
- void increment_size() {
982
- ABSL_SWISSTABLE_ASSERT(size() < capacity());
983
- size_.increment_size();
984
- }
985
- void increment_size(size_t n) {
986
- ABSL_SWISSTABLE_ASSERT(size() + n <= capacity());
987
- size_.increment_size(n);
988
- }
989
- void decrement_size() {
990
- ABSL_SWISSTABLE_ASSERT(!empty());
991
- size_.decrement_size();
992
- }
993
- bool empty() const { return size_.empty(); }
994
-
995
- // The seed used for the hash function.
996
- PerTableSeed seed() const { return size_.seed(); }
997
- // Generates a new seed the hash function.
998
- // The table will be invalidated if `!empty()` because hash is being changed.
999
- // In such cases, we will need to rehash the table.
1000
- void generate_new_seed(bool has_infoz) {
1001
- // Note: we can't use has_infoz() here because we set has_infoz later than
1002
- // we generate the seed.
1003
- if (ABSL_PREDICT_FALSE(has_infoz)) {
1004
- size_.set_sampled_seed();
1005
- return;
1006
- }
1007
- size_.generate_new_seed();
1008
- }
1009
- void set_no_seed_for_testing() { size_.set_no_seed_for_testing(); }
1010
-
1011
- // The total number of available slots.
1012
- size_t capacity() const { return capacity_; }
1013
- void set_capacity(size_t c) {
1014
- // We allow setting above the max valid capacity for debugging purposes.
1015
- ABSL_SWISSTABLE_ASSERT(c == 0 || IsValidCapacity(c) ||
1016
- c > kAboveMaxValidCapacity);
1017
- capacity_ = c;
1018
- }
1019
- bool is_small() const { return IsSmallCapacity(capacity_); }
1020
-
1021
- // The number of slots we can still fill without needing to rehash.
1022
- // This is stored in the heap allocation before the control bytes.
1023
- // TODO(b/289225379): experiment with moving growth_info back inline to
1024
- // increase room for SOO.
1025
- size_t growth_left() const { return growth_info().GetGrowthLeft(); }
1026
-
1027
- GrowthInfo& growth_info() {
1028
- ABSL_SWISSTABLE_ASSERT(!is_small());
1029
- return GetGrowthInfoFromControl(control());
1030
- }
1031
- GrowthInfo growth_info() const {
1032
- return const_cast<CommonFields*>(this)->growth_info();
1033
- }
1034
-
1035
- bool has_infoz() const { return size_.has_infoz(); }
1036
- void set_has_infoz() {
1037
- ABSL_SWISSTABLE_ASSERT(size_.is_sampled_seed());
1038
- size_.set_has_infoz();
1039
- }
1040
-
1041
- HashtablezInfoHandle* infoz_ptr() const {
1042
- // growth_info is stored before control bytes.
1043
- ABSL_SWISSTABLE_ASSERT(
1044
- reinterpret_cast<uintptr_t>(control()) % alignof(size_t) == 0);
1045
- ABSL_SWISSTABLE_ASSERT(has_infoz());
1046
- return reinterpret_cast<HashtablezInfoHandle*>(
1047
- control() - ControlOffset(/*has_infoz=*/true));
1048
- }
1049
-
1050
- HashtablezInfoHandle infoz() {
1051
- return has_infoz() ? *infoz_ptr() : HashtablezInfoHandle();
1052
- }
1053
- void set_infoz(HashtablezInfoHandle infoz) {
1054
- ABSL_SWISSTABLE_ASSERT(has_infoz());
1055
- *infoz_ptr() = infoz;
1056
- }
1057
-
1058
- bool should_rehash_for_bug_detection_on_insert() const {
1059
- if constexpr (!SwisstableGenerationsEnabled()) {
1060
- return false;
1061
- }
1062
- // As an optimization, we avoid calling ShouldRehashForBugDetection if we
1063
- // will end up rehashing anyways.
1064
- if (growth_left() == 0) return false;
1065
- return CommonFieldsGenerationInfo::
1066
- should_rehash_for_bug_detection_on_insert(capacity());
1067
- }
1068
- bool should_rehash_for_bug_detection_on_move() const {
1069
- return CommonFieldsGenerationInfo::should_rehash_for_bug_detection_on_move(
1070
- capacity());
1071
- }
1072
- void reset_reserved_growth(size_t reservation) {
1073
- CommonFieldsGenerationInfo::reset_reserved_growth(reservation, size());
1074
- }
1075
-
1076
- // The size of the backing array allocation.
1077
- size_t alloc_size(size_t slot_size, size_t slot_align) const {
1078
- return RawHashSetLayout(capacity(), slot_size, slot_align, has_infoz())
1079
- .alloc_size();
1080
- }
1081
-
1082
- // Move fields other than heap_or_soo_.
1083
- void move_non_heap_or_soo_fields(CommonFields& that) {
1084
- static_cast<CommonFieldsGenerationInfo&>(*this) =
1085
- std::move(static_cast<CommonFieldsGenerationInfo&>(that));
1086
- capacity_ = that.capacity_;
1087
- size_ = that.size_;
1088
- }
1089
-
1090
- // Returns the number of control bytes set to kDeleted. For testing only.
1091
- size_t TombstonesCount() const {
1092
- return static_cast<size_t>(
1093
- std::count(control(), control() + capacity(), ctrl_t::kDeleted));
1094
- }
1095
-
1096
- // Helper to enable sanitizer mode validation to protect against reentrant
1097
- // calls during element constructor/destructor.
1098
- template <typename F>
1099
- void RunWithReentrancyGuard(F f) {
1100
- #ifdef NDEBUG
1101
- f();
1102
- return;
1103
- #endif
1104
- const size_t cap = capacity();
1105
- set_capacity(InvalidCapacity::kReentrance);
1106
- f();
1107
- set_capacity(cap);
1108
- }
1109
-
1110
- private:
1111
- // We store the has_infoz bit in the lowest bit of size_.
1112
- static constexpr size_t HasInfozShift() { return 1; }
1113
- static constexpr size_t HasInfozMask() {
1114
- return (size_t{1} << HasInfozShift()) - 1;
1115
- }
1116
-
1117
- // We can't assert that SOO is enabled because we don't have SooEnabled(), but
1118
- // we assert what we can.
1119
- void AssertInSooMode() const {
1120
- ABSL_SWISSTABLE_ASSERT(capacity() == SooCapacity());
1121
- ABSL_SWISSTABLE_ASSERT(!has_infoz());
1122
- }
1123
-
1124
- // The number of slots in the backing array. This is always 2^N-1 for an
1125
- // integer N. NOTE: we tried experimenting with compressing the capacity and
1126
- // storing it together with size_: (a) using 6 bits to store the corresponding
1127
- // power (N in 2^N-1), and (b) storing 2^N as the most significant bit of
1128
- // size_ and storing size in the low bits. Both of these experiments were
1129
- // regressions, presumably because we need capacity to do find operations.
1130
- size_t capacity_;
1131
-
1132
- // TODO(b/289225379): we could put size_ into HeapOrSoo and make capacity_
1133
- // encode the size in SOO case. We would be making size()/capacity() more
1134
- // expensive in order to have more SOO space.
1135
- HashtableSize size_;
1136
-
1137
- // Either the control/slots pointers or the SOO slot.
1138
- HeapOrSoo heap_or_soo_;
1139
- };
1140
-
1141
- template <class Policy, class... Params>
1142
- class raw_hash_set;
1143
-
1144
- // Returns the next valid capacity after `n`.
1145
- constexpr size_t NextCapacity(size_t n) {
1146
- ABSL_SWISSTABLE_ASSERT(IsValidCapacity(n) || n == 0);
1147
- return n * 2 + 1;
1148
- }
1149
-
1150
- // Returns the previous valid capacity before `n`.
1151
- constexpr size_t PreviousCapacity(size_t n) {
1152
- ABSL_SWISSTABLE_ASSERT(IsValidCapacity(n));
1153
- return n / 2;
1154
- }
1155
-
1156
- // Applies the following mapping to every byte in the control array:
1157
- // * kDeleted -> kEmpty
1158
- // * kEmpty -> kEmpty
1159
- // * _ -> kDeleted
1160
- // PRECONDITION:
1161
- // IsValidCapacity(capacity)
1162
- // ctrl[capacity] == ctrl_t::kSentinel
1163
- // ctrl[i] != ctrl_t::kSentinel for all i < capacity
1164
- void ConvertDeletedToEmptyAndFullToDeleted(ctrl_t* ctrl, size_t capacity);
1165
-
1166
- // Converts `n` into the next valid capacity, per `IsValidCapacity`.
1167
- constexpr size_t NormalizeCapacity(size_t n) {
1168
- return n ? ~size_t{} >> countl_zero(n) : 1;
1169
- }
1170
-
1171
- // General notes on capacity/growth methods below:
1172
- // - We use 7/8th as maximum load factor. For 16-wide groups, that gives an
1173
- // average of two empty slots per group.
1174
- // - For (capacity+1) >= Group::kWidth, growth is 7/8*capacity.
1175
- // - For (capacity+1) < Group::kWidth, growth == capacity. In this case, we
1176
- // never need to probe (the whole table fits in one group) so we don't need a
1177
- // load factor less than 1.
1178
-
1179
- // Given `capacity`, applies the load factor; i.e., it returns the maximum
1180
- // number of values we should put into the table before a resizing rehash.
1181
- constexpr size_t CapacityToGrowth(size_t capacity) {
1182
- ABSL_SWISSTABLE_ASSERT(IsValidCapacity(capacity));
1183
- // `capacity*7/8`
1184
- if (Group::kWidth == 8 && capacity == 7) {
1185
- // x-x/8 does not work when x==7.
1186
- return 6;
1187
- }
1188
- return capacity - capacity / 8;
1189
- }
1190
-
1191
- // Given `size`, "unapplies" the load factor to find how large the capacity
1192
- // should be to stay within the load factor.
1193
- //
1194
- // For size == 0, returns 0.
1195
- // For other values, returns the same as `NormalizeCapacity(size*8/7)`.
1196
- constexpr size_t SizeToCapacity(size_t size) {
1197
- if (size == 0) {
1198
- return 0;
1199
- }
1200
- // The minimum possible capacity is NormalizeCapacity(size).
1201
- // Shifting right `~size_t{}` by `leading_zeros` yields
1202
- // NormalizeCapacity(size).
1203
- int leading_zeros = absl::countl_zero(size);
1204
- constexpr size_t kLast3Bits = size_t{7} << (sizeof(size_t) * 8 - 3);
1205
- // max_size_for_next_capacity = max_load_factor * next_capacity
1206
- // = (7/8) * (~size_t{} >> leading_zeros)
1207
- // = (7/8*~size_t{}) >> leading_zeros
1208
- // = kLast3Bits >> leading_zeros
1209
- size_t max_size_for_next_capacity = kLast3Bits >> leading_zeros;
1210
- // Decrease shift if size is too big for the minimum capacity.
1211
- leading_zeros -= static_cast<int>(size > max_size_for_next_capacity);
1212
- if constexpr (Group::kWidth == 8) {
1213
- // Formula doesn't work when size==7 for 8-wide groups.
1214
- leading_zeros -= (size == 7);
1215
- }
1216
- return (~size_t{}) >> leading_zeros;
1217
- }
1218
-
1219
- template <class InputIter>
1220
- size_t SelectBucketCountForIterRange(InputIter first, InputIter last,
1221
- size_t bucket_count) {
1222
- if (bucket_count != 0) {
1223
- return bucket_count;
1224
- }
1225
- if (base_internal::IsAtLeastIterator<std::random_access_iterator_tag,
1226
- InputIter>()) {
1227
- return SizeToCapacity(static_cast<size_t>(std::distance(first, last)));
1228
- }
1229
- return 0;
1230
- }
1231
-
1232
- constexpr bool SwisstableDebugEnabled() {
1233
- #if defined(ABSL_SWISSTABLE_ENABLE_GENERATIONS) || \
1234
- ABSL_OPTION_HARDENED == 1 || !defined(NDEBUG)
1235
- return true;
1236
- #else
1237
- return false;
1238
- #endif
1239
- }
1240
-
1241
- inline void AssertIsFull(const ctrl_t* ctrl, GenerationType generation,
1242
- const GenerationType* generation_ptr,
1243
- const char* operation) {
1244
- if (!SwisstableDebugEnabled()) return;
1245
- // `SwisstableDebugEnabled()` is also true for release builds with hardening
1246
- // enabled. To minimize their impact in those builds:
1247
- // - use `ABSL_PREDICT_FALSE()` to provide a compiler hint for code layout
1248
- // - use `ABSL_RAW_LOG()` with a format string to reduce code size and improve
1249
- // the chances that the hot paths will be inlined.
1250
- if (ABSL_PREDICT_FALSE(ctrl == nullptr)) {
1251
- ABSL_RAW_LOG(FATAL, "%s called on end() iterator.", operation);
1252
- }
1253
- if (ABSL_PREDICT_FALSE(ctrl == DefaultIterControl())) {
1254
- ABSL_RAW_LOG(FATAL, "%s called on default-constructed iterator.",
1255
- operation);
1256
- }
1257
- if (SwisstableGenerationsEnabled()) {
1258
- if (ABSL_PREDICT_FALSE(generation != *generation_ptr)) {
1259
- ABSL_RAW_LOG(FATAL,
1260
- "%s called on invalid iterator. The table could have "
1261
- "rehashed or moved since this iterator was initialized.",
1262
- operation);
1263
- }
1264
- if (ABSL_PREDICT_FALSE(!IsFull(*ctrl))) {
1265
- ABSL_RAW_LOG(
1266
- FATAL,
1267
- "%s called on invalid iterator. The element was likely erased.",
1268
- operation);
1269
- }
1270
- } else {
1271
- if (ABSL_PREDICT_FALSE(!IsFull(*ctrl))) {
1272
- ABSL_RAW_LOG(
1273
- FATAL,
1274
- "%s called on invalid iterator. The element might have been erased "
1275
- "or the table might have rehashed. Consider running with "
1276
- "--config=asan to diagnose rehashing issues.",
1277
- operation);
1278
- }
1279
- }
1280
- }
1281
-
1282
- // Note that for comparisons, null/end iterators are valid.
1283
- inline void AssertIsValidForComparison(const ctrl_t* ctrl,
1284
- GenerationType generation,
1285
- const GenerationType* generation_ptr) {
1286
- if (!SwisstableDebugEnabled()) return;
1287
- const bool ctrl_is_valid_for_comparison =
1288
- ctrl == nullptr || ctrl == DefaultIterControl() || IsFull(*ctrl);
1289
- if (SwisstableGenerationsEnabled()) {
1290
- if (ABSL_PREDICT_FALSE(generation != *generation_ptr)) {
1291
- ABSL_RAW_LOG(FATAL,
1292
- "Invalid iterator comparison. The table could have rehashed "
1293
- "or moved since this iterator was initialized.");
1294
- }
1295
- if (ABSL_PREDICT_FALSE(!ctrl_is_valid_for_comparison)) {
1296
- ABSL_RAW_LOG(
1297
- FATAL, "Invalid iterator comparison. The element was likely erased.");
1298
- }
1299
- } else {
1300
- ABSL_HARDENING_ASSERT_SLOW(
1301
- ctrl_is_valid_for_comparison &&
1302
- "Invalid iterator comparison. The element might have been erased or "
1303
- "the table might have rehashed. Consider running with --config=asan to "
1304
- "diagnose rehashing issues.");
1305
- }
1306
- }
1307
-
1308
- // If the two iterators come from the same container, then their pointers will
1309
- // interleave such that ctrl_a <= ctrl_b < slot_a <= slot_b or vice/versa.
1310
- // Note: we take slots by reference so that it's not UB if they're uninitialized
1311
- // as long as we don't read them (when ctrl is null).
1312
- inline bool AreItersFromSameContainer(const ctrl_t* ctrl_a,
1313
- const ctrl_t* ctrl_b,
1314
- const void* const& slot_a,
1315
- const void* const& slot_b) {
1316
- // If either control byte is null, then we can't tell.
1317
- if (ctrl_a == nullptr || ctrl_b == nullptr) return true;
1318
- const bool a_is_soo = IsSooControl(ctrl_a);
1319
- if (a_is_soo != IsSooControl(ctrl_b)) return false;
1320
- if (a_is_soo) return slot_a == slot_b;
1321
-
1322
- const void* low_slot = slot_a;
1323
- const void* hi_slot = slot_b;
1324
- if (ctrl_a > ctrl_b) {
1325
- std::swap(ctrl_a, ctrl_b);
1326
- std::swap(low_slot, hi_slot);
1327
- }
1328
- return ctrl_b < low_slot && low_slot <= hi_slot;
1329
- }
1330
-
1331
- // Asserts that two iterators come from the same container.
1332
- // Note: we take slots by reference so that it's not UB if they're uninitialized
1333
- // as long as we don't read them (when ctrl is null).
1334
- inline void AssertSameContainer(const ctrl_t* ctrl_a, const ctrl_t* ctrl_b,
1335
- const void* const& slot_a,
1336
- const void* const& slot_b,
1337
- const GenerationType* generation_ptr_a,
1338
- const GenerationType* generation_ptr_b) {
1339
- if (!SwisstableDebugEnabled()) return;
1340
- // `SwisstableDebugEnabled()` is also true for release builds with hardening
1341
- // enabled. To minimize their impact in those builds:
1342
- // - use `ABSL_PREDICT_FALSE()` to provide a compiler hint for code layout
1343
- // - use `ABSL_RAW_LOG()` with a format string to reduce code size and improve
1344
- // the chances that the hot paths will be inlined.
1345
-
1346
- // fail_if(is_invalid, message) crashes when is_invalid is true and provides
1347
- // an error message based on `message`.
1348
- const auto fail_if = [](bool is_invalid, const char* message) {
1349
- if (ABSL_PREDICT_FALSE(is_invalid)) {
1350
- ABSL_RAW_LOG(FATAL, "Invalid iterator comparison. %s", message);
1351
- }
1352
- };
1353
-
1354
- const bool a_is_default = ctrl_a == DefaultIterControl();
1355
- const bool b_is_default = ctrl_b == DefaultIterControl();
1356
- if (a_is_default && b_is_default) return;
1357
- fail_if(a_is_default != b_is_default,
1358
- "Comparing default-constructed hashtable iterator with a "
1359
- "non-default-constructed hashtable iterator.");
1360
-
1361
- if (SwisstableGenerationsEnabled()) {
1362
- if (ABSL_PREDICT_TRUE(generation_ptr_a == generation_ptr_b)) return;
1363
- const bool a_is_empty = IsEmptyGeneration(generation_ptr_a);
1364
- const bool b_is_empty = IsEmptyGeneration(generation_ptr_b);
1365
- fail_if(a_is_empty != b_is_empty,
1366
- "Comparing an iterator from an empty hashtable with an iterator "
1367
- "from a non-empty hashtable.");
1368
- fail_if(a_is_empty && b_is_empty,
1369
- "Comparing iterators from different empty hashtables.");
1370
-
1371
- const bool a_is_end = ctrl_a == nullptr;
1372
- const bool b_is_end = ctrl_b == nullptr;
1373
- fail_if(a_is_end || b_is_end,
1374
- "Comparing iterator with an end() iterator from a different "
1375
- "hashtable.");
1376
- fail_if(true, "Comparing non-end() iterators from different hashtables.");
1377
- } else {
1378
- ABSL_HARDENING_ASSERT_SLOW(
1379
- AreItersFromSameContainer(ctrl_a, ctrl_b, slot_a, slot_b) &&
1380
- "Invalid iterator comparison. The iterators may be from different "
1381
- "containers or the container might have rehashed or moved. Consider "
1382
- "running with --config=asan to diagnose issues.");
1383
- }
1384
- }
1385
-
1386
- struct FindInfo {
1387
- size_t offset;
1388
- size_t probe_length;
1389
- };
1390
-
1391
- // Whether a table fits entirely into a probing group.
1392
- // Arbitrary order of elements in such tables is correct.
1393
- constexpr bool is_single_group(size_t capacity) {
1394
- return capacity <= Group::kWidth;
1395
- }
1396
-
1397
- // Begins a probing operation on `common.control`, using `hash`.
1398
- inline probe_seq<Group::kWidth> probe_h1(size_t capacity, size_t h1) {
1399
- return probe_seq<Group::kWidth>(h1, capacity);
1400
- }
1401
- inline probe_seq<Group::kWidth> probe(size_t capacity, size_t hash) {
1402
- return probe_h1(capacity, H1(hash));
1403
- }
1404
- inline probe_seq<Group::kWidth> probe(const CommonFields& common, size_t hash) {
1405
- return probe(common.capacity(), hash);
1406
- }
1407
-
1408
- constexpr size_t kProbedElementIndexSentinel = ~size_t{};
1409
-
1410
- // Implementation detail of transfer_unprobed_elements_to_next_capacity_fn.
1411
- // Tries to find the new index for an element whose hash corresponds to
1412
- // `h1` for growth to the next capacity.
1413
- // Returns kProbedElementIndexSentinel if full probing is required.
1414
- //
1415
- // If element is located in the first probing group in the table before growth,
1416
- // returns one of two positions: `old_index` or `old_index + old_capacity + 1`.
1417
- //
1418
- // Otherwise, we will try to insert it into the first probe group of the new
1419
- // table. We only attempt to do so if the first probe group is already
1420
- // initialized.
1421
- template <typename = void>
1422
- inline size_t TryFindNewIndexWithoutProbing(size_t h1, size_t old_index,
1423
- size_t old_capacity,
1424
- ctrl_t* new_ctrl,
1425
- size_t new_capacity) {
1426
- size_t index_diff = old_index - h1;
1427
- // The first probe group starts with h1 & capacity.
1428
- // All following groups start at (h1 + Group::kWidth * K) & capacity.
1429
- // We can find an index within the floating group as index_diff modulo
1430
- // Group::kWidth.
1431
- // Both old and new capacity are larger than Group::kWidth so we can avoid
1432
- // computing `& capacity`.
1433
- size_t in_floating_group_index = index_diff & (Group::kWidth - 1);
1434
- // By subtracting we will get the difference between the first probe group
1435
- // and the probe group corresponding to old_index.
1436
- index_diff -= in_floating_group_index;
1437
- if (ABSL_PREDICT_TRUE((index_diff & old_capacity) == 0)) {
1438
- size_t new_index = (h1 + in_floating_group_index) & new_capacity;
1439
- ABSL_ASSUME(new_index != kProbedElementIndexSentinel);
1440
- return new_index;
1441
- }
1442
- ABSL_SWISSTABLE_ASSERT(((old_index - h1) & old_capacity) >= Group::kWidth);
1443
- // Try to insert element into the first probe group.
1444
- // new_ctrl is not yet fully initialized so we can't use regular search via
1445
- // find_first_non_full.
1446
-
1447
- // We can search in the first probe group only if it is located in already
1448
- // initialized part of the table.
1449
- if (ABSL_PREDICT_FALSE((h1 & old_capacity) >= old_index)) {
1450
- return kProbedElementIndexSentinel;
1451
- }
1452
- size_t offset = h1 & new_capacity;
1453
- Group new_g(new_ctrl + offset);
1454
- if (auto mask = new_g.MaskNonFull(); ABSL_PREDICT_TRUE(mask)) {
1455
- size_t result = offset + mask.LowestBitSet();
1456
- ABSL_ASSUME(result != kProbedElementIndexSentinel);
1457
- return result;
1458
- }
1459
- return kProbedElementIndexSentinel;
1460
- }
1461
-
1462
- // Extern template for inline function keeps possibility of inlining.
1463
- // When compiler decided to not inline, no symbols will be added to the
1464
- // corresponding translation unit.
1465
- extern template size_t TryFindNewIndexWithoutProbing(size_t h1,
1466
- size_t old_index,
1467
- size_t old_capacity,
1468
- ctrl_t* new_ctrl,
1469
- size_t new_capacity);
1470
-
1471
- // growth_info (which is a size_t) is stored with the backing array.
1472
- constexpr size_t BackingArrayAlignment(size_t align_of_slot) {
1473
- return (std::max)(align_of_slot, alignof(GrowthInfo));
1474
- }
1475
-
1476
- // Iterates over all full slots and calls `cb(const ctrl_t*, void*)`.
1477
- // No insertion to the table is allowed during `cb` call.
1478
- // Erasure is allowed only for the element passed to the callback.
1479
- // The table must not be in SOO mode.
1480
- void IterateOverFullSlots(const CommonFields& c, size_t slot_size,
1481
- absl::FunctionRef<void(const ctrl_t*, void*)> cb);
1482
-
1483
- template <typename CharAlloc>
1484
- constexpr bool ShouldSampleHashtablezInfoForAlloc() {
1485
- // Folks with custom allocators often make unwarranted assumptions about the
1486
- // behavior of their classes vis-a-vis trivial destructability and what
1487
- // calls they will or won't make. Avoid sampling for people with custom
1488
- // allocators to get us out of this mess. This is not a hard guarantee but
1489
- // a workaround while we plan the exact guarantee we want to provide.
1490
- return std::is_same_v<CharAlloc, std::allocator<char>>;
1491
- }
1492
-
1493
- // Allocates `n` bytes for a backing array.
1494
- template <size_t AlignOfBackingArray, typename Alloc>
1495
- void* AllocateBackingArray(void* alloc, size_t n) {
1496
- return Allocate<AlignOfBackingArray>(static_cast<Alloc*>(alloc), n);
1497
- }
1498
-
1499
- // Note: we mark this function as ABSL_ATTRIBUTE_NOINLINE because we don't want
1500
- // it to be inlined into e.g. the destructor to save code size.
1501
- template <size_t AlignOfBackingArray, typename Alloc>
1502
- ABSL_ATTRIBUTE_NOINLINE void DeallocateBackingArray(
1503
- void* alloc, size_t capacity, ctrl_t* ctrl, size_t slot_size,
1504
- size_t slot_align, bool had_infoz) {
1505
- RawHashSetLayout layout(capacity, slot_size, slot_align, had_infoz);
1506
- void* backing_array = ctrl - layout.control_offset();
1507
- // Unpoison before returning the memory to the allocator.
1508
- SanitizerUnpoisonMemoryRegion(backing_array, layout.alloc_size());
1509
- Deallocate<AlignOfBackingArray>(static_cast<Alloc*>(alloc), backing_array,
1510
- layout.alloc_size());
1511
- }
1512
-
1513
- // PolicyFunctions bundles together some information for a particular
1514
- // raw_hash_set<T, ...> instantiation. This information is passed to
1515
- // type-erased functions that want to do small amounts of type-specific
1516
- // work.
1517
- struct PolicyFunctions {
1518
- uint32_t key_size;
1519
- uint32_t value_size;
1520
- uint32_t slot_size;
1521
- uint16_t slot_align;
1522
- bool soo_enabled;
1523
- bool is_hashtablez_eligible;
1524
-
1525
- // Returns the pointer to the hash function stored in the set.
1526
- void* (*hash_fn)(CommonFields& common);
1527
-
1528
- // Returns the hash of the pointed-to slot.
1529
- HashSlotFn hash_slot;
1530
-
1531
- // Transfers the contents of `count` slots from src_slot to dst_slot.
1532
- // We use ability to transfer several slots in single group table growth.
1533
- void (*transfer_n)(void* set, void* dst_slot, void* src_slot, size_t count);
1534
-
1535
- // Returns the pointer to the CharAlloc stored in the set.
1536
- void* (*get_char_alloc)(CommonFields& common);
1537
-
1538
- // Allocates n bytes for the backing store for common.
1539
- void* (*alloc)(void* alloc, size_t n);
1540
-
1541
- // Deallocates the backing store from common.
1542
- void (*dealloc)(void* alloc, size_t capacity, ctrl_t* ctrl, size_t slot_size,
1543
- size_t slot_align, bool had_infoz);
1544
-
1545
- // Implementation detail of GrowToNextCapacity.
1546
- // Iterates over all full slots and transfers unprobed elements.
1547
- // Initializes the new control bytes except mirrored bytes and kSentinel.
1548
- // Caller must finish the initialization.
1549
- // All slots corresponding to the full control bytes are transferred.
1550
- // Probed elements are reported by `encode_probed_element` callback.
1551
- // encode_probed_element may overwrite old_ctrl buffer till source_offset.
1552
- // Different encoding is used depending on the capacity of the table.
1553
- // See ProbedItem*Bytes classes for details.
1554
- void (*transfer_unprobed_elements_to_next_capacity)(
1555
- CommonFields& common, const ctrl_t* old_ctrl, void* old_slots,
1556
- // TODO(b/382423690): Try to use absl::FunctionRef here.
1557
- void* probed_storage,
1558
- void (*encode_probed_element)(void* probed_storage, h2_t h2,
1559
- size_t source_offset, size_t h1));
1560
-
1561
- uint8_t soo_capacity() const {
1562
- return static_cast<uint8_t>(soo_enabled ? SooCapacity() : 0);
1563
- }
1564
- };
1565
-
1566
- // Returns the maximum valid size for a table with 1-byte slots.
1567
- // This function is an utility shared by MaxValidSize and IsAboveValidSize.
1568
- // Template parameter is only used to enable testing.
1569
- template <size_t kSizeOfSizeT = sizeof(size_t)>
1570
- constexpr size_t MaxValidSizeFor1ByteSlot() {
1571
- if constexpr (kSizeOfSizeT == 8) {
1572
- return CapacityToGrowth(
1573
- static_cast<size_t>(uint64_t{1} << HashtableSize::kSizeBitCount) - 1);
1574
- } else {
1575
- static_assert(kSizeOfSizeT == 4);
1576
- return CapacityToGrowth((size_t{1} << (kSizeOfSizeT * 8 - 2)) - 1);
1577
- }
1578
- }
1579
-
1580
- // Returns the maximum valid size for a table with provided slot size.
1581
- // Template parameter is only used to enable testing.
1582
- template <size_t kSizeOfSizeT = sizeof(size_t)>
1583
- constexpr size_t MaxValidSize(size_t slot_size) {
1584
- if constexpr (kSizeOfSizeT == 8) {
1585
- // For small slot sizes we are limited by HashtableSize::kSizeBitCount.
1586
- if (slot_size < size_t{1} << (64 - HashtableSize::kSizeBitCount)) {
1587
- return MaxValidSizeFor1ByteSlot<kSizeOfSizeT>();
1588
- }
1589
- return (size_t{1} << (kSizeOfSizeT * 8 - 2)) / slot_size;
1590
- } else {
1591
- return MaxValidSizeFor1ByteSlot<kSizeOfSizeT>() / slot_size;
1592
- }
1593
- }
1594
-
1595
- // Returns true if size is larger than the maximum valid size.
1596
- // It is an optimization to avoid the division operation in the common case.
1597
- // Template parameter is only used to enable testing.
1598
- template <size_t kSizeOfSizeT = sizeof(size_t)>
1599
- constexpr bool IsAboveValidSize(size_t size, size_t slot_size) {
1600
- if constexpr (kSizeOfSizeT == 8) {
1601
- // For small slot sizes we are limited by HashtableSize::kSizeBitCount.
1602
- if (ABSL_PREDICT_TRUE(slot_size <
1603
- (size_t{1} << (64 - HashtableSize::kSizeBitCount)))) {
1604
- return size > MaxValidSizeFor1ByteSlot<kSizeOfSizeT>();
1605
- }
1606
- return size > MaxValidSize<kSizeOfSizeT>(slot_size);
1607
- } else {
1608
- return uint64_t{size} * slot_size >
1609
- MaxValidSizeFor1ByteSlot<kSizeOfSizeT>();
1610
- }
1611
- }
1612
-
1613
- // Returns the index of the SOO slot when growing from SOO to non-SOO in a
1614
- // single group. See also InitializeSmallControlBytesAfterSoo(). It's important
1615
- // to use index 1 so that when resizing from capacity 1 to 3, we can still have
1616
- // random iteration order between the first two inserted elements.
1617
- // I.e. it allows inserting the second element at either index 0 or 2.
1618
- constexpr size_t SooSlotIndex() { return 1; }
1619
-
1620
- // Maximum capacity for the algorithm for small table after SOO.
1621
- // Note that typical size after SOO is 3, but we allow up to 7.
1622
- // Allowing till 16 would require additional store that can be avoided.
1623
- constexpr size_t MaxSmallAfterSooCapacity() { return 7; }
1624
-
1625
- // Type erased version of raw_hash_set::reserve.
1626
- // Requires: `new_size > policy.soo_capacity`.
1627
- void ReserveTableToFitNewSize(CommonFields& common,
1628
- const PolicyFunctions& policy, size_t new_size);
1629
-
1630
- // Resizes empty non-allocated table to the next valid capacity after
1631
- // `bucket_count`. Requires:
1632
- // 1. `c.capacity() == policy.soo_capacity`.
1633
- // 2. `c.empty()`.
1634
- // 3. `new_size > policy.soo_capacity`.
1635
- // The table will be attempted to be sampled.
1636
- void ReserveEmptyNonAllocatedTableToFitBucketCount(
1637
- CommonFields& common, const PolicyFunctions& policy, size_t bucket_count);
1638
-
1639
- // Type erased version of raw_hash_set::rehash.
1640
- void Rehash(CommonFields& common, const PolicyFunctions& policy, size_t n);
1641
-
1642
- // Type erased version of copy constructor.
1643
- void Copy(CommonFields& common, const PolicyFunctions& policy,
1644
- const CommonFields& other,
1645
- absl::FunctionRef<void(void*, const void*)> copy_fn);
1646
-
1647
- // Returns the optimal size for memcpy when transferring SOO slot.
1648
- // Otherwise, returns the optimal size for memcpy SOO slot transfer
1649
- // to SooSlotIndex().
1650
- // At the destination we are allowed to copy upto twice more bytes,
1651
- // because there is at least one more slot after SooSlotIndex().
1652
- // The result must not exceed MaxSooSlotSize().
1653
- // Some of the cases are merged to minimize the number of function
1654
- // instantiations.
1655
- constexpr size_t OptimalMemcpySizeForSooSlotTransfer(
1656
- size_t slot_size, size_t max_soo_slot_size = MaxSooSlotSize()) {
1657
- static_assert(MaxSooSlotSize() >= 8, "unexpectedly small SOO slot size");
1658
- if (slot_size == 1) {
1659
- return 1;
1660
- }
1661
- if (slot_size <= 3) {
1662
- return 4;
1663
- }
1664
- // We are merging 4 and 8 into one case because we expect them to be the
1665
- // hottest cases. Copying 8 bytes is as fast on common architectures.
1666
- if (slot_size <= 8) {
1667
- return 8;
1668
- }
1669
- if (max_soo_slot_size <= 16) {
1670
- return max_soo_slot_size;
1671
- }
1672
- if (slot_size <= 16) {
1673
- return 16;
1674
- }
1675
- if (max_soo_slot_size <= 24) {
1676
- return max_soo_slot_size;
1677
- }
1678
- static_assert(MaxSooSlotSize() <= 24, "unexpectedly large SOO slot size");
1679
- return 24;
1680
- }
1681
-
1682
- // Resizes SOO table to the NextCapacity(SooCapacity()) and prepares insert for
1683
- // the given new_hash. Returns the offset of the new element.
1684
- // All possible template combinations are defined in cc file to improve
1685
- // compilation time.
1686
- template <size_t SooSlotMemcpySize, bool TransferUsesMemcpy>
1687
- size_t GrowSooTableToNextCapacityAndPrepareInsert(
1688
- CommonFields& common, const PolicyFunctions& policy,
1689
- absl::FunctionRef<size_t(size_t)> get_hash, bool force_sampling);
1690
-
1691
- // PrepareInsert for small tables (is_small()==true).
1692
- // Returns the new control and the new slot.
1693
- // Hash is only computed if the table is sampled or grew to large size
1694
- // (is_small()==false).
1695
- std::pair<ctrl_t*, void*> PrepareInsertSmallNonSoo(
1696
- CommonFields& common, const PolicyFunctions& policy,
1697
- absl::FunctionRef<size_t(size_t)> get_hash);
1698
-
1699
- // Resizes table with allocated slots and change the table seed.
1700
- // Tables with SOO enabled must have capacity > policy.soo_capacity.
1701
- // No sampling will be performed since table is already allocated.
1702
- void ResizeAllocatedTableWithSeedChange(CommonFields& common,
1703
- const PolicyFunctions& policy,
1704
- size_t new_capacity);
1705
-
1706
- // ClearBackingArray clears the backing array, either modifying it in place,
1707
- // or creating a new one based on the value of "reuse".
1708
- // REQUIRES: c.capacity > 0
1709
- void ClearBackingArray(CommonFields& c, const PolicyFunctions& policy,
1710
- void* alloc, bool reuse, bool soo_enabled);
1711
-
1712
- // Type-erased versions of raw_hash_set::erase_meta_only_{small,large}.
1713
- void EraseMetaOnlySmall(CommonFields& c, bool soo_enabled, size_t slot_size);
1714
- void EraseMetaOnlyLarge(CommonFields& c, const ctrl_t* ctrl, size_t slot_size);
1715
-
1716
- // For trivially relocatable types we use memcpy directly. This allows us to
1717
- // share the same function body for raw_hash_set instantiations that have the
1718
- // same slot size as long as they are relocatable.
1719
- // Separate function for relocating single slot cause significant binary bloat.
1720
- template <size_t SizeOfSlot>
1721
- ABSL_ATTRIBUTE_NOINLINE void TransferNRelocatable(void*, void* dst, void* src,
1722
- size_t count) {
1723
- // TODO(b/382423690): Experiment with making specialization for power of 2 and
1724
- // non power of 2. This would require passing the size of the slot.
1725
- memcpy(dst, src, SizeOfSlot * count);
1726
- }
1727
-
1728
- // Returns a pointer to `common`. This is used to implement type erased
1729
- // raw_hash_set::get_hash_ref_fn and raw_hash_set::get_alloc_ref_fn for the
1730
- // empty class cases.
1731
- void* GetRefForEmptyClass(CommonFields& common);
1732
-
1733
- // Given the hash of a value not currently in the table and the first group with
1734
- // an empty slot in the probe sequence, finds a viable slot index to insert it
1735
- // at.
1736
- //
1737
- // In case there's no space left, the table can be resized or rehashed
1738
- // (for tables with deleted slots, see FindInsertPositionWithGrowthOrRehash).
1739
- //
1740
- // In the case of absence of deleted slots and positive growth_left, the element
1741
- // can be inserted in one of the empty slots in the provided `target_group`.
1742
- //
1743
- // When the table has deleted slots (according to GrowthInfo), the target
1744
- // position will be searched one more time using `find_first_non_full`.
1745
- //
1746
- // REQUIRES: `!common.is_small()`.
1747
- // REQUIRES: At least one non-full slot available.
1748
- // REQUIRES: `mask_empty` is a mask containing empty slots for the
1749
- // `target_group`.
1750
- // REQUIRES: `target_group` is a starting position for the group that has
1751
- // at least one empty slot.
1752
- size_t PrepareInsertLarge(CommonFields& common, const PolicyFunctions& policy,
1753
- size_t hash, Group::NonIterableBitMaskType mask_empty,
1754
- FindInfo target_group);
1755
-
1756
- // Same as above, but with generations enabled, we may end up changing the seed,
1757
- // which means we need to be able to recompute the hash.
1758
- size_t PrepareInsertLargeGenerationsEnabled(
1759
- CommonFields& common, const PolicyFunctions& policy, size_t hash,
1760
- Group::NonIterableBitMaskType mask_empty, FindInfo target_group,
1761
- absl::FunctionRef<size_t(size_t)> recompute_hash);
1762
-
1763
- template <typename Policy, typename Hash, typename Eq, typename Alloc>
1764
- struct InstantiateRawHashSet {
1765
- using type = typename ApplyWithoutDefaultSuffix<
1766
- raw_hash_set,
1767
- TypeList<void, typename Policy::DefaultHash, typename Policy::DefaultEq,
1768
- typename Policy::DefaultAlloc>,
1769
- TypeList<Policy, Hash, Eq, Alloc>>::type;
1770
- };
1771
-
1772
- // A SwissTable.
1773
- //
1774
- // Policy: a policy defines how to perform different operations on
1775
- // the slots of the hashtable (see hash_policy_traits.h for the full interface
1776
- // of policy).
1777
- //
1778
- // Params...: a variadic list of parameters that allows us to omit default
1779
- // types. This reduces the mangled name of the class and the size of
1780
- // debug strings like __PRETTY_FUNCTION__. Default types do not give
1781
- // any new information.
1782
- //
1783
- // Hash: a (possibly polymorphic) functor that hashes keys of the hashtable. The
1784
- // functor should accept a key and return size_t as hash. For best performance
1785
- // it is important that the hash function provides high entropy across all bits
1786
- // of the hash.
1787
- // This is the first element in `Params...` if it exists, or Policy::DefaultHash
1788
- // otherwise.
1789
- //
1790
- // Eq: a (possibly polymorphic) functor that compares two keys for equality. It
1791
- // should accept two (of possibly different type) keys and return a bool: true
1792
- // if they are equal, false if they are not. If two keys compare equal, then
1793
- // their hash values as defined by Hash MUST be equal.
1794
- // This is the second element in `Params...` if it exists, or Policy::DefaultEq
1795
- // otherwise.
1796
- //
1797
- // Allocator: an Allocator
1798
- // [https://en.cppreference.com/w/cpp/named_req/Allocator] with which
1799
- // the storage of the hashtable will be allocated and the elements will be
1800
- // constructed and destroyed.
1801
- // This is the third element in `Params...` if it exists, or
1802
- // Policy::DefaultAlloc otherwise.
1803
- template <class Policy, class... Params>
1804
- class raw_hash_set {
1805
- using PolicyTraits = hash_policy_traits<Policy>;
1806
- using Hash = GetFromListOr<typename Policy::DefaultHash, 0, Params...>;
1807
- using Eq = GetFromListOr<typename Policy::DefaultEq, 1, Params...>;
1808
- using Alloc = GetFromListOr<typename Policy::DefaultAlloc, 2, Params...>;
1809
- using KeyArgImpl =
1810
- KeyArg<IsTransparent<Eq>::value && IsTransparent<Hash>::value>;
1811
-
1812
- static_assert(
1813
- std::is_same_v<
1814
- typename InstantiateRawHashSet<Policy, Hash, Eq, Alloc>::type,
1815
- raw_hash_set>,
1816
- "Redundant template parameters were passed. Use InstantiateRawHashSet<> "
1817
- "instead");
1818
-
1819
- public:
1820
- using init_type = typename PolicyTraits::init_type;
1821
- using key_type = typename PolicyTraits::key_type;
1822
- using allocator_type = Alloc;
1823
- using size_type = size_t;
1824
- using difference_type = ptrdiff_t;
1825
- using hasher = Hash;
1826
- using key_equal = Eq;
1827
- using policy_type = Policy;
1828
- using value_type = typename PolicyTraits::value_type;
1829
- using reference = value_type&;
1830
- using const_reference = const value_type&;
1831
- using pointer = typename absl::allocator_traits<
1832
- allocator_type>::template rebind_traits<value_type>::pointer;
1833
- using const_pointer = typename absl::allocator_traits<
1834
- allocator_type>::template rebind_traits<value_type>::const_pointer;
1835
-
1836
- private:
1837
- // Alias used for heterogeneous lookup functions.
1838
- // `key_arg<K>` evaluates to `K` when the functors are transparent and to
1839
- // `key_type` otherwise. It permits template argument deduction on `K` for the
1840
- // transparent case.
1841
- template <class K>
1842
- using key_arg = typename KeyArgImpl::template type<K, key_type>;
1843
-
1844
- using slot_type = typename PolicyTraits::slot_type;
1845
-
1846
- constexpr static bool kIsDefaultHash =
1847
- std::is_same_v<hasher, absl::Hash<key_type>> ||
1848
- std::is_same_v<hasher, absl::container_internal::StringHash>;
1849
-
1850
- // TODO(b/289225379): we could add extra SOO space inside raw_hash_set
1851
- // after CommonFields to allow inlining larger slot_types (e.g. std::string),
1852
- // but it's a bit complicated if we want to support incomplete mapped_type in
1853
- // flat_hash_map. We could potentially do this for flat_hash_set and for an
1854
- // allowlist of `mapped_type`s of flat_hash_map that includes e.g. arithmetic
1855
- // types, strings, cords, and pairs/tuples of allowlisted types.
1856
- constexpr static bool SooEnabled() {
1857
- return PolicyTraits::soo_enabled() &&
1858
- sizeof(slot_type) <= sizeof(HeapOrSoo) &&
1859
- alignof(slot_type) <= alignof(HeapOrSoo);
1860
- }
1861
-
1862
- constexpr static size_t DefaultCapacity() {
1863
- return SooEnabled() ? SooCapacity() : 0;
1864
- }
1865
-
1866
- // Whether `size` fits in the SOO capacity of this table.
1867
- bool fits_in_soo(size_t size) const {
1868
- return SooEnabled() && size <= SooCapacity();
1869
- }
1870
- // Whether this table is in SOO mode or non-SOO mode.
1871
- bool is_soo() const { return fits_in_soo(capacity()); }
1872
- bool is_full_soo() const { return is_soo() && !empty(); }
1873
-
1874
- bool is_small() const { return common().is_small(); }
1875
-
1876
- // Give an early error when key_type is not hashable/eq.
1877
- auto KeyTypeCanBeHashed(const Hash& h, const key_type& k) -> decltype(h(k));
1878
- auto KeyTypeCanBeEq(const Eq& eq, const key_type& k) -> decltype(eq(k, k));
1879
-
1880
- // Try to be helpful when the hasher returns an unreasonable type.
1881
- using key_hash_result =
1882
- absl::remove_cvref_t<decltype(std::declval<const Hash&>()(
1883
- std::declval<const key_type&>()))>;
1884
- static_assert(sizeof(key_hash_result) >= sizeof(size_t),
1885
- "`Hash::operator()` should return a `size_t`");
1886
-
1887
- using AllocTraits = absl::allocator_traits<allocator_type>;
1888
- using SlotAlloc = typename absl::allocator_traits<
1889
- allocator_type>::template rebind_alloc<slot_type>;
1890
- // People are often sloppy with the exact type of their allocator (sometimes
1891
- // it has an extra const or is missing the pair, but rebinds made it work
1892
- // anyway).
1893
- using CharAlloc =
1894
- typename absl::allocator_traits<Alloc>::template rebind_alloc<char>;
1895
- using SlotAllocTraits = typename absl::allocator_traits<
1896
- allocator_type>::template rebind_traits<slot_type>;
1897
-
1898
- static_assert(std::is_lvalue_reference<reference>::value,
1899
- "Policy::element() must return a reference");
1900
-
1901
- // An enabler for insert(T&&): T must be convertible to init_type or be the
1902
- // same as [cv] value_type [ref].
1903
- template <class T>
1904
- using Insertable = absl::disjunction<
1905
- std::is_same<absl::remove_cvref_t<reference>, absl::remove_cvref_t<T>>,
1906
- std::is_convertible<T, init_type>>;
1907
- template <class T>
1908
- using IsNotBitField = std::is_pointer<T*>;
1909
-
1910
- // RequiresNotInit is a workaround for gcc prior to 7.1.
1911
- // See https://godbolt.org/g/Y4xsUh.
1912
- template <class T>
1913
- using RequiresNotInit =
1914
- typename std::enable_if<!std::is_same<T, init_type>::value, int>::type;
1915
-
1916
- template <class... Ts>
1917
- using IsDecomposable = IsDecomposable<void, PolicyTraits, Hash, Eq, Ts...>;
1918
-
1919
- template <class T>
1920
- using IsDecomposableAndInsertable =
1921
- IsDecomposable<std::enable_if_t<Insertable<T>::value, T>>;
1922
-
1923
- // Evaluates to true if an assignment from the given type would require the
1924
- // source object to remain alive for the life of the element.
1925
- template <class U>
1926
- using IsLifetimeBoundAssignmentFrom = std::conditional_t<
1927
- policy_trait_element_is_owner<Policy>::value, std::false_type,
1928
- type_traits_internal::IsLifetimeBoundAssignment<init_type, U>>;
1929
-
1930
- public:
1931
- static_assert(std::is_same<pointer, value_type*>::value,
1932
- "Allocators with custom pointer types are not supported");
1933
- static_assert(std::is_same<const_pointer, const value_type*>::value,
1934
- "Allocators with custom pointer types are not supported");
1935
-
1936
- class iterator : private HashSetIteratorGenerationInfo {
1937
- friend class raw_hash_set;
1938
- friend struct HashtableFreeFunctionsAccess;
1939
-
1940
- public:
1941
- using iterator_category = std::forward_iterator_tag;
1942
- using value_type = typename raw_hash_set::value_type;
1943
- using reference =
1944
- absl::conditional_t<PolicyTraits::constant_iterators::value,
1945
- const value_type&, value_type&>;
1946
- using pointer = absl::remove_reference_t<reference>*;
1947
- using difference_type = typename raw_hash_set::difference_type;
1948
-
1949
- iterator() {}
1950
-
1951
- // PRECONDITION: not an end() iterator.
1952
- reference operator*() const {
1953
- assert_is_full("operator*()");
1954
- return unchecked_deref();
1955
- }
1956
-
1957
- // PRECONDITION: not an end() iterator.
1958
- pointer operator->() const {
1959
- assert_is_full("operator->");
1960
- return &operator*();
1961
- }
1962
-
1963
- // PRECONDITION: not an end() iterator.
1964
- iterator& operator++() {
1965
- assert_is_full("operator++");
1966
- ++ctrl_;
1967
- ++slot_;
1968
- skip_empty_or_deleted();
1969
- if (ABSL_PREDICT_FALSE(*ctrl_ == ctrl_t::kSentinel)) ctrl_ = nullptr;
1970
- return *this;
1971
- }
1972
- // PRECONDITION: not an end() iterator.
1973
- iterator operator++(int) {
1974
- auto tmp = *this;
1975
- ++*this;
1976
- return tmp;
1977
- }
1978
-
1979
- friend bool operator==(const iterator& a, const iterator& b) {
1980
- AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
1981
- AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
1982
- AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
1983
- a.generation_ptr(), b.generation_ptr());
1984
- return a.ctrl_ == b.ctrl_;
1985
- }
1986
- friend bool operator!=(const iterator& a, const iterator& b) {
1987
- return !(a == b);
1988
- }
1989
-
1990
- private:
1991
- iterator(ctrl_t* ctrl, slot_type* slot,
1992
- const GenerationType* generation_ptr)
1993
- : HashSetIteratorGenerationInfo(generation_ptr),
1994
- ctrl_(ctrl),
1995
- slot_(slot) {
1996
- // This assumption helps the compiler know that any non-end iterator is
1997
- // not equal to any end iterator.
1998
- ABSL_ASSUME(ctrl != nullptr);
1999
- }
2000
- // This constructor is used in begin() to avoid an MSan
2001
- // use-of-uninitialized-value error. Delegating from this constructor to
2002
- // the previous one doesn't avoid the error.
2003
- iterator(ctrl_t* ctrl, MaybeInitializedPtr<void> slot,
2004
- const GenerationType* generation_ptr)
2005
- : HashSetIteratorGenerationInfo(generation_ptr),
2006
- ctrl_(ctrl),
2007
- slot_(to_slot(slot.get())) {
2008
- // This assumption helps the compiler know that any non-end iterator is
2009
- // not equal to any end iterator.
2010
- ABSL_ASSUME(ctrl != nullptr);
2011
- }
2012
- // For end() iterators.
2013
- explicit iterator(const GenerationType* generation_ptr)
2014
- : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
2015
-
2016
- void assert_is_full(const char* operation) const {
2017
- AssertIsFull(ctrl_, generation(), generation_ptr(), operation);
2018
- }
2019
-
2020
- // Fixes up `ctrl_` to point to a full or sentinel by advancing `ctrl_` and
2021
- // `slot_` until they reach one.
2022
- void skip_empty_or_deleted() {
2023
- while (IsEmptyOrDeleted(*ctrl_)) {
2024
- ++ctrl_;
2025
- ++slot_;
2026
- }
2027
- }
2028
-
2029
- // An equality check which skips ABSL Hardening iterator invalidation
2030
- // checks.
2031
- // Should be used when the lifetimes of the iterators are well-enough
2032
- // understood to prove that they cannot be invalid.
2033
- bool unchecked_equals(const iterator& b) const {
2034
- return ctrl_ == b.control();
2035
- }
2036
-
2037
- // Dereferences the iterator without ABSL Hardening iterator invalidation
2038
- // checks.
2039
- reference unchecked_deref() const { return PolicyTraits::element(slot_); }
2040
-
2041
- ctrl_t* control() const { return ctrl_; }
2042
- slot_type* slot() const { return slot_; }
2043
-
2044
- // We use DefaultIterControl() for default-constructed iterators so that
2045
- // they can be distinguished from end iterators, which have nullptr ctrl_.
2046
- ctrl_t* ctrl_ = DefaultIterControl();
2047
- // To avoid uninitialized member warnings, put slot_ in an anonymous union.
2048
- // The member is not initialized on singleton and end iterators.
2049
- union {
2050
- slot_type* slot_;
2051
- };
2052
- };
2053
-
2054
- class const_iterator {
2055
- friend class raw_hash_set;
2056
- template <class Container, typename Enabler>
2057
- friend struct absl::container_internal::hashtable_debug_internal::
2058
- HashtableDebugAccess;
2059
-
2060
- public:
2061
- using iterator_category = typename iterator::iterator_category;
2062
- using value_type = typename raw_hash_set::value_type;
2063
- using reference = typename raw_hash_set::const_reference;
2064
- using pointer = typename raw_hash_set::const_pointer;
2065
- using difference_type = typename raw_hash_set::difference_type;
2066
-
2067
- const_iterator() = default;
2068
- // Implicit construction from iterator.
2069
- const_iterator(iterator i) : inner_(std::move(i)) {} // NOLINT
2070
-
2071
- reference operator*() const { return *inner_; }
2072
- pointer operator->() const { return inner_.operator->(); }
2073
-
2074
- const_iterator& operator++() {
2075
- ++inner_;
2076
- return *this;
2077
- }
2078
- const_iterator operator++(int) { return inner_++; }
2079
-
2080
- friend bool operator==(const const_iterator& a, const const_iterator& b) {
2081
- return a.inner_ == b.inner_;
2082
- }
2083
- friend bool operator!=(const const_iterator& a, const const_iterator& b) {
2084
- return !(a == b);
2085
- }
2086
-
2087
- private:
2088
- const_iterator(const ctrl_t* ctrl, const slot_type* slot,
2089
- const GenerationType* gen)
2090
- : inner_(const_cast<ctrl_t*>(ctrl), const_cast<slot_type*>(slot), gen) {
2091
- }
2092
- bool unchecked_equals(const const_iterator& b) const {
2093
- return inner_.unchecked_equals(b.inner_);
2094
- }
2095
- ctrl_t* control() const { return inner_.control(); }
2096
- slot_type* slot() const { return inner_.slot(); }
2097
-
2098
- iterator inner_;
2099
- };
2100
-
2101
- using node_type = node_handle<Policy, hash_policy_traits<Policy>, Alloc>;
2102
- using insert_return_type = InsertReturnType<iterator, node_type>;
2103
-
2104
- // Note: can't use `= default` due to non-default noexcept (causes
2105
- // problems for some compilers). NOLINTNEXTLINE
2106
- raw_hash_set() noexcept(
2107
- std::is_nothrow_default_constructible<hasher>::value &&
2108
- std::is_nothrow_default_constructible<key_equal>::value &&
2109
- std::is_nothrow_default_constructible<allocator_type>::value) {}
2110
-
2111
- explicit raw_hash_set(
2112
- size_t bucket_count, const hasher& hash = hasher(),
2113
- const key_equal& eq = key_equal(),
2114
- const allocator_type& alloc = allocator_type())
2115
- : settings_(CommonFields::CreateDefault<SooEnabled()>(), hash, eq,
2116
- alloc) {
2117
- if (bucket_count > DefaultCapacity()) {
2118
- ReserveEmptyNonAllocatedTableToFitBucketCount(
2119
- common(), GetPolicyFunctions(), bucket_count);
2120
- }
2121
- }
2122
-
2123
- raw_hash_set(size_t bucket_count, const hasher& hash,
2124
- const allocator_type& alloc)
2125
- : raw_hash_set(bucket_count, hash, key_equal(), alloc) {}
2126
-
2127
- raw_hash_set(size_t bucket_count, const allocator_type& alloc)
2128
- : raw_hash_set(bucket_count, hasher(), key_equal(), alloc) {}
2129
-
2130
- explicit raw_hash_set(const allocator_type& alloc)
2131
- : raw_hash_set(0, hasher(), key_equal(), alloc) {}
2132
-
2133
- template <class InputIter>
2134
- raw_hash_set(InputIter first, InputIter last, size_t bucket_count = 0,
2135
- const hasher& hash = hasher(), const key_equal& eq = key_equal(),
2136
- const allocator_type& alloc = allocator_type())
2137
- : raw_hash_set(SelectBucketCountForIterRange(first, last, bucket_count),
2138
- hash, eq, alloc) {
2139
- insert(first, last);
2140
- }
2141
-
2142
- template <class InputIter>
2143
- raw_hash_set(InputIter first, InputIter last, size_t bucket_count,
2144
- const hasher& hash, const allocator_type& alloc)
2145
- : raw_hash_set(first, last, bucket_count, hash, key_equal(), alloc) {}
2146
-
2147
- template <class InputIter>
2148
- raw_hash_set(InputIter first, InputIter last, size_t bucket_count,
2149
- const allocator_type& alloc)
2150
- : raw_hash_set(first, last, bucket_count, hasher(), key_equal(), alloc) {}
2151
-
2152
- template <class InputIter>
2153
- raw_hash_set(InputIter first, InputIter last, const allocator_type& alloc)
2154
- : raw_hash_set(first, last, 0, hasher(), key_equal(), alloc) {}
2155
-
2156
- // Instead of accepting std::initializer_list<value_type> as the first
2157
- // argument like std::unordered_set<value_type> does, we have two overloads
2158
- // that accept std::initializer_list<T> and std::initializer_list<init_type>.
2159
- // This is advantageous for performance.
2160
- //
2161
- // // Turns {"abc", "def"} into std::initializer_list<std::string>, then
2162
- // // copies the strings into the set.
2163
- // std::unordered_set<std::string> s = {"abc", "def"};
2164
- //
2165
- // // Turns {"abc", "def"} into std::initializer_list<const char*>, then
2166
- // // copies the strings into the set.
2167
- // absl::flat_hash_set<std::string> s = {"abc", "def"};
2168
- //
2169
- // The same trick is used in insert().
2170
- //
2171
- // The enabler is necessary to prevent this constructor from triggering where
2172
- // the copy constructor is meant to be called.
2173
- //
2174
- // absl::flat_hash_set<int> a, b{a};
2175
- //
2176
- // RequiresNotInit<T> is a workaround for gcc prior to 7.1.
2177
- template <class T, RequiresNotInit<T> = 0,
2178
- std::enable_if_t<Insertable<T>::value, int> = 0>
2179
- raw_hash_set(std::initializer_list<T> init, size_t bucket_count = 0,
2180
- const hasher& hash = hasher(), const key_equal& eq = key_equal(),
2181
- const allocator_type& alloc = allocator_type())
2182
- : raw_hash_set(init.begin(), init.end(), bucket_count, hash, eq, alloc) {}
2183
-
2184
- raw_hash_set(std::initializer_list<init_type> init, size_t bucket_count = 0,
2185
- const hasher& hash = hasher(), const key_equal& eq = key_equal(),
2186
- const allocator_type& alloc = allocator_type())
2187
- : raw_hash_set(init.begin(), init.end(), bucket_count, hash, eq, alloc) {}
2188
-
2189
- template <class T, RequiresNotInit<T> = 0,
2190
- std::enable_if_t<Insertable<T>::value, int> = 0>
2191
- raw_hash_set(std::initializer_list<T> init, size_t bucket_count,
2192
- const hasher& hash, const allocator_type& alloc)
2193
- : raw_hash_set(init, bucket_count, hash, key_equal(), alloc) {}
2194
-
2195
- raw_hash_set(std::initializer_list<init_type> init, size_t bucket_count,
2196
- const hasher& hash, const allocator_type& alloc)
2197
- : raw_hash_set(init, bucket_count, hash, key_equal(), alloc) {}
2198
-
2199
- template <class T, RequiresNotInit<T> = 0,
2200
- std::enable_if_t<Insertable<T>::value, int> = 0>
2201
- raw_hash_set(std::initializer_list<T> init, size_t bucket_count,
2202
- const allocator_type& alloc)
2203
- : raw_hash_set(init, bucket_count, hasher(), key_equal(), alloc) {}
2204
-
2205
- raw_hash_set(std::initializer_list<init_type> init, size_t bucket_count,
2206
- const allocator_type& alloc)
2207
- : raw_hash_set(init, bucket_count, hasher(), key_equal(), alloc) {}
2208
-
2209
- template <class T, RequiresNotInit<T> = 0,
2210
- std::enable_if_t<Insertable<T>::value, int> = 0>
2211
- raw_hash_set(std::initializer_list<T> init, const allocator_type& alloc)
2212
- : raw_hash_set(init, 0, hasher(), key_equal(), alloc) {}
2213
-
2214
- raw_hash_set(std::initializer_list<init_type> init,
2215
- const allocator_type& alloc)
2216
- : raw_hash_set(init, 0, hasher(), key_equal(), alloc) {}
2217
-
2218
- raw_hash_set(const raw_hash_set& that)
2219
- : raw_hash_set(that, AllocTraits::select_on_container_copy_construction(
2220
- allocator_type(that.char_alloc_ref()))) {}
2221
-
2222
- raw_hash_set(const raw_hash_set& that, const allocator_type& a)
2223
- : raw_hash_set(0, that.hash_ref(), that.eq_ref(), a) {
2224
- that.AssertNotDebugCapacity();
2225
- if (that.empty()) return;
2226
- Copy(common(), GetPolicyFunctions(), that.common(),
2227
- [this](void* dst, const void* src) {
2228
- // TODO(b/413598253): type erase for trivially copyable types via
2229
- // PolicyTraits.
2230
- construct(to_slot(dst),
2231
- PolicyTraits::element(
2232
- static_cast<slot_type*>(const_cast<void*>(src))));
2233
- });
2234
- }
2235
-
2236
- ABSL_ATTRIBUTE_NOINLINE raw_hash_set(raw_hash_set&& that) noexcept(
2237
- std::is_nothrow_copy_constructible<hasher>::value &&
2238
- std::is_nothrow_copy_constructible<key_equal>::value &&
2239
- std::is_nothrow_copy_constructible<allocator_type>::value)
2240
- : // Hash, equality and allocator are copied instead of moved because
2241
- // `that` must be left valid. If Hash is std::function<Key>, moving it
2242
- // would create a nullptr functor that cannot be called.
2243
- // Note: we avoid using exchange for better generated code.
2244
- settings_(PolicyTraits::transfer_uses_memcpy() || !that.is_full_soo()
2245
- ? std::move(that.common())
2246
- : CommonFields{full_soo_tag_t{}},
2247
- that.hash_ref(), that.eq_ref(), that.char_alloc_ref()) {
2248
- if (!PolicyTraits::transfer_uses_memcpy() && that.is_full_soo()) {
2249
- transfer(soo_slot(), that.soo_slot());
2250
- }
2251
- that.common() = CommonFields::CreateDefault<SooEnabled()>();
2252
- annotate_for_bug_detection_on_move(that);
2253
- }
2254
-
2255
- raw_hash_set(raw_hash_set&& that, const allocator_type& a)
2256
- : settings_(CommonFields::CreateDefault<SooEnabled()>(), that.hash_ref(),
2257
- that.eq_ref(), a) {
2258
- if (CharAlloc(a) == that.char_alloc_ref()) {
2259
- swap_common(that);
2260
- annotate_for_bug_detection_on_move(that);
2261
- } else {
2262
- move_elements_allocs_unequal(std::move(that));
2263
- }
2264
- }
2265
-
2266
- raw_hash_set& operator=(const raw_hash_set& that) {
2267
- that.AssertNotDebugCapacity();
2268
- if (ABSL_PREDICT_FALSE(this == &that)) return *this;
2269
- constexpr bool propagate_alloc =
2270
- AllocTraits::propagate_on_container_copy_assignment::value;
2271
- // TODO(ezb): maybe avoid allocating a new backing array if this->capacity()
2272
- // is an exact match for that.size(). If this->capacity() is too big, then
2273
- // it would make iteration very slow to reuse the allocation. Maybe we can
2274
- // do the same heuristic as clear() and reuse if it's small enough.
2275
- allocator_type alloc(propagate_alloc ? that.char_alloc_ref()
2276
- : char_alloc_ref());
2277
- raw_hash_set tmp(that, alloc);
2278
- // NOLINTNEXTLINE: not returning *this for performance.
2279
- return assign_impl<propagate_alloc>(std::move(tmp));
2280
- }
2281
-
2282
- raw_hash_set& operator=(raw_hash_set&& that) noexcept(
2283
- AllocTraits::is_always_equal::value &&
2284
- std::is_nothrow_move_assignable<hasher>::value &&
2285
- std::is_nothrow_move_assignable<key_equal>::value) {
2286
- // TODO(sbenza): We should only use the operations from the noexcept clause
2287
- // to make sure we actually adhere to that contract.
2288
- // NOLINTNEXTLINE: not returning *this for performance.
2289
- return move_assign(
2290
- std::move(that),
2291
- typename AllocTraits::propagate_on_container_move_assignment());
2292
- }
2293
-
2294
- ~raw_hash_set() {
2295
- destructor_impl();
2296
- if constexpr (SwisstableAssertAccessToDestroyedTable()) {
2297
- common().set_capacity(InvalidCapacity::kDestroyed);
2298
- }
2299
- }
2300
-
2301
- iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND {
2302
- if (ABSL_PREDICT_FALSE(empty())) return end();
2303
- if (is_small()) return single_iterator();
2304
- iterator it = {control(), common().slots_union(),
2305
- common().generation_ptr()};
2306
- it.skip_empty_or_deleted();
2307
- ABSL_SWISSTABLE_ASSERT(IsFull(*it.control()));
2308
- return it;
2309
- }
2310
- iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
2311
- AssertNotDebugCapacity();
2312
- return iterator(common().generation_ptr());
2313
- }
2314
-
2315
- const_iterator begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
2316
- return const_cast<raw_hash_set*>(this)->begin();
2317
- }
2318
- const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
2319
- return const_cast<raw_hash_set*>(this)->end();
2320
- }
2321
- const_iterator cbegin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
2322
- return begin();
2323
- }
2324
- const_iterator cend() const ABSL_ATTRIBUTE_LIFETIME_BOUND { return end(); }
2325
-
2326
- bool empty() const { return !size(); }
2327
- size_t size() const {
2328
- AssertNotDebugCapacity();
2329
- return common().size();
2330
- }
2331
- size_t capacity() const {
2332
- const size_t cap = common().capacity();
2333
- // Compiler complains when using functions in ASSUME so use local variable.
2334
- [[maybe_unused]] static constexpr size_t kDefaultCapacity =
2335
- DefaultCapacity();
2336
- ABSL_ASSUME(cap >= kDefaultCapacity);
2337
- return cap;
2338
- }
2339
- size_t max_size() const { return MaxValidSize(sizeof(slot_type)); }
2340
-
2341
- ABSL_ATTRIBUTE_REINITIALIZES void clear() {
2342
- if (SwisstableGenerationsEnabled() &&
2343
- capacity() >= InvalidCapacity::kMovedFrom) {
2344
- common().set_capacity(DefaultCapacity());
2345
- }
2346
- AssertNotDebugCapacity();
2347
- // Iterating over this container is O(bucket_count()). When bucket_count()
2348
- // is much greater than size(), iteration becomes prohibitively expensive.
2349
- // For clear() it is more important to reuse the allocated array when the
2350
- // container is small because allocation takes comparatively long time
2351
- // compared to destruction of the elements of the container. So we pick the
2352
- // largest bucket_count() threshold for which iteration is still fast and
2353
- // past that we simply deallocate the array.
2354
- const size_t cap = capacity();
2355
- if (cap == 0) {
2356
- // Already guaranteed to be empty; so nothing to do.
2357
- } else if (is_small()) {
2358
- if (!empty()) {
2359
- destroy(single_slot());
2360
- decrement_small_size();
2361
- }
2362
- } else {
2363
- destroy_slots();
2364
- clear_backing_array(/*reuse=*/cap < 128);
2365
- }
2366
- common().set_reserved_growth(0);
2367
- common().set_reservation_size(0);
2368
- }
2369
-
2370
- // This overload kicks in when the argument is an rvalue of insertable and
2371
- // decomposable type other than init_type.
2372
- //
2373
- // flat_hash_map<std::string, int> m;
2374
- // m.insert(std::make_pair("abc", 42));
2375
- template <class T,
2376
- int = std::enable_if_t<IsDecomposableAndInsertable<T>::value &&
2377
- IsNotBitField<T>::value &&
2378
- !IsLifetimeBoundAssignmentFrom<T>::value,
2379
- int>()>
2380
- std::pair<iterator, bool> insert(T&& value) ABSL_ATTRIBUTE_LIFETIME_BOUND {
2381
- return emplace(std::forward<T>(value));
2382
- }
2383
-
2384
- template <class T, int&...,
2385
- std::enable_if_t<IsDecomposableAndInsertable<T>::value &&
2386
- IsNotBitField<T>::value &&
2387
- IsLifetimeBoundAssignmentFrom<T>::value,
2388
- int> = 0>
2389
- std::pair<iterator, bool> insert(
2390
- T&& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
2391
- ABSL_ATTRIBUTE_LIFETIME_BOUND {
2392
- return this->template insert<T, 0>(std::forward<T>(value));
2393
- }
2394
-
2395
- // This overload kicks in when the argument is a bitfield or an lvalue of
2396
- // insertable and decomposable type.
2397
- //
2398
- // union { int n : 1; };
2399
- // flat_hash_set<int> s;
2400
- // s.insert(n);
2401
- //
2402
- // flat_hash_set<std::string> s;
2403
- // const char* p = "hello";
2404
- // s.insert(p);
2405
- //
2406
- template <class T, int = std::enable_if_t<
2407
- IsDecomposableAndInsertable<const T&>::value &&
2408
- !IsLifetimeBoundAssignmentFrom<const T&>::value,
2409
- int>()>
2410
- std::pair<iterator, bool> insert(const T& value)
2411
- ABSL_ATTRIBUTE_LIFETIME_BOUND {
2412
- return emplace(value);
2413
- }
2414
- template <class T, int&...,
2415
- std::enable_if_t<IsDecomposableAndInsertable<const T&>::value &&
2416
- IsLifetimeBoundAssignmentFrom<const T&>::value,
2417
- int> = 0>
2418
- std::pair<iterator, bool> insert(
2419
- const T& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
2420
- ABSL_ATTRIBUTE_LIFETIME_BOUND {
2421
- return this->template insert<T, 0>(value);
2422
- }
2423
-
2424
- // This overload kicks in when the argument is an rvalue of init_type. Its
2425
- // purpose is to handle brace-init-list arguments.
2426
- //
2427
- // flat_hash_map<std::string, int> s;
2428
- // s.insert({"abc", 42});
2429
- std::pair<iterator, bool> insert(init_type&& value)
2430
- ABSL_ATTRIBUTE_LIFETIME_BOUND
2431
- #if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
2432
- requires(!IsLifetimeBoundAssignmentFrom<init_type>::value)
2433
- #endif
2434
- {
2435
- return emplace(std::move(value));
2436
- }
2437
- #if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
2438
- std::pair<iterator, bool> insert(
2439
- init_type&& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
2440
- ABSL_ATTRIBUTE_LIFETIME_BOUND
2441
- requires(IsLifetimeBoundAssignmentFrom<init_type>::value)
2442
- {
2443
- return emplace(std::move(value));
2444
- }
2445
- #endif
2446
-
2447
- template <class T,
2448
- int = std::enable_if_t<IsDecomposableAndInsertable<T>::value &&
2449
- IsNotBitField<T>::value &&
2450
- !IsLifetimeBoundAssignmentFrom<T>::value,
2451
- int>()>
2452
- iterator insert(const_iterator, T&& value) ABSL_ATTRIBUTE_LIFETIME_BOUND {
2453
- return insert(std::forward<T>(value)).first;
2454
- }
2455
- template <class T, int&...,
2456
- std::enable_if_t<IsDecomposableAndInsertable<T>::value &&
2457
- IsNotBitField<T>::value &&
2458
- IsLifetimeBoundAssignmentFrom<T>::value,
2459
- int> = 0>
2460
- iterator insert(const_iterator hint,
2461
- T&& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
2462
- ABSL_ATTRIBUTE_LIFETIME_BOUND {
2463
- return this->template insert<T, 0>(hint, std::forward<T>(value));
2464
- }
2465
-
2466
- template <class T, std::enable_if_t<
2467
- IsDecomposableAndInsertable<const T&>::value, int> = 0>
2468
- iterator insert(const_iterator,
2469
- const T& value) ABSL_ATTRIBUTE_LIFETIME_BOUND {
2470
- return insert(value).first;
2471
- }
2472
-
2473
- iterator insert(const_iterator,
2474
- init_type&& value) ABSL_ATTRIBUTE_LIFETIME_BOUND {
2475
- return insert(std::move(value)).first;
2476
- }
2477
-
2478
- template <class InputIt>
2479
- void insert(InputIt first, InputIt last) {
2480
- insert_range(first, last);
2481
- }
2482
-
2483
- template <class T, RequiresNotInit<T> = 0,
2484
- std::enable_if_t<Insertable<const T&>::value, int> = 0>
2485
- void insert(std::initializer_list<T> ilist) {
2486
- insert_range(ilist.begin(), ilist.end());
2487
- }
2488
-
2489
- void insert(std::initializer_list<init_type> ilist) {
2490
- insert_range(ilist.begin(), ilist.end());
2491
- }
2492
-
2493
- insert_return_type insert(node_type&& node) ABSL_ATTRIBUTE_LIFETIME_BOUND {
2494
- if (!node) return {end(), false, node_type()};
2495
- const auto& elem = PolicyTraits::element(CommonAccess::GetSlot(node));
2496
- auto res = PolicyTraits::apply(
2497
- InsertSlot<false>{*this, std::move(*CommonAccess::GetSlot(node))},
2498
- elem);
2499
- if (res.second) {
2500
- CommonAccess::Reset(&node);
2501
- return {res.first, true, node_type()};
2502
- } else {
2503
- return {res.first, false, std::move(node)};
2504
- }
2505
- }
2506
-
2507
- iterator insert(const_iterator,
2508
- node_type&& node) ABSL_ATTRIBUTE_LIFETIME_BOUND {
2509
- auto res = insert(std::move(node));
2510
- node = std::move(res.node);
2511
- return res.position;
2512
- }
2513
-
2514
- // This overload kicks in if we can deduce the key from args. This enables us
2515
- // to avoid constructing value_type if an entry with the same key already
2516
- // exists.
2517
- //
2518
- // For example:
2519
- //
2520
- // flat_hash_map<std::string, std::string> m = {{"abc", "def"}};
2521
- // // Creates no std::string copies and makes no heap allocations.
2522
- // m.emplace("abc", "xyz");
2523
- template <class... Args,
2524
- std::enable_if_t<IsDecomposable<Args...>::value, int> = 0>
2525
- std::pair<iterator, bool> emplace(Args&&... args)
2526
- ABSL_ATTRIBUTE_LIFETIME_BOUND {
2527
- return PolicyTraits::apply(EmplaceDecomposable{*this},
2528
- std::forward<Args>(args)...);
2529
- }
2530
-
2531
- // This overload kicks in if we cannot deduce the key from args. It constructs
2532
- // value_type unconditionally and then either moves it into the table or
2533
- // destroys.
2534
- template <class... Args,
2535
- std::enable_if_t<!IsDecomposable<Args...>::value, int> = 0>
2536
- std::pair<iterator, bool> emplace(Args&&... args)
2537
- ABSL_ATTRIBUTE_LIFETIME_BOUND {
2538
- alignas(slot_type) unsigned char raw[sizeof(slot_type)];
2539
- slot_type* slot = to_slot(&raw);
2540
-
2541
- construct(slot, std::forward<Args>(args)...);
2542
- const auto& elem = PolicyTraits::element(slot);
2543
- return PolicyTraits::apply(InsertSlot<true>{*this, std::move(*slot)}, elem);
2544
- }
2545
-
2546
- template <class... Args>
2547
- iterator emplace_hint(const_iterator,
2548
- Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
2549
- return emplace(std::forward<Args>(args)...).first;
2550
- }
2551
-
2552
- // Extension API: support for lazy emplace.
2553
- //
2554
- // Looks up key in the table. If found, returns the iterator to the element.
2555
- // Otherwise calls `f` with one argument of type `raw_hash_set::constructor`,
2556
- // and returns an iterator to the new element.
2557
- //
2558
- // `f` must abide by several restrictions:
2559
- // - it MUST call `raw_hash_set::constructor` with arguments as if a
2560
- // `raw_hash_set::value_type` is constructed,
2561
- // - it MUST NOT access the container before the call to
2562
- // `raw_hash_set::constructor`, and
2563
- // - it MUST NOT erase the lazily emplaced element.
2564
- // Doing any of these is undefined behavior.
2565
- //
2566
- // For example:
2567
- //
2568
- // std::unordered_set<ArenaString> s;
2569
- // // Makes ArenaStr even if "abc" is in the map.
2570
- // s.insert(ArenaString(&arena, "abc"));
2571
- //
2572
- // flat_hash_set<ArenaStr> s;
2573
- // // Makes ArenaStr only if "abc" is not in the map.
2574
- // s.lazy_emplace("abc", [&](const constructor& ctor) {
2575
- // ctor(&arena, "abc");
2576
- // });
2577
- //
2578
- // WARNING: This API is currently experimental. If there is a way to implement
2579
- // the same thing with the rest of the API, prefer that.
2580
- class constructor {
2581
- friend class raw_hash_set;
2582
-
2583
- public:
2584
- template <class... Args>
2585
- void operator()(Args&&... args) const {
2586
- ABSL_SWISSTABLE_ASSERT(*slot_);
2587
- PolicyTraits::construct(alloc_, *slot_, std::forward<Args>(args)...);
2588
- *slot_ = nullptr;
2589
- }
2590
-
2591
- private:
2592
- constructor(allocator_type* a, slot_type** slot) : alloc_(a), slot_(slot) {}
2593
-
2594
- allocator_type* alloc_;
2595
- slot_type** slot_;
2596
- };
2597
-
2598
- template <class K = key_type, class F>
2599
- iterator lazy_emplace(const key_arg<K>& key,
2600
- F&& f) ABSL_ATTRIBUTE_LIFETIME_BOUND {
2601
- auto res = find_or_prepare_insert(key);
2602
- if (res.second) {
2603
- slot_type* slot = res.first.slot();
2604
- allocator_type alloc(char_alloc_ref());
2605
- std::forward<F>(f)(constructor(&alloc, &slot));
2606
- ABSL_SWISSTABLE_ASSERT(!slot);
2607
- }
2608
- return res.first;
2609
- }
2610
-
2611
- // Extension API: support for heterogeneous keys.
2612
- //
2613
- // std::unordered_set<std::string> s;
2614
- // // Turns "abc" into std::string.
2615
- // s.erase("abc");
2616
- //
2617
- // flat_hash_set<std::string> s;
2618
- // // Uses "abc" directly without copying it into std::string.
2619
- // s.erase("abc");
2620
- template <class K = key_type>
2621
- size_type erase(const key_arg<K>& key) {
2622
- auto it = find(key);
2623
- if (it == end()) return 0;
2624
- erase(it);
2625
- return 1;
2626
- }
2627
-
2628
- // Erases the element pointed to by `it`. Unlike `std::unordered_set::erase`,
2629
- // this method returns void to reduce algorithmic complexity to O(1). The
2630
- // iterator is invalidated so any increment should be done before calling
2631
- // erase (e.g. `erase(it++)`).
2632
- void erase(const_iterator cit) { erase(cit.inner_); }
2633
-
2634
- // This overload is necessary because otherwise erase<K>(const K&) would be
2635
- // a better match if non-const iterator is passed as an argument.
2636
- void erase(iterator it) {
2637
- ABSL_SWISSTABLE_ASSERT(capacity() > 0);
2638
- AssertNotDebugCapacity();
2639
- it.assert_is_full("erase()");
2640
- destroy(it.slot());
2641
- erase_meta_only(it);
2642
- }
2643
-
2644
- iterator erase(const_iterator first,
2645
- const_iterator last) ABSL_ATTRIBUTE_LIFETIME_BOUND {
2646
- AssertNotDebugCapacity();
2647
- // We check for empty first because clear_backing_array requires that
2648
- // capacity() > 0 as a precondition.
2649
- if (empty()) return end();
2650
- if (first == last) return last.inner_;
2651
- if (is_small()) {
2652
- destroy(single_slot());
2653
- erase_meta_only_small();
2654
- return end();
2655
- }
2656
- if (first == begin() && last == end()) {
2657
- // TODO(ezb): we access control bytes in destroy_slots so it could make
2658
- // sense to combine destroy_slots and clear_backing_array to avoid cache
2659
- // misses when the table is large. Note that we also do this in clear().
2660
- destroy_slots();
2661
- clear_backing_array(/*reuse=*/true);
2662
- common().set_reserved_growth(common().reservation_size());
2663
- return end();
2664
- }
2665
- while (first != last) {
2666
- erase(first++);
2667
- }
2668
- return last.inner_;
2669
- }
2670
-
2671
- // Moves elements from `src` into `this`.
2672
- // If the element already exists in `this`, it is left unmodified in `src`.
2673
- template <
2674
- typename... Params2,
2675
- typename = std::enable_if_t<std::is_same_v<
2676
- Alloc, typename raw_hash_set<Policy, Params2...>::allocator_type>>>
2677
- void merge(raw_hash_set<Policy, Params2...>& src) { // NOLINT
2678
- AssertNotDebugCapacity();
2679
- src.AssertNotDebugCapacity();
2680
- assert(this != &src);
2681
- // Returns whether insertion took place.
2682
- const auto insert_slot = [this](slot_type* src_slot) {
2683
- return PolicyTraits::apply(InsertSlot<false>{*this, std::move(*src_slot)},
2684
- PolicyTraits::element(src_slot))
2685
- .second;
2686
- };
2687
-
2688
- if (src.is_small()) {
2689
- if (src.empty()) return;
2690
- if (insert_slot(src.single_slot()))
2691
- src.erase_meta_only_small();
2692
- return;
2693
- }
2694
- for (auto it = src.begin(), e = src.end(); it != e;) {
2695
- auto next = std::next(it);
2696
- if (insert_slot(it.slot())) src.erase_meta_only_large(it);
2697
- it = next;
2698
- }
2699
- }
2700
-
2701
- template <
2702
- typename... Params2,
2703
- typename = std::enable_if_t<std::is_same_v<
2704
- Alloc, typename raw_hash_set<Policy, Params2...>::allocator_type>>>
2705
- void merge(raw_hash_set<Policy, Params2...>&& src) { // NOLINT
2706
- merge(src);
2707
- }
2708
-
2709
- node_type extract(const_iterator position) {
2710
- AssertNotDebugCapacity();
2711
- position.inner_.assert_is_full("extract()");
2712
- allocator_type alloc(char_alloc_ref());
2713
- auto node = CommonAccess::Transfer<node_type>(alloc, position.slot());
2714
- erase_meta_only(position);
2715
- return node;
2716
- }
2717
-
2718
- template <class K = key_type,
2719
- std::enable_if_t<!std::is_same<K, iterator>::value, int> = 0>
2720
- node_type extract(const key_arg<K>& key) {
2721
- auto it = find(key);
2722
- return it == end() ? node_type() : extract(const_iterator{it});
2723
- }
2724
-
2725
- void swap(raw_hash_set& that) noexcept(
2726
- AllocTraits::is_always_equal::value &&
2727
- std::is_nothrow_swappable<hasher>::value &&
2728
- std::is_nothrow_swappable<key_equal>::value) {
2729
- AssertNotDebugCapacity();
2730
- that.AssertNotDebugCapacity();
2731
- using std::swap;
2732
- swap_common(that);
2733
- swap(hash_ref(), that.hash_ref());
2734
- swap(eq_ref(), that.eq_ref());
2735
- SwapAlloc(char_alloc_ref(), that.char_alloc_ref(),
2736
- typename AllocTraits::propagate_on_container_swap{});
2737
- }
2738
-
2739
- void rehash(size_t n) { Rehash(common(), GetPolicyFunctions(), n); }
2740
-
2741
- void reserve(size_t n) {
2742
- if (ABSL_PREDICT_TRUE(n > DefaultCapacity())) {
2743
- ReserveTableToFitNewSize(common(), GetPolicyFunctions(), n);
2744
- }
2745
- }
2746
-
2747
- // Extension API: support for heterogeneous keys.
2748
- //
2749
- // std::unordered_set<std::string> s;
2750
- // // Turns "abc" into std::string.
2751
- // s.count("abc");
2752
- //
2753
- // ch_set<std::string> s;
2754
- // // Uses "abc" directly without copying it into std::string.
2755
- // s.count("abc");
2756
- template <class K = key_type>
2757
- size_t count(const key_arg<K>& key) const {
2758
- return find(key) == end() ? 0 : 1;
2759
- }
2760
-
2761
- // Issues CPU prefetch instructions for the memory needed to find or insert
2762
- // a key. Like all lookup functions, this support heterogeneous keys.
2763
- //
2764
- // NOTE: This is a very low level operation and should not be used without
2765
- // specific benchmarks indicating its importance.
2766
- template <class K = key_type>
2767
- void prefetch([[maybe_unused]] const key_arg<K>& key) const {
2768
- if (capacity() == DefaultCapacity()) return;
2769
- // Avoid probing if we won't be able to prefetch the addresses received.
2770
- #ifdef ABSL_HAVE_PREFETCH
2771
- prefetch_heap_block();
2772
- if (is_small()) return;
2773
- auto seq = probe(common(), hash_of(key));
2774
- PrefetchToLocalCache(control() + seq.offset());
2775
- PrefetchToLocalCache(slot_array() + seq.offset());
2776
- #endif // ABSL_HAVE_PREFETCH
2777
- }
2778
-
2779
- template <class K = key_type>
2780
- ABSL_DEPRECATE_AND_INLINE()
2781
- iterator find(const key_arg<K>& key,
2782
- size_t) ABSL_ATTRIBUTE_LIFETIME_BOUND {
2783
- return find(key);
2784
- }
2785
- // The API of find() has one extension: the type of the key argument doesn't
2786
- // have to be key_type. This is so called heterogeneous key support.
2787
- template <class K = key_type>
2788
- iterator find(const key_arg<K>& key) ABSL_ATTRIBUTE_LIFETIME_BOUND {
2789
- AssertOnFind(key);
2790
- if (is_small()) return find_small(key);
2791
- prefetch_heap_block();
2792
- return find_large(key, hash_of(key));
2793
- }
2794
-
2795
- template <class K = key_type>
2796
- ABSL_DEPRECATE_AND_INLINE()
2797
- const_iterator find(const key_arg<K>& key,
2798
- size_t) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
2799
- return find(key);
2800
- }
2801
- template <class K = key_type>
2802
- const_iterator find(const key_arg<K>& key) const
2803
- ABSL_ATTRIBUTE_LIFETIME_BOUND {
2804
- return const_cast<raw_hash_set*>(this)->find(key);
2805
- }
2806
-
2807
- template <class K = key_type>
2808
- bool contains(const key_arg<K>& key) const {
2809
- // Here neither the iterator returned by `find()` nor `end()` can be invalid
2810
- // outside of potential thread-safety issues.
2811
- // `find()`'s return value is constructed, used, and then destructed
2812
- // all in this context.
2813
- return !find(key).unchecked_equals(end());
2814
- }
2815
-
2816
- template <class K = key_type>
2817
- std::pair<iterator, iterator> equal_range(const key_arg<K>& key)
2818
- ABSL_ATTRIBUTE_LIFETIME_BOUND {
2819
- auto it = find(key);
2820
- if (it != end()) return {it, std::next(it)};
2821
- return {it, it};
2822
- }
2823
- template <class K = key_type>
2824
- std::pair<const_iterator, const_iterator> equal_range(
2825
- const key_arg<K>& key) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
2826
- auto it = find(key);
2827
- if (it != end()) return {it, std::next(it)};
2828
- return {it, it};
2829
- }
2830
-
2831
- size_t bucket_count() const { return capacity(); }
2832
- float load_factor() const {
2833
- return capacity() ? static_cast<double>(size()) / capacity() : 0.0;
2834
- }
2835
- float max_load_factor() const { return 1.0f; }
2836
- void max_load_factor(float) {
2837
- // Does nothing.
2838
- }
2839
-
2840
- hasher hash_function() const { return hash_ref(); }
2841
- key_equal key_eq() const { return eq_ref(); }
2842
- allocator_type get_allocator() const {
2843
- return allocator_type(char_alloc_ref());
2844
- }
2845
-
2846
- friend bool operator==(const raw_hash_set& a, const raw_hash_set& b) {
2847
- if (a.size() != b.size()) return false;
2848
- const raw_hash_set* outer = &a;
2849
- const raw_hash_set* inner = &b;
2850
- if (outer->capacity() > inner->capacity()) std::swap(outer, inner);
2851
- for (const value_type& elem : *outer) {
2852
- auto it = PolicyTraits::apply(FindElement{*inner}, elem);
2853
- if (it == inner->end()) return false;
2854
- // Note: we used key_equal to check for key equality in FindElement, but
2855
- // we may need to do an additional comparison using
2856
- // value_type::operator==. E.g. the keys could be equal and the
2857
- // mapped_types could be unequal in a map or even in a set, key_equal
2858
- // could ignore some fields that aren't ignored by operator==.
2859
- static constexpr bool kKeyEqIsValueEq =
2860
- std::is_same<key_type, value_type>::value &&
2861
- std::is_same<key_equal, hash_default_eq<key_type>>::value;
2862
- if (!kKeyEqIsValueEq && !(*it == elem)) return false;
2863
- }
2864
- return true;
2865
- }
2866
-
2867
- friend bool operator!=(const raw_hash_set& a, const raw_hash_set& b) {
2868
- return !(a == b);
2869
- }
2870
-
2871
- template <typename H>
2872
- friend typename std::enable_if<H::template is_hashable<value_type>::value,
2873
- H>::type
2874
- AbslHashValue(H h, const raw_hash_set& s) {
2875
- return H::combine(H::combine_unordered(std::move(h), s.begin(), s.end()),
2876
- hash_internal::WeaklyMixedInteger{s.size()});
2877
- }
2878
-
2879
- friend void swap(raw_hash_set& a,
2880
- raw_hash_set& b) noexcept(noexcept(a.swap(b))) {
2881
- a.swap(b);
2882
- }
2883
-
2884
- private:
2885
- template <class Container, typename Enabler>
2886
- friend struct absl::container_internal::hashtable_debug_internal::
2887
- HashtableDebugAccess;
2888
-
2889
- friend struct absl::container_internal::HashtableFreeFunctionsAccess;
2890
-
2891
- struct FindElement {
2892
- template <class K, class... Args>
2893
- const_iterator operator()(const K& key, Args&&...) const {
2894
- return s.find(key);
2895
- }
2896
- const raw_hash_set& s;
2897
- };
2898
-
2899
- struct EmplaceDecomposable {
2900
- template <class K, class... Args>
2901
- std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
2902
- auto res = s.find_or_prepare_insert(key);
2903
- if (res.second) {
2904
- s.emplace_at(res.first, std::forward<Args>(args)...);
2905
- }
2906
- return res;
2907
- }
2908
- raw_hash_set& s;
2909
- };
2910
-
2911
- template <bool do_destroy>
2912
- struct InsertSlot {
2913
- template <class K, class... Args>
2914
- std::pair<iterator, bool> operator()(const K& key, Args&&...) && {
2915
- auto res = s.find_or_prepare_insert(key);
2916
- if (res.second) {
2917
- s.transfer(res.first.slot(), &slot);
2918
- } else if (do_destroy) {
2919
- s.destroy(&slot);
2920
- }
2921
- return res;
2922
- }
2923
- raw_hash_set& s;
2924
- // Constructed slot. Either moved into place or destroyed.
2925
- slot_type&& slot;
2926
- };
2927
-
2928
- template <typename... Args>
2929
- inline void construct(slot_type* slot, Args&&... args) {
2930
- common().RunWithReentrancyGuard([&] {
2931
- allocator_type alloc(char_alloc_ref());
2932
- PolicyTraits::construct(&alloc, slot, std::forward<Args>(args)...);
2933
- });
2934
- }
2935
- inline void destroy(slot_type* slot) {
2936
- common().RunWithReentrancyGuard([&] {
2937
- allocator_type alloc(char_alloc_ref());
2938
- PolicyTraits::destroy(&alloc, slot);
2939
- });
2940
- }
2941
- inline void transfer(slot_type* to, slot_type* from) {
2942
- common().RunWithReentrancyGuard([&] {
2943
- allocator_type alloc(char_alloc_ref());
2944
- PolicyTraits::transfer(&alloc, to, from);
2945
- });
2946
- }
2947
-
2948
- // TODO(b/289225379): consider having a helper class that has the impls for
2949
- // SOO functionality.
2950
- template <class K = key_type>
2951
- iterator find_small(const key_arg<K>& key) {
2952
- ABSL_SWISSTABLE_ASSERT(is_small());
2953
- return empty() || !equal_to(key, single_slot()) ? end() : single_iterator();
2954
- }
2955
-
2956
- template <class K = key_type>
2957
- iterator find_large(const key_arg<K>& key, size_t hash) {
2958
- ABSL_SWISSTABLE_ASSERT(!is_small());
2959
- auto seq = probe(common(), hash);
2960
- const h2_t h2 = H2(hash);
2961
- const ctrl_t* ctrl = control();
2962
- while (true) {
2963
- #ifndef ABSL_HAVE_MEMORY_SANITIZER
2964
- absl::PrefetchToLocalCache(slot_array() + seq.offset());
2965
- #endif
2966
- Group g{ctrl + seq.offset()};
2967
- for (uint32_t i : g.Match(h2)) {
2968
- if (ABSL_PREDICT_TRUE(equal_to(key, slot_array() + seq.offset(i))))
2969
- return iterator_at(seq.offset(i));
2970
- }
2971
- if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
2972
- seq.next();
2973
- ABSL_SWISSTABLE_ASSERT(seq.index() <= capacity() && "full table!");
2974
- }
2975
- }
2976
-
2977
- // Returns true if the table needs to be sampled.
2978
- // This should be called on insertion into an empty SOO table and in copy
2979
- // construction when the size can fit in SOO capacity.
2980
- bool should_sample_soo() const {
2981
- ABSL_SWISSTABLE_ASSERT(is_soo());
2982
- if (!ShouldSampleHashtablezInfoForAlloc<CharAlloc>()) return false;
2983
- return ABSL_PREDICT_FALSE(ShouldSampleNextTable());
2984
- }
2985
-
2986
- void clear_backing_array(bool reuse) {
2987
- ABSL_SWISSTABLE_ASSERT(capacity() > DefaultCapacity());
2988
- ClearBackingArray(common(), GetPolicyFunctions(), &char_alloc_ref(), reuse,
2989
- SooEnabled());
2990
- }
2991
-
2992
- void destroy_slots() {
2993
- ABSL_SWISSTABLE_ASSERT(!is_small());
2994
- if (PolicyTraits::template destroy_is_trivial<Alloc>()) return;
2995
- auto destroy_slot = [&](const ctrl_t*, void* slot) {
2996
- this->destroy(static_cast<slot_type*>(slot));
2997
- };
2998
- if constexpr (SwisstableAssertAccessToDestroyedTable()) {
2999
- CommonFields common_copy(non_soo_tag_t{}, this->common());
3000
- common().set_capacity(InvalidCapacity::kDestroyed);
3001
- IterateOverFullSlots(common_copy, sizeof(slot_type), destroy_slot);
3002
- common().set_capacity(common_copy.capacity());
3003
- } else {
3004
- IterateOverFullSlots(common(), sizeof(slot_type), destroy_slot);
3005
- }
3006
- }
3007
-
3008
- void dealloc() {
3009
- ABSL_SWISSTABLE_ASSERT(capacity() > DefaultCapacity());
3010
- // Unpoison before returning the memory to the allocator.
3011
- SanitizerUnpoisonMemoryRegion(slot_array(), sizeof(slot_type) * capacity());
3012
- infoz().Unregister();
3013
- DeallocateBackingArray<BackingArrayAlignment(alignof(slot_type)),
3014
- CharAlloc>(&char_alloc_ref(), capacity(), control(),
3015
- sizeof(slot_type), alignof(slot_type),
3016
- common().has_infoz());
3017
- }
3018
-
3019
- void destructor_impl() {
3020
- if (SwisstableGenerationsEnabled() &&
3021
- capacity() >= InvalidCapacity::kMovedFrom) {
3022
- return;
3023
- }
3024
- if (capacity() == 0) return;
3025
- if (is_small()) {
3026
- if (!empty()) {
3027
- ABSL_SWISSTABLE_IGNORE_UNINITIALIZED(destroy(single_slot()));
3028
- }
3029
- if constexpr (SooEnabled()) return;
3030
- } else {
3031
- destroy_slots();
3032
- }
3033
- dealloc();
3034
- }
3035
-
3036
- // Erases, but does not destroy, the value pointed to by `it`.
3037
- //
3038
- // This merely updates the pertinent control byte. This can be used in
3039
- // conjunction with Policy::transfer to move the object to another place.
3040
- void erase_meta_only(const_iterator it) {
3041
- if (is_small()) {
3042
- erase_meta_only_small();
3043
- return;
3044
- }
3045
- erase_meta_only_large(it);
3046
- }
3047
- void erase_meta_only_small() {
3048
- EraseMetaOnlySmall(common(), SooEnabled(), sizeof(slot_type));
3049
- }
3050
- void erase_meta_only_large(const_iterator it) {
3051
- EraseMetaOnlyLarge(common(), it.control(), sizeof(slot_type));
3052
- }
3053
-
3054
- template <class K>
3055
- ABSL_ATTRIBUTE_ALWAYS_INLINE bool equal_to(const K& key,
3056
- slot_type* slot) const {
3057
- return PolicyTraits::apply(EqualElement<K, key_equal>{key, eq_ref()},
3058
- PolicyTraits::element(slot));
3059
- }
3060
- template <class K>
3061
- ABSL_ATTRIBUTE_ALWAYS_INLINE size_t hash_of(const K& key) const {
3062
- return HashElement<hasher, kIsDefaultHash>{hash_ref(),
3063
- common().seed().seed()}(key);
3064
- }
3065
- ABSL_ATTRIBUTE_ALWAYS_INLINE size_t hash_of(slot_type* slot) const {
3066
- return PolicyTraits::apply(
3067
- HashElement<hasher, kIsDefaultHash>{hash_ref(), common().seed().seed()},
3068
- PolicyTraits::element(slot));
3069
- }
3070
-
3071
- // Casting directly from e.g. char* to slot_type* can cause compilation errors
3072
- // on objective-C. This function converts to void* first, avoiding the issue.
3073
- static ABSL_ATTRIBUTE_ALWAYS_INLINE slot_type* to_slot(void* buf) {
3074
- return static_cast<slot_type*>(buf);
3075
- }
3076
-
3077
- // Requires that lhs does not have a full SOO slot.
3078
- static void move_common(bool rhs_is_full_soo, CharAlloc& rhs_alloc,
3079
- CommonFields& lhs, CommonFields&& rhs) {
3080
- if (PolicyTraits::transfer_uses_memcpy() || !rhs_is_full_soo) {
3081
- lhs = std::move(rhs);
3082
- } else {
3083
- lhs.move_non_heap_or_soo_fields(rhs);
3084
- rhs.RunWithReentrancyGuard([&] {
3085
- lhs.RunWithReentrancyGuard([&] {
3086
- PolicyTraits::transfer(&rhs_alloc, to_slot(lhs.soo_data()),
3087
- to_slot(rhs.soo_data()));
3088
- });
3089
- });
3090
- }
3091
- }
3092
-
3093
- // Swaps common fields making sure to avoid memcpy'ing a full SOO slot if we
3094
- // aren't allowed to do so.
3095
- void swap_common(raw_hash_set& that) {
3096
- using std::swap;
3097
- if (PolicyTraits::transfer_uses_memcpy()) {
3098
- swap(common(), that.common());
3099
- return;
3100
- }
3101
- CommonFields tmp = CommonFields(uninitialized_tag_t{});
3102
- const bool that_is_full_soo = that.is_full_soo();
3103
- move_common(that_is_full_soo, that.char_alloc_ref(), tmp,
3104
- std::move(that.common()));
3105
- move_common(is_full_soo(), char_alloc_ref(), that.common(),
3106
- std::move(common()));
3107
- move_common(that_is_full_soo, that.char_alloc_ref(), common(),
3108
- std::move(tmp));
3109
- }
3110
-
3111
- void annotate_for_bug_detection_on_move([[maybe_unused]] raw_hash_set& that) {
3112
- // We only enable moved-from validation when generations are enabled (rather
3113
- // than using NDEBUG) to avoid issues in which NDEBUG is enabled in some
3114
- // translation units but not in others.
3115
- if (SwisstableGenerationsEnabled()) {
3116
- that.common().set_capacity(this == &that ? InvalidCapacity::kSelfMovedFrom
3117
- : InvalidCapacity::kMovedFrom);
3118
- }
3119
- if (!SwisstableGenerationsEnabled() || capacity() == DefaultCapacity() ||
3120
- capacity() > kAboveMaxValidCapacity) {
3121
- return;
3122
- }
3123
- common().increment_generation();
3124
- if (!empty() && common().should_rehash_for_bug_detection_on_move()) {
3125
- ResizeAllocatedTableWithSeedChange(common(), GetPolicyFunctions(),
3126
- capacity());
3127
- }
3128
- }
3129
-
3130
- template <bool propagate_alloc>
3131
- raw_hash_set& assign_impl(raw_hash_set&& that) {
3132
- // We don't bother checking for this/that aliasing. We just need to avoid
3133
- // breaking the invariants in that case.
3134
- destructor_impl();
3135
- move_common(that.is_full_soo(), that.char_alloc_ref(), common(),
3136
- std::move(that.common()));
3137
- hash_ref() = that.hash_ref();
3138
- eq_ref() = that.eq_ref();
3139
- CopyAlloc(char_alloc_ref(), that.char_alloc_ref(),
3140
- std::integral_constant<bool, propagate_alloc>());
3141
- that.common() = CommonFields::CreateDefault<SooEnabled()>();
3142
- annotate_for_bug_detection_on_move(that);
3143
- return *this;
3144
- }
3145
-
3146
- raw_hash_set& move_elements_allocs_unequal(raw_hash_set&& that) {
3147
- const size_t size = that.size();
3148
- if (size == 0) return *this;
3149
- reserve(size);
3150
- for (iterator it = that.begin(); it != that.end(); ++it) {
3151
- insert(std::move(PolicyTraits::element(it.slot())));
3152
- that.destroy(it.slot());
3153
- }
3154
- if (!that.is_soo()) that.dealloc();
3155
- that.common() = CommonFields::CreateDefault<SooEnabled()>();
3156
- annotate_for_bug_detection_on_move(that);
3157
- return *this;
3158
- }
3159
-
3160
- raw_hash_set& move_assign(raw_hash_set&& that,
3161
- std::true_type /*propagate_alloc*/) {
3162
- return assign_impl<true>(std::move(that));
3163
- }
3164
- raw_hash_set& move_assign(raw_hash_set&& that,
3165
- std::false_type /*propagate_alloc*/) {
3166
- if (char_alloc_ref() == that.char_alloc_ref()) {
3167
- return assign_impl<false>(std::move(that));
3168
- }
3169
- // Aliasing can't happen here because allocs would compare equal above.
3170
- assert(this != &that);
3171
- destructor_impl();
3172
- // We can't take over that's memory so we need to move each element.
3173
- // While moving elements, this should have that's hash/eq so copy hash/eq
3174
- // before moving elements.
3175
- hash_ref() = that.hash_ref();
3176
- eq_ref() = that.eq_ref();
3177
- return move_elements_allocs_unequal(std::move(that));
3178
- }
3179
-
3180
- template <class K>
3181
- std::pair<iterator, bool> find_or_prepare_insert_soo(const K& key) {
3182
- ABSL_SWISSTABLE_ASSERT(is_soo());
3183
- bool force_sampling;
3184
- if (empty()) {
3185
- if (!should_sample_soo()) {
3186
- common().set_full_soo();
3187
- return {single_iterator(), true};
3188
- }
3189
- force_sampling = true;
3190
- } else if (equal_to(key, single_slot())) {
3191
- return {single_iterator(), false};
3192
- } else {
3193
- force_sampling = false;
3194
- }
3195
- ABSL_SWISSTABLE_ASSERT(capacity() == 1);
3196
- constexpr bool kUseMemcpy =
3197
- PolicyTraits::transfer_uses_memcpy() && SooEnabled();
3198
- size_t index = GrowSooTableToNextCapacityAndPrepareInsert<
3199
- kUseMemcpy ? OptimalMemcpySizeForSooSlotTransfer(sizeof(slot_type)) : 0,
3200
- kUseMemcpy>(common(), GetPolicyFunctions(),
3201
- HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key},
3202
- force_sampling);
3203
- return {iterator_at(index), true};
3204
- }
3205
-
3206
- template <class K>
3207
- std::pair<iterator, bool> find_or_prepare_insert_small(const K& key) {
3208
- ABSL_SWISSTABLE_ASSERT(is_small());
3209
- if constexpr (SooEnabled()) {
3210
- return find_or_prepare_insert_soo(key);
3211
- }
3212
- if (!empty()) {
3213
- if (equal_to(key, single_slot())) {
3214
- common().infoz().RecordInsertHit();
3215
- return {single_iterator(), false};
3216
- }
3217
- }
3218
- return {iterator_at_ptr(PrepareInsertSmallNonSoo(
3219
- common(), GetPolicyFunctions(),
3220
- HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})),
3221
- true};
3222
- }
3223
-
3224
- template <class K>
3225
- std::pair<iterator, bool> find_or_prepare_insert_large(const K& key) {
3226
- ABSL_SWISSTABLE_ASSERT(!is_soo());
3227
- prefetch_heap_block();
3228
- const size_t hash = hash_of(key);
3229
- auto seq = probe(common(), hash);
3230
- const h2_t h2 = H2(hash);
3231
- const ctrl_t* ctrl = control();
3232
- size_t index;
3233
- bool inserted;
3234
- // We use a lambda function to be able to exit from the nested loop without
3235
- // duplicating generated code for the return statement (e.g. iterator_at).
3236
- [&]() ABSL_ATTRIBUTE_ALWAYS_INLINE {
3237
- while (true) {
3238
- #ifndef ABSL_HAVE_MEMORY_SANITIZER
3239
- absl::PrefetchToLocalCache(slot_array() + seq.offset());
3240
- #endif
3241
- Group g{ctrl + seq.offset()};
3242
- for (uint32_t i : g.Match(h2)) {
3243
- if (ABSL_PREDICT_TRUE(equal_to(key, slot_array() + seq.offset(i)))) {
3244
- index = seq.offset(i);
3245
- inserted = false;
3246
- common().infoz().RecordInsertHit();
3247
- return;
3248
- }
3249
- }
3250
- auto mask_empty = g.MaskEmpty();
3251
- if (ABSL_PREDICT_TRUE(mask_empty)) {
3252
- size_t target_group_offset = seq.offset();
3253
- index = SwisstableGenerationsEnabled()
3254
- ? PrepareInsertLargeGenerationsEnabled(
3255
- common(), GetPolicyFunctions(), hash, mask_empty,
3256
- FindInfo{target_group_offset, seq.index()},
3257
- HashKey<hasher, K, kIsDefaultHash>{hash_ref(), key})
3258
- : PrepareInsertLarge(
3259
- common(), GetPolicyFunctions(), hash, mask_empty,
3260
- FindInfo{target_group_offset, seq.index()});
3261
- inserted = true;
3262
- return;
3263
- }
3264
- seq.next();
3265
- ABSL_SWISSTABLE_ASSERT(seq.index() <= capacity() && "full table!");
3266
- }
3267
- }();
3268
- return {iterator_at(index), inserted};
3269
- }
3270
-
3271
- template <class InputIt>
3272
- void insert_range(InputIt first, InputIt last) {
3273
- for (; first != last; ++first) emplace(*first);
3274
- }
3275
-
3276
- protected:
3277
- // Asserts for correctness that we run on find/find_or_prepare_insert.
3278
- template <class K>
3279
- void AssertOnFind([[maybe_unused]] const K& key) {
3280
- AssertHashEqConsistent(key);
3281
- AssertNotDebugCapacity();
3282
- }
3283
-
3284
- // Asserts that the capacity is not a sentinel invalid value.
3285
- void AssertNotDebugCapacity() const {
3286
- #ifdef NDEBUG
3287
- if (!SwisstableGenerationsEnabled()) {
3288
- return;
3289
- }
3290
- #endif
3291
- if (ABSL_PREDICT_TRUE(capacity() <
3292
- InvalidCapacity::kAboveMaxValidCapacity)) {
3293
- return;
3294
- }
3295
- assert(capacity() != InvalidCapacity::kReentrance &&
3296
- "Reentrant container access during element construction/destruction "
3297
- "is not allowed.");
3298
- if constexpr (SwisstableAssertAccessToDestroyedTable()) {
3299
- if (capacity() == InvalidCapacity::kDestroyed) {
3300
- ABSL_RAW_LOG(FATAL, "Use of destroyed hash table.");
3301
- }
3302
- }
3303
- if (SwisstableGenerationsEnabled() &&
3304
- ABSL_PREDICT_FALSE(capacity() >= InvalidCapacity::kMovedFrom)) {
3305
- if (capacity() == InvalidCapacity::kSelfMovedFrom) {
3306
- // If this log triggers, then a hash table was move-assigned to itself
3307
- // and then used again later without being reinitialized.
3308
- ABSL_RAW_LOG(FATAL, "Use of self-move-assigned hash table.");
3309
- }
3310
- ABSL_RAW_LOG(FATAL, "Use of moved-from hash table.");
3311
- }
3312
- }
3313
-
3314
- // Asserts that hash and equal functors provided by the user are consistent,
3315
- // meaning that `eq(k1, k2)` implies `hash(k1)==hash(k2)`.
3316
- template <class K>
3317
- void AssertHashEqConsistent(const K& key) {
3318
- #ifdef NDEBUG
3319
- return;
3320
- #endif
3321
- // If the hash/eq functors are known to be consistent, then skip validation.
3322
- if (std::is_same<hasher, absl::container_internal::StringHash>::value &&
3323
- std::is_same<key_equal, absl::container_internal::StringEq>::value) {
3324
- return;
3325
- }
3326
- if (std::is_scalar<key_type>::value &&
3327
- std::is_same<hasher, absl::Hash<key_type>>::value &&
3328
- std::is_same<key_equal, std::equal_to<key_type>>::value) {
3329
- return;
3330
- }
3331
- if (empty()) return;
3332
-
3333
- const size_t hash_of_arg = hash_of(key);
3334
- const auto assert_consistent = [&](const ctrl_t*, void* slot) {
3335
- const bool is_key_equal = equal_to(key, to_slot(slot));
3336
- if (!is_key_equal) return;
3337
-
3338
- [[maybe_unused]] const bool is_hash_equal =
3339
- hash_of_arg == hash_of(to_slot(slot));
3340
- assert((!is_key_equal || is_hash_equal) &&
3341
- "eq(k1, k2) must imply that hash(k1) == hash(k2). "
3342
- "hash/eq functors are inconsistent.");
3343
- };
3344
-
3345
- if (is_small()) {
3346
- assert_consistent(/*unused*/ nullptr, single_slot());
3347
- return;
3348
- }
3349
- // We only do validation for small tables so that it's constant time.
3350
- if (capacity() > 16) return;
3351
- IterateOverFullSlots(common(), sizeof(slot_type), assert_consistent);
3352
- }
3353
-
3354
- // Attempts to find `key` in the table; if it isn't found, returns an iterator
3355
- // where the value can be inserted into, with the control byte already set to
3356
- // `key`'s H2. Returns a bool indicating whether an insertion can take place.
3357
- template <class K>
3358
- std::pair<iterator, bool> find_or_prepare_insert(const K& key) {
3359
- AssertOnFind(key);
3360
- if (is_small()) return find_or_prepare_insert_small(key);
3361
- return find_or_prepare_insert_large(key);
3362
- }
3363
-
3364
- // Constructs the value in the space pointed by the iterator. This only works
3365
- // after an unsuccessful find_or_prepare_insert() and before any other
3366
- // modifications happen in the raw_hash_set.
3367
- //
3368
- // PRECONDITION: iter was returned from find_or_prepare_insert(k), where k is
3369
- // the key decomposed from `forward<Args>(args)...`, and the bool returned by
3370
- // find_or_prepare_insert(k) was true.
3371
- // POSTCONDITION: *m.iterator_at(i) == value_type(forward<Args>(args)...).
3372
- template <class... Args>
3373
- void emplace_at(iterator iter, Args&&... args) {
3374
- construct(iter.slot(), std::forward<Args>(args)...);
3375
-
3376
- // When is_small, find calls find_small and if size is 0, then it will
3377
- // return an end iterator. This can happen in the raw_hash_set copy ctor.
3378
- assert((is_small() ||
3379
- PolicyTraits::apply(FindElement{*this}, *iter) == iter) &&
3380
- "constructed value does not match the lookup key");
3381
- }
3382
-
3383
- iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
3384
- return {control() + i, slot_array() + i, common().generation_ptr()};
3385
- }
3386
- const_iterator iterator_at(size_t i) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
3387
- return const_cast<raw_hash_set*>(this)->iterator_at(i);
3388
- }
3389
- iterator iterator_at_ptr(std::pair<ctrl_t*, void*> ptrs)
3390
- ABSL_ATTRIBUTE_LIFETIME_BOUND {
3391
- return {ptrs.first, to_slot(ptrs.second), common().generation_ptr()};
3392
- }
3393
-
3394
- reference unchecked_deref(iterator it) { return it.unchecked_deref(); }
3395
-
3396
- private:
3397
- friend struct RawHashSetTestOnlyAccess;
3398
-
3399
- // The number of slots we can still fill without needing to rehash.
3400
- //
3401
- // This is stored separately due to tombstones: we do not include tombstones
3402
- // in the growth capacity, because we'd like to rehash when the table is
3403
- // otherwise filled with tombstones: otherwise, probe sequences might get
3404
- // unacceptably long without triggering a rehash. Callers can also force a
3405
- // rehash via the standard `rehash(0)`, which will recompute this value as a
3406
- // side-effect.
3407
- //
3408
- // See `CapacityToGrowth()`.
3409
- size_t growth_left() const {
3410
- return common().growth_left();
3411
- }
3412
-
3413
- GrowthInfo& growth_info() {
3414
- return common().growth_info();
3415
- }
3416
- GrowthInfo growth_info() const {
3417
- return common().growth_info();
3418
- }
3419
-
3420
- // Prefetch the heap-allocated memory region to resolve potential TLB and
3421
- // cache misses. This is intended to overlap with execution of calculating the
3422
- // hash for a key.
3423
- void prefetch_heap_block() const {
3424
- ABSL_SWISSTABLE_ASSERT(!is_soo());
3425
- #if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
3426
- __builtin_prefetch(control(), 0, 1);
3427
- #endif
3428
- }
3429
-
3430
- CommonFields& common() { return settings_.template get<0>(); }
3431
- const CommonFields& common() const { return settings_.template get<0>(); }
3432
-
3433
- ctrl_t* control() const {
3434
- ABSL_SWISSTABLE_ASSERT(!is_soo());
3435
- return common().control();
3436
- }
3437
- slot_type* slot_array() const {
3438
- ABSL_SWISSTABLE_ASSERT(!is_soo());
3439
- return static_cast<slot_type*>(common().slot_array());
3440
- }
3441
- slot_type* soo_slot() {
3442
- ABSL_SWISSTABLE_ASSERT(is_soo());
3443
- ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(
3444
- static_cast<slot_type*>(common().soo_data()));
3445
- }
3446
- const slot_type* soo_slot() const {
3447
- ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(
3448
- const_cast<raw_hash_set*>(this)->soo_slot());
3449
- }
3450
- slot_type* single_slot() {
3451
- ABSL_SWISSTABLE_ASSERT(is_small());
3452
- return SooEnabled() ? soo_slot() : slot_array();
3453
- }
3454
- const slot_type* single_slot() const {
3455
- return const_cast<raw_hash_set*>(this)->single_slot();
3456
- }
3457
- void decrement_small_size() {
3458
- ABSL_SWISSTABLE_ASSERT(is_small());
3459
- SooEnabled() ? common().set_empty_soo() : common().decrement_size();
3460
- if (!SooEnabled()) {
3461
- SanitizerPoisonObject(single_slot());
3462
- }
3463
- }
3464
- iterator single_iterator() {
3465
- return {SooControl(), single_slot(), common().generation_ptr()};
3466
- }
3467
- const_iterator single_iterator() const {
3468
- return const_cast<raw_hash_set*>(this)->single_iterator();
3469
- }
3470
- HashtablezInfoHandle infoz() {
3471
- ABSL_SWISSTABLE_ASSERT(!is_soo());
3472
- return common().infoz();
3473
- }
3474
-
3475
- hasher& hash_ref() { return settings_.template get<1>(); }
3476
- const hasher& hash_ref() const { return settings_.template get<1>(); }
3477
- key_equal& eq_ref() { return settings_.template get<2>(); }
3478
- const key_equal& eq_ref() const { return settings_.template get<2>(); }
3479
- CharAlloc& char_alloc_ref() { return settings_.template get<3>(); }
3480
- const CharAlloc& char_alloc_ref() const {
3481
- return settings_.template get<3>();
3482
- }
3483
-
3484
- static void* get_char_alloc_ref_fn(CommonFields& common) {
3485
- auto* h = reinterpret_cast<raw_hash_set*>(&common);
3486
- return &h->char_alloc_ref();
3487
- }
3488
- static void* get_hash_ref_fn(CommonFields& common) {
3489
- auto* h = reinterpret_cast<raw_hash_set*>(&common);
3490
- // TODO(b/397453582): Remove support for const hasher.
3491
- return const_cast<std::remove_const_t<hasher>*>(&h->hash_ref());
3492
- }
3493
- static void transfer_n_slots_fn(void* set, void* dst, void* src,
3494
- size_t count) {
3495
- auto* src_slot = to_slot(src);
3496
- auto* dst_slot = to_slot(dst);
3497
-
3498
- auto* h = static_cast<raw_hash_set*>(set);
3499
- for (; count > 0; --count, ++src_slot, ++dst_slot) {
3500
- h->transfer(dst_slot, src_slot);
3501
- }
3502
- }
3503
-
3504
- // TODO(b/382423690): Try to type erase entire function or at least type erase
3505
- // by GetKey + Hash for memcpyable types.
3506
- // TODO(b/382423690): Try to type erase for big slots: sizeof(slot_type) > 16.
3507
- static void transfer_unprobed_elements_to_next_capacity_fn(
3508
- CommonFields& common, const ctrl_t* old_ctrl, void* old_slots,
3509
- void* probed_storage,
3510
- void (*encode_probed_element)(void* probed_storage, h2_t h2,
3511
- size_t source_offset, size_t h1)) {
3512
- const size_t new_capacity = common.capacity();
3513
- const size_t old_capacity = PreviousCapacity(new_capacity);
3514
- ABSL_ASSUME(old_capacity + 1 >= Group::kWidth);
3515
- ABSL_ASSUME((old_capacity + 1) % Group::kWidth == 0);
3516
-
3517
- auto* set = reinterpret_cast<raw_hash_set*>(&common);
3518
- slot_type* old_slots_ptr = to_slot(old_slots);
3519
- ctrl_t* new_ctrl = common.control();
3520
- slot_type* new_slots = set->slot_array();
3521
-
3522
- for (size_t group_index = 0; group_index < old_capacity;
3523
- group_index += Group::kWidth) {
3524
- GroupFullEmptyOrDeleted old_g(old_ctrl + group_index);
3525
- std::memset(new_ctrl + group_index, static_cast<int8_t>(ctrl_t::kEmpty),
3526
- Group::kWidth);
3527
- std::memset(new_ctrl + group_index + old_capacity + 1,
3528
- static_cast<int8_t>(ctrl_t::kEmpty), Group::kWidth);
3529
- // TODO(b/382423690): try to type erase everything outside of the loop.
3530
- // We will share a lot of code in expense of one function call per group.
3531
- for (auto in_fixed_group_index : old_g.MaskFull()) {
3532
- size_t old_index = group_index + in_fixed_group_index;
3533
- slot_type* old_slot = old_slots_ptr + old_index;
3534
- // TODO(b/382423690): try to avoid entire hash calculation since we need
3535
- // only one new bit of h1.
3536
- size_t hash = set->hash_of(old_slot);
3537
- size_t h1 = H1(hash);
3538
- h2_t h2 = H2(hash);
3539
- size_t new_index = TryFindNewIndexWithoutProbing(
3540
- h1, old_index, old_capacity, new_ctrl, new_capacity);
3541
- // Note that encode_probed_element is allowed to use old_ctrl buffer
3542
- // till and included the old_index.
3543
- if (ABSL_PREDICT_FALSE(new_index == kProbedElementIndexSentinel)) {
3544
- encode_probed_element(probed_storage, h2, old_index, h1);
3545
- continue;
3546
- }
3547
- ABSL_SWISSTABLE_ASSERT((new_index & old_capacity) <= old_index);
3548
- ABSL_SWISSTABLE_ASSERT(IsEmpty(new_ctrl[new_index]));
3549
- new_ctrl[new_index] = static_cast<ctrl_t>(h2);
3550
- auto* new_slot = new_slots + new_index;
3551
- SanitizerUnpoisonMemoryRegion(new_slot, sizeof(slot_type));
3552
- set->transfer(new_slot, old_slot);
3553
- SanitizerPoisonMemoryRegion(old_slot, sizeof(slot_type));
3554
- }
3555
- }
3556
- }
3557
-
3558
- static const PolicyFunctions& GetPolicyFunctions() {
3559
- static_assert(sizeof(slot_type) <= (std::numeric_limits<uint32_t>::max)(),
3560
- "Slot size is too large. Use std::unique_ptr for value type "
3561
- "or use absl::node_hash_{map,set}.");
3562
- static_assert(alignof(slot_type) <=
3563
- size_t{(std::numeric_limits<uint16_t>::max)()});
3564
- static_assert(sizeof(key_type) <=
3565
- size_t{(std::numeric_limits<uint32_t>::max)()});
3566
- static_assert(sizeof(value_type) <=
3567
- size_t{(std::numeric_limits<uint32_t>::max)()});
3568
- static constexpr size_t kBackingArrayAlignment =
3569
- BackingArrayAlignment(alignof(slot_type));
3570
- static constexpr PolicyFunctions value = {
3571
- static_cast<uint32_t>(sizeof(key_type)),
3572
- static_cast<uint32_t>(sizeof(value_type)),
3573
- static_cast<uint32_t>(sizeof(slot_type)),
3574
- static_cast<uint16_t>(alignof(slot_type)), SooEnabled(),
3575
- ShouldSampleHashtablezInfoForAlloc<CharAlloc>(),
3576
- // TODO(b/328722020): try to type erase
3577
- // for standard layout and alignof(Hash) <= alignof(CommonFields).
3578
- std::is_empty_v<hasher> ? &GetRefForEmptyClass
3579
- : &raw_hash_set::get_hash_ref_fn,
3580
- PolicyTraits::template get_hash_slot_fn<hasher, kIsDefaultHash>(),
3581
- PolicyTraits::transfer_uses_memcpy()
3582
- ? TransferNRelocatable<sizeof(slot_type)>
3583
- : &raw_hash_set::transfer_n_slots_fn,
3584
- std::is_empty_v<Alloc> ? &GetRefForEmptyClass
3585
- : &raw_hash_set::get_char_alloc_ref_fn,
3586
- &AllocateBackingArray<kBackingArrayAlignment, CharAlloc>,
3587
- &DeallocateBackingArray<kBackingArrayAlignment, CharAlloc>,
3588
- &raw_hash_set::transfer_unprobed_elements_to_next_capacity_fn};
3589
- return value;
3590
- }
3591
-
3592
- // Bundle together CommonFields plus other objects which might be empty.
3593
- // CompressedTuple will ensure that sizeof is not affected by any of the empty
3594
- // fields that occur after CommonFields.
3595
- absl::container_internal::CompressedTuple<CommonFields, hasher, key_equal,
3596
- CharAlloc>
3597
- settings_{CommonFields::CreateDefault<SooEnabled()>(), hasher{},
3598
- key_equal{}, CharAlloc{}};
3599
- };
3600
-
3601
- // Friend access for free functions in raw_hash_set.h.
3602
- struct HashtableFreeFunctionsAccess {
3603
- template <class Predicate, typename Set>
3604
- static typename Set::size_type EraseIf(Predicate& pred, Set* c) {
3605
- if (c->empty()) {
3606
- return 0;
3607
- }
3608
- if (c->is_small()) {
3609
- auto it = c->single_iterator();
3610
- if (!pred(*it)) {
3611
- ABSL_SWISSTABLE_ASSERT(c->size() == 1 &&
3612
- "hash table was modified unexpectedly");
3613
- return 0;
3614
- }
3615
- c->destroy(it.slot());
3616
- c->erase_meta_only_small();
3617
- return 1;
3618
- }
3619
- [[maybe_unused]] const size_t original_size_for_assert = c->size();
3620
- size_t num_deleted = 0;
3621
- using SlotType = typename Set::slot_type;
3622
- IterateOverFullSlots(
3623
- c->common(), sizeof(SlotType),
3624
- [&](const ctrl_t* ctrl, void* slot_void) {
3625
- auto* slot = static_cast<SlotType*>(slot_void);
3626
- if (pred(Set::PolicyTraits::element(slot))) {
3627
- c->destroy(slot);
3628
- EraseMetaOnlyLarge(c->common(), ctrl, sizeof(*slot));
3629
- ++num_deleted;
3630
- }
3631
- });
3632
- // NOTE: IterateOverFullSlots allow removal of the current element, so we
3633
- // verify the size additionally here.
3634
- ABSL_SWISSTABLE_ASSERT(original_size_for_assert - num_deleted ==
3635
- c->size() &&
3636
- "hash table was modified unexpectedly");
3637
- return num_deleted;
3638
- }
3639
-
3640
- template <class Callback, typename Set>
3641
- static void ForEach(Callback& cb, Set* c) {
3642
- if (c->empty()) {
3643
- return;
3644
- }
3645
- if (c->is_small()) {
3646
- cb(*c->single_iterator());
3647
- return;
3648
- }
3649
- using SlotType = typename Set::slot_type;
3650
- using ElementTypeWithConstness = decltype(*c->begin());
3651
- IterateOverFullSlots(
3652
- c->common(), sizeof(SlotType), [&cb](const ctrl_t*, void* slot) {
3653
- ElementTypeWithConstness& element =
3654
- Set::PolicyTraits::element(static_cast<SlotType*>(slot));
3655
- cb(element);
3656
- });
3657
- }
3658
- };
3659
-
3660
- // Erases all elements that satisfy the predicate `pred` from the container `c`.
3661
- template <typename P, typename... Params, typename Predicate>
3662
- typename raw_hash_set<P, Params...>::size_type EraseIf(
3663
- Predicate& pred, raw_hash_set<P, Params...>* c) {
3664
- return HashtableFreeFunctionsAccess::EraseIf(pred, c);
3665
- }
3666
-
3667
- // Calls `cb` for all elements in the container `c`.
3668
- template <typename P, typename... Params, typename Callback>
3669
- void ForEach(Callback& cb, raw_hash_set<P, Params...>* c) {
3670
- return HashtableFreeFunctionsAccess::ForEach(cb, c);
3671
- }
3672
- template <typename P, typename... Params, typename Callback>
3673
- void ForEach(Callback& cb, const raw_hash_set<P, Params...>* c) {
3674
- return HashtableFreeFunctionsAccess::ForEach(cb, c);
3675
- }
3676
-
3677
- namespace hashtable_debug_internal {
3678
- template <typename Set>
3679
- struct HashtableDebugAccess<Set, absl::void_t<typename Set::raw_hash_set>> {
3680
- using Traits = typename Set::PolicyTraits;
3681
- using Slot = typename Traits::slot_type;
3682
-
3683
- constexpr static bool kIsDefaultHash = Set::kIsDefaultHash;
3684
-
3685
- static size_t GetNumProbes(const Set& set,
3686
- const typename Set::key_type& key) {
3687
- if (set.is_small()) return 0;
3688
- size_t num_probes = 0;
3689
- const size_t hash = set.hash_of(key);
3690
- auto seq = probe(set.common(), hash);
3691
- const h2_t h2 = H2(hash);
3692
- const ctrl_t* ctrl = set.control();
3693
- while (true) {
3694
- container_internal::Group g{ctrl + seq.offset()};
3695
- for (uint32_t i : g.Match(h2)) {
3696
- if (set.equal_to(key, set.slot_array() + seq.offset(i)))
3697
- return num_probes;
3698
- ++num_probes;
3699
- }
3700
- if (g.MaskEmpty()) return num_probes;
3701
- seq.next();
3702
- ++num_probes;
3703
- }
3704
- }
3705
-
3706
- static size_t AllocatedByteSize(const Set& c) {
3707
- size_t capacity = c.capacity();
3708
- if (capacity == 0) return 0;
3709
- size_t m =
3710
- c.is_soo() ? 0 : c.common().alloc_size(sizeof(Slot), alignof(Slot));
3711
-
3712
- size_t per_slot = Traits::space_used(static_cast<const Slot*>(nullptr));
3713
- if (per_slot != ~size_t{}) {
3714
- m += per_slot * c.size();
3715
- } else {
3716
- for (auto it = c.begin(); it != c.end(); ++it) {
3717
- m += Traits::space_used(it.slot());
3718
- }
3719
- }
3720
- return m;
3721
- }
3722
- };
3723
-
3724
- } // namespace hashtable_debug_internal
3725
-
3726
- // Extern template instantiations reduce binary size and linker input size.
3727
- // Function definition is in raw_hash_set.cc.
3728
- extern template size_t GrowSooTableToNextCapacityAndPrepareInsert<0, false>(
3729
- CommonFields&, const PolicyFunctions&, absl::FunctionRef<size_t(size_t)>,
3730
- bool);
3731
- extern template size_t GrowSooTableToNextCapacityAndPrepareInsert<1, true>(
3732
- CommonFields&, const PolicyFunctions&, absl::FunctionRef<size_t(size_t)>,
3733
- bool);
3734
- extern template size_t GrowSooTableToNextCapacityAndPrepareInsert<4, true>(
3735
- CommonFields&, const PolicyFunctions&, absl::FunctionRef<size_t(size_t)>,
3736
- bool);
3737
- extern template size_t GrowSooTableToNextCapacityAndPrepareInsert<8, true>(
3738
- CommonFields&, const PolicyFunctions&, absl::FunctionRef<size_t(size_t)>,
3739
- bool);
3740
- #if UINTPTR_MAX == UINT64_MAX
3741
- extern template size_t GrowSooTableToNextCapacityAndPrepareInsert<16, true>(
3742
- CommonFields&, const PolicyFunctions&, absl::FunctionRef<size_t(size_t)>,
3743
- bool);
3744
- #endif
3745
-
3746
- extern template void* AllocateBackingArray<
3747
- BackingArrayAlignment(alignof(size_t)), std::allocator<char>>(void* alloc,
3748
- size_t n);
3749
- extern template void DeallocateBackingArray<
3750
- BackingArrayAlignment(alignof(size_t)), std::allocator<char>>(
3751
- void* alloc, size_t capacity, ctrl_t* ctrl, size_t slot_size,
3752
- size_t slot_align, bool had_infoz);
3753
-
3754
- } // namespace container_internal
3755
- ABSL_NAMESPACE_END
3756
- } // namespace absl
3757
-
3758
- #undef ABSL_SWISSTABLE_ENABLE_GENERATIONS
3759
- #undef ABSL_SWISSTABLE_IGNORE_UNINITIALIZED
3760
- #undef ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN
3761
- #undef ABSL_SWISSTABLE_ASSERT
3762
-
3763
- #endif // ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_H_