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
@@ -25,16 +25,37 @@ class Cord;
|
|
25
25
|
class FormatCountCapture;
|
26
26
|
class FormatSink;
|
27
27
|
|
28
|
+
template <absl::FormatConversionCharSet C>
|
29
|
+
struct FormatConvertResult;
|
30
|
+
class FormatConversionSpec;
|
31
|
+
|
28
32
|
namespace str_format_internal {
|
29
33
|
|
30
34
|
template <typename T, typename = void>
|
31
35
|
struct HasUserDefinedConvert : std::false_type {};
|
32
36
|
|
33
37
|
template <typename T>
|
34
|
-
struct HasUserDefinedConvert<
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
+
struct HasUserDefinedConvert<T, void_t<decltype(AbslFormatConvert(
|
39
|
+
std::declval<const T&>(),
|
40
|
+
std::declval<const FormatConversionSpec&>(),
|
41
|
+
std::declval<FormatSink*>()))>>
|
42
|
+
: std::true_type {};
|
43
|
+
|
44
|
+
void AbslFormatConvert(); // Stops the lexical name lookup
|
45
|
+
template <typename T>
|
46
|
+
auto FormatConvertImpl(const T& v, FormatConversionSpecImpl conv,
|
47
|
+
FormatSinkImpl* sink)
|
48
|
+
-> decltype(AbslFormatConvert(v,
|
49
|
+
std::declval<const FormatConversionSpec&>(),
|
50
|
+
std::declval<FormatSink*>())) {
|
51
|
+
using FormatConversionSpecT =
|
52
|
+
absl::enable_if_t<sizeof(const T& (*)()) != 0, FormatConversionSpec>;
|
53
|
+
using FormatSinkT =
|
54
|
+
absl::enable_if_t<sizeof(const T& (*)()) != 0, FormatSink>;
|
55
|
+
auto fcs = conv.Wrap<FormatConversionSpecT>();
|
56
|
+
auto fs = sink->Wrap<FormatSinkT>();
|
57
|
+
return AbslFormatConvert(v, fcs, &fs);
|
58
|
+
}
|
38
59
|
|
39
60
|
template <typename T>
|
40
61
|
class StreamedWrapper;
|
@@ -43,6 +64,13 @@ class StreamedWrapper;
|
|
43
64
|
// then convert it, appending to `sink` and return `true`.
|
44
65
|
// Otherwise fail and return `false`.
|
45
66
|
|
67
|
+
// AbslFormatConvert(v, conv, sink) is intended to be found by ADL on 'v'
|
68
|
+
// as an extension mechanism. These FormatConvertImpl functions are the default
|
69
|
+
// implementations.
|
70
|
+
// The ADL search is augmented via the 'Sink*' parameter, which also
|
71
|
+
// serves as a disambiguator to reject possible unintended 'AbslFormatConvert'
|
72
|
+
// functions in the namespaces associated with 'v'.
|
73
|
+
|
46
74
|
// Raw pointers.
|
47
75
|
struct VoidPtr {
|
48
76
|
VoidPtr() = default;
|
@@ -52,27 +80,45 @@ struct VoidPtr {
|
|
52
80
|
: value(ptr ? reinterpret_cast<uintptr_t>(ptr) : 0) {}
|
53
81
|
uintptr_t value;
|
54
82
|
};
|
55
|
-
|
56
|
-
|
83
|
+
|
84
|
+
template <FormatConversionCharSet C>
|
85
|
+
struct ArgConvertResult {
|
86
|
+
bool value;
|
87
|
+
};
|
88
|
+
|
89
|
+
template <FormatConversionCharSet C>
|
90
|
+
constexpr FormatConversionCharSet ExtractCharSet(FormatConvertResult<C>) {
|
91
|
+
return C;
|
92
|
+
}
|
93
|
+
|
94
|
+
template <FormatConversionCharSet C>
|
95
|
+
constexpr FormatConversionCharSet ExtractCharSet(ArgConvertResult<C>) {
|
96
|
+
return C;
|
97
|
+
}
|
98
|
+
|
99
|
+
using StringConvertResult =
|
100
|
+
ArgConvertResult<FormatConversionCharSetInternal::s>;
|
101
|
+
ArgConvertResult<FormatConversionCharSetInternal::p> FormatConvertImpl(
|
102
|
+
VoidPtr v, FormatConversionSpecImpl conv, FormatSinkImpl* sink);
|
57
103
|
|
58
104
|
// Strings.
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
bool is_left = conv.
|
105
|
+
StringConvertResult FormatConvertImpl(const std::string& v,
|
106
|
+
FormatConversionSpecImpl conv,
|
107
|
+
FormatSinkImpl* sink);
|
108
|
+
StringConvertResult FormatConvertImpl(string_view v,
|
109
|
+
FormatConversionSpecImpl conv,
|
110
|
+
FormatSinkImpl* sink);
|
111
|
+
ArgConvertResult<FormatConversionCharSetUnion(
|
112
|
+
FormatConversionCharSetInternal::s, FormatConversionCharSetInternal::p)>
|
113
|
+
FormatConvertImpl(const char* v, const FormatConversionSpecImpl conv,
|
114
|
+
FormatSinkImpl* sink);
|
115
|
+
|
116
|
+
template <class AbslCord, typename std::enable_if<std::is_same<
|
117
|
+
AbslCord, absl::Cord>::value>::type* = nullptr>
|
118
|
+
StringConvertResult FormatConvertImpl(const AbslCord& value,
|
119
|
+
FormatConversionSpecImpl conv,
|
120
|
+
FormatSinkImpl* sink) {
|
121
|
+
bool is_left = conv.has_left_flag();
|
76
122
|
size_t space_remaining = 0;
|
77
123
|
|
78
124
|
int width = conv.width();
|
@@ -105,55 +151,63 @@ ConvertResult<Conv::s> FormatConvertImpl(const AbslCord& value,
|
|
105
151
|
return {true};
|
106
152
|
}
|
107
153
|
|
108
|
-
using IntegralConvertResult =
|
109
|
-
|
110
|
-
|
154
|
+
using IntegralConvertResult = ArgConvertResult<FormatConversionCharSetUnion(
|
155
|
+
FormatConversionCharSetInternal::c,
|
156
|
+
FormatConversionCharSetInternal::kNumeric,
|
157
|
+
FormatConversionCharSetInternal::kStar)>;
|
158
|
+
using FloatingConvertResult =
|
159
|
+
ArgConvertResult<FormatConversionCharSetInternal::kFloating>;
|
111
160
|
|
112
161
|
// Floats.
|
113
|
-
FloatingConvertResult FormatConvertImpl(float v,
|
162
|
+
FloatingConvertResult FormatConvertImpl(float v, FormatConversionSpecImpl conv,
|
114
163
|
FormatSinkImpl* sink);
|
115
|
-
FloatingConvertResult FormatConvertImpl(double v,
|
164
|
+
FloatingConvertResult FormatConvertImpl(double v, FormatConversionSpecImpl conv,
|
116
165
|
FormatSinkImpl* sink);
|
117
|
-
FloatingConvertResult FormatConvertImpl(long double v,
|
166
|
+
FloatingConvertResult FormatConvertImpl(long double v,
|
167
|
+
FormatConversionSpecImpl conv,
|
118
168
|
FormatSinkImpl* sink);
|
119
169
|
|
120
170
|
// Chars.
|
121
|
-
IntegralConvertResult FormatConvertImpl(char v,
|
171
|
+
IntegralConvertResult FormatConvertImpl(char v, FormatConversionSpecImpl conv,
|
122
172
|
FormatSinkImpl* sink);
|
123
|
-
IntegralConvertResult FormatConvertImpl(signed char v,
|
173
|
+
IntegralConvertResult FormatConvertImpl(signed char v,
|
174
|
+
FormatConversionSpecImpl conv,
|
124
175
|
FormatSinkImpl* sink);
|
125
|
-
IntegralConvertResult FormatConvertImpl(unsigned char v,
|
176
|
+
IntegralConvertResult FormatConvertImpl(unsigned char v,
|
177
|
+
FormatConversionSpecImpl conv,
|
126
178
|
FormatSinkImpl* sink);
|
127
179
|
|
128
180
|
// Ints.
|
129
181
|
IntegralConvertResult FormatConvertImpl(short v, // NOLINT
|
130
|
-
|
182
|
+
FormatConversionSpecImpl conv,
|
131
183
|
FormatSinkImpl* sink);
|
132
184
|
IntegralConvertResult FormatConvertImpl(unsigned short v, // NOLINT
|
133
|
-
|
185
|
+
FormatConversionSpecImpl conv,
|
134
186
|
FormatSinkImpl* sink);
|
135
|
-
IntegralConvertResult FormatConvertImpl(int v,
|
187
|
+
IntegralConvertResult FormatConvertImpl(int v, FormatConversionSpecImpl conv,
|
136
188
|
FormatSinkImpl* sink);
|
137
|
-
IntegralConvertResult FormatConvertImpl(unsigned v,
|
189
|
+
IntegralConvertResult FormatConvertImpl(unsigned v,
|
190
|
+
FormatConversionSpecImpl conv,
|
138
191
|
FormatSinkImpl* sink);
|
139
192
|
IntegralConvertResult FormatConvertImpl(long v, // NOLINT
|
140
|
-
|
193
|
+
FormatConversionSpecImpl conv,
|
141
194
|
FormatSinkImpl* sink);
|
142
195
|
IntegralConvertResult FormatConvertImpl(unsigned long v, // NOLINT
|
143
|
-
|
196
|
+
FormatConversionSpecImpl conv,
|
144
197
|
FormatSinkImpl* sink);
|
145
198
|
IntegralConvertResult FormatConvertImpl(long long v, // NOLINT
|
146
|
-
|
199
|
+
FormatConversionSpecImpl conv,
|
147
200
|
FormatSinkImpl* sink);
|
148
201
|
IntegralConvertResult FormatConvertImpl(unsigned long long v, // NOLINT
|
149
|
-
|
202
|
+
FormatConversionSpecImpl conv,
|
150
203
|
FormatSinkImpl* sink);
|
151
|
-
IntegralConvertResult FormatConvertImpl(int128 v,
|
204
|
+
IntegralConvertResult FormatConvertImpl(int128 v, FormatConversionSpecImpl conv,
|
152
205
|
FormatSinkImpl* sink);
|
153
|
-
IntegralConvertResult FormatConvertImpl(uint128 v,
|
206
|
+
IntegralConvertResult FormatConvertImpl(uint128 v,
|
207
|
+
FormatConversionSpecImpl conv,
|
154
208
|
FormatSinkImpl* sink);
|
155
209
|
template <typename T, enable_if_t<std::is_same<T, bool>::value, int> = 0>
|
156
|
-
IntegralConvertResult FormatConvertImpl(T v,
|
210
|
+
IntegralConvertResult FormatConvertImpl(T v, FormatConversionSpecImpl conv,
|
157
211
|
FormatSinkImpl* sink) {
|
158
212
|
return FormatConvertImpl(static_cast<int>(v), conv, sink);
|
159
213
|
}
|
@@ -164,12 +218,12 @@ template <typename T>
|
|
164
218
|
typename std::enable_if<std::is_enum<T>::value &&
|
165
219
|
!HasUserDefinedConvert<T>::value,
|
166
220
|
IntegralConvertResult>::type
|
167
|
-
FormatConvertImpl(T v,
|
221
|
+
FormatConvertImpl(T v, FormatConversionSpecImpl conv, FormatSinkImpl* sink);
|
168
222
|
|
169
223
|
template <typename T>
|
170
|
-
|
171
|
-
|
172
|
-
|
224
|
+
StringConvertResult FormatConvertImpl(const StreamedWrapper<T>& v,
|
225
|
+
FormatConversionSpecImpl conv,
|
226
|
+
FormatSinkImpl* out) {
|
173
227
|
std::ostringstream oss;
|
174
228
|
oss << v.v_;
|
175
229
|
if (!oss) return {false};
|
@@ -180,21 +234,24 @@ ConvertResult<Conv::s> FormatConvertImpl(const StreamedWrapper<T>& v,
|
|
180
234
|
// until after FormatCountCapture is fully defined.
|
181
235
|
struct FormatCountCaptureHelper {
|
182
236
|
template <class T = int>
|
183
|
-
static
|
184
|
-
|
185
|
-
|
237
|
+
static ArgConvertResult<FormatConversionCharSetInternal::n> ConvertHelper(
|
238
|
+
const FormatCountCapture& v, FormatConversionSpecImpl conv,
|
239
|
+
FormatSinkImpl* sink) {
|
186
240
|
const absl::enable_if_t<sizeof(T) != 0, FormatCountCapture>& v2 = v;
|
187
241
|
|
188
|
-
if (conv.
|
242
|
+
if (conv.conversion_char() !=
|
243
|
+
str_format_internal::FormatConversionCharInternal::n) {
|
244
|
+
return {false};
|
245
|
+
}
|
189
246
|
*v2.p_ = static_cast<int>(sink->size());
|
190
247
|
return {true};
|
191
248
|
}
|
192
249
|
};
|
193
250
|
|
194
251
|
template <class T = int>
|
195
|
-
|
196
|
-
|
197
|
-
|
252
|
+
ArgConvertResult<FormatConversionCharSetInternal::n> FormatConvertImpl(
|
253
|
+
const FormatCountCapture& v, FormatConversionSpecImpl conv,
|
254
|
+
FormatSinkImpl* sink) {
|
198
255
|
return FormatCountCaptureHelper::ConvertHelper(v, conv, sink);
|
199
256
|
}
|
200
257
|
|
@@ -203,13 +260,13 @@ ConvertResult<Conv::n> FormatConvertImpl(const FormatCountCapture& v,
|
|
203
260
|
struct FormatArgImplFriend {
|
204
261
|
template <typename Arg>
|
205
262
|
static bool ToInt(Arg arg, int* out) {
|
206
|
-
// A value initialized
|
207
|
-
// dispatcher to run the `int` conversion.
|
263
|
+
// A value initialized FormatConversionSpecImpl has a `none` conv, which
|
264
|
+
// tells the dispatcher to run the `int` conversion.
|
208
265
|
return arg.dispatcher_(arg.data_, {}, out);
|
209
266
|
}
|
210
267
|
|
211
268
|
template <typename Arg>
|
212
|
-
static bool Convert(Arg arg,
|
269
|
+
static bool Convert(Arg arg, FormatConversionSpecImpl conv,
|
213
270
|
FormatSinkImpl* out) {
|
214
271
|
return arg.dispatcher_(arg.data_, conv, out);
|
215
272
|
}
|
@@ -220,6 +277,15 @@ struct FormatArgImplFriend {
|
|
220
277
|
}
|
221
278
|
};
|
222
279
|
|
280
|
+
template <typename Arg>
|
281
|
+
constexpr FormatConversionCharSet ArgumentToConv() {
|
282
|
+
return absl::str_format_internal::ExtractCharSet(
|
283
|
+
decltype(str_format_internal::FormatConvertImpl(
|
284
|
+
std::declval<const Arg&>(),
|
285
|
+
std::declval<const FormatConversionSpecImpl&>(),
|
286
|
+
std::declval<FormatSinkImpl*>())){});
|
287
|
+
}
|
288
|
+
|
223
289
|
// A type-erased handle to a format argument.
|
224
290
|
class FormatArgImpl {
|
225
291
|
private:
|
@@ -233,7 +299,7 @@ class FormatArgImpl {
|
|
233
299
|
char buf[kInlinedSpace];
|
234
300
|
};
|
235
301
|
|
236
|
-
using Dispatcher = bool (*)(Data,
|
302
|
+
using Dispatcher = bool (*)(Data, FormatConversionSpecImpl, void* out);
|
237
303
|
|
238
304
|
template <typename T>
|
239
305
|
struct store_by_value
|
@@ -375,15 +441,20 @@ class FormatArgImpl {
|
|
375
441
|
}
|
376
442
|
|
377
443
|
template <typename T>
|
378
|
-
static bool Dispatch(Data arg,
|
444
|
+
static bool Dispatch(Data arg, FormatConversionSpecImpl spec, void* out) {
|
379
445
|
// A `none` conv indicates that we want the `int` conversion.
|
380
|
-
if (ABSL_PREDICT_FALSE(spec.
|
446
|
+
if (ABSL_PREDICT_FALSE(spec.conversion_char() ==
|
447
|
+
FormatConversionCharInternal::kNone)) {
|
381
448
|
return ToInt<T>(arg, static_cast<int*>(out), std::is_integral<T>(),
|
382
449
|
std::is_enum<T>());
|
383
450
|
}
|
384
|
-
|
451
|
+
if (ABSL_PREDICT_FALSE(!Contains(ArgumentToConv<T>(),
|
452
|
+
spec.conversion_char()))) {
|
453
|
+
return false;
|
454
|
+
}
|
385
455
|
return str_format_internal::FormatConvertImpl(
|
386
|
-
Manager<T>::Value(arg), spec,
|
456
|
+
Manager<T>::Value(arg), spec,
|
457
|
+
static_cast<FormatSinkImpl*>(out))
|
387
458
|
.value;
|
388
459
|
}
|
389
460
|
|
@@ -391,8 +462,9 @@ class FormatArgImpl {
|
|
391
462
|
Dispatcher dispatcher_;
|
392
463
|
};
|
393
464
|
|
394
|
-
#define ABSL_INTERNAL_FORMAT_DISPATCH_INSTANTIATE_(T, E)
|
395
|
-
E template bool FormatArgImpl::Dispatch<T>(Data,
|
465
|
+
#define ABSL_INTERNAL_FORMAT_DISPATCH_INSTANTIATE_(T, E) \
|
466
|
+
E template bool FormatArgImpl::Dispatch<T>(Data, FormatConversionSpecImpl, \
|
467
|
+
void*)
|
396
468
|
|
397
469
|
#define ABSL_INTERNAL_FORMAT_DISPATCH_OVERLOADS_EXPAND_(...) \
|
398
470
|
ABSL_INTERNAL_FORMAT_DISPATCH_INSTANTIATE_(str_format_internal::VoidPtr, \
|
@@ -147,7 +147,7 @@ class SummarizingConverter {
|
|
147
147
|
<< FormatConversionSpecImplFriend::FlagsToString(bound);
|
148
148
|
if (bound.width() >= 0) ss << bound.width();
|
149
149
|
if (bound.precision() >= 0) ss << "." << bound.precision();
|
150
|
-
ss << bound.
|
150
|
+
ss << bound.conversion_char() << "}";
|
151
151
|
Append(ss.str());
|
152
152
|
return true;
|
153
153
|
}
|
@@ -19,7 +19,7 @@ class UntypedFormatSpec;
|
|
19
19
|
|
20
20
|
namespace str_format_internal {
|
21
21
|
|
22
|
-
class BoundConversion : public
|
22
|
+
class BoundConversion : public FormatConversionSpecImpl {
|
23
23
|
public:
|
24
24
|
const FormatArgImpl* arg() const { return arg_; }
|
25
25
|
void set_arg(const FormatArgImpl* a) { arg_ = a; }
|
@@ -60,7 +60,7 @@ class UntypedFormatSpecImpl {
|
|
60
60
|
size_t size_;
|
61
61
|
};
|
62
62
|
|
63
|
-
template <typename T,
|
63
|
+
template <typename T, FormatConversionCharSet...>
|
64
64
|
struct MakeDependent {
|
65
65
|
using type = T;
|
66
66
|
};
|
@@ -68,7 +68,7 @@ struct MakeDependent {
|
|
68
68
|
// Implicitly convertible from `const char*`, `string_view`, and the
|
69
69
|
// `ExtendedParsedFormat` type. This abstraction allows all format functions to
|
70
70
|
// operate on any without providing too many overloads.
|
71
|
-
template <
|
71
|
+
template <FormatConversionCharSet... Args>
|
72
72
|
class FormatSpecTemplate
|
73
73
|
: public MakeDependent<UntypedFormatSpec, Args...>::type {
|
74
74
|
using Base = typename MakeDependent<UntypedFormatSpec, Args...>::type;
|
@@ -76,11 +76,11 @@ class FormatSpecTemplate
|
|
76
76
|
public:
|
77
77
|
#ifdef ABSL_INTERNAL_ENABLE_FORMAT_CHECKER
|
78
78
|
|
79
|
-
// Honeypot overload for when the
|
79
|
+
// Honeypot overload for when the string is not constexpr.
|
80
80
|
// We use the 'unavailable' attribute to give a better compiler error than
|
81
81
|
// just 'method is deleted'.
|
82
82
|
FormatSpecTemplate(...) // NOLINT
|
83
|
-
__attribute__((unavailable("Format
|
83
|
+
__attribute__((unavailable("Format string is not constexpr.")));
|
84
84
|
|
85
85
|
// Honeypot overload for when the format is constexpr and invalid.
|
86
86
|
// We use the 'unavailable' attribute to give a better compiler error than
|
@@ -105,13 +105,11 @@ class FormatSpecTemplate
|
|
105
105
|
|
106
106
|
// Good format overload.
|
107
107
|
FormatSpecTemplate(const char* s) // NOLINT
|
108
|
-
__attribute__((enable_if(ValidFormatImpl<
|
109
|
-
"bad format trap")))
|
108
|
+
__attribute__((enable_if(ValidFormatImpl<Args...>(s), "bad format trap")))
|
110
109
|
: Base(s) {}
|
111
110
|
|
112
111
|
FormatSpecTemplate(string_view s) // NOLINT
|
113
|
-
__attribute__((enable_if(ValidFormatImpl<
|
114
|
-
"bad format trap")))
|
112
|
+
__attribute__((enable_if(ValidFormatImpl<Args...>(s), "bad format trap")))
|
115
113
|
: Base(s) {}
|
116
114
|
|
117
115
|
#else // ABSL_INTERNAL_ENABLE_FORMAT_CHECKER
|
@@ -121,19 +119,14 @@ class FormatSpecTemplate
|
|
121
119
|
|
122
120
|
#endif // ABSL_INTERNAL_ENABLE_FORMAT_CHECKER
|
123
121
|
|
124
|
-
template <
|
125
|
-
|
126
|
-
|
127
|
-
|
122
|
+
template <FormatConversionCharSet... C,
|
123
|
+
typename = typename std::enable_if<
|
124
|
+
AllOf(sizeof...(C) == sizeof...(Args), Contains(Args,
|
125
|
+
C)...)>::type>
|
128
126
|
FormatSpecTemplate(const ExtendedParsedFormat<C...>& pc) // NOLINT
|
129
127
|
: Base(&pc) {}
|
130
128
|
};
|
131
129
|
|
132
|
-
template <typename... Args>
|
133
|
-
struct FormatSpecDeductionBarrier {
|
134
|
-
using type = FormatSpecTemplate<Args...>;
|
135
|
-
};
|
136
|
-
|
137
130
|
class Streamable {
|
138
131
|
public:
|
139
132
|
Streamable(const UntypedFormatSpecImpl& format,
|
@@ -196,9 +189,9 @@ class StreamedWrapper {
|
|
196
189
|
|
197
190
|
private:
|
198
191
|
template <typename S>
|
199
|
-
friend
|
200
|
-
|
201
|
-
|
192
|
+
friend ArgConvertResult<FormatConversionCharSetInternal::s> FormatConvertImpl(
|
193
|
+
const StreamedWrapper<S>& v, FormatConversionSpecImpl conv,
|
194
|
+
FormatSinkImpl* out);
|
202
195
|
const T& v_;
|
203
196
|
};
|
204
197
|
|
@@ -24,13 +24,6 @@ constexpr bool AllOf(bool b, T... t) {
|
|
24
24
|
return b && AllOf(t...);
|
25
25
|
}
|
26
26
|
|
27
|
-
template <typename Arg>
|
28
|
-
constexpr Conv ArgumentToConv() {
|
29
|
-
return decltype(str_format_internal::FormatConvertImpl(
|
30
|
-
std::declval<const Arg&>(), std::declval<const ConversionSpec&>(),
|
31
|
-
std::declval<FormatSinkImpl*>()))::kConv;
|
32
|
-
}
|
33
|
-
|
34
27
|
#ifdef ABSL_INTERNAL_ENABLE_FORMAT_CHECKER
|
35
28
|
|
36
29
|
constexpr bool ContainsChar(const char* chars, char c) {
|
@@ -39,14 +32,14 @@ constexpr bool ContainsChar(const char* chars, char c) {
|
|
39
32
|
|
40
33
|
// A constexpr compatible list of Convs.
|
41
34
|
struct ConvList {
|
42
|
-
const
|
35
|
+
const FormatConversionCharSet* array;
|
43
36
|
int count;
|
44
37
|
|
45
38
|
// We do the bound check here to avoid having to do it on the callers.
|
46
|
-
// Returning an empty
|
47
|
-
// will never match any conversion.
|
48
|
-
constexpr
|
49
|
-
return i < count ? array[i] :
|
39
|
+
// Returning an empty FormatConversionCharSet has the same effect as
|
40
|
+
// short circuiting because it will never match any conversion.
|
41
|
+
constexpr FormatConversionCharSet operator[](int i) const {
|
42
|
+
return i < count ? array[i] : FormatConversionCharSet{};
|
50
43
|
}
|
51
44
|
|
52
45
|
constexpr ConvList without_front() const {
|
@@ -57,7 +50,7 @@ struct ConvList {
|
|
57
50
|
template <size_t count>
|
58
51
|
struct ConvListT {
|
59
52
|
// Make sure the array has size > 0.
|
60
|
-
|
53
|
+
FormatConversionCharSet list[count ? count : 1];
|
61
54
|
};
|
62
55
|
|
63
56
|
constexpr char GetChar(string_view str, size_t index) {
|
@@ -310,7 +303,7 @@ class FormatParser {
|
|
310
303
|
ConvList args_;
|
311
304
|
};
|
312
305
|
|
313
|
-
template <
|
306
|
+
template <FormatConversionCharSet... C>
|
314
307
|
constexpr bool ValidFormatImpl(string_view format) {
|
315
308
|
return FormatParser(format,
|
316
309
|
{ConvListT<sizeof...(C)>{{C...}}.list, sizeof...(C)})
|