re2 1.24.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/LICENSE +15 -20
  2. package/README.md +63 -4
  3. package/binding.gyp +1 -2
  4. package/lib/addon.cc +9 -5
  5. package/lib/exec.cc +4 -4
  6. package/lib/match.cc +4 -4
  7. package/lib/new.cc +6 -6
  8. package/lib/pattern.cc +148 -1
  9. package/lib/replace.cc +5 -4
  10. package/lib/search.cc +1 -1
  11. package/lib/set.cc +85 -10
  12. package/lib/test.cc +1 -1
  13. package/lib/unicode_properties.h +15840 -0
  14. package/lib/wrapped_re2.h +40 -4
  15. package/lib/wrapped_re2_set.h +3 -1
  16. package/llms-full.txt +497 -0
  17. package/llms.txt +135 -0
  18. package/package.json +19 -11
  19. package/re2.d.ts +2 -0
  20. package/re2.js +1 -0
  21. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
  22. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  23. package/vendor/abseil-cpp/FAQ.md +130 -79
  24. package/vendor/abseil-cpp/MODULE.bazel +6 -7
  25. package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
  26. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
  27. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
  28. package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  29. package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
  30. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
  31. package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
  32. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
  33. package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
  34. package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
  35. package/vendor/abseil-cpp/absl/base/casts.h +8 -1
  36. package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
  37. package/vendor/abseil-cpp/absl/base/config.h +53 -9
  38. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
  39. package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
  40. package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
  41. package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
  42. package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
  43. package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
  44. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
  45. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
  46. package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  47. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
  48. package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  49. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  50. package/vendor/abseil-cpp/absl/base/macros.h +36 -20
  51. package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
  52. package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
  53. package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
  54. package/vendor/abseil-cpp/absl/base/options.h +55 -1
  55. package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
  56. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  57. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  58. package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
  59. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
  60. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
  61. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
  62. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  63. package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
  64. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
  65. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
  68. package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
  69. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
  70. package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
  71. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
  72. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
  73. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
  74. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
  75. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
  76. package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
  77. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
  78. package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
  79. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
  80. package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
  81. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  82. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
  83. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
  84. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
  87. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
  88. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
  89. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
  90. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
  91. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
  92. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
  93. package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
  94. package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
  95. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
  96. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
  97. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
  101. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
  102. package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
  103. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
  104. package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
  105. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
  106. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
  107. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
  108. package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
  109. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
  110. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
  111. package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  112. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  113. package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  114. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
  115. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
  116. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
  117. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  118. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
  119. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
  120. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
  121. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
  122. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
  123. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  124. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
  125. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
  126. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
  127. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
  128. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
  129. package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  130. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
  131. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
  132. package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  133. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
  134. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
  135. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  136. package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
  137. package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
  138. package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
  139. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
  140. package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
  141. package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
  142. package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
  143. package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
  144. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
  145. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
  146. package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
  147. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
  148. package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
  149. package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
  150. package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
  151. package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
  152. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
  153. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
  154. package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
  155. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  156. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  157. package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
  158. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
  159. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
  160. package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
  161. package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
  162. package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
  163. package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
  164. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
  165. package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
  166. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
  167. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
  168. package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
  169. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
  170. package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  171. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
  172. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
  173. package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
  174. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  175. package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
  176. package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  177. package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  178. package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
  179. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
  180. package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
  181. package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
  182. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
  183. package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
  184. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
  185. package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
  186. package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  187. package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
  188. package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
  189. package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
  190. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  191. package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
  192. package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
  193. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
  194. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
  195. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
  196. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
  197. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
  198. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
  199. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
  200. package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
  201. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
  202. package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
  203. package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
  204. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  205. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
  206. package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  207. package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
  208. package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
  209. package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  210. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
  211. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  212. package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  213. package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  214. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  215. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
  216. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
  217. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  218. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
  219. package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  220. package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
  221. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  222. package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  223. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
  224. package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
  225. package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  226. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
  227. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  228. package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
  229. package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
  230. package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  231. package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
  232. package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
  233. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
  234. package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  235. package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
  236. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
  237. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  238. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
  239. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
  240. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
  241. package/vendor/abseil-cpp/absl/status/status.cc +62 -70
  242. package/vendor/abseil-cpp/absl/status/status.h +249 -23
  243. package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
  244. package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
  245. package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
  246. package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
  247. package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
  248. package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
  249. package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
  250. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
  251. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  252. package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
  253. package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
  254. package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
  255. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
  256. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
  257. package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
  258. package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
  259. package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
  260. package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
  261. package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  262. package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
  263. package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
  264. package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
  265. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
  266. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
  267. package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
  268. package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
  269. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
  270. package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
  271. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  272. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  273. package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  274. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
  275. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
  276. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
  277. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
  278. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
  279. package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  280. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  281. package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  282. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
  283. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
  284. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
  285. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
  286. package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
  287. package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  288. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
  289. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
  290. package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
  291. package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
  292. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
  293. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
  294. package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
  295. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
  296. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
  297. package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
  298. package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
  299. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
  300. package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
  301. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
  302. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
  303. package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  304. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
  305. package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
  306. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
  307. package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
  308. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
  309. package/vendor/abseil-cpp/absl/time/clock.h +3 -0
  310. package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
  311. package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
  312. package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
  313. package/vendor/abseil-cpp/absl/time/format.cc +3 -10
  314. package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
  315. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
  316. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
  317. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
  318. package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  319. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  320. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
  321. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  322. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
  323. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
  324. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
  325. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
  326. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
  327. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
  328. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
  329. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
  330. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
  331. package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
  332. package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
  333. package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
  334. package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
  335. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
  336. package/vendor/abseil-cpp/absl/types/any.h +26 -4
  337. package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
  338. package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
  339. package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
  340. package/vendor/abseil-cpp/absl/types/compare.h +4 -4
  341. package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
  342. package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
  343. package/vendor/abseil-cpp/absl/types/optional.h +30 -3
  344. package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
  345. package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
  346. package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
  347. package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
  348. package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
  349. package/vendor/abseil-cpp/absl/types/span.h +19 -23
  350. package/vendor/abseil-cpp/absl/types/variant.h +75 -18
  351. package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
  352. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
  353. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
  354. package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
  355. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
  356. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
  357. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
  358. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
  359. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
  360. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
  361. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  362. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
  363. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
  364. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
  365. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
  366. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
  367. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
  368. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
  369. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
  370. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
@@ -449,7 +449,7 @@ namespace compare_internal {
449
449
  // or three-way comparator.
450
450
  // SFINAE prevents implicit conversions to bool (such as from int).
451
451
  template <typename BoolT,
452
- absl::enable_if_t<std::is_same<bool, BoolT>::value, int> = 0>
452
+ std::enable_if_t<std::is_same<bool, BoolT>::value, int> = 0>
453
453
  constexpr bool compare_result_as_less_than(const BoolT r) {
454
454
  return r;
455
455
  }
@@ -467,7 +467,7 @@ constexpr bool do_less_than_comparison(const Compare& compare, const K& x,
467
467
  // three-way comparator.
468
468
  // SFINAE prevents implicit conversions to int (such as from bool).
469
469
  template <typename Int,
470
- absl::enable_if_t<std::is_same<int, Int>::value, int> = 0>
470
+ std::enable_if_t<std::is_same<int, Int>::value, int> = 0>
471
471
  constexpr absl::weak_ordering compare_result_as_ordering(const Int c) {
472
472
  return c < 0 ? absl::weak_ordering::less
473
473
  : c == 0 ? absl::weak_ordering::equivalent
@@ -479,7 +479,7 @@ constexpr absl::weak_ordering compare_result_as_ordering(
479
479
  }
480
480
 
481
481
  template <typename Compare, typename K, typename LK,
482
- absl::enable_if_t<
482
+ std::enable_if_t<
483
483
  !std::is_same<
484
484
  bool, absl::result_of_t<Compare(const K&, const LK&)>>::value,
485
485
  int> = 0>
@@ -488,7 +488,7 @@ constexpr absl::weak_ordering do_three_way_comparison(const Compare& compare,
488
488
  return compare_result_as_ordering(compare(x, y));
489
489
  }
490
490
  template <typename Compare, typename K, typename LK,
491
- absl::enable_if_t<
491
+ std::enable_if_t<
492
492
  std::is_same<
493
493
  bool, absl::result_of_t<Compare(const K&, const LK&)>>::value,
494
494
  int> = 0>
@@ -0,0 +1,477 @@
1
+ // Copyright 2026 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
+ // -----------------------------------------------------------------------------
16
+ // File: internal/any_span.h
17
+ // -----------------------------------------------------------------------------
18
+ //
19
+ // Helper types and functions used by AnySpan. This file should only be
20
+ // included by any_span.h.
21
+ #ifndef ABSL_TYPES_INTERNAL_ANY_SPAN_H_
22
+ #define ABSL_TYPES_INTERNAL_ANY_SPAN_H_
23
+
24
+ #include <algorithm>
25
+ #include <cstddef>
26
+ #include <functional>
27
+ #include <type_traits>
28
+
29
+ #include "absl/base/config.h"
30
+ #include "absl/base/internal/raw_logging.h"
31
+ #include "absl/base/optimization.h"
32
+ #include "absl/meta/type_traits.h"
33
+
34
+ namespace absl {
35
+ ABSL_NAMESPACE_BEGIN
36
+
37
+ template <typename T>
38
+ class AnySpan;
39
+
40
+ namespace any_span_transform {
41
+ struct IdentityT;
42
+ struct DerefT;
43
+ } // namespace any_span_transform
44
+
45
+ namespace any_span_internal {
46
+
47
+ //
48
+ // IsAnySpan inherits from true_type if T is an instance of AnySpan.
49
+ //
50
+
51
+ template <typename T>
52
+ struct IsAnySpan : public std::false_type {};
53
+
54
+ template <typename T>
55
+ struct IsAnySpan<AnySpan<T>> : public std::true_type {};
56
+
57
+ // A type suitable for storing any function pointer. The standard allows
58
+ // function pointers to round-trip through other function pointers, but void* is
59
+ // implementation defined.
60
+ using FunPtr = void (*)();
61
+
62
+ // Whether a transform will be copied and therefore does not have to outlive
63
+ // the AnySpan.
64
+ template <typename Transform>
65
+ constexpr bool kIsTransformCopied =
66
+ std::is_function_v<std::remove_pointer_t<Transform>>;
67
+
68
+ // Type to pass as extra argument to TransformPtr to ensure that our
69
+ // assumption about Transform copyability is valid.
70
+ template <typename Transform>
71
+ using IsTransformCopied =
72
+ std::integral_constant<bool, kIsTransformCopied<Transform>>;
73
+
74
+ // A pointer to the transform function or functor that should be applied to
75
+ // elements of the container.
76
+ class TransformPtr {
77
+ public:
78
+ TransformPtr() = default;
79
+
80
+ // Construct from ptr to function.
81
+ template <typename R, typename... Args, typename CopiedTransform>
82
+ explicit TransformPtr(R (*f)(Args...),
83
+ CopiedTransform copied_transform [[maybe_unused]])
84
+ : fun_ptr_(reinterpret_cast<FunPtr>(f)) {
85
+ static_assert(CopiedTransform::value);
86
+ }
87
+
88
+ // Construct from any other invokable object.
89
+ template <typename T, typename CopiedTransform>
90
+ explicit TransformPtr(const T& t,
91
+ CopiedTransform copied_transform [[maybe_unused]])
92
+ : ptr_(&t) {
93
+ static_assert(!CopiedTransform::value);
94
+ }
95
+
96
+ // Casts the pointer to the given type.
97
+ template <typename Transform>
98
+ auto get() const {
99
+ if constexpr (std::is_function_v<Transform>) {
100
+ return reinterpret_cast<const Transform*>(fun_ptr_);
101
+ } else if constexpr (std::is_function_v<std::remove_pointer_t<Transform>>) {
102
+ return reinterpret_cast<const Transform>(fun_ptr_);
103
+ } else {
104
+ return static_cast<const Transform*>(ptr_);
105
+ }
106
+ }
107
+
108
+ private:
109
+ union {
110
+ const void* ptr_ = nullptr;
111
+ FunPtr fun_ptr_;
112
+ };
113
+ };
114
+
115
+ // A void* pointer to the container and transform functor. These are always cast
116
+ // to the correct type since we create this object and the GetterFunction at the
117
+ // same time (from one of the Make*Getter functions below).
118
+ struct TransformedContainer {
119
+ // The container or array.
120
+ void* ptr;
121
+
122
+ // The transform being applied to the container.
123
+ TransformPtr transform;
124
+ };
125
+
126
+ // Applies transform (at the correct type) to the argument and returns the
127
+ // result. Does some validity checking to make sure the result is not a
128
+ // temporary (proxy containers are not allowed).
129
+ template <typename T, typename Transform, typename U>
130
+ T& ApplyTransform(TransformPtr transform, U& u) { // NOLINT(runtime/references)
131
+ const auto t = transform.get<Transform>();
132
+ ABSL_RAW_DCHECK(t != nullptr, "pointer cannot be null");
133
+
134
+ // If compilation fails here due to dropping a const qualifier, it usually
135
+ // means you tried to wrap a const container with a non-const AnySpan.
136
+ //
137
+ // If compilation fails here due to a reference to a temporary, it usually
138
+ // means that the container or transform cannot be converted to a reference to
139
+ // T. AnySpan requires that a valid instance of T exists, conversion to a
140
+ // value type (such as string -> StringPiece or int -> float) is not
141
+ // supported.
142
+ //
143
+ // If compilation fails here due to taking the address of a temporary object,
144
+ // it means that the transform is returning a temporary. This is disallowed.
145
+ // Transforms must return a reference to T, or a reference to an object that
146
+ // can be safely converted to a reference to T (such as a reference_wrapper or
147
+ // a class that inherits from T).
148
+ return *&std::invoke(*t, u); // Failed compilation? See above.
149
+ }
150
+
151
+ // The return type of GetterFunction<T>. GetterFunctions return non-const
152
+ // references to support mutable -> const conversion of spans without additional
153
+ // indirection.
154
+ template <typename T>
155
+ using GetterFunctionResult = std::remove_const_t<T>&;
156
+
157
+ // A type of function pointer that can return an element of a
158
+ // TransformedContainer. This is used so that we can type-erase with a simple
159
+ // function pointer instead of a vtable. Doing things this way has less pointer
160
+ // indirection.
161
+ template <typename T>
162
+ using GetterFunction = GetterFunctionResult<T> (*)(const TransformedContainer&,
163
+ std::size_t);
164
+
165
+ // A GetterFunction that works on arrays.
166
+ template <typename T, typename Element, typename Transform>
167
+ GetterFunctionResult<T> GetFromArray(const TransformedContainer& container,
168
+ std::size_t i) {
169
+ ABSL_RAW_DCHECK(container.ptr != nullptr, "cannot dereference null pointer");
170
+ auto* array = static_cast<Element*>(container.ptr);
171
+ return const_cast<GetterFunctionResult<T>>(
172
+ ApplyTransform<T, Transform>(container.transform, array[i]));
173
+ }
174
+
175
+ // A GetterFunction that works on containers.
176
+ template <typename T, typename Container, typename Transform>
177
+ GetterFunctionResult<T> GetFromContainer(const TransformedContainer& container,
178
+ std::size_t i) {
179
+ ABSL_RAW_DCHECK(container.ptr != nullptr, "cannot dereference null pointer");
180
+ Container& c = *static_cast<Container*>(container.ptr);
181
+ return const_cast<GetterFunctionResult<T>>(
182
+ ApplyTransform<T, Transform>(container.transform, c[i]));
183
+ }
184
+
185
+ // A GetterFunction that crashes, indicating an invalid AnySpan has been
186
+ // accessed..
187
+ template <typename T>
188
+ GetterFunctionResult<T> GetFromUninitialized(const TransformedContainer&,
189
+ std::size_t) {
190
+ ABSL_RAW_LOG(FATAL, "Uninitialized AnySpan access.");
191
+ }
192
+
193
+ //
194
+ // ArrayTag and PtrArrayTag are GetterFunctions that are never called. They are
195
+ // used as a tag so Getter::Get can access flat arrays without a function
196
+ // pointer.
197
+ //
198
+
199
+ template <typename T>
200
+ GetterFunctionResult<T> ArrayTag(const TransformedContainer&, std::size_t) {
201
+ ABSL_RAW_LOG(FATAL, "ArrayTag should never be called.");
202
+ }
203
+
204
+ template <typename T>
205
+ GetterFunctionResult<T> PtrArrayTag(const TransformedContainer&, std::size_t) {
206
+ ABSL_RAW_LOG(FATAL, "PtrArrayTag should never be called.");
207
+ }
208
+
209
+ //
210
+ // HasSize<Container> inherets from true_type if Container has a size() member.
211
+ // false_type otherwise.
212
+ //
213
+
214
+ template <typename, typename = void>
215
+ struct HasSize : public std::false_type {};
216
+
217
+ template <class Container>
218
+ struct HasSize<Container,
219
+ std::void_t<decltype(std::declval<Container&>().size())>>
220
+ : public std::true_type {};
221
+
222
+ //
223
+ // TypeOfData<Container>::type is the return type of data() if Container has a
224
+ // data() member. It is NoData otherwise.
225
+ //
226
+
227
+ struct NoData {};
228
+
229
+ template <typename, typename = void>
230
+ struct TypeOfData {
231
+ using type = NoData;
232
+ };
233
+
234
+ template <class Container>
235
+ struct TypeOfData<Container,
236
+ std::void_t<decltype(std::declval<Container&>().data())>> {
237
+ using type = decltype(std::declval<Container&>().data());
238
+ };
239
+
240
+ // Element type of container based on operator[].
241
+ template <class Container>
242
+ using ElementType = typename std::remove_reference<
243
+ decltype(std::declval<Container&>()[0])>::type;
244
+
245
+ // Element type of container when elements are dereferenced.
246
+ template <class Container>
247
+ using DerefElementType = typename std::remove_reference<
248
+ decltype(*std::declval<ElementType<Container>>())>::type;
249
+
250
+ // DataIsValid is true_type if Container has a data() member that returns a
251
+ // pointer to the type returned by operator[], false_type if there is no data()
252
+ // member or if the types disagree.
253
+ template <class Container>
254
+ using DataIsValid =
255
+ std::is_same<ElementType<Container>*, typename TypeOfData<Container>::type>;
256
+
257
+ // Used to access elements of a container or array.
258
+ template <typename T>
259
+ struct Getter {
260
+ Getter() {}
261
+
262
+ // Handle mutable -> const conversion.
263
+ template <typename LazyT = T, typename = typename std::enable_if<
264
+ std::is_const<LazyT>::value>::type>
265
+ explicit Getter(const Getter<std::remove_const_t<T>>& other) {
266
+ using MutableT = std::remove_const_t<T>;
267
+ if (other.fun == &ArrayTag<MutableT>) {
268
+ ABSL_RAW_DCHECK(other.offset == 0u, "offset must be zero");
269
+ fun = &ArrayTag<T>;
270
+ array = other.array;
271
+ offset = 0;
272
+ } else if (other.fun == &PtrArrayTag<MutableT>) {
273
+ ABSL_RAW_DCHECK(other.offset == 0u, "offset must be zero");
274
+ fun = &PtrArrayTag<T>;
275
+ ptr_array = other.ptr_array;
276
+ offset = 0;
277
+ } else {
278
+ fun = other.fun;
279
+ container = other.container;
280
+ offset = other.offset;
281
+ }
282
+ }
283
+
284
+ // Returns the element at the given index.
285
+ T& Get(std::size_t index) const {
286
+ ABSL_RAW_DCHECK(fun != nullptr, "pointer cannot be null");
287
+ if (ABSL_PREDICT_TRUE(fun == &ArrayTag<T>)) {
288
+ ABSL_RAW_DCHECK(array != nullptr, "pointer cannot be null");
289
+ return array[index];
290
+ }
291
+ if (fun == &PtrArrayTag<T>) {
292
+ ABSL_RAW_DCHECK(ptr_array != nullptr, "pointer cannot be null");
293
+ return *ptr_array[index];
294
+ }
295
+ return fun(container, index + offset);
296
+ }
297
+
298
+ // Returns a Getter offset into this one by pos.
299
+ Getter Offset(std::size_t pos) const {
300
+ // Special case when offset is zero. This safely handles empty spans and
301
+ // empty containers where data() can be null.
302
+ if (pos == 0) {
303
+ return *this;
304
+ }
305
+ ABSL_RAW_DCHECK(fun != nullptr, "pointer cannot be null");
306
+ Getter result;
307
+ result.fun = fun;
308
+ if (fun == &ArrayTag<T>) {
309
+ ABSL_RAW_DCHECK(array != nullptr, "pointer cannot be null");
310
+ ABSL_RAW_DCHECK(offset == 0u, "offset must be zero");
311
+ result.array = array + pos;
312
+ result.offset = 0;
313
+ } else if (fun == &PtrArrayTag<T>) {
314
+ ABSL_RAW_DCHECK(ptr_array != nullptr, "pointer cannot be null");
315
+ ABSL_RAW_DCHECK(offset == 0u, "offset must be zero");
316
+ result.ptr_array = ptr_array + pos;
317
+ result.offset = 0;
318
+ } else {
319
+ ABSL_RAW_DCHECK(container.ptr != nullptr, "pointer cannot be null");
320
+ result.container = container;
321
+ result.offset = offset + pos;
322
+ }
323
+ return result;
324
+ }
325
+
326
+ // A pointer to a function (or tag function) that specifies how to get an
327
+ // element from the array or container.
328
+ GetterFunction<T> fun = &GetFromUninitialized<T>;
329
+
330
+ union {
331
+ T* array; // Active if fun == ArrayTag<T>.
332
+ T* const* ptr_array; // Active if fun == PtrArrayTag<T>.
333
+ TransformedContainer container; // Active for all other fun.
334
+ };
335
+
336
+ // Offset into container. Always 0 for array or ptr_array.
337
+ std::size_t offset = 0;
338
+ };
339
+
340
+ //
341
+ // MakeArrayGetter returns a Getter for an array.
342
+ //
343
+ // MakeArrayGetterImpl is specialised to use ArrayTag<T> when Element == T and
344
+ // Transform == IdentityT, and to use PtrArrayTag<T> when Element == T* and
345
+ // Transform == DerefT.
346
+ //
347
+
348
+ template <typename SpanElement, typename ArrayElement, typename Transform>
349
+ struct MakeArrayGetterImpl {
350
+ template <typename U>
351
+ static Getter<U> Make(ArrayElement* array, const Transform& transform) {
352
+ Getter<U> result;
353
+ result.fun = &GetFromArray<U, ArrayElement, Transform>;
354
+ result.container.ptr = const_cast<void*>(static_cast<const void*>(array));
355
+ result.container.transform =
356
+ TransformPtr(transform, IsTransformCopied<Transform>{});
357
+ return result;
358
+ }
359
+ };
360
+
361
+ // When the span and the array are the same type.
362
+ template <typename T>
363
+ struct MakeArrayGetterImpl<T, T, any_span_transform::IdentityT> {
364
+ template <typename U>
365
+ static Getter<U> Make(T* array, const any_span_transform::IdentityT&) {
366
+ Getter<U> result;
367
+ result.fun = &ArrayTag<U>;
368
+ result.array = array;
369
+ return result;
370
+ }
371
+ };
372
+
373
+ // If we are dereferencing an array of mutable elements (T*), it is safe to add
374
+ // constness (const T*).
375
+ template <typename T>
376
+ struct MakeArrayGetterImpl<const T, T, any_span_transform::IdentityT>
377
+ : public MakeArrayGetterImpl<const T, const T,
378
+ any_span_transform::IdentityT> {};
379
+
380
+ // When the array is of pointers to elements of the same type as the span.
381
+ template <typename T>
382
+ struct MakeArrayGetterImpl<T, T*, any_span_transform::DerefT> {
383
+ template <typename U>
384
+ static Getter<U> Make(T* const* ptr_array,
385
+ const any_span_transform::DerefT&) {
386
+ Getter<U> result;
387
+ result.fun = &PtrArrayTag<U>;
388
+ result.ptr_array = ptr_array;
389
+ return result;
390
+ }
391
+ };
392
+
393
+ // If we are dereferencing an array that is mutable along any extent, it is safe
394
+ // to add constness.
395
+ template <typename T>
396
+ struct MakeArrayGetterImpl<const T, T*, any_span_transform::DerefT>
397
+ : public MakeArrayGetterImpl<const T, const T*,
398
+ any_span_transform::DerefT> {};
399
+
400
+ template <typename T>
401
+ struct MakeArrayGetterImpl<const T, T* const, any_span_transform::DerefT>
402
+ : public MakeArrayGetterImpl<const T, const T*,
403
+ any_span_transform::DerefT> {};
404
+
405
+ template <typename T>
406
+ struct MakeArrayGetterImpl<const T, const T* const, any_span_transform::DerefT>
407
+ : public MakeArrayGetterImpl<const T, const T*,
408
+ any_span_transform::DerefT> {};
409
+
410
+ template <typename T, typename Element, typename Transform>
411
+ Getter<T> MakeArrayGetter(Element* array, const Transform& transform) {
412
+ return MakeArrayGetterImpl<T, Element, Transform>::template Make<T>(
413
+ array, transform);
414
+ }
415
+
416
+ //
417
+ // MakeContainerGetter returns a Getter for a given container. It will pass
418
+ // container.data() to MakeArrayGetter if possible, which allows element access
419
+ // to be inline.
420
+ //
421
+ // The first argument to MakeArrayGetterImpl is expected to be of type
422
+ // DataIsValid<container>.
423
+ //
424
+
425
+ template <typename T, typename Container, typename Transform>
426
+ Getter<T> MakeContainerGetterImpl(
427
+ std::true_type /* DataIsValid<Container> */,
428
+ Container& container, // NOLINT(runtime/references)
429
+ const Transform& transform) {
430
+ return MakeArrayGetter<T, ElementType<Container>, Transform>(container.data(),
431
+ transform);
432
+ }
433
+
434
+ template <typename T, typename Container, typename Transform>
435
+ Getter<T> MakeContainerGetterImpl(
436
+ std::false_type /* DataIsValid<Container> */,
437
+ Container& container, // NOLINT(runtime/references)
438
+ const Transform& transform) {
439
+ Getter<T> result;
440
+ result.fun = &GetFromContainer<T, Container, Transform>;
441
+ result.container.ptr =
442
+ const_cast<void*>(static_cast<const void*>(&container));
443
+ result.container.transform =
444
+ TransformPtr(transform, IsTransformCopied<Transform>{});
445
+
446
+ return result;
447
+ }
448
+
449
+ template <typename T, typename Container, typename Transform>
450
+ Getter<T> MakeContainerGetter(
451
+ Container& container, // NOLINT(runtime/references)
452
+ const Transform& transform) {
453
+ static_assert(std::is_reference<decltype(container[0])>::value,
454
+ "AnySpan only works with containers that return a reference "
455
+ "(no vector<bool>, or containers that return by value).");
456
+ return MakeContainerGetterImpl<T>(DataIsValid<Container>(), container,
457
+ transform);
458
+ }
459
+
460
+ // Used for testing. Returns true if the given AnySpan performs inline element
461
+ // access.
462
+ template <typename T>
463
+ bool IsCheap(AnySpan<T> s) {
464
+ return s.getter_.fun == &ArrayTag<T> || s.getter_.fun == &PtrArrayTag<T>;
465
+ }
466
+
467
+ template <typename T>
468
+ bool EqualImpl(AnySpan<T> a, AnySpan<T> b) {
469
+ static_assert(std::is_const<T>::value, "");
470
+ return std::equal(a.begin(), a.end(), b.begin(), b.end());
471
+ }
472
+
473
+ } // namespace any_span_internal
474
+ ABSL_NAMESPACE_END
475
+ } // namespace absl
476
+
477
+ #endif // ABSL_TYPES_INTERNAL_ANY_SPAN_H_
@@ -23,7 +23,6 @@
23
23
 
24
24
  #include "absl/algorithm/algorithm.h"
25
25
  #include "absl/base/config.h"
26
- #include "absl/base/internal/throw_delegate.h"
27
26
  #include "absl/meta/type_traits.h"
28
27
 
29
28
  namespace absl {
@@ -55,7 +54,7 @@ constexpr auto GetData(C& c) noexcept // NOLINT(runtime/references)
55
54
  // Detection idioms for size() and data().
56
55
  template <typename C>
57
56
  using HasSize =
58
- std::is_integral<absl::decay_t<decltype(std::declval<C&>().size())>>;
57
+ std::is_integral<std::decay_t<decltype(std::declval<C&>().size())>>;
59
58
 
60
59
  // We want to enable conversion from vector<T*> to Span<const T* const> but
61
60
  // disable conversion from vector<Derived> to Span<Base>. Here we use
@@ -65,13 +64,13 @@ using HasSize =
65
64
  // which returns a reference.
66
65
  template <typename T, typename C>
67
66
  using HasData =
68
- std::is_convertible<absl::decay_t<decltype(GetData(std::declval<C&>()))>*,
67
+ std::is_convertible<std::decay_t<decltype(GetData(std::declval<C&>()))>*,
69
68
  T* const*>;
70
69
 
71
70
  // Extracts value type from a Container
72
71
  template <typename C>
73
72
  struct ElementType {
74
- using type = typename absl::remove_reference_t<C>::value_type;
73
+ using type = typename std::remove_reference_t<C>::value_type;
75
74
  };
76
75
 
77
76
  template <typename T, size_t N>
@@ -114,8 +113,8 @@ struct IsView {
114
113
 
115
114
  template <typename T>
116
115
  struct IsView<
117
- T, absl::void_t<decltype(span_internal::GetData(std::declval<const T&>()))>,
118
- absl::void_t<decltype(span_internal::GetData(std::declval<T&>()))>> {
116
+ T, std::void_t<decltype(span_internal::GetData(std::declval<const T&>()))>,
117
+ std::void_t<decltype(span_internal::GetData(std::declval<T&>()))>> {
119
118
  private:
120
119
  using Container = std::remove_const_t<T>;
121
120
  using ConstData =
@@ -23,17 +23,44 @@
23
23
  #ifndef ABSL_TYPES_OPTIONAL_H_
24
24
  #define ABSL_TYPES_OPTIONAL_H_
25
25
 
26
+ #include <initializer_list>
26
27
  #include <optional>
27
28
 
28
29
  #include "absl/base/config.h"
30
+ #include "absl/base/macros.h"
29
31
  #include "absl/utility/utility.h"
30
32
 
31
33
  namespace absl {
32
34
  ABSL_NAMESPACE_BEGIN
33
- using std::bad_optional_access;
34
- using std::make_optional;
35
+
36
+ using bad_optional_access ABSL_REFACTOR_INLINE
37
+ = std::bad_optional_access;
38
+
39
+ template <typename T>
40
+ ABSL_REFACTOR_INLINE constexpr decltype(std::make_optional(
41
+ std::declval<T>())) make_optional(T&& value) {
42
+ return std::make_optional(std::forward<T>(value));
43
+ }
44
+
45
+ template <typename T, typename... Args>
46
+ constexpr decltype(std::make_optional<T>(
47
+ std::declval<Args>()...)) make_optional(Args&&... args) {
48
+ return std::make_optional<T>(std::forward<Args>(args)...);
49
+ }
50
+
51
+ template <typename T, typename U, typename... Args>
52
+ constexpr decltype(std::make_optional<T>(
53
+ std::declval<std::initializer_list<U>>(),
54
+ std::declval<Args>()...)) make_optional(std::initializer_list<U> il,
55
+ Args&&... args) {
56
+ return std::make_optional<T>(il, std::forward<Args>(args)...);
57
+ }
58
+
35
59
  using std::nullopt;
36
- using std::nullopt_t;
60
+
61
+ using nullopt_t ABSL_REFACTOR_INLINE
62
+ = std::nullopt_t;
63
+
37
64
  using std::optional;
38
65
  ABSL_NAMESPACE_END
39
66
  } // namespace absl