grpc 1.33.0.pre1 → 1.34.0
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 +342 -134
- data/include/grpc/grpc.h +1 -2
- data/include/grpc/grpc_security.h +149 -172
- data/include/grpc/impl/codegen/grpc_types.h +9 -2
- data/include/grpc/impl/codegen/port_platform.h +22 -55
- data/src/core/ext/filters/client_channel/client_channel.cc +11 -34
- data/src/core/ext/filters/client_channel/config_selector.h +2 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +80 -71
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +47 -17
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +16 -243
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +20 -25
- data/src/core/ext/filters/client_channel/resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver.h +4 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +20 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +66 -7
- data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +13 -25
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +2 -2
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
- data/src/core/ext/filters/client_channel/server_address.h +0 -4
- data/src/core/ext/filters/client_channel/service_config.cc +3 -1
- data/src/core/ext/filters/client_channel/service_config.h +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +18 -15
- data/src/core/ext/filters/client_channel/subchannel.h +2 -2
- data/src/core/ext/filters/client_channel/subchannel_interface.h +7 -15
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
- data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
- data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
- data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
- data/src/core/ext/filters/max_age/max_age_filter.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +17 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +4 -24
- data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
- data/src/core/ext/transport/chttp2/transport/internal.h +0 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +1 -2
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
- data/src/core/ext/xds/certificate_provider_factory.h +7 -5
- data/src/core/ext/xds/certificate_provider_store.cc +84 -0
- data/src/core/ext/xds/certificate_provider_store.h +65 -8
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +28 -140
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +6 -4
- data/src/core/ext/xds/xds_api.cc +241 -718
- data/src/core/ext/xds/xds_api.h +50 -9
- data/src/core/ext/xds/xds_bootstrap.cc +172 -25
- data/src/core/ext/xds/xds_bootstrap.h +23 -7
- data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
- data/src/core/ext/xds/xds_certificate_provider.h +74 -0
- data/src/core/ext/xds/xds_client.cc +161 -128
- data/src/core/ext/xds/xds_client.h +12 -11
- data/src/core/ext/xds/xds_client_stats.cc +41 -4
- data/src/core/ext/xds/xds_client_stats.h +2 -2
- data/src/core/lib/channel/channel_args.cc +2 -1
- data/src/core/lib/channel/channel_trace.cc +4 -2
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/handshaker.h +2 -2
- data/src/core/lib/compression/compression.cc +8 -4
- data/src/core/lib/compression/compression_internal.cc +10 -5
- data/src/core/lib/compression/compression_internal.h +2 -1
- data/src/core/lib/compression/stream_compression_identity.cc +1 -3
- data/src/core/lib/debug/stats_data.cc +1 -0
- data/src/core/lib/gpr/cpu_iphone.cc +10 -2
- data/src/core/lib/gpr/log_linux.cc +17 -3
- data/src/core/lib/gpr/log_posix.cc +13 -1
- data/src/core/lib/gpr/log_windows.cc +16 -4
- data/src/core/lib/gpr/murmur_hash.cc +1 -1
- data/src/core/lib/gpr/string.cc +1 -1
- data/src/core/lib/gpr/time_precise.cc +3 -2
- data/src/core/lib/gpr/tls.h +4 -0
- data/src/core/lib/gpr/tls_msvc.h +2 -0
- data/src/core/lib/gpr/tls_stdcpp.h +48 -0
- data/src/core/lib/gpr/useful.h +5 -4
- data/src/core/lib/gprpp/dual_ref_counted.h +44 -49
- data/src/core/lib/gprpp/examine_stack.cc +43 -0
- data/src/core/lib/gprpp/examine_stack.h +46 -0
- data/src/core/lib/gprpp/fork.cc +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +1 -1
- data/src/core/lib/gprpp/orphanable.h +4 -8
- data/src/core/lib/gprpp/ref_counted.h +40 -46
- data/src/core/lib/gprpp/ref_counted_ptr.h +9 -11
- data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
- data/src/core/lib/gprpp/stat_posix.cc +49 -0
- data/src/core/lib/gprpp/stat_windows.cc +48 -0
- data/src/core/lib/gprpp/thd.h +2 -2
- data/src/core/lib/gprpp/thd_posix.cc +36 -36
- data/src/core/lib/http/parser.cc +46 -25
- data/src/core/lib/iomgr/error.cc +2 -1
- data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
- data/src/core/lib/iomgr/exec_ctx.cc +1 -1
- data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
- data/src/core/lib/iomgr/executor/threadpool.h +3 -3
- data/src/core/lib/iomgr/parse_address.cc +84 -6
- data/src/core/lib/iomgr/parse_address.h +20 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
- data/src/core/lib/iomgr/python_util.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
- data/src/core/lib/iomgr/tcp_posix.cc +3 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
- data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/json/json.h +2 -2
- data/src/core/lib/json/json_reader.cc +8 -4
- data/src/core/lib/json/json_util.h +167 -0
- data/src/core/lib/json/json_writer.cc +2 -1
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +3 -1
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +5 -4
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +4 -0
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +6 -6
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +10 -9
- data/src/core/lib/security/context/security_context.h +3 -1
- data/src/core/lib/security/credentials/credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +3 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +35 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +12 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
- data/src/core/lib/security/{certificate_provider.h → credentials/tls/grpc_tls_certificate_provider.h} +32 -18
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -0
- data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
- data/src/core/lib/security/transport/security_handshaker.cc +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
- data/src/core/lib/security/util/json_util.h +1 -0
- data/src/core/lib/slice/slice.cc +7 -4
- data/src/core/lib/slice/slice_buffer.cc +2 -1
- data/src/core/lib/slice/slice_intern.cc +2 -2
- data/src/core/lib/surface/call.cc +9 -8
- data/src/core/lib/surface/completion_queue.cc +7 -6
- data/src/core/lib/surface/server.cc +4 -2
- data/src/core/lib/surface/server.h +2 -2
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.h +2 -0
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -3
- data/src/core/lib/transport/connectivity_state.h +3 -3
- data/src/core/lib/transport/metadata.h +2 -2
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- data/src/core/lib/transport/transport.cc +5 -3
- data/src/core/lib/transport/transport.h +1 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -3
- data/src/core/tsi/fake_transport_security.cc +1 -0
- data/src/core/tsi/local_transport_security.cc +5 -1
- data/src/core/tsi/local_transport_security.h +6 -7
- data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
- data/src/core/tsi/ssl_transport_security.cc +14 -7
- data/src/core/tsi/ssl_transport_security.h +3 -0
- data/src/core/tsi/transport_security.cc +4 -2
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +22 -14
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -24
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
- data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
- data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
- data/third_party/abseil-cpp/absl/base/casts.h +9 -6
- data/third_party/abseil-cpp/absl/base/config.h +60 -17
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
- data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
- data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
- data/third_party/abseil-cpp/absl/base/macros.h +36 -109
- data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
- data/third_party/abseil-cpp/absl/base/options.h +31 -4
- data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
- data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +2 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
- data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
- data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
- data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
- data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
- data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
- data/third_party/abseil-cpp/absl/status/status.cc +4 -6
- data/third_party/abseil-cpp/absl/status/status.h +502 -113
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
- data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
- data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
- data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
- data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
- data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +3 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
- data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
- data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
- data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
- data/third_party/abseil-cpp/absl/time/format.cc +43 -36
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
- data/third_party/abseil-cpp/absl/time/time.h +15 -16
- data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
- data/third_party/abseil-cpp/absl/types/optional.h +9 -9
- data/third_party/abseil-cpp/absl/types/span.h +49 -36
- data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
- data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
- data/third_party/boringssl-with-bazel/err_data.c +340 -336
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +46 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +90 -63
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +60 -60
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +179 -47
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +7 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +55 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +31 -23
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +435 -394
- data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +36 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +67 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +216 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +53 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +133 -39
- data/third_party/upb/upb/def.c +2169 -0
- data/third_party/upb/upb/def.h +330 -0
- data/third_party/upb/upb/def.hpp +525 -0
- data/third_party/upb/upb/reflection.c +391 -0
- data/third_party/upb/upb/reflection.h +168 -0
- data/third_party/upb/upb/text_encode.c +398 -0
- data/third_party/upb/upb/text_encode.h +35 -0
- metadata +227 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +0 -571
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
@@ -90,7 +90,7 @@ class FunctionRef<R(Args...)> {
|
|
90
90
|
// Used to disable constructors for objects that are not compatible with the
|
91
91
|
// signature of this FunctionRef.
|
92
92
|
template <typename F,
|
93
|
-
typename FR = absl::base_internal::
|
93
|
+
typename FR = absl::base_internal::invoke_result_t<F, Args&&...>>
|
94
94
|
using EnableIfCompatible =
|
95
95
|
typename std::enable_if<std::is_void<R>::value ||
|
96
96
|
std::is_convertible<FR, R>::value>::type;
|
@@ -0,0 +1,95 @@
|
|
1
|
+
// Copyright 2018 The Abseil Authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
// Implementation details for `absl::bind_front()`.
|
16
|
+
|
17
|
+
#ifndef ABSL_FUNCTIONAL_INTERNAL_FRONT_BINDER_H_
|
18
|
+
#define ABSL_FUNCTIONAL_INTERNAL_FRONT_BINDER_H_
|
19
|
+
|
20
|
+
#include <cstddef>
|
21
|
+
#include <type_traits>
|
22
|
+
#include <utility>
|
23
|
+
|
24
|
+
#include "absl/base/internal/invoke.h"
|
25
|
+
#include "absl/container/internal/compressed_tuple.h"
|
26
|
+
#include "absl/meta/type_traits.h"
|
27
|
+
#include "absl/utility/utility.h"
|
28
|
+
|
29
|
+
namespace absl {
|
30
|
+
ABSL_NAMESPACE_BEGIN
|
31
|
+
namespace functional_internal {
|
32
|
+
|
33
|
+
// Invoke the method, expanding the tuple of bound arguments.
|
34
|
+
template <class R, class Tuple, size_t... Idx, class... Args>
|
35
|
+
R Apply(Tuple&& bound, absl::index_sequence<Idx...>, Args&&... free) {
|
36
|
+
return base_internal::invoke(
|
37
|
+
absl::forward<Tuple>(bound).template get<Idx>()...,
|
38
|
+
absl::forward<Args>(free)...);
|
39
|
+
}
|
40
|
+
|
41
|
+
template <class F, class... BoundArgs>
|
42
|
+
class FrontBinder {
|
43
|
+
using BoundArgsT = absl::container_internal::CompressedTuple<F, BoundArgs...>;
|
44
|
+
using Idx = absl::make_index_sequence<sizeof...(BoundArgs) + 1>;
|
45
|
+
|
46
|
+
BoundArgsT bound_args_;
|
47
|
+
|
48
|
+
public:
|
49
|
+
template <class... Ts>
|
50
|
+
constexpr explicit FrontBinder(absl::in_place_t, Ts&&... ts)
|
51
|
+
: bound_args_(absl::forward<Ts>(ts)...) {}
|
52
|
+
|
53
|
+
template <class... FreeArgs, class R = base_internal::invoke_result_t<
|
54
|
+
F&, BoundArgs&..., FreeArgs&&...>>
|
55
|
+
R operator()(FreeArgs&&... free_args) & {
|
56
|
+
return functional_internal::Apply<R>(bound_args_, Idx(),
|
57
|
+
absl::forward<FreeArgs>(free_args)...);
|
58
|
+
}
|
59
|
+
|
60
|
+
template <class... FreeArgs,
|
61
|
+
class R = base_internal::invoke_result_t<
|
62
|
+
const F&, const BoundArgs&..., FreeArgs&&...>>
|
63
|
+
R operator()(FreeArgs&&... free_args) const& {
|
64
|
+
return functional_internal::Apply<R>(bound_args_, Idx(),
|
65
|
+
absl::forward<FreeArgs>(free_args)...);
|
66
|
+
}
|
67
|
+
|
68
|
+
template <class... FreeArgs, class R = base_internal::invoke_result_t<
|
69
|
+
F&&, BoundArgs&&..., FreeArgs&&...>>
|
70
|
+
R operator()(FreeArgs&&... free_args) && {
|
71
|
+
// This overload is called when *this is an rvalue. If some of the bound
|
72
|
+
// arguments are stored by value or rvalue reference, we move them.
|
73
|
+
return functional_internal::Apply<R>(absl::move(bound_args_), Idx(),
|
74
|
+
absl::forward<FreeArgs>(free_args)...);
|
75
|
+
}
|
76
|
+
|
77
|
+
template <class... FreeArgs,
|
78
|
+
class R = base_internal::invoke_result_t<
|
79
|
+
const F&&, const BoundArgs&&..., FreeArgs&&...>>
|
80
|
+
R operator()(FreeArgs&&... free_args) const&& {
|
81
|
+
// This overload is called when *this is an rvalue. If some of the bound
|
82
|
+
// arguments are stored by value or rvalue reference, we move them.
|
83
|
+
return functional_internal::Apply<R>(absl::move(bound_args_), Idx(),
|
84
|
+
absl::forward<FreeArgs>(free_args)...);
|
85
|
+
}
|
86
|
+
};
|
87
|
+
|
88
|
+
template <class F, class... BoundArgs>
|
89
|
+
using bind_front_t = FrontBinder<decay_t<F>, absl::decay_t<BoundArgs>...>;
|
90
|
+
|
91
|
+
} // namespace functional_internal
|
92
|
+
ABSL_NAMESPACE_END
|
93
|
+
} // namespace absl
|
94
|
+
|
95
|
+
#endif // ABSL_FUNCTIONAL_INTERNAL_FRONT_BINDER_H_
|
@@ -71,14 +71,14 @@ template <typename Obj, typename R, typename... Args>
|
|
71
71
|
R InvokeObject(VoidPtr ptr, typename ForwardT<Args>::type... args) {
|
72
72
|
auto o = static_cast<const Obj*>(ptr.obj);
|
73
73
|
return static_cast<R>(
|
74
|
-
absl::base_internal::
|
74
|
+
absl::base_internal::invoke(*o, std::forward<Args>(args)...));
|
75
75
|
}
|
76
76
|
|
77
77
|
template <typename Fun, typename R, typename... Args>
|
78
78
|
R InvokeFunction(VoidPtr ptr, typename ForwardT<Args>::type... args) {
|
79
79
|
auto f = reinterpret_cast<Fun>(ptr.fun);
|
80
80
|
return static_cast<R>(
|
81
|
-
absl::base_internal::
|
81
|
+
absl::base_internal::invoke(f, std::forward<Args>(args)...));
|
82
82
|
}
|
83
83
|
|
84
84
|
template <typename Sig>
|
@@ -37,8 +37,11 @@
|
|
37
37
|
// types. Hashing of that combined state is separately done by `absl::Hash`.
|
38
38
|
//
|
39
39
|
// One should assume that a hash algorithm is chosen randomly at the start of
|
40
|
-
// each process. E.g., absl::Hash<int>(
|
41
|
-
// absl::Hash<int>(
|
40
|
+
// each process. E.g., `absl::Hash<int>{}(9)` in one process and
|
41
|
+
// `absl::Hash<int>{}(9)` in another process are likely to differ.
|
42
|
+
//
|
43
|
+
// `absl::Hash` is intended to strongly mix input bits with a target of passing
|
44
|
+
// an [Avalanche Test](https://en.wikipedia.org/wiki/Avalanche_effect).
|
42
45
|
//
|
43
46
|
// Example:
|
44
47
|
//
|
@@ -85,7 +88,6 @@ ABSL_NAMESPACE_BEGIN
|
|
85
88
|
// * T is an arithmetic or pointer type
|
86
89
|
// * T defines an overload for `AbslHashValue(H, const T&)` for an arbitrary
|
87
90
|
// hash state `H`.
|
88
|
-
// - T defines a specialization of `HASH_NAMESPACE::hash<T>`
|
89
91
|
// - T defines a specialization of `std::hash<T>`
|
90
92
|
//
|
91
93
|
// `absl::Hash` intrinsically supports the following types:
|
@@ -98,6 +100,7 @@ ABSL_NAMESPACE_BEGIN
|
|
98
100
|
// * std::tuple<Ts...>, if all the Ts... are hashable
|
99
101
|
// * std::unique_ptr and std::shared_ptr
|
100
102
|
// * All string-like types including:
|
103
|
+
// * absl::Cord
|
101
104
|
// * std::string
|
102
105
|
// * std::string_view (as well as any instance of std::basic_string that
|
103
106
|
// uses char and std::char_traits)
|
@@ -124,8 +127,6 @@ ABSL_NAMESPACE_BEGIN
|
|
124
127
|
// * Natively supported types out of the box (see above)
|
125
128
|
// * Types for which an `AbslHashValue()` overload is provided (such as
|
126
129
|
// user-defined types). See "Adding Type Support to `absl::Hash`" below.
|
127
|
-
// * Types which define a `HASH_NAMESPACE::hash<T>` specialization (aka
|
128
|
-
// `__gnu_cxx::hash<T>` for gcc/Clang or `stdext::hash<T>` for MSVC)
|
129
130
|
// * Types which define a `std::hash<T>` specialization
|
130
131
|
//
|
131
132
|
// The fallback to legacy hash functions exists mainly for backwards
|
@@ -53,12 +53,65 @@ namespace absl {
|
|
53
53
|
ABSL_NAMESPACE_BEGIN
|
54
54
|
namespace hash_internal {
|
55
55
|
|
56
|
-
class PiecewiseCombiner;
|
57
|
-
|
58
56
|
// Internal detail: Large buffers are hashed in smaller chunks. This function
|
59
57
|
// returns the size of these chunks.
|
60
58
|
constexpr size_t PiecewiseChunkSize() { return 1024; }
|
61
59
|
|
60
|
+
// PiecewiseCombiner
|
61
|
+
//
|
62
|
+
// PiecewiseCombiner is an internal-only helper class for hashing a piecewise
|
63
|
+
// buffer of `char` or `unsigned char` as though it were contiguous. This class
|
64
|
+
// provides two methods:
|
65
|
+
//
|
66
|
+
// H add_buffer(state, data, size)
|
67
|
+
// H finalize(state)
|
68
|
+
//
|
69
|
+
// `add_buffer` can be called zero or more times, followed by a single call to
|
70
|
+
// `finalize`. This will produce the same hash expansion as concatenating each
|
71
|
+
// buffer piece into a single contiguous buffer, and passing this to
|
72
|
+
// `H::combine_contiguous`.
|
73
|
+
//
|
74
|
+
// Example usage:
|
75
|
+
// PiecewiseCombiner combiner;
|
76
|
+
// for (const auto& piece : pieces) {
|
77
|
+
// state = combiner.add_buffer(std::move(state), piece.data, piece.size);
|
78
|
+
// }
|
79
|
+
// return combiner.finalize(std::move(state));
|
80
|
+
class PiecewiseCombiner {
|
81
|
+
public:
|
82
|
+
PiecewiseCombiner() : position_(0) {}
|
83
|
+
PiecewiseCombiner(const PiecewiseCombiner&) = delete;
|
84
|
+
PiecewiseCombiner& operator=(const PiecewiseCombiner&) = delete;
|
85
|
+
|
86
|
+
// PiecewiseCombiner::add_buffer()
|
87
|
+
//
|
88
|
+
// Appends the given range of bytes to the sequence to be hashed, which may
|
89
|
+
// modify the provided hash state.
|
90
|
+
template <typename H>
|
91
|
+
H add_buffer(H state, const unsigned char* data, size_t size);
|
92
|
+
template <typename H>
|
93
|
+
H add_buffer(H state, const char* data, size_t size) {
|
94
|
+
return add_buffer(std::move(state),
|
95
|
+
reinterpret_cast<const unsigned char*>(data), size);
|
96
|
+
}
|
97
|
+
|
98
|
+
// PiecewiseCombiner::finalize()
|
99
|
+
//
|
100
|
+
// Finishes combining the hash sequence, which may may modify the provided
|
101
|
+
// hash state.
|
102
|
+
//
|
103
|
+
// Once finalize() is called, add_buffer() may no longer be called. The
|
104
|
+
// resulting hash state will be the same as if the pieces passed to
|
105
|
+
// add_buffer() were concatenated into a single flat buffer, and then provided
|
106
|
+
// to H::combine_contiguous().
|
107
|
+
template <typename H>
|
108
|
+
H finalize(H state);
|
109
|
+
|
110
|
+
private:
|
111
|
+
unsigned char buf_[PiecewiseChunkSize()];
|
112
|
+
size_t position_;
|
113
|
+
};
|
114
|
+
|
62
115
|
// HashStateBase
|
63
116
|
//
|
64
117
|
// A hash state object represents an intermediate state in the computation
|
@@ -125,8 +178,7 @@ class HashStateBase {
|
|
125
178
|
template <typename T>
|
126
179
|
static H combine_contiguous(H state, const T* data, size_t size);
|
127
180
|
|
128
|
-
|
129
|
-
friend class PiecewiseCombiner;
|
181
|
+
using AbslInternalPiecewiseCombiner = PiecewiseCombiner;
|
130
182
|
};
|
131
183
|
|
132
184
|
// is_uniquely_represented
|
@@ -197,61 +249,6 @@ H hash_bytes(H hash_state, const T& value) {
|
|
197
249
|
return H::combine_contiguous(std::move(hash_state), start, sizeof(value));
|
198
250
|
}
|
199
251
|
|
200
|
-
// PiecewiseCombiner
|
201
|
-
//
|
202
|
-
// PiecewiseCombiner is an internal-only helper class for hashing a piecewise
|
203
|
-
// buffer of `char` or `unsigned char` as though it were contiguous. This class
|
204
|
-
// provides two methods:
|
205
|
-
//
|
206
|
-
// H add_buffer(state, data, size)
|
207
|
-
// H finalize(state)
|
208
|
-
//
|
209
|
-
// `add_buffer` can be called zero or more times, followed by a single call to
|
210
|
-
// `finalize`. This will produce the same hash expansion as concatenating each
|
211
|
-
// buffer piece into a single contiguous buffer, and passing this to
|
212
|
-
// `H::combine_contiguous`.
|
213
|
-
//
|
214
|
-
// Example usage:
|
215
|
-
// PiecewiseCombiner combiner;
|
216
|
-
// for (const auto& piece : pieces) {
|
217
|
-
// state = combiner.add_buffer(std::move(state), piece.data, piece.size);
|
218
|
-
// }
|
219
|
-
// return combiner.finalize(std::move(state));
|
220
|
-
class PiecewiseCombiner {
|
221
|
-
public:
|
222
|
-
PiecewiseCombiner() : position_(0) {}
|
223
|
-
PiecewiseCombiner(const PiecewiseCombiner&) = delete;
|
224
|
-
PiecewiseCombiner& operator=(const PiecewiseCombiner&) = delete;
|
225
|
-
|
226
|
-
// PiecewiseCombiner::add_buffer()
|
227
|
-
//
|
228
|
-
// Appends the given range of bytes to the sequence to be hashed, which may
|
229
|
-
// modify the provided hash state.
|
230
|
-
template <typename H>
|
231
|
-
H add_buffer(H state, const unsigned char* data, size_t size);
|
232
|
-
template <typename H>
|
233
|
-
H add_buffer(H state, const char* data, size_t size) {
|
234
|
-
return add_buffer(std::move(state),
|
235
|
-
reinterpret_cast<const unsigned char*>(data), size);
|
236
|
-
}
|
237
|
-
|
238
|
-
// PiecewiseCombiner::finalize()
|
239
|
-
//
|
240
|
-
// Finishes combining the hash sequence, which may may modify the provided
|
241
|
-
// hash state.
|
242
|
-
//
|
243
|
-
// Once finalize() is called, add_buffer() may no longer be called. The
|
244
|
-
// resulting hash state will be the same as if the pieces passed to
|
245
|
-
// add_buffer() were concatenated into a single flat buffer, and then provided
|
246
|
-
// to H::combine_contiguous().
|
247
|
-
template <typename H>
|
248
|
-
H finalize(H state);
|
249
|
-
|
250
|
-
private:
|
251
|
-
unsigned char buf_[PiecewiseChunkSize()];
|
252
|
-
size_t position_;
|
253
|
-
};
|
254
|
-
|
255
252
|
// -----------------------------------------------------------------------------
|
256
253
|
// AbslHashValue for Basic Types
|
257
254
|
// -----------------------------------------------------------------------------
|
@@ -413,6 +410,7 @@ H AbslHashValue(H hash_state, const std::shared_ptr<T>& ptr) {
|
|
413
410
|
// All the string-like types supported here provide the same hash expansion for
|
414
411
|
// the same character sequence. These types are:
|
415
412
|
//
|
413
|
+
// - `absl::Cord`
|
416
414
|
// - `std::string` (and std::basic_string<char, std::char_traits<char>, A> for
|
417
415
|
// any allocator A)
|
418
416
|
// - `absl::string_view` and `std::string_view`
|
@@ -553,6 +551,13 @@ typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue(
|
|
553
551
|
// AbslHashValue for Wrapper Types
|
554
552
|
// -----------------------------------------------------------------------------
|
555
553
|
|
554
|
+
// AbslHashValue for hashing std::reference_wrapper
|
555
|
+
template <typename H, typename T>
|
556
|
+
typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue(
|
557
|
+
H hash_state, std::reference_wrapper<T> opt) {
|
558
|
+
return H::combine(std::move(hash_state), opt.get());
|
559
|
+
}
|
560
|
+
|
556
561
|
// AbslHashValue for hashing absl::optional
|
557
562
|
template <typename H, typename T>
|
558
563
|
typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue(
|
@@ -955,12 +960,15 @@ H PiecewiseCombiner::add_buffer(H state, const unsigned char* data,
|
|
955
960
|
return state;
|
956
961
|
}
|
957
962
|
|
958
|
-
//
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
963
|
+
// If the buffer is partially filled we need to complete the buffer
|
964
|
+
// and hash it.
|
965
|
+
if (position_ != 0) {
|
966
|
+
const size_t bytes_needed = PiecewiseChunkSize() - position_;
|
967
|
+
memcpy(buf_ + position_, data, bytes_needed);
|
968
|
+
state = H::combine_contiguous(std::move(state), buf_, PiecewiseChunkSize());
|
969
|
+
data += bytes_needed;
|
970
|
+
size -= bytes_needed;
|
971
|
+
}
|
964
972
|
|
965
973
|
// Hash whatever chunks we can without copying
|
966
974
|
while (size >= PiecewiseChunkSize()) {
|
@@ -420,6 +420,9 @@ struct pointer_traits<T*> {
|
|
420
420
|
//
|
421
421
|
// A C++11 compatible implementation of C++17's std::allocator_traits.
|
422
422
|
//
|
423
|
+
#if __cplusplus >= 201703L
|
424
|
+
using std::allocator_traits;
|
425
|
+
#else // __cplusplus >= 201703L
|
423
426
|
template <typename Alloc>
|
424
427
|
struct allocator_traits {
|
425
428
|
using allocator_type = Alloc;
|
@@ -609,6 +612,7 @@ struct allocator_traits {
|
|
609
612
|
return a;
|
610
613
|
}
|
611
614
|
};
|
615
|
+
#endif // __cplusplus >= 201703L
|
612
616
|
|
613
617
|
namespace memory_internal {
|
614
618
|
|
@@ -219,7 +219,7 @@ using void_t = typename type_traits_internal::VoidTImpl<Ts...>::type;
|
|
219
219
|
// This metafunction is designed to be a drop-in replacement for the C++17
|
220
220
|
// `std::conjunction` metafunction.
|
221
221
|
template <typename... Ts>
|
222
|
-
struct conjunction;
|
222
|
+
struct conjunction : std::true_type {};
|
223
223
|
|
224
224
|
template <typename T, typename... Ts>
|
225
225
|
struct conjunction<T, Ts...>
|
@@ -228,9 +228,6 @@ struct conjunction<T, Ts...>
|
|
228
228
|
template <typename T>
|
229
229
|
struct conjunction<T> : T {};
|
230
230
|
|
231
|
-
template <>
|
232
|
-
struct conjunction<> : std::true_type {};
|
233
|
-
|
234
231
|
// disjunction
|
235
232
|
//
|
236
233
|
// Performs a compile-time logical OR operation on the passed types (which
|
@@ -241,7 +238,7 @@ struct conjunction<> : std::true_type {};
|
|
241
238
|
// This metafunction is designed to be a drop-in replacement for the C++17
|
242
239
|
// `std::disjunction` metafunction.
|
243
240
|
template <typename... Ts>
|
244
|
-
struct disjunction;
|
241
|
+
struct disjunction : std::false_type {};
|
245
242
|
|
246
243
|
template <typename T, typename... Ts>
|
247
244
|
struct disjunction<T, Ts...> :
|
@@ -250,9 +247,6 @@ struct disjunction<T, Ts...> :
|
|
250
247
|
template <typename T>
|
251
248
|
struct disjunction<T> : T {};
|
252
249
|
|
253
|
-
template <>
|
254
|
-
struct disjunction<> : std::false_type {};
|
255
|
-
|
256
250
|
// negation
|
257
251
|
//
|
258
252
|
// Performs a compile-time logical NOT operation on the passed type (which
|
@@ -15,6 +15,7 @@
|
|
15
15
|
#include "absl/numeric/int128.h"
|
16
16
|
|
17
17
|
#include <stddef.h>
|
18
|
+
|
18
19
|
#include <cassert>
|
19
20
|
#include <iomanip>
|
20
21
|
#include <ostream> // NOLINT(readability/streams)
|
@@ -22,6 +23,9 @@
|
|
22
23
|
#include <string>
|
23
24
|
#include <type_traits>
|
24
25
|
|
26
|
+
#include "absl/base/internal/bits.h"
|
27
|
+
#include "absl/base/optimization.h"
|
28
|
+
|
25
29
|
namespace absl {
|
26
30
|
ABSL_NAMESPACE_BEGIN
|
27
31
|
|
@@ -31,44 +35,26 @@ ABSL_DLL const uint128 kuint128max = MakeUint128(
|
|
31
35
|
namespace {
|
32
36
|
|
33
37
|
// Returns the 0-based position of the last set bit (i.e., most significant bit)
|
34
|
-
// in the given
|
38
|
+
// in the given uint128. The argument is not 0.
|
35
39
|
//
|
36
40
|
// For example:
|
37
41
|
// Given: 5 (decimal) == 101 (binary)
|
38
42
|
// Returns: 2
|
39
|
-
|
40
|
-
do { \
|
41
|
-
if ((n) >= (static_cast<T>(1) << (sh))) { \
|
42
|
-
(n) = (n) >> (sh); \
|
43
|
-
(pos) |= (sh); \
|
44
|
-
} \
|
45
|
-
} while (0)
|
46
|
-
static inline int Fls64(uint64_t n) {
|
47
|
-
assert(n != 0);
|
48
|
-
int pos = 0;
|
49
|
-
STEP(uint64_t, n, pos, 0x20);
|
50
|
-
uint32_t n32 = static_cast<uint32_t>(n);
|
51
|
-
STEP(uint32_t, n32, pos, 0x10);
|
52
|
-
STEP(uint32_t, n32, pos, 0x08);
|
53
|
-
STEP(uint32_t, n32, pos, 0x04);
|
54
|
-
return pos + ((uint64_t{0x3333333322221100} >> (n32 << 2)) & 0x3);
|
55
|
-
}
|
56
|
-
#undef STEP
|
57
|
-
|
58
|
-
// Like Fls64() above, but returns the 0-based position of the last set bit
|
59
|
-
// (i.e., most significant bit) in the given uint128. The argument may not be 0.
|
60
|
-
static inline int Fls128(uint128 n) {
|
43
|
+
inline ABSL_ATTRIBUTE_ALWAYS_INLINE int Fls128(uint128 n) {
|
61
44
|
if (uint64_t hi = Uint128High64(n)) {
|
62
|
-
|
45
|
+
ABSL_INTERNAL_ASSUME(hi != 0);
|
46
|
+
return 127 - base_internal::CountLeadingZeros64(hi);
|
63
47
|
}
|
64
|
-
|
48
|
+
const uint64_t low = Uint128Low64(n);
|
49
|
+
ABSL_INTERNAL_ASSUME(low != 0);
|
50
|
+
return 63 - base_internal::CountLeadingZeros64(low);
|
65
51
|
}
|
66
52
|
|
67
53
|
// Long division/modulo for uint128 implemented using the shift-subtract
|
68
54
|
// division algorithm adapted from:
|
69
55
|
// https://stackoverflow.com/questions/5386377/division-without-using
|
70
|
-
void DivModImpl(uint128 dividend, uint128 divisor, uint128* quotient_ret,
|
71
|
-
|
56
|
+
inline void DivModImpl(uint128 dividend, uint128 divisor, uint128* quotient_ret,
|
57
|
+
uint128* remainder_ret) {
|
72
58
|
assert(divisor != 0);
|
73
59
|
|
74
60
|
if (divisor > dividend) {
|