grpc 1.73.0 → 1.74.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 (499) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +38 -17
  3. data/include/grpc/create_channel_from_endpoint.h +54 -0
  4. data/include/grpc/credentials.h +11 -5
  5. data/include/grpc/event_engine/event_engine.h +74 -17
  6. data/include/grpc/grpc_posix.h +20 -1
  7. data/include/grpc/impl/channel_arg_names.h +2 -4
  8. data/include/grpc/module.modulemap +1 -0
  9. data/include/grpc/support/json.h +24 -0
  10. data/src/core/call/interception_chain.h +7 -11
  11. data/src/core/channelz/channel_trace.cc +213 -115
  12. data/src/core/channelz/channel_trace.h +380 -86
  13. data/src/core/channelz/channelz.cc +270 -181
  14. data/src/core/channelz/channelz.h +168 -55
  15. data/src/core/channelz/channelz_registry.cc +2 -1
  16. data/src/core/channelz/channelz_registry.h +24 -0
  17. data/src/core/channelz/property_list.cc +357 -0
  18. data/src/core/channelz/property_list.h +202 -0
  19. data/src/core/channelz/ztrace_collector.h +3 -2
  20. data/src/core/client_channel/backup_poller.cc +17 -2
  21. data/src/core/client_channel/client_channel.cc +17 -28
  22. data/src/core/client_channel/client_channel_filter.cc +19 -29
  23. data/src/core/client_channel/config_selector.h +8 -2
  24. data/src/core/client_channel/dynamic_filters.cc +5 -6
  25. data/src/core/client_channel/dynamic_filters.h +1 -1
  26. data/src/core/client_channel/global_subchannel_pool.cc +4 -1
  27. data/src/core/client_channel/retry_filter.cc +21 -27
  28. data/src/core/client_channel/retry_filter.h +10 -7
  29. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
  30. data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
  31. data/src/core/client_channel/retry_interceptor.cc +30 -44
  32. data/src/core/client_channel/retry_interceptor.h +18 -17
  33. data/src/core/client_channel/retry_throttle.cc +46 -61
  34. data/src/core/client_channel/retry_throttle.h +17 -39
  35. data/src/core/client_channel/subchannel.cc +43 -19
  36. data/src/core/client_channel/subchannel.h +8 -0
  37. data/src/core/config/config_vars.cc +2 -0
  38. data/src/core/config/core_configuration.cc +1 -0
  39. data/src/core/config/core_configuration.h +11 -0
  40. data/src/core/credentials/call/call_creds_registry.h +125 -0
  41. data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
  42. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
  43. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
  44. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
  45. data/src/core/credentials/call/jwt_util.cc +70 -0
  46. data/src/core/credentials/call/jwt_util.h +32 -0
  47. data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
  48. data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
  49. data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
  50. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
  51. data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
  52. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
  53. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
  54. data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
  55. data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
  56. data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
  57. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
  58. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
  59. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
  60. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
  61. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
  62. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
  63. data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
  64. data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
  65. data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
  67. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
  68. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
  69. data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
  70. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
  71. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
  72. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
  73. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
  74. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
  75. data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
  76. data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
  77. data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
  78. data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
  79. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
  80. data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
  81. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
  82. data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
  83. data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
  84. data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
  85. data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
  86. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
  87. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
  88. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
  89. data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
  90. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
  92. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
  93. data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
  94. data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
  95. data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
  96. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
  97. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
  98. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
  99. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
  100. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
  101. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
  102. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
  103. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
  104. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
  105. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
  106. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
  107. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
  108. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
  109. data/src/core/filter/auth/auth_filters.h +0 -25
  110. data/src/core/filter/auth/client_auth_filter.cc +0 -118
  111. data/src/core/filter/filter_args.h +9 -23
  112. data/src/core/handshaker/handshaker.cc +23 -14
  113. data/src/core/handshaker/handshaker.h +3 -0
  114. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
  115. data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
  116. data/src/core/handshaker/security/secure_endpoint.cc +70 -25
  117. data/src/core/handshaker/security/security_handshaker.cc +4 -1
  118. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
  119. data/src/core/lib/channel/channel_args.cc +15 -0
  120. data/src/core/lib/channel/channel_args.h +3 -0
  121. data/src/core/lib/channel/channel_stack.cc +22 -23
  122. data/src/core/lib/channel/channel_stack.h +9 -7
  123. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  124. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
  125. data/src/core/lib/channel/promise_based_filter.h +5 -5
  126. data/src/core/lib/debug/trace_impl.h +0 -1
  127. data/src/core/lib/event_engine/ares_resolver.cc +165 -46
  128. data/src/core/lib/event_engine/ares_resolver.h +48 -2
  129. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
  130. data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
  131. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
  132. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
  133. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
  134. data/src/core/lib/event_engine/event_engine.cc +7 -0
  135. data/src/core/lib/event_engine/extensions/channelz.h +10 -6
  136. data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
  137. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
  138. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
  139. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
  140. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
  141. data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
  142. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
  143. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
  144. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
  145. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
  146. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
  147. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
  148. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
  149. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
  150. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
  151. data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
  152. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
  153. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
  154. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
  155. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
  156. data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
  157. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
  158. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
  159. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
  160. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
  161. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
  162. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
  163. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
  164. data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
  165. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
  166. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
  167. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
  168. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
  169. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
  170. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
  171. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
  172. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
  173. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
  174. data/src/core/lib/event_engine/shim.cc +9 -0
  175. data/src/core/lib/event_engine/shim.h +3 -0
  176. data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
  177. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
  178. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
  179. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
  180. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
  181. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
  182. data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
  183. data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
  184. data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
  185. data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
  186. data/src/core/lib/experiments/experiments.cc +45 -93
  187. data/src/core/lib/experiments/experiments.h +21 -51
  188. data/src/core/lib/iomgr/endpoint.cc +4 -3
  189. data/src/core/lib/iomgr/endpoint.h +7 -4
  190. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
  191. data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
  192. data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
  193. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
  194. data/src/core/lib/iomgr/tcp_posix.cc +12 -6
  195. data/src/core/lib/iomgr/tcp_windows.cc +3 -2
  196. data/src/core/lib/promise/activity.h +1 -0
  197. data/src/core/lib/promise/arena_promise.h +23 -7
  198. data/src/core/lib/promise/detail/promise_factory.h +10 -0
  199. data/src/core/lib/promise/detail/promise_like.h +118 -11
  200. data/src/core/lib/promise/detail/promise_variant.h +50 -0
  201. data/src/core/lib/promise/detail/seq_state.h +687 -548
  202. data/src/core/lib/promise/if.h +20 -0
  203. data/src/core/lib/promise/inter_activity_latch.h +147 -0
  204. data/src/core/lib/promise/inter_activity_mutex.h +547 -0
  205. data/src/core/lib/promise/loop.h +65 -3
  206. data/src/core/lib/promise/map.h +24 -0
  207. data/src/core/lib/promise/match_promise.h +103 -0
  208. data/src/core/lib/promise/mpsc.cc +425 -0
  209. data/src/core/lib/promise/mpsc.h +490 -0
  210. data/src/core/lib/promise/party.cc +50 -1
  211. data/src/core/lib/promise/party.h +66 -1
  212. data/src/core/lib/promise/race.h +31 -0
  213. data/src/core/lib/promise/seq.h +4 -1
  214. data/src/core/lib/promise/status_flag.h +7 -0
  215. data/src/core/lib/promise/try_seq.h +4 -1
  216. data/src/core/lib/promise/wait_set.cc +28 -0
  217. data/src/core/lib/promise/wait_set.h +86 -0
  218. data/src/core/lib/resource_quota/arena.h +19 -0
  219. data/src/core/lib/slice/slice.h +5 -0
  220. data/src/core/lib/surface/channel_create.cc +88 -13
  221. data/src/core/lib/surface/channel_create.h +4 -0
  222. data/src/core/lib/surface/channel_init.cc +164 -47
  223. data/src/core/lib/surface/channel_init.h +64 -1
  224. data/src/core/lib/surface/filter_stack_call.cc +18 -9
  225. data/src/core/lib/surface/init.cc +6 -15
  226. data/src/core/lib/surface/legacy_channel.cc +3 -5
  227. data/src/core/lib/surface/legacy_channel.h +3 -1
  228. data/src/core/lib/surface/version.cc +2 -2
  229. data/src/core/lib/transport/promise_endpoint.cc +110 -0
  230. data/src/core/lib/transport/promise_endpoint.h +307 -0
  231. data/src/core/load_balancing/child_policy_handler.cc +2 -4
  232. data/src/core/load_balancing/delegating_helper.h +2 -3
  233. data/src/core/load_balancing/health_check_client.cc +1 -5
  234. data/src/core/load_balancing/lb_policy.h +1 -3
  235. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  236. data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
  237. data/src/core/load_balancing/xds/cds.cc +10 -1
  238. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  239. data/src/core/resolver/xds/xds_config.cc +6 -3
  240. data/src/core/resolver/xds/xds_config.h +9 -4
  241. data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
  242. data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
  243. data/src/core/resolver/xds/xds_resolver.cc +31 -11
  244. data/src/core/server/server.cc +83 -12
  245. data/src/core/server/server.h +21 -2
  246. data/src/core/server/xds_server_config_fetcher.cc +63 -25
  247. data/src/core/service_config/service_config.h +1 -1
  248. data/src/core/service_config/service_config_impl.h +1 -1
  249. data/src/core/telemetry/context_list_entry.cc +38 -0
  250. data/src/core/telemetry/context_list_entry.h +42 -12
  251. data/src/core/telemetry/stats_data.cc +233 -207
  252. data/src/core/telemetry/stats_data.h +250 -153
  253. data/src/core/telemetry/tcp_tracer.h +1 -1
  254. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
  255. data/src/core/tsi/fake_transport_security.cc +17 -0
  256. data/src/core/tsi/ssl_transport_security.cc +2 -0
  257. data/src/core/tsi/transport_security_grpc.cc +8 -0
  258. data/src/core/tsi/transport_security_grpc.h +15 -0
  259. data/src/core/util/backoff.cc +1 -5
  260. data/src/core/util/backoff.h +1 -0
  261. data/src/core/util/down_cast.h +1 -1
  262. data/src/core/util/function_signature.h +15 -1
  263. data/src/core/util/http_client/httpcli.cc +12 -5
  264. data/src/core/util/http_client/httpcli.h +4 -1
  265. data/src/core/util/latent_see.h +8 -5
  266. data/src/core/util/log.cc +4 -0
  267. data/src/core/util/memory_usage.h +268 -0
  268. data/src/core/util/per_cpu.cc +2 -0
  269. data/src/core/util/per_cpu.h +7 -0
  270. data/src/core/util/shared_bit_gen.h +20 -0
  271. data/src/core/util/single_set_ptr.h +2 -2
  272. data/src/core/util/upb_utils.h +42 -0
  273. data/src/core/util/uri.cc +3 -2
  274. data/src/core/util/useful.h +53 -2
  275. data/src/core/util/wait_for_single_owner.cc +31 -0
  276. data/src/core/util/wait_for_single_owner.h +24 -0
  277. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
  278. data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
  279. data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
  280. data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
  281. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  282. data/src/core/xds/grpc/xds_http_filter.h +7 -0
  283. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
  284. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
  285. data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
  286. data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
  287. data/src/core/xds/grpc/xds_server_grpc.h +10 -2
  288. data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
  289. data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
  290. data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
  291. data/src/core/xds/xds_client/xds_client.cc +26 -5
  292. data/src/ruby/ext/grpc/extconf.rb +2 -0
  293. data/src/ruby/ext/grpc/rb_call.c +1 -8
  294. data/src/ruby/ext/grpc/rb_channel.c +72 -568
  295. data/src/ruby/ext/grpc/rb_channel.h +0 -3
  296. data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
  297. data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
  298. data/src/ruby/ext/grpc/rb_grpc.c +9 -5
  299. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  300. data/src/ruby/ext/grpc/rb_loader.c +0 -4
  301. data/src/ruby/ext/grpc/rb_server.c +31 -50
  302. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
  303. data/src/ruby/lib/grpc/version.rb +1 -1
  304. data/src/ruby/spec/core_spec.rb +22 -0
  305. data/src/ruby/spec/generic/active_call_spec.rb +1 -1
  306. data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
  307. data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
  308. data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
  309. data/third_party/abseil-cpp/absl/base/config.h +20 -129
  310. data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  311. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  312. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  313. data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
  314. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  315. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
  316. data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
  317. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
  318. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
  319. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  320. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  321. data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
  322. data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
  323. data/third_party/abseil-cpp/absl/base/options.h +3 -80
  324. data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
  325. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  326. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  327. data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
  328. data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
  329. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
  330. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
  331. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
  332. data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
  333. data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
  334. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  335. data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
  336. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  337. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
  338. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
  339. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
  340. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  341. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
  342. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
  343. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  344. data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
  345. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  346. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
  347. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
  348. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
  349. data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
  350. data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
  351. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  352. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
  353. data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  354. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  355. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  356. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  357. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  358. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  359. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  360. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  361. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  362. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  363. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  364. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  365. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  366. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
  367. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
  368. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  369. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
  370. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  371. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  372. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  373. data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
  374. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  375. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
  376. data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
  377. data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
  378. data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
  379. data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
  380. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
  381. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
  382. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  383. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  384. data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
  385. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
  387. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
  388. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
  389. data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  390. data/third_party/abseil-cpp/absl/log/check.h +2 -1
  391. data/third_party/abseil-cpp/absl/log/globals.h +4 -5
  392. data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  393. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
  394. data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
  395. data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  396. data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
  397. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  398. data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
  399. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  400. data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
  401. data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
  402. data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
  403. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  404. data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
  405. data/third_party/abseil-cpp/absl/log/log.h +48 -35
  406. data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  407. data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
  408. data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
  409. data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
  410. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
  411. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  412. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  413. data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
  414. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  415. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  416. data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
  417. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  418. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  419. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  420. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  421. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  422. data/third_party/abseil-cpp/absl/random/random.h +88 -53
  423. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  424. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  425. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  426. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
  427. data/third_party/abseil-cpp/absl/status/status.cc +4 -8
  428. data/third_party/abseil-cpp/absl/status/status.h +8 -8
  429. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  430. data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
  431. data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
  432. data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
  433. data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
  434. data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
  435. data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
  436. data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
  437. data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
  438. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  439. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  440. data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
  441. data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
  442. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  443. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
  444. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  445. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  451. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  452. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  453. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  454. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  455. data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
  456. data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
  457. data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
  458. data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
  459. data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
  460. data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
  461. data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
  462. data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
  463. data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
  464. data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
  465. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
  466. data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
  467. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  468. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  469. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  470. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  471. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  472. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  473. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  474. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
  475. data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
  476. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  477. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
  478. data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  481. data/third_party/abseil-cpp/absl/time/time.h +20 -15
  482. data/third_party/abseil-cpp/absl/types/optional.h +7 -747
  483. data/third_party/abseil-cpp/absl/types/span.h +13 -11
  484. data/third_party/abseil-cpp/absl/types/variant.h +5 -784
  485. data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
  486. metadata +72 -20
  487. data/src/core/lib/event_engine/forkable.cc +0 -105
  488. data/src/core/lib/event_engine/forkable.h +0 -67
  489. data/src/core/lib/iomgr/python_util.h +0 -46
  490. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  491. data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
  492. data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
  493. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  494. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  495. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  496. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  497. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  498. data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
  499. data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -21,7 +21,6 @@
21
21
  #include <type_traits>
22
22
  #include <utility>
23
23
 
24
- #include "absl/base/internal/invoke.h"
25
24
  #include "absl/container/internal/compressed_tuple.h"
26
25
  #include "absl/meta/type_traits.h"
27
26
  #include "absl/utility/utility.h"
@@ -33,9 +32,8 @@ namespace functional_internal {
33
32
  // Invoke the method, expanding the tuple of bound arguments.
34
33
  template <class R, class Tuple, size_t... Idx, class... Args>
35
34
  R Apply(Tuple&& bound, absl::index_sequence<Idx...>, Args&&... free) {
36
- return base_internal::invoke(
37
- std::forward<Tuple>(bound).template get<Idx>()...,
38
- std::forward<Args>(free)...);
35
+ return std::invoke(std::forward<Tuple>(bound).template get<Idx>()...,
36
+ std::forward<Args>(free)...);
39
37
  }
40
38
 
41
39
  template <class F, class... BoundArgs>
@@ -50,23 +48,23 @@ class FrontBinder {
50
48
  constexpr explicit FrontBinder(absl::in_place_t, Ts&&... ts)
51
49
  : bound_args_(std::forward<Ts>(ts)...) {}
52
50
 
53
- template <class... FreeArgs, class R = base_internal::invoke_result_t<
54
- F&, BoundArgs&..., FreeArgs&&...>>
51
+ template <class... FreeArgs,
52
+ class R = std::invoke_result_t<F&, BoundArgs&..., FreeArgs&&...>>
55
53
  R operator()(FreeArgs&&... free_args) & {
56
54
  return functional_internal::Apply<R>(bound_args_, Idx(),
57
55
  std::forward<FreeArgs>(free_args)...);
58
56
  }
59
57
 
60
58
  template <class... FreeArgs,
61
- class R = base_internal::invoke_result_t<
62
- const F&, const BoundArgs&..., FreeArgs&&...>>
59
+ class R = std::invoke_result_t<const F&, const BoundArgs&...,
60
+ FreeArgs&&...>>
63
61
  R operator()(FreeArgs&&... free_args) const& {
64
62
  return functional_internal::Apply<R>(bound_args_, Idx(),
65
63
  std::forward<FreeArgs>(free_args)...);
66
64
  }
67
65
 
68
- template <class... FreeArgs, class R = base_internal::invoke_result_t<
69
- F&&, BoundArgs&&..., FreeArgs&&...>>
66
+ template <class... FreeArgs,
67
+ class R = std::invoke_result_t<F&&, BoundArgs&&..., FreeArgs&&...>>
70
68
  R operator()(FreeArgs&&... free_args) && {
71
69
  // This overload is called when *this is an rvalue. If some of the bound
72
70
  // arguments are stored by value or rvalue reference, we move them.
@@ -75,8 +73,8 @@ class FrontBinder {
75
73
  }
76
74
 
77
75
  template <class... FreeArgs,
78
- class R = base_internal::invoke_result_t<
79
- const F&&, const BoundArgs&&..., FreeArgs&&...>>
76
+ class R = std::invoke_result_t<const F&&, const BoundArgs&&...,
77
+ FreeArgs&&...>>
80
78
  R operator()(FreeArgs&&... free_args) const&& {
81
79
  // This overload is called when *this is an rvalue. If some of the bound
82
80
  // arguments are stored by value or rvalue reference, we move them.
@@ -19,7 +19,6 @@
19
19
  #include <functional>
20
20
  #include <type_traits>
21
21
 
22
- #include "absl/base/internal/invoke.h"
23
22
  #include "absl/functional/any_invocable.h"
24
23
  #include "absl/meta/type_traits.h"
25
24
 
@@ -74,15 +73,13 @@ using Invoker = R (*)(VoidPtr, typename ForwardT<Args>::type...);
74
73
  template <typename Obj, typename R, typename... Args>
75
74
  R InvokeObject(VoidPtr ptr, typename ForwardT<Args>::type... args) {
76
75
  auto o = static_cast<const Obj*>(ptr.obj);
77
- return static_cast<R>(
78
- absl::base_internal::invoke(*o, std::forward<Args>(args)...));
76
+ return static_cast<R>(std::invoke(*o, std::forward<Args>(args)...));
79
77
  }
80
78
 
81
79
  template <typename Fun, typename R, typename... Args>
82
80
  R InvokeFunction(VoidPtr ptr, typename ForwardT<Args>::type... args) {
83
81
  auto f = reinterpret_cast<Fun>(ptr.fun);
84
- return static_cast<R>(
85
- absl::base_internal::invoke(f, std::forward<Args>(args)...));
82
+ return static_cast<R>(std::invoke(f, std::forward<Args>(args)...));
86
83
  }
87
84
 
88
85
  template <typename Sig>
@@ -87,6 +87,7 @@
87
87
  #include "absl/base/config.h"
88
88
  #include "absl/functional/function_ref.h"
89
89
  #include "absl/hash/internal/hash.h"
90
+ #include "absl/hash/internal/weakly_mixed_integer.h"
90
91
  #include "absl/meta/type_traits.h"
91
92
 
92
93
  namespace absl {
@@ -356,6 +357,12 @@ class HashState : public hash_internal::HashStateBase<HashState> {
356
357
  hash_state.combine_contiguous_(hash_state.state_, first, size);
357
358
  return hash_state;
358
359
  }
360
+
361
+ static HashState combine_weakly_mixed_integer(
362
+ HashState hash_state, hash_internal::WeaklyMixedInteger value) {
363
+ hash_state.combine_weakly_mixed_integer_(hash_state.state_, value);
364
+ return hash_state;
365
+ }
359
366
  using HashState::HashStateBase::combine_contiguous;
360
367
 
361
368
  private:
@@ -371,6 +378,13 @@ class HashState : public hash_internal::HashStateBase<HashState> {
371
378
  state = T::combine_contiguous(std::move(state), first, size);
372
379
  }
373
380
 
381
+ template <typename T>
382
+ static void CombineWeaklyMixedIntegerImpl(
383
+ void* p, hash_internal::WeaklyMixedInteger value) {
384
+ T& state = *static_cast<T*>(p);
385
+ state = T::combine_weakly_mixed_integer(std::move(state), value);
386
+ }
387
+
374
388
  static HashState combine_raw(HashState hash_state, uint64_t value) {
375
389
  hash_state.combine_raw_(hash_state.state_, value);
376
390
  return hash_state;
@@ -385,6 +399,7 @@ class HashState : public hash_internal::HashStateBase<HashState> {
385
399
  template <typename T>
386
400
  void Init(T* state) {
387
401
  state_ = state;
402
+ combine_weakly_mixed_integer_ = &CombineWeaklyMixedIntegerImpl<T>;
388
403
  combine_contiguous_ = &CombineContiguousImpl<T>;
389
404
  combine_raw_ = &CombineRawImpl<T>;
390
405
  run_combine_unordered_ = &RunCombineUnorderedImpl<T>;
@@ -424,6 +439,7 @@ class HashState : public hash_internal::HashStateBase<HashState> {
424
439
  // Do not erase an already erased state.
425
440
  void Init(HashState* state) {
426
441
  state_ = state->state_;
442
+ combine_weakly_mixed_integer_ = state->combine_weakly_mixed_integer_;
427
443
  combine_contiguous_ = state->combine_contiguous_;
428
444
  combine_raw_ = state->combine_raw_;
429
445
  run_combine_unordered_ = state->run_combine_unordered_;
@@ -435,6 +451,8 @@ class HashState : public hash_internal::HashStateBase<HashState> {
435
451
  }
436
452
 
437
453
  void* state_;
454
+ void (*combine_weakly_mixed_integer_)(
455
+ void*, absl::hash_internal::WeaklyMixedInteger);
438
456
  void (*combine_contiguous_)(void*, const unsigned char*, size_t);
439
457
  void (*combine_raw_)(void*, uint64_t);
440
458
  HashState (*run_combine_unordered_)(
@@ -55,13 +55,9 @@ uint64_t MixingHashState::CombineLargeContiguousImpl64(
55
55
 
56
56
  ABSL_CONST_INIT const void* const MixingHashState::kSeed = &kSeed;
57
57
 
58
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
59
- constexpr uint64_t MixingHashState::kStaticRandomData[];
60
- #endif
61
-
62
58
  uint64_t MixingHashState::LowLevelHashImpl(const unsigned char* data,
63
59
  size_t len) {
64
- return LowLevelHashLenGt16(data, len, Seed(), &kStaticRandomData[0]);
60
+ return LowLevelHashLenGt32(data, len, Seed(), &kStaticRandomData[0]);
65
61
  }
66
62
 
67
63
  } // namespace hash_internal
@@ -24,15 +24,29 @@
24
24
  #include <TargetConditionals.h>
25
25
  #endif
26
26
 
27
+ // We include config.h here to make sure that ABSL_INTERNAL_CPLUSPLUS_LANG is
28
+ // defined.
27
29
  #include "absl/base/config.h"
28
30
 
31
+ // GCC15 warns that <ciso646> is deprecated in C++17 and suggests using
32
+ // <version> instead, even though <version> is not available in C++17 mode prior
33
+ // to GCC9.
34
+ #if defined(__has_include)
35
+ #if __has_include(<version>)
36
+ #define ABSL_INTERNAL_VERSION_HEADER_AVAILABLE 1
37
+ #endif
38
+ #endif
39
+
29
40
  // For feature testing and determining which headers can be included.
30
- #if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
41
+ #if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L || \
42
+ defined(ABSL_INTERNAL_VERSION_HEADER_AVAILABLE)
31
43
  #include <version>
32
44
  #else
33
45
  #include <ciso646>
34
46
  #endif
35
47
 
48
+ #undef ABSL_INTERNAL_VERSION_HEADER_AVAILABLE
49
+
36
50
  #include <algorithm>
37
51
  #include <array>
38
52
  #include <bitset>
@@ -51,6 +65,7 @@
51
65
  #include <memory>
52
66
  #include <set>
53
67
  #include <string>
68
+ #include <string_view>
54
69
  #include <tuple>
55
70
  #include <type_traits>
56
71
  #include <unordered_map>
@@ -65,7 +80,7 @@
65
80
  #include "absl/base/port.h"
66
81
  #include "absl/container/fixed_array.h"
67
82
  #include "absl/hash/internal/city.h"
68
- #include "absl/hash/internal/low_level_hash.h"
83
+ #include "absl/hash/internal/weakly_mixed_integer.h"
69
84
  #include "absl/meta/type_traits.h"
70
85
  #include "absl/numeric/bits.h"
71
86
  #include "absl/numeric/int128.h"
@@ -78,14 +93,6 @@
78
93
  #include <filesystem> // NOLINT
79
94
  #endif
80
95
 
81
- #ifdef ABSL_HAVE_STD_STRING_VIEW
82
- #include <string_view>
83
- #endif
84
-
85
- #ifdef __ARM_ACLE
86
- #include <arm_acle.h>
87
- #endif
88
-
89
96
  namespace absl {
90
97
  ABSL_NAMESPACE_BEGIN
91
98
 
@@ -375,14 +382,14 @@ template <typename H, typename T,
375
382
  H hash_bytes(H hash_state, const T& value) {
376
383
  const unsigned char* start = reinterpret_cast<const unsigned char*>(&value);
377
384
  uint64_t v;
378
- if (sizeof(T) == 1) {
385
+ if constexpr (sizeof(T) == 1) {
379
386
  v = *start;
380
- } else if (sizeof(T) == 2) {
387
+ } else if constexpr (sizeof(T) == 2) {
381
388
  v = absl::base_internal::UnalignedLoad16(start);
382
- } else if (sizeof(T) == 4) {
389
+ } else if constexpr (sizeof(T) == 4) {
383
390
  v = absl::base_internal::UnalignedLoad32(start);
384
391
  } else {
385
- assert(sizeof(T) == 8);
392
+ static_assert(sizeof(T) == 8);
386
393
  v = absl::base_internal::UnalignedLoad64(start);
387
394
  }
388
395
  return CombineRaw()(std::move(hash_state), v);
@@ -394,6 +401,11 @@ H hash_bytes(H hash_state, const T& value) {
394
401
  return H::combine_contiguous(std::move(hash_state), start, sizeof(value));
395
402
  }
396
403
 
404
+ template <typename H>
405
+ H hash_weakly_mixed_integer(H hash_state, WeaklyMixedInteger value) {
406
+ return H::combine_weakly_mixed_integer(std::move(hash_state), value);
407
+ }
408
+
397
409
  // -----------------------------------------------------------------------------
398
410
  // AbslHashValue for Basic Types
399
411
  // -----------------------------------------------------------------------------
@@ -512,7 +524,7 @@ H AbslHashValue(H hash_state, T C::*ptr) {
512
524
  // padding (namely when they have 1 or 3 ints). The value below is a lower
513
525
  // bound on the number of salient, non-padding bytes that we use for
514
526
  // hashing.
515
- if (alignof(T C::*) == alignof(int)) {
527
+ if constexpr (alignof(T C::*) == alignof(int)) {
516
528
  // No padding when all subobjects have the same size as the total
517
529
  // alignment. This happens in 32-bit mode.
518
530
  return n;
@@ -609,7 +621,7 @@ template <typename H>
609
621
  H AbslHashValue(H hash_state, absl::string_view str) {
610
622
  return H::combine(
611
623
  H::combine_contiguous(std::move(hash_state), str.data(), str.size()),
612
- str.size());
624
+ WeaklyMixedInteger{str.size()});
613
625
  }
614
626
 
615
627
  // Support std::wstring, std::u16string and std::u32string.
@@ -622,11 +634,9 @@ H AbslHashValue(
622
634
  const std::basic_string<Char, std::char_traits<Char>, Alloc>& str) {
623
635
  return H::combine(
624
636
  H::combine_contiguous(std::move(hash_state), str.data(), str.size()),
625
- str.size());
637
+ WeaklyMixedInteger{str.size()});
626
638
  }
627
639
 
628
- #ifdef ABSL_HAVE_STD_STRING_VIEW
629
-
630
640
  // Support std::wstring_view, std::u16string_view and std::u32string_view.
631
641
  template <typename Char, typename H,
632
642
  typename = absl::enable_if_t<std::is_same<Char, wchar_t>::value ||
@@ -635,11 +645,9 @@ template <typename Char, typename H,
635
645
  H AbslHashValue(H hash_state, std::basic_string_view<Char> str) {
636
646
  return H::combine(
637
647
  H::combine_contiguous(std::move(hash_state), str.data(), str.size()),
638
- str.size());
648
+ WeaklyMixedInteger{str.size()});
639
649
  }
640
650
 
641
- #endif // ABSL_HAVE_STD_STRING_VIEW
642
-
643
651
  #if defined(__cpp_lib_filesystem) && __cpp_lib_filesystem >= 201703L && \
644
652
  (!defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) || \
645
653
  __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 130000) && \
@@ -685,7 +693,7 @@ typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue(
685
693
  for (const auto& t : deque) {
686
694
  hash_state = H::combine(std::move(hash_state), t);
687
695
  }
688
- return H::combine(std::move(hash_state), deque.size());
696
+ return H::combine(std::move(hash_state), WeaklyMixedInteger{deque.size()});
689
697
  }
690
698
 
691
699
  // AbslHashValue for hashing std::forward_list
@@ -697,7 +705,7 @@ typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue(
697
705
  hash_state = H::combine(std::move(hash_state), t);
698
706
  ++size;
699
707
  }
700
- return H::combine(std::move(hash_state), size);
708
+ return H::combine(std::move(hash_state), WeaklyMixedInteger{size});
701
709
  }
702
710
 
703
711
  // AbslHashValue for hashing std::list
@@ -707,7 +715,7 @@ typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue(
707
715
  for (const auto& t : list) {
708
716
  hash_state = H::combine(std::move(hash_state), t);
709
717
  }
710
- return H::combine(std::move(hash_state), list.size());
718
+ return H::combine(std::move(hash_state), WeaklyMixedInteger{list.size()});
711
719
  }
712
720
 
713
721
  // AbslHashValue for hashing std::vector
@@ -721,7 +729,7 @@ typename std::enable_if<is_hashable<T>::value && !std::is_same<T, bool>::value,
721
729
  AbslHashValue(H hash_state, const std::vector<T, Allocator>& vector) {
722
730
  return H::combine(H::combine_contiguous(std::move(hash_state), vector.data(),
723
731
  vector.size()),
724
- vector.size());
732
+ WeaklyMixedInteger{vector.size()});
725
733
  }
726
734
 
727
735
  // AbslHashValue special cases for hashing std::vector<bool>
@@ -742,7 +750,8 @@ AbslHashValue(H hash_state, const std::vector<T, Allocator>& vector) {
742
750
  unsigned char c = static_cast<unsigned char>(i);
743
751
  hash_state = combiner.add_buffer(std::move(hash_state), &c, sizeof(c));
744
752
  }
745
- return H::combine(combiner.finalize(std::move(hash_state)), vector.size());
753
+ return H::combine(combiner.finalize(std::move(hash_state)),
754
+ WeaklyMixedInteger{vector.size()});
746
755
  }
747
756
  #else
748
757
  // When not working around the libstdc++ bug above, we still have to contend
@@ -758,7 +767,7 @@ typename std::enable_if<is_hashable<T>::value && std::is_same<T, bool>::value,
758
767
  AbslHashValue(H hash_state, const std::vector<T, Allocator>& vector) {
759
768
  return H::combine(std::move(hash_state),
760
769
  std::hash<std::vector<T, Allocator>>{}(vector),
761
- vector.size());
770
+ WeaklyMixedInteger{vector.size()});
762
771
  }
763
772
  #endif
764
773
 
@@ -775,7 +784,7 @@ AbslHashValue(H hash_state, const std::map<Key, T, Compare, Allocator>& map) {
775
784
  for (const auto& t : map) {
776
785
  hash_state = H::combine(std::move(hash_state), t);
777
786
  }
778
- return H::combine(std::move(hash_state), map.size());
787
+ return H::combine(std::move(hash_state), WeaklyMixedInteger{map.size()});
779
788
  }
780
789
 
781
790
  // AbslHashValue for hashing std::multimap
@@ -788,7 +797,7 @@ AbslHashValue(H hash_state,
788
797
  for (const auto& t : map) {
789
798
  hash_state = H::combine(std::move(hash_state), t);
790
799
  }
791
- return H::combine(std::move(hash_state), map.size());
800
+ return H::combine(std::move(hash_state), WeaklyMixedInteger{map.size()});
792
801
  }
793
802
 
794
803
  // AbslHashValue for hashing std::set
@@ -798,7 +807,7 @@ typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue(
798
807
  for (const auto& t : set) {
799
808
  hash_state = H::combine(std::move(hash_state), t);
800
809
  }
801
- return H::combine(std::move(hash_state), set.size());
810
+ return H::combine(std::move(hash_state), WeaklyMixedInteger{set.size()});
802
811
  }
803
812
 
804
813
  // AbslHashValue for hashing std::multiset
@@ -808,7 +817,7 @@ typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue(
808
817
  for (const auto& t : set) {
809
818
  hash_state = H::combine(std::move(hash_state), t);
810
819
  }
811
- return H::combine(std::move(hash_state), set.size());
820
+ return H::combine(std::move(hash_state), WeaklyMixedInteger{set.size()});
812
821
  }
813
822
 
814
823
  // -----------------------------------------------------------------------------
@@ -822,7 +831,7 @@ typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue(
822
831
  H hash_state, const std::unordered_set<Key, Hash, KeyEqual, Alloc>& s) {
823
832
  return H::combine(
824
833
  H::combine_unordered(std::move(hash_state), s.begin(), s.end()),
825
- s.size());
834
+ WeaklyMixedInteger{s.size()});
826
835
  }
827
836
 
828
837
  // AbslHashValue for hashing std::unordered_multiset
@@ -833,7 +842,7 @@ typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue(
833
842
  const std::unordered_multiset<Key, Hash, KeyEqual, Alloc>& s) {
834
843
  return H::combine(
835
844
  H::combine_unordered(std::move(hash_state), s.begin(), s.end()),
836
- s.size());
845
+ WeaklyMixedInteger{s.size()});
837
846
  }
838
847
 
839
848
  // AbslHashValue for hashing std::unordered_set
@@ -845,7 +854,7 @@ AbslHashValue(H hash_state,
845
854
  const std::unordered_map<Key, T, Hash, KeyEqual, Alloc>& s) {
846
855
  return H::combine(
847
856
  H::combine_unordered(std::move(hash_state), s.begin(), s.end()),
848
- s.size());
857
+ WeaklyMixedInteger{s.size()});
849
858
  }
850
859
 
851
860
  // AbslHashValue for hashing std::unordered_multiset
@@ -857,7 +866,7 @@ AbslHashValue(H hash_state,
857
866
  const std::unordered_multimap<Key, T, Hash, KeyEqual, Alloc>& s) {
858
867
  return H::combine(
859
868
  H::combine_unordered(std::move(hash_state), s.begin(), s.end()),
860
- s.size());
869
+ WeaklyMixedInteger{s.size()});
861
870
  }
862
871
 
863
872
  // -----------------------------------------------------------------------------
@@ -968,11 +977,20 @@ hash_range_or_bytes(H hash_state, const T* data, size_t size) {
968
977
  // `false`.
969
978
  struct HashSelect {
970
979
  private:
980
+ struct WeaklyMixedIntegerProbe {
981
+ template <typename H>
982
+ static H Invoke(H state, WeaklyMixedInteger value) {
983
+ return hash_internal::hash_weakly_mixed_integer(std::move(state), value);
984
+ }
985
+ };
986
+
971
987
  struct State : HashStateBase<State> {
972
988
  static State combine_contiguous(State hash_state, const unsigned char*,
973
989
  size_t);
974
990
  using State::HashStateBase::combine_contiguous;
975
991
  static State combine_raw(State state, uint64_t value);
992
+ static State combine_weakly_mixed_integer(State hash_state,
993
+ WeaklyMixedInteger value);
976
994
  };
977
995
 
978
996
  struct UniquelyRepresentedProbe {
@@ -1034,6 +1052,7 @@ struct HashSelect {
1034
1052
  // disjunction provides short circuiting wrt instantiation.
1035
1053
  template <typename T>
1036
1054
  using Apply = absl::disjunction< //
1055
+ Probe<WeaklyMixedIntegerProbe, T>, //
1037
1056
  Probe<UniquelyRepresentedProbe, T>, //
1038
1057
  Probe<HashValueProbe, T>, //
1039
1058
  Probe<LegacyHashProbe, T>, //
@@ -1063,8 +1082,7 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
1063
1082
  };
1064
1083
 
1065
1084
  static constexpr uint64_t kMul =
1066
- sizeof(size_t) == 4 ? uint64_t{0xcc9e2d51}
1067
- : uint64_t{0xdcb22ca68cb134ed};
1085
+ uint64_t{0xdcb22ca68cb134ed};
1068
1086
 
1069
1087
  template <typename T>
1070
1088
  using IntegralFastPath =
@@ -1099,7 +1117,7 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
1099
1117
  template <typename T, absl::enable_if_t<IntegralFastPath<T>::value, int> = 0>
1100
1118
  static size_t hash(T value) {
1101
1119
  return static_cast<size_t>(
1102
- WeakMix(Seed() ^ static_cast<std::make_unsigned_t<T>>(value)));
1120
+ WeakMix(Seed(), static_cast<std::make_unsigned_t<T>>(value)));
1103
1121
  }
1104
1122
 
1105
1123
  // Overload of MixingHashState::hash()
@@ -1114,6 +1132,18 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
1114
1132
  MixingHashState() : state_(Seed()) {}
1115
1133
 
1116
1134
  friend class MixingHashState::HashStateBase;
1135
+ template <typename H>
1136
+ friend H absl::hash_internal::hash_weakly_mixed_integer(H,
1137
+ WeaklyMixedInteger);
1138
+
1139
+ static MixingHashState combine_weakly_mixed_integer(
1140
+ MixingHashState hash_state, WeaklyMixedInteger value) {
1141
+ // Some transformation for the value is needed to make an empty
1142
+ // string/container change the mixing hash state.
1143
+ // We use constant smaller than 8 bits to make compiler use
1144
+ // `add` with an immediate operand with 1 byte value.
1145
+ return MixingHashState{hash_state.state_ + (0x57 + value.value)};
1146
+ }
1117
1147
 
1118
1148
  template <typename CombinerT>
1119
1149
  static MixingHashState RunCombineUnordered(MixingHashState state,
@@ -1152,7 +1182,7 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
1152
1182
  // optimize Read1To3 and Read4To8 differently for the string case.
1153
1183
  static MixingHashState combine_raw(MixingHashState hash_state,
1154
1184
  uint64_t value) {
1155
- return MixingHashState(WeakMix(hash_state.state_ ^ value));
1185
+ return MixingHashState(WeakMix(hash_state.state_, value));
1156
1186
  }
1157
1187
 
1158
1188
  // Implementation of the base case for combine_contiguous where we actually
@@ -1180,7 +1210,7 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
1180
1210
  // Empty ranges have no effect.
1181
1211
  return state;
1182
1212
  }
1183
- return WeakMix(state ^ v);
1213
+ return WeakMix(state, v);
1184
1214
  }
1185
1215
 
1186
1216
  ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t CombineContiguousImpl9to16(
@@ -1222,8 +1252,8 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
1222
1252
  size_t len);
1223
1253
 
1224
1254
  // Reads 9 to 16 bytes from p.
1225
- // The least significant 8 bytes are in .first, the rest (zero padded) bytes
1226
- // are in .second.
1255
+ // The least significant 8 bytes are in .first, and the rest of the bytes are
1256
+ // in .second along with duplicated bytes from .first if len<16.
1227
1257
  static std::pair<uint64_t, uint64_t> Read9To16(const unsigned char* p,
1228
1258
  size_t len) {
1229
1259
  uint64_t low_mem = Read8(p);
@@ -1251,11 +1281,7 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
1251
1281
  #endif
1252
1282
  }
1253
1283
 
1254
- // Reads 4 to 8 bytes from p. Zero pads to fill uint64_t.
1255
- // TODO(b/384509507): consider optimizing this by not requiring the output to
1256
- // be equivalent to an integer load for 4/8 bytes. Currently, we rely on this
1257
- // behavior for the HashConsistentAcrossIntTypes test case. Ditto for
1258
- // Read1To3.
1284
+ // Reads 4 to 8 bytes from p. Some input bytes may be duplicated in output.
1259
1285
  static uint64_t Read4To8(const unsigned char* p, size_t len) {
1260
1286
  // If `len < 8`, we duplicate bytes in the middle.
1261
1287
  // E.g.:
@@ -1274,7 +1300,7 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
1274
1300
  return most_significant | least_significant;
1275
1301
  }
1276
1302
 
1277
- // Reads 1 to 3 bytes from p. Zero pads to fill uint32_t.
1303
+ // Reads 1 to 3 bytes from p. Some input bytes may be duplicated in output.
1278
1304
  static uint32_t Read1To3(const unsigned char* p, size_t len) {
1279
1305
  // The trick used by this implementation is to avoid branches.
1280
1306
  // We always read three bytes by duplicating.
@@ -1290,27 +1316,26 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
1290
1316
  }
1291
1317
 
1292
1318
  ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Mix(uint64_t lhs, uint64_t rhs) {
1319
+ // For 32 bit platforms we are trying to use all 64 lower bits.
1320
+ if constexpr (sizeof(size_t) < 8) {
1321
+ uint64_t m = lhs * rhs;
1322
+ return m ^ (m >> 32);
1323
+ }
1293
1324
  // Though the 128-bit product on AArch64 needs two instructions, it is
1294
1325
  // still a good balance between speed and hash quality.
1295
- using MultType =
1296
- absl::conditional_t<sizeof(size_t) == 4, uint64_t, uint128>;
1297
- MultType m = lhs;
1326
+ uint128 m = lhs;
1298
1327
  m *= rhs;
1299
- return static_cast<uint64_t>(m ^ (m >> (sizeof(m) * 8 / 2)));
1328
+ return Uint128High64(m) ^ Uint128Low64(m);
1300
1329
  }
1301
1330
 
1302
1331
  // Slightly lower latency than Mix, but with lower quality. The byte swap
1303
1332
  // helps ensure that low bits still have high quality.
1304
- ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t WeakMix(uint64_t n) {
1333
+ ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t WeakMix(uint64_t lhs,
1334
+ uint64_t rhs) {
1335
+ const uint64_t n = lhs ^ rhs;
1305
1336
  // WeakMix doesn't work well on 32-bit platforms so just use Mix.
1306
- if (sizeof(size_t) < 8) return Mix(n, kMul);
1307
- #ifdef __ARM_ACLE
1308
- // gbswap_64 compiles to `rev` on ARM, but `rbit` is better because it
1309
- // reverses bits rather than reversing bytes.
1310
- return __rbitll(n * kMul);
1311
- #else
1337
+ if constexpr (sizeof(size_t) < 8) return Mix(n, kMul);
1312
1338
  return absl::gbswap_64(n * kMul);
1313
- #endif
1314
1339
  }
1315
1340
 
1316
1341
  // An extern to avoid bloat on a direct call to LowLevelHash() with fixed