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.
- checksums.yaml +4 -4
- data/Makefile +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- 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) {
|
86
|
-
|
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
|
-
|
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<
|
95
|
-
using input_type =
|
96
|
-
using result_type =
|
80
|
+
struct wide_multiply<uint128> {
|
81
|
+
using input_type = uint128;
|
82
|
+
using result_type = U256;
|
97
83
|
|
98
|
-
static result_type multiply(
|
99
|
-
return
|
84
|
+
static result_type multiply(input_type a, input_type b) {
|
85
|
+
return MultiplyU128ToU256(a, b);
|
100
86
|
}
|
101
87
|
|
102
|
-
static
|
103
|
-
static
|
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
|
-
|
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(
|
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>(
|
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(
|
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 <=
|
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)()
|
226
|
-
|
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
|
}
|
@@ -97,7 +97,7 @@ class uniform_int_distribution {
|
|
97
97
|
result_type lo_;
|
98
98
|
unsigned_type range_;
|
99
99
|
|
100
|
-
static_assert(
|
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(
|
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
|
189
|
-
|
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
|
28
|
-
//
|
29
|
-
//
|
30
|
-
// Most functions that can produce a recoverable error
|
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->
|
473
|
-
//
|
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
|
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
|
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
|
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
|
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
|