grpc 1.47.0 → 1.48.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (574) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +105 -47
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +20 -11
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  11. data/include/grpc/impl/codegen/port_platform.h +6 -3
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
  19. data/src/core/ext/filters/client_channel/client_channel.h +19 -4
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
  43. data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
  44. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
  45. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
  52. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
  53. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
  59. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  60. data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
  62. data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
  63. data/src/core/ext/filters/client_channel/subchannel.h +6 -22
  64. data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
  68. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
  74. data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
  75. data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
  76. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  77. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  78. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  79. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  80. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
  83. data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
  85. data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
  86. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  87. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  88. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  89. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  90. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  91. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  92. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
  95. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
  96. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  101. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  106. data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
  107. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  108. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  109. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  110. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
  112. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  117. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  118. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  119. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  120. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  121. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  122. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  123. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  124. data/src/core/ext/xds/upb_utils.h +1 -2
  125. data/src/core/ext/xds/xds_api.cc +16 -18
  126. data/src/core/ext/xds/xds_api.h +12 -5
  127. data/src/core/ext/xds/xds_bootstrap.cc +37 -24
  128. data/src/core/ext/xds/xds_bootstrap.h +9 -11
  129. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  130. data/src/core/ext/xds/xds_certificate_provider.h +16 -1
  131. data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
  132. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  133. data/src/core/ext/xds/xds_client.cc +71 -22
  134. data/src/core/ext/xds/xds_client.h +17 -3
  135. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  136. data/src/core/ext/xds/xds_client_stats.h +4 -3
  137. data/src/core/ext/xds/xds_cluster.cc +21 -10
  138. data/src/core/ext/xds/xds_cluster.h +9 -1
  139. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  140. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  141. data/src/core/ext/xds/xds_common_types.cc +36 -22
  142. data/src/core/ext/xds/xds_common_types.h +12 -4
  143. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  144. data/src/core/ext/xds/xds_endpoint.h +13 -5
  145. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
  146. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  147. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  148. data/src/core/ext/xds/xds_http_filters.h +3 -3
  149. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  150. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  151. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  152. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  153. data/src/core/ext/xds/xds_listener.cc +51 -33
  154. data/src/core/ext/xds/xds_listener.h +10 -1
  155. data/src/core/ext/xds/xds_resource_type.h +3 -3
  156. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  157. data/src/core/ext/xds/xds_route_config.cc +56 -28
  158. data/src/core/ext/xds/xds_route_config.h +11 -2
  159. data/src/core/ext/xds/xds_routing.cc +16 -0
  160. data/src/core/ext/xds/xds_routing.h +7 -2
  161. data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
  162. data/src/core/lib/address_utils/parse_address.cc +5 -8
  163. data/src/core/lib/address_utils/parse_address.h +3 -2
  164. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  165. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  166. data/src/core/lib/avl/avl.h +3 -3
  167. data/src/core/lib/backoff/backoff.cc +1 -1
  168. data/src/core/lib/backoff/backoff.h +1 -1
  169. data/src/core/lib/channel/call_tracer.h +3 -3
  170. data/src/core/lib/channel/channel_args.h +1 -0
  171. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  172. data/src/core/lib/channel/channel_fwd.h +26 -0
  173. data/src/core/lib/channel/channel_stack.cc +4 -4
  174. data/src/core/lib/channel/channel_stack.h +1 -11
  175. data/src/core/lib/channel/channel_stack_builder.h +2 -5
  176. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  177. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  178. data/src/core/lib/channel/channelz.cc +2 -1
  179. data/src/core/lib/channel/channelz.h +2 -3
  180. data/src/core/lib/channel/channelz_registry.cc +4 -5
  181. data/src/core/lib/channel/connected_channel.cc +1 -0
  182. data/src/core/lib/channel/connected_channel.h +1 -0
  183. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  184. data/src/core/lib/channel/promise_based_filter.h +2 -0
  185. data/src/core/lib/compression/compression.cc +6 -1
  186. data/src/core/lib/compression/compression_internal.cc +3 -6
  187. data/src/core/lib/compression/compression_internal.h +3 -2
  188. data/src/core/lib/compression/message_compress.cc +3 -1
  189. data/src/core/lib/compression/message_compress.h +2 -3
  190. data/src/core/lib/debug/stats.cc +9 -9
  191. data/src/core/lib/debug/stats.h +2 -1
  192. data/src/core/lib/debug/stats_data.cc +2 -1
  193. data/src/core/lib/debug/stats_data.h +0 -4
  194. data/src/core/lib/debug/trace.h +13 -12
  195. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  196. data/src/core/lib/event_engine/event_engine.cc +24 -19
  197. data/src/core/lib/event_engine/event_engine_factory.h +2 -2
  198. data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
  199. data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
  200. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  201. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  202. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  203. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  204. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  205. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  206. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  207. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  208. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  209. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  210. data/src/core/lib/event_engine/promise.h +69 -0
  211. data/src/core/lib/gpr/time_posix.cc +6 -9
  212. data/src/core/lib/gpr/time_windows.cc +10 -7
  213. data/src/core/lib/gprpp/manual_constructor.h +0 -67
  214. data/src/core/lib/gprpp/status_helper.cc +44 -30
  215. data/src/core/lib/gprpp/time.cc +8 -0
  216. data/src/core/lib/gprpp/time.h +4 -0
  217. data/src/core/lib/http/format_request.cc +5 -4
  218. data/src/core/lib/http/format_request.h +1 -1
  219. data/src/core/lib/http/httpcli.cc +18 -12
  220. data/src/core/lib/http/httpcli.h +19 -3
  221. data/src/core/lib/http/httpcli_security_connector.cc +16 -4
  222. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  223. data/src/core/lib/http/parser.cc +6 -7
  224. data/src/core/lib/http/parser.h +3 -0
  225. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  226. data/src/core/lib/iomgr/endpoint.h +1 -1
  227. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  228. data/src/core/lib/iomgr/error.cc +11 -9
  229. data/src/core/lib/iomgr/error.h +9 -5
  230. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  231. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  232. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  233. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  234. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  235. data/src/core/lib/iomgr/ev_posix.h +5 -3
  236. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  237. data/src/core/lib/iomgr/iomgr.cc +7 -0
  238. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  239. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  240. data/src/core/lib/iomgr/load_file.cc +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
  242. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  243. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  244. data/src/core/lib/iomgr/tcp_client.h +24 -13
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  247. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  249. data/src/core/lib/iomgr/tcp_posix.cc +91 -29
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  254. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  256. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  257. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  258. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  259. data/src/core/lib/iomgr/work_serializer.h +2 -3
  260. data/src/core/lib/matchers/matchers.cc +6 -3
  261. data/src/core/lib/matchers/matchers.h +2 -0
  262. data/src/core/lib/promise/activity.cc +0 -1
  263. data/src/core/lib/promise/activity.h +7 -13
  264. data/src/core/lib/promise/loop.h +1 -0
  265. data/src/core/lib/promise/promise.h +1 -0
  266. data/src/core/lib/promise/sleep.cc +36 -31
  267. data/src/core/lib/promise/sleep.h +25 -25
  268. data/src/core/lib/resolver/resolver.cc +5 -0
  269. data/src/core/lib/resolver/resolver.h +3 -0
  270. data/src/core/lib/resolver/resolver_factory.h +5 -2
  271. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  272. data/src/core/lib/resolver/resolver_registry.h +12 -1
  273. data/src/core/lib/resolver/server_address.cc +8 -0
  274. data/src/core/lib/resolver/server_address.h +9 -2
  275. data/src/core/lib/resource_quota/memory_quota.cc +18 -60
  276. data/src/core/lib/resource_quota/memory_quota.h +11 -25
  277. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  278. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  279. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  280. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  281. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  282. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  283. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
  284. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  285. data/src/core/lib/security/authorization/matchers.cc +9 -1
  286. data/src/core/lib/security/authorization/matchers.h +7 -0
  287. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  288. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  289. data/src/core/lib/security/context/security_context.cc +5 -2
  290. data/src/core/lib/security/context/security_context.h +14 -2
  291. data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
  292. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
  293. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  294. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  295. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  296. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  297. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  298. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  299. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  300. data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
  301. data/src/core/lib/security/credentials/credentials.cc +4 -8
  302. data/src/core/lib/security/credentials/credentials.h +10 -8
  303. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
  304. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  305. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  306. data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
  307. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  308. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  309. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  310. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
  311. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  312. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
  313. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
  314. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  315. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
  316. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
  317. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
  318. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  319. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
  320. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
  321. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  322. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  323. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
  324. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  325. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  326. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  327. data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
  328. data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
  329. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
  330. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  331. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
  332. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  333. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
  334. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
  335. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  336. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  337. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  338. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
  339. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  340. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  341. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  342. data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
  343. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
  344. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  345. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  346. data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
  347. data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
  348. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  349. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  350. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  354. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  355. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  356. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  357. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  358. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  359. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  360. data/src/core/lib/security/security_connector/security_connector.h +18 -6
  361. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
  362. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  363. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  364. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  365. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  366. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  368. data/src/core/lib/security/transport/auth_filters.h +7 -0
  369. data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
  370. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  371. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  372. data/src/core/lib/security/transport/security_handshaker.cc +44 -11
  373. data/src/core/lib/security/transport/security_handshaker.h +4 -0
  374. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  375. data/src/core/lib/security/util/json_util.cc +3 -2
  376. data/src/core/lib/security/util/json_util.h +0 -2
  377. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  378. data/src/core/lib/service_config/service_config_impl.cc +6 -6
  379. data/src/core/lib/service_config/service_config_impl.h +1 -3
  380. data/src/core/lib/service_config/service_config_parser.cc +2 -4
  381. data/src/core/lib/slice/slice_buffer.cc +30 -1
  382. data/src/core/lib/slice/slice_buffer.h +37 -6
  383. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  384. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  385. data/src/core/lib/surface/call.cc +53 -115
  386. data/src/core/lib/surface/call.h +5 -1
  387. data/src/core/lib/surface/channel.h +2 -0
  388. data/src/core/lib/surface/channel_ping.cc +1 -1
  389. data/src/core/lib/surface/completion_queue.cc +15 -14
  390. data/src/core/lib/surface/completion_queue.h +2 -1
  391. data/src/core/lib/surface/init.cc +0 -1
  392. data/src/core/lib/surface/lame_client.cc +1 -1
  393. data/src/core/lib/surface/lame_client.h +1 -1
  394. data/src/core/lib/surface/server.cc +14 -8
  395. data/src/core/lib/surface/server.h +4 -1
  396. data/src/core/lib/surface/validate_metadata.cc +1 -1
  397. data/src/core/lib/surface/version.cc +2 -2
  398. data/src/core/lib/transport/error_utils.cc +13 -7
  399. data/src/core/lib/transport/handshaker.cc +3 -3
  400. data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
  401. data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
  402. data/src/core/lib/transport/transport.cc +0 -3
  403. data/src/core/lib/transport/transport.h +20 -14
  404. data/src/core/lib/transport/transport_fwd.h +20 -0
  405. data/src/core/lib/transport/transport_impl.h +1 -0
  406. data/src/core/lib/transport/transport_op_string.cc +9 -9
  407. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  409. data/src/core/tsi/fake_transport_security.cc +13 -1
  410. data/src/core/tsi/fake_transport_security.h +6 -0
  411. data/src/core/tsi/ssl_transport_security.cc +1 -1
  412. data/src/core/tsi/transport_security_grpc.cc +3 -2
  413. data/src/core/tsi/transport_security_grpc.h +5 -2
  414. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  415. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  416. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  417. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  418. data/src/ruby/ext/grpc/extconf.rb +49 -18
  419. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  420. data/src/ruby/lib/grpc/errors.rb +1 -1
  421. data/src/ruby/lib/grpc/version.rb +1 -1
  422. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  423. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  424. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  426. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  429. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  430. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  431. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  432. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  433. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  434. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  436. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  437. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  438. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  439. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  440. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  441. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  442. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  443. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  444. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  445. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  446. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  447. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  448. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  449. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  450. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  451. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  452. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  453. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  454. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  455. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  456. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  457. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  458. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  459. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  460. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  461. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  462. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  463. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  464. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  470. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  471. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  472. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  473. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  474. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  475. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  476. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  477. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  478. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  479. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  480. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  481. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  482. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  483. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  484. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  485. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  486. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  487. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  488. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  489. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  490. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  491. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  492. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  493. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  494. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  495. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  496. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  497. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  498. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  499. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  500. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  501. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  502. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  503. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  504. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  505. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  506. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  507. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  508. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  509. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  510. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  511. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  512. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  513. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  514. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  515. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  516. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  517. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  518. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  519. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  520. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  521. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  522. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  523. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  524. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  525. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  526. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  527. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  528. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  529. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  530. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  531. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  532. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  533. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  534. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  535. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  536. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  537. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  538. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  539. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  540. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  541. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  542. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  543. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  544. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  545. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  546. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  547. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  548. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  549. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  550. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  551. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  552. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  553. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  554. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  555. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  556. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  557. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  558. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  559. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  560. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  561. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  562. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  563. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  564. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  565. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  566. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  567. metadata +39 -15
  568. data/src/core/lib/slice/slice_split.cc +0 -103
  569. data/src/core/lib/slice/slice_split.h +0 -36
  570. data/src/core/lib/transport/byte_stream.cc +0 -165
  571. data/src/core/lib/transport/byte_stream.h +0 -170
  572. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  573. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  574. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -34,43 +34,6 @@ namespace absl {
34
34
  ABSL_NAMESPACE_BEGIN
35
35
  namespace random_internal {
36
36
 
37
- // Helper object to multiply two 64-bit values to a 128-bit value.
38
- // MultiplyU64ToU128 multiplies two 64-bit values to a 128-bit value.
39
- // If an intrinsic is available, it is used, otherwise use native 32-bit
40
- // multiplies to construct the result.
41
- inline absl::uint128 MultiplyU64ToU128(uint64_t a, uint64_t b) {
42
- #if defined(ABSL_HAVE_INTRINSIC_INT128)
43
- return absl::uint128(static_cast<__uint128_t>(a) * b);
44
- #elif defined(ABSL_INTERNAL_USE_UMUL128)
45
- // uint64_t * uint64_t => uint128 multiply using imul intrinsic on MSVC.
46
- uint64_t high = 0;
47
- const uint64_t low = _umul128(a, b, &high);
48
- return absl::MakeUint128(high, low);
49
- #else
50
- // uint128(a) * uint128(b) in emulated mode computes a full 128-bit x 128-bit
51
- // multiply. However there are many cases where that is not necessary, and it
52
- // is only necessary to support a 64-bit x 64-bit = 128-bit multiply. This is
53
- // for those cases.
54
- const uint64_t a00 = static_cast<uint32_t>(a);
55
- const uint64_t a32 = a >> 32;
56
- const uint64_t b00 = static_cast<uint32_t>(b);
57
- const uint64_t b32 = b >> 32;
58
-
59
- const uint64_t c00 = a00 * b00;
60
- const uint64_t c32a = a00 * b32;
61
- const uint64_t c32b = a32 * b00;
62
- const uint64_t c64 = a32 * b32;
63
-
64
- const uint32_t carry =
65
- static_cast<uint32_t>(((c00 >> 32) + static_cast<uint32_t>(c32a) +
66
- static_cast<uint32_t>(c32b)) >>
67
- 32);
68
-
69
- return absl::MakeUint128(c64 + (c32a >> 32) + (c32b >> 32) + carry,
70
- c00 + (c32a << 32) + (c32b << 32));
71
- #endif
72
- }
73
-
74
37
  // wide_multiply<T> multiplies two N-bit values to a 2N-bit result.
75
38
  template <typename UIntType>
76
39
  struct wide_multiply {
@@ -82,27 +45,49 @@ struct wide_multiply {
82
45
  return static_cast<result_type>(a) * b;
83
46
  }
84
47
 
85
- static input_type hi(result_type r) { return r >> kN; }
86
- static input_type lo(result_type r) { return r; }
48
+ static input_type hi(result_type r) {
49
+ return static_cast<input_type>(r >> kN);
50
+ }
51
+ static input_type lo(result_type r) { return static_cast<input_type>(r); }
87
52
 
88
53
  static_assert(std::is_unsigned<UIntType>::value,
89
54
  "Class-template wide_multiply<> argument must be unsigned.");
90
55
  };
91
56
 
92
- #ifndef ABSL_HAVE_INTRINSIC_INT128
57
+ // MultiplyU128ToU256 multiplies two 128-bit values to a 256-bit value.
58
+ inline U256 MultiplyU128ToU256(uint128 a, uint128 b) {
59
+ const uint128 a00 = static_cast<uint64_t>(a);
60
+ const uint128 a64 = a >> 64;
61
+ const uint128 b00 = static_cast<uint64_t>(b);
62
+ const uint128 b64 = b >> 64;
63
+
64
+ const uint128 c00 = a00 * b00;
65
+ const uint128 c64a = a00 * b64;
66
+ const uint128 c64b = a64 * b00;
67
+ const uint128 c128 = a64 * b64;
68
+
69
+ const uint64_t carry =
70
+ static_cast<uint64_t>(((c00 >> 64) + static_cast<uint64_t>(c64a) +
71
+ static_cast<uint64_t>(c64b)) >>
72
+ 64);
73
+
74
+ return {c128 + (c64a >> 64) + (c64b >> 64) + carry,
75
+ c00 + (c64a << 64) + (c64b << 64)};
76
+ }
77
+
78
+
93
79
  template <>
94
- struct wide_multiply<uint64_t> {
95
- using input_type = uint64_t;
96
- using result_type = absl::uint128;
80
+ struct wide_multiply<uint128> {
81
+ using input_type = uint128;
82
+ using result_type = U256;
97
83
 
98
- static result_type multiply(uint64_t a, uint64_t b) {
99
- return MultiplyU64ToU128(a, b);
84
+ static result_type multiply(input_type a, input_type b) {
85
+ return MultiplyU128ToU256(a, b);
100
86
  }
101
87
 
102
- static uint64_t hi(result_type r) { return absl::Uint128High64(r); }
103
- static uint64_t lo(result_type r) { return absl::Uint128Low64(r); }
88
+ static input_type hi(result_type r) { return r.hi; }
89
+ static input_type lo(result_type r) { return r.lo; }
104
90
  };
105
- #endif
106
91
 
107
92
  } // namespace random_internal
108
93
  ABSL_NAMESPACE_END
@@ -69,10 +69,8 @@ class log_uniform_int_distribution {
69
69
  if (base_ == 2) {
70
70
  // Determine where the first set bit is on range(), giving a log2(range)
71
71
  // value which can be used to construct bounds.
72
- log_range_ =
73
- (std::min)(bit_width(range()),
74
- static_cast<unsigned_type>(
75
- std::numeric_limits<unsigned_type>::digits));
72
+ log_range_ = (std::min)(random_internal::BitWidth(range()),
73
+ std::numeric_limits<unsigned_type>::digits);
76
74
  } else {
77
75
  // NOTE: Computing the logN(x) introduces error from 2 sources:
78
76
  // 1. Conversion of int to double loses precision for values >=
@@ -83,7 +81,7 @@ class log_uniform_int_distribution {
83
81
  //
84
82
  // Thus a result which should equal K may equal K +/- epsilon,
85
83
  // which can eliminate some values depending on where the bounds fall.
86
- const double inv_log_base = 1.0 / std::log(base_);
84
+ const double inv_log_base = 1.0 / std::log(static_cast<double>(base_));
87
85
  const double log_range = std::log(static_cast<double>(range()) + 0.5);
88
86
  log_range_ = static_cast<int>(std::ceil(inv_log_base * log_range));
89
87
  }
@@ -113,7 +111,7 @@ class log_uniform_int_distribution {
113
111
  unsigned_type range_; // max - min
114
112
  int log_range_; // ceil(logN(range_))
115
113
 
116
- static_assert(std::is_integral<IntType>::value,
114
+ static_assert(random_internal::IsIntegral<IntType>::value,
117
115
  "Class-template absl::log_uniform_int_distribution<> must be "
118
116
  "parameterized using an integral type.");
119
117
  };
@@ -139,7 +137,7 @@ class log_uniform_int_distribution {
139
137
  template <typename URBG>
140
138
  result_type operator()(URBG& g, // NOLINT(runtime/references)
141
139
  const param_type& p) {
142
- return (p.min)() + Generate(g, p);
140
+ return static_cast<result_type>((p.min)() + Generate(g, p));
143
141
  }
144
142
 
145
143
  result_type(min)() const { return (param_.min)(); }
@@ -193,8 +191,8 @@ log_uniform_int_distribution<IntType>::Generate(
193
191
  ? (std::numeric_limits<unsigned_type>::max)()
194
192
  : (static_cast<unsigned_type>(1) << e) - 1;
195
193
  } else {
196
- const double r = std::pow(p.base(), d);
197
- const double s = (r * p.base()) - 1.0;
194
+ const double r = std::pow(static_cast<double>(p.base()), d);
195
+ const double s = (r * static_cast<double>(p.base())) - 1.0;
198
196
 
199
197
  base_e =
200
198
  (r > static_cast<double>((std::numeric_limits<unsigned_type>::max)()))
@@ -211,7 +209,8 @@ log_uniform_int_distribution<IntType>::Generate(
211
209
  const unsigned_type hi = (top_e >= p.range()) ? p.range() : top_e;
212
210
 
213
211
  // choose uniformly over [lo, hi]
214
- return absl::uniform_int_distribution<result_type>(lo, hi)(g);
212
+ return absl::uniform_int_distribution<result_type>(
213
+ static_cast<result_type>(lo), static_cast<result_type>(hi))(g);
215
214
  }
216
215
 
217
216
  template <typename CharT, typename Traits, typename IntType>
@@ -26,6 +26,7 @@
26
26
  #include "absl/random/internal/fastmath.h"
27
27
  #include "absl/random/internal/generate_real.h"
28
28
  #include "absl/random/internal/iostream_state_saver.h"
29
+ #include "absl/random/internal/traits.h"
29
30
 
30
31
  namespace absl {
31
32
  ABSL_NAMESPACE_BEGIN
@@ -80,7 +81,7 @@ class poisson_distribution {
80
81
  double log_k_;
81
82
  int split_;
82
83
 
83
- static_assert(std::is_integral<IntType>::value,
84
+ static_assert(random_internal::IsIntegral<IntType>::value,
84
85
  "Class-template absl::poisson_distribution<> must be "
85
86
  "parameterized using an integral type.");
86
87
  };
@@ -133,7 +134,8 @@ template <typename IntType>
133
134
  poisson_distribution<IntType>::param_type::param_type(double mean)
134
135
  : mean_(mean), split_(0) {
135
136
  assert(mean >= 0);
136
- assert(mean <= (std::numeric_limits<result_type>::max)());
137
+ assert(mean <=
138
+ static_cast<double>((std::numeric_limits<result_type>::max)()));
137
139
  // As a defensive measure, avoid large values of the mean. The rejection
138
140
  // algorithm used does not support very large values well. It my be worth
139
141
  // changing algorithms to better deal with these cases.
@@ -222,8 +224,9 @@ poisson_distribution<IntType>::operator()(
222
224
  // clang-format on
223
225
  const double lhs = 2.0 * std::log(u) + p.log_k_ + s;
224
226
  if (lhs < rhs) {
225
- return x > (max)() ? (max)()
226
- : static_cast<result_type>(x); // f(x)/k >= u^2
227
+ return x > static_cast<double>((max)())
228
+ ? (max)()
229
+ : static_cast<result_type>(x); // f(x)/k >= u^2
227
230
  }
228
231
  }
229
232
  }
@@ -28,6 +28,7 @@
28
28
  #include <iterator>
29
29
  #include <random>
30
30
 
31
+ #include "absl/base/config.h"
31
32
  #include "absl/random/internal/salted_seed_seq.h"
32
33
  #include "absl/random/internal/seed_material.h"
33
34
  #include "absl/random/seed_gen_exception.h"
@@ -97,7 +97,7 @@ class uniform_int_distribution {
97
97
  result_type lo_;
98
98
  unsigned_type range_;
99
99
 
100
- static_assert(std::is_integral<result_type>::value,
100
+ static_assert(random_internal::IsIntegral<result_type>::value,
101
101
  "Class-template absl::uniform_int_distribution<> must be "
102
102
  "parameterized using an integral type.");
103
103
  }; // param_type
@@ -125,7 +125,7 @@ class uniform_int_distribution {
125
125
  template <typename URBG>
126
126
  result_type operator()(
127
127
  URBG& gen, const param_type& param) { // NOLINT(runtime/references)
128
- return param.a() + Generate(gen, param.range());
128
+ return static_cast<result_type>(param.a() + Generate(gen, param.range()));
129
129
  }
130
130
 
131
131
  result_type a() const { return param_.a(); }
@@ -73,12 +73,12 @@ class uniform_real_distribution {
73
73
  : lo_(lo), hi_(hi), range_(hi - lo) {
74
74
  // [rand.dist.uni.real] preconditions 2 & 3
75
75
  assert(lo <= hi);
76
+
76
77
  // NOTE: For integral types, we can promote the range to an unsigned type,
77
78
  // which gives full width of the range. However for real (fp) types, this
78
79
  // is not possible, so value generation cannot use the full range of the
79
80
  // real type.
80
81
  assert(range_ <= (std::numeric_limits<result_type>::max)());
81
- assert(std::isfinite(range_));
82
82
  }
83
83
 
84
84
  result_type a() const { return lo_; }
@@ -23,13 +23,14 @@
23
23
  #include <type_traits>
24
24
 
25
25
  #include "absl/random/internal/iostream_state_saver.h"
26
+ #include "absl/random/internal/traits.h"
26
27
  #include "absl/random/uniform_real_distribution.h"
27
28
 
28
29
  namespace absl {
29
30
  ABSL_NAMESPACE_BEGIN
30
31
 
31
32
  // absl::zipf_distribution produces random integer-values in the range [0, k],
32
- // distributed according to the discrete probability function:
33
+ // distributed according to the unnormalized discrete probability function:
33
34
  //
34
35
  // P(x) = (v + x) ^ -q
35
36
  //
@@ -94,7 +95,7 @@ class zipf_distribution {
94
95
  double hxm_; // h(k + 0.5)
95
96
  double hx0_minus_hxm_; // h(x0) - h(k + 0.5)
96
97
 
97
- static_assert(std::is_integral<IntType>::value,
98
+ static_assert(random_internal::IsIntegral<IntType>::value,
98
99
  "Class-template absl::zipf_distribution<> must be "
99
100
  "parameterized using an integral type.");
100
101
  };
@@ -221,7 +222,7 @@ zipf_distribution<IntType>::operator()(
221
222
  const double u = p.hxm_ + v * p.hx0_minus_hxm_;
222
223
  const double x = p.hinv(u);
223
224
  k = rint(x); // std::floor(x + 0.5);
224
- if (k > p.k()) continue; // reject k > max_k
225
+ if (k > static_cast<double>(p.k())) continue; // reject k > max_k
225
226
  if (k - x <= p.s_) break;
226
227
  const double h = p.h(k + 0.5);
227
228
  const double r = p.pow_negative_q(p.v_ + k);
@@ -15,7 +15,9 @@
15
15
  #define ABSL_STATUS_INTERNAL_STATUS_INTERNAL_H_
16
16
 
17
17
  #include <string>
18
+ #include <utility>
18
19
 
20
+ #include "absl/base/attributes.h"
19
21
  #include "absl/container/inlined_vector.h"
20
22
  #include "absl/strings/cord.h"
21
23
 
@@ -25,7 +27,14 @@ namespace absl {
25
27
  ABSL_NAMESPACE_BEGIN
26
28
  // Returned Status objects may not be ignored. Codesearch doesn't handle ifdefs
27
29
  // as part of a class definitions (b/6995610), so we use a forward declaration.
30
+ //
31
+ // TODO(b/176172494): ABSL_MUST_USE_RESULT should expand to the more strict
32
+ // [[nodiscard]]. For now, just use [[nodiscard]] directly when it is available.
33
+ #if ABSL_HAVE_CPP_ATTRIBUTE(nodiscard)
34
+ class [[nodiscard]] Status;
35
+ #else
28
36
  class ABSL_MUST_USE_RESULT Status;
37
+ #endif
29
38
  ABSL_NAMESPACE_END
30
39
  } // namespace absl
31
40
  #endif // !SWIG
@@ -61,6 +70,14 @@ struct StatusRep {
61
70
  };
62
71
 
63
72
  absl::StatusCode MapToLocalCode(int value);
73
+
74
+ // Returns a pointer to a newly-allocated string with the given `prefix`,
75
+ // suitable for output as an error message in assertion/`CHECK()` failures.
76
+ //
77
+ // This is an internal implementation detail for Abseil logging.
78
+ std::string* MakeCheckFailString(const absl::Status* status,
79
+ const char* prefix);
80
+
64
81
  } // namespace status_internal
65
82
 
66
83
  ABSL_NAMESPACE_END
@@ -13,9 +13,12 @@
13
13
  // limitations under the License.
14
14
  #include "absl/status/status.h"
15
15
 
16
+ #include <errno.h>
17
+
16
18
  #include <cassert>
17
19
 
18
20
  #include "absl/base/internal/raw_logging.h"
21
+ #include "absl/base/internal/strerror.h"
19
22
  #include "absl/debugging/stacktrace.h"
20
23
  #include "absl/debugging/symbolize.h"
21
24
  #include "absl/status/status_payload_printer.h"
@@ -185,11 +188,16 @@ void Status::ForEachPayload(
185
188
  }
186
189
 
187
190
  const std::string* Status::EmptyString() {
188
- static std::string* empty_string = new std::string();
189
- return empty_string;
191
+ static union EmptyString {
192
+ std::string str;
193
+ ~EmptyString() {}
194
+ } empty = {{}};
195
+ return &empty.str;
190
196
  }
191
197
 
198
+ #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
192
199
  constexpr const char Status::kMovedFromString[];
200
+ #endif
193
201
 
194
202
  const std::string* Status::MovedFromString() {
195
203
  static std::string* moved_from_string = new std::string(kMovedFromString);
@@ -440,5 +448,169 @@ bool IsUnknown(const Status& status) {
440
448
  return status.code() == absl::StatusCode::kUnknown;
441
449
  }
442
450
 
451
+ StatusCode ErrnoToStatusCode(int error_number) {
452
+ switch (error_number) {
453
+ case 0:
454
+ return StatusCode::kOk;
455
+ case EINVAL: // Invalid argument
456
+ case ENAMETOOLONG: // Filename too long
457
+ case E2BIG: // Argument list too long
458
+ case EDESTADDRREQ: // Destination address required
459
+ case EDOM: // Mathematics argument out of domain of function
460
+ case EFAULT: // Bad address
461
+ case EILSEQ: // Illegal byte sequence
462
+ case ENOPROTOOPT: // Protocol not available
463
+ case ENOSTR: // Not a STREAM
464
+ case ENOTSOCK: // Not a socket
465
+ case ENOTTY: // Inappropriate I/O control operation
466
+ case EPROTOTYPE: // Protocol wrong type for socket
467
+ case ESPIPE: // Invalid seek
468
+ return StatusCode::kInvalidArgument;
469
+ case ETIMEDOUT: // Connection timed out
470
+ case ETIME: // Timer expired
471
+ return StatusCode::kDeadlineExceeded;
472
+ case ENODEV: // No such device
473
+ case ENOENT: // No such file or directory
474
+ #ifdef ENOMEDIUM
475
+ case ENOMEDIUM: // No medium found
476
+ #endif
477
+ case ENXIO: // No such device or address
478
+ case ESRCH: // No such process
479
+ return StatusCode::kNotFound;
480
+ case EEXIST: // File exists
481
+ case EADDRNOTAVAIL: // Address not available
482
+ case EALREADY: // Connection already in progress
483
+ #ifdef ENOTUNIQ
484
+ case ENOTUNIQ: // Name not unique on network
485
+ #endif
486
+ return StatusCode::kAlreadyExists;
487
+ case EPERM: // Operation not permitted
488
+ case EACCES: // Permission denied
489
+ #ifdef ENOKEY
490
+ case ENOKEY: // Required key not available
491
+ #endif
492
+ case EROFS: // Read only file system
493
+ return StatusCode::kPermissionDenied;
494
+ case ENOTEMPTY: // Directory not empty
495
+ case EISDIR: // Is a directory
496
+ case ENOTDIR: // Not a directory
497
+ case EADDRINUSE: // Address already in use
498
+ case EBADF: // Invalid file descriptor
499
+ #ifdef EBADFD
500
+ case EBADFD: // File descriptor in bad state
501
+ #endif
502
+ case EBUSY: // Device or resource busy
503
+ case ECHILD: // No child processes
504
+ case EISCONN: // Socket is connected
505
+ #ifdef EISNAM
506
+ case EISNAM: // Is a named type file
507
+ #endif
508
+ #ifdef ENOTBLK
509
+ case ENOTBLK: // Block device required
510
+ #endif
511
+ case ENOTCONN: // The socket is not connected
512
+ case EPIPE: // Broken pipe
513
+ #ifdef ESHUTDOWN
514
+ case ESHUTDOWN: // Cannot send after transport endpoint shutdown
515
+ #endif
516
+ case ETXTBSY: // Text file busy
517
+ #ifdef EUNATCH
518
+ case EUNATCH: // Protocol driver not attached
519
+ #endif
520
+ return StatusCode::kFailedPrecondition;
521
+ case ENOSPC: // No space left on device
522
+ #ifdef EDQUOT
523
+ case EDQUOT: // Disk quota exceeded
524
+ #endif
525
+ case EMFILE: // Too many open files
526
+ case EMLINK: // Too many links
527
+ case ENFILE: // Too many open files in system
528
+ case ENOBUFS: // No buffer space available
529
+ case ENODATA: // No message is available on the STREAM read queue
530
+ case ENOMEM: // Not enough space
531
+ case ENOSR: // No STREAM resources
532
+ #ifdef EUSERS
533
+ case EUSERS: // Too many users
534
+ #endif
535
+ return StatusCode::kResourceExhausted;
536
+ #ifdef ECHRNG
537
+ case ECHRNG: // Channel number out of range
538
+ #endif
539
+ case EFBIG: // File too large
540
+ case EOVERFLOW: // Value too large to be stored in data type
541
+ case ERANGE: // Result too large
542
+ return StatusCode::kOutOfRange;
543
+ #ifdef ENOPKG
544
+ case ENOPKG: // Package not installed
545
+ #endif
546
+ case ENOSYS: // Function not implemented
547
+ case ENOTSUP: // Operation not supported
548
+ case EAFNOSUPPORT: // Address family not supported
549
+ #ifdef EPFNOSUPPORT
550
+ case EPFNOSUPPORT: // Protocol family not supported
551
+ #endif
552
+ case EPROTONOSUPPORT: // Protocol not supported
553
+ #ifdef ESOCKTNOSUPPORT
554
+ case ESOCKTNOSUPPORT: // Socket type not supported
555
+ #endif
556
+ case EXDEV: // Improper link
557
+ return StatusCode::kUnimplemented;
558
+ case EAGAIN: // Resource temporarily unavailable
559
+ #ifdef ECOMM
560
+ case ECOMM: // Communication error on send
561
+ #endif
562
+ case ECONNREFUSED: // Connection refused
563
+ case ECONNABORTED: // Connection aborted
564
+ case ECONNRESET: // Connection reset
565
+ case EINTR: // Interrupted function call
566
+ #ifdef EHOSTDOWN
567
+ case EHOSTDOWN: // Host is down
568
+ #endif
569
+ case EHOSTUNREACH: // Host is unreachable
570
+ case ENETDOWN: // Network is down
571
+ case ENETRESET: // Connection aborted by network
572
+ case ENETUNREACH: // Network unreachable
573
+ case ENOLCK: // No locks available
574
+ case ENOLINK: // Link has been severed
575
+ #ifdef ENONET
576
+ case ENONET: // Machine is not on the network
577
+ #endif
578
+ return StatusCode::kUnavailable;
579
+ case EDEADLK: // Resource deadlock avoided
580
+ #ifdef ESTALE
581
+ case ESTALE: // Stale file handle
582
+ #endif
583
+ return StatusCode::kAborted;
584
+ case ECANCELED: // Operation cancelled
585
+ return StatusCode::kCancelled;
586
+ default:
587
+ return StatusCode::kUnknown;
588
+ }
589
+ }
590
+
591
+ namespace {
592
+ std::string MessageForErrnoToStatus(int error_number,
593
+ absl::string_view message) {
594
+ return absl::StrCat(message, ": ",
595
+ absl::base_internal::StrError(error_number));
596
+ }
597
+ } // namespace
598
+
599
+ Status ErrnoToStatus(int error_number, absl::string_view message) {
600
+ return Status(ErrnoToStatusCode(error_number),
601
+ MessageForErrnoToStatus(error_number, message));
602
+ }
603
+
604
+ namespace status_internal {
605
+
606
+ std::string* MakeCheckFailString(const absl::Status* status,
607
+ const char* prefix) {
608
+ return new std::string(
609
+ absl::StrCat(prefix, " (",
610
+ status->ToString(StatusToStringMode::kWithEverything), ")"));
611
+ }
612
+
613
+ } // namespace status_internal
614
+
443
615
  ABSL_NAMESPACE_END
444
616
  } // namespace absl
@@ -24,11 +24,11 @@
24
24
  // * A set of helper functions for creating status codes and checking their
25
25
  // values
26
26
  //
27
- // Within Google, `absl::Status` is the primary mechanism for gracefully
28
- // handling errors across API boundaries (and in particular across RPC
29
- // boundaries). Some of these errors may be recoverable, but others may not.
30
- // Most functions that can produce a recoverable error should be designed to
31
- // return an `absl::Status` (or `absl::StatusOr`).
27
+ // Within Google, `absl::Status` is the primary mechanism for communicating
28
+ // errors in C++, and is used to represent error state in both in-process
29
+ // library calls as well as RPC calls. Some of these errors may be recoverable,
30
+ // but others may not. Most functions that can produce a recoverable error
31
+ // should be designed to return an `absl::Status` (or `absl::StatusOr`).
32
32
  //
33
33
  // Example:
34
34
  //
@@ -469,8 +469,9 @@ class Status final {
469
469
 
470
470
  // Status::ok()
471
471
  //
472
- // Returns `true` if `this->ok()`. Prefer checking for an OK status using this
473
- // member function.
472
+ // Returns `true` if `this->code()` == `absl::StatusCode::kOk`,
473
+ // indicating the absence of an error.
474
+ // Prefer checking for an OK status using this member function.
474
475
  ABSL_MUST_USE_RESULT bool ok() const;
475
476
 
476
477
  // Status::code()
@@ -532,7 +533,7 @@ class Status final {
532
533
  //----------------------------------------------------------------------------
533
534
 
534
535
  // A payload may be attached to a status to provide additional context to an
535
- // error that may not be satisifed by an existing `absl::StatusCode`.
536
+ // error that may not be satisfied by an existing `absl::StatusCode`.
536
537
  // Typically, this payload serves one of several purposes:
537
538
  //
538
539
  // * It may provide more fine-grained semantic information about the error
@@ -612,10 +613,6 @@ class Status final {
612
613
  const status_internal::Payloads* GetPayloads() const;
613
614
  status_internal::Payloads* GetPayloads();
614
615
 
615
- // Takes ownership of payload.
616
- static uintptr_t NewRep(
617
- absl::StatusCode code, absl::string_view msg,
618
- std::unique_ptr<status_internal::Payloads> payload);
619
616
  static bool EqualsSlow(const absl::Status& a, const absl::Status& b);
620
617
 
621
618
  // MSVC 14.0 limitation requires the const.
@@ -741,6 +738,19 @@ Status UnavailableError(absl::string_view message);
741
738
  Status UnimplementedError(absl::string_view message);
742
739
  Status UnknownError(absl::string_view message);
743
740
 
741
+ // ErrnoToStatusCode()
742
+ //
743
+ // Returns the StatusCode for `error_number`, which should be an `errno` value.
744
+ // See https://en.cppreference.com/w/cpp/error/errno_macros and similar
745
+ // references.
746
+ absl::StatusCode ErrnoToStatusCode(int error_number);
747
+
748
+ // ErrnoToStatus()
749
+ //
750
+ // Convenience function that creates a `absl::Status` using an `error_number`,
751
+ // which should be an `errno` value.
752
+ Status ErrnoToStatus(int error_number, absl::string_view message);
753
+
744
754
  //------------------------------------------------------------------------------
745
755
  // Implementation details follow
746
756
  //------------------------------------------------------------------------------
@@ -106,7 +106,13 @@ class BadStatusOrAccess : public std::exception {
106
106
 
107
107
  // Returned StatusOr objects may not be ignored.
108
108
  template <typename T>
109
+ #if ABSL_HAVE_CPP_ATTRIBUTE(nodiscard)
110
+ // TODO(b/176172494): ABSL_MUST_USE_RESULT should expand to the more strict
111
+ // [[nodiscard]]. For now, just use [[nodiscard]] directly when it is available.
112
+ class [[nodiscard]] StatusOr;
113
+ #else
109
114
  class ABSL_MUST_USE_RESULT StatusOr;
115
+ #endif // ABSL_HAVE_CPP_ATTRIBUTE(nodiscard)
110
116
 
111
117
  // absl::StatusOr<T>
112
118
  //
@@ -156,8 +162,8 @@ class ABSL_MUST_USE_RESULT StatusOr;
156
162
  // A `absl::StatusOr<T*>` can be constructed from a null pointer like any other
157
163
  // pointer value, and the result will be that `ok()` returns `true` and
158
164
  // `value()` returns `nullptr`. Checking the value of pointer in an
159
- // `absl::StatusOr<T>` generally requires a bit more care, to ensure both that a
160
- // value is present and that value is not null:
165
+ // `absl::StatusOr<T*>` generally requires a bit more care, to ensure both that
166
+ // a value is present and that value is not null:
161
167
  //
162
168
  // StatusOr<std::unique_ptr<Foo>> result = FooFactory::MakeNewFoo(arg);
163
169
  // if (!result.ok()) {
@@ -471,7 +477,7 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
471
477
  // StatusOr<T>::ok()
472
478
  //
473
479
  // Returns whether or not this `absl::StatusOr<T>` holds a `T` value. This
474
- // member function is analagous to `absl::Status::ok()` and should be used
480
+ // member function is analogous to `absl::Status::ok()` and should be used
475
481
  // similarly to check the status of return values.
476
482
  //
477
483
  // Example:
@@ -133,7 +133,7 @@ inline bool ascii_isdigit(unsigned char c) { return c >= '0' && c <= '9'; }
133
133
 
134
134
  // ascii_isprint()
135
135
  //
136
- // Determines whether the given character is printable, including whitespace.
136
+ // Determines whether the given character is printable, including spaces.
137
137
  inline bool ascii_isprint(unsigned char c) { return c >= 32 && c < 127; }
138
138
 
139
139
  // ascii_isgraph()
@@ -197,7 +197,7 @@ ABSL_MUST_USE_RESULT inline std::string AsciiStrToUpper(absl::string_view s) {
197
197
  ABSL_MUST_USE_RESULT inline absl::string_view StripLeadingAsciiWhitespace(
198
198
  absl::string_view str) {
199
199
  auto it = std::find_if_not(str.begin(), str.end(), absl::ascii_isspace);
200
- return str.substr(it - str.begin());
200
+ return str.substr(static_cast<size_t>(it - str.begin()));
201
201
  }
202
202
 
203
203
  // Strips in place whitespace from the beginning of the given string.
@@ -211,13 +211,13 @@ inline void StripLeadingAsciiWhitespace(std::string* str) {
211
211
  ABSL_MUST_USE_RESULT inline absl::string_view StripTrailingAsciiWhitespace(
212
212
  absl::string_view str) {
213
213
  auto it = std::find_if_not(str.rbegin(), str.rend(), absl::ascii_isspace);
214
- return str.substr(0, str.rend() - it);
214
+ return str.substr(0, static_cast<size_t>(str.rend() - it));
215
215
  }
216
216
 
217
217
  // Strips in place whitespace from the end of the given string
218
218
  inline void StripTrailingAsciiWhitespace(std::string* str) {
219
219
  auto it = std::find_if_not(str->rbegin(), str->rend(), absl::ascii_isspace);
220
- str->erase(str->rend() - it);
220
+ str->erase(static_cast<size_t>(str->rend() - it));
221
221
  }
222
222
 
223
223
  // Returns absl::string_view with whitespace stripped from both ends of the