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
@@ -53,6 +53,7 @@
|
|
53
53
|
|
54
54
|
#include "absl/base/config.h"
|
55
55
|
#include "absl/hash/hash.h"
|
56
|
+
#include "absl/strings/cord.h"
|
56
57
|
#include "absl/strings/string_view.h"
|
57
58
|
|
58
59
|
namespace absl {
|
@@ -72,6 +73,9 @@ struct StringHash {
|
|
72
73
|
size_t operator()(absl::string_view v) const {
|
73
74
|
return absl::Hash<absl::string_view>{}(v);
|
74
75
|
}
|
76
|
+
size_t operator()(const absl::Cord& v) const {
|
77
|
+
return absl::Hash<absl::Cord>{}(v);
|
78
|
+
}
|
75
79
|
};
|
76
80
|
|
77
81
|
// Supports heterogeneous lookup for string-like elements.
|
@@ -82,6 +86,15 @@ struct StringHashEq {
|
|
82
86
|
bool operator()(absl::string_view lhs, absl::string_view rhs) const {
|
83
87
|
return lhs == rhs;
|
84
88
|
}
|
89
|
+
bool operator()(const absl::Cord& lhs, const absl::Cord& rhs) const {
|
90
|
+
return lhs == rhs;
|
91
|
+
}
|
92
|
+
bool operator()(const absl::Cord& lhs, absl::string_view rhs) const {
|
93
|
+
return lhs == rhs;
|
94
|
+
}
|
95
|
+
bool operator()(absl::string_view lhs, const absl::Cord& rhs) const {
|
96
|
+
return lhs == rhs;
|
97
|
+
}
|
85
98
|
};
|
86
99
|
};
|
87
100
|
|
@@ -89,6 +102,8 @@ template <>
|
|
89
102
|
struct HashEq<std::string> : StringHashEq {};
|
90
103
|
template <>
|
91
104
|
struct HashEq<absl::string_view> : StringHashEq {};
|
105
|
+
template <>
|
106
|
+
struct HashEq<absl::Cord> : StringHashEq {};
|
92
107
|
|
93
108
|
// Supports heterogeneous lookup for pointers and smart pointers.
|
94
109
|
template <class T>
|
@@ -17,6 +17,7 @@
|
|
17
17
|
|
18
18
|
#include <cstddef>
|
19
19
|
#include <memory>
|
20
|
+
#include <new>
|
20
21
|
#include <type_traits>
|
21
22
|
#include <utility>
|
22
23
|
|
@@ -29,15 +30,34 @@ namespace container_internal {
|
|
29
30
|
// Defines how slots are initialized/destroyed/moved.
|
30
31
|
template <class Policy, class = void>
|
31
32
|
struct hash_policy_traits {
|
33
|
+
// The type of the keys stored in the hashtable.
|
34
|
+
using key_type = typename Policy::key_type;
|
35
|
+
|
32
36
|
private:
|
33
37
|
struct ReturnKey {
|
34
|
-
//
|
38
|
+
// When C++17 is available, we can use std::launder to provide mutable
|
39
|
+
// access to the key for use in node handle.
|
40
|
+
#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
|
41
|
+
template <class Key,
|
42
|
+
absl::enable_if_t<std::is_lvalue_reference<Key>::value, int> = 0>
|
43
|
+
static key_type& Impl(Key&& k, int) {
|
44
|
+
return *std::launder(
|
45
|
+
const_cast<key_type*>(std::addressof(std::forward<Key>(k))));
|
46
|
+
}
|
47
|
+
#endif
|
48
|
+
|
49
|
+
template <class Key>
|
50
|
+
static Key Impl(Key&& k, char) {
|
51
|
+
return std::forward<Key>(k);
|
52
|
+
}
|
53
|
+
|
35
54
|
// When Key=T&, we forward the lvalue reference.
|
36
55
|
// When Key=T, we return by value to avoid a dangling reference.
|
37
56
|
// eg, for string_hash_map.
|
38
57
|
template <class Key, class... Args>
|
39
|
-
|
40
|
-
|
58
|
+
auto operator()(Key&& k, const Args&...) const
|
59
|
+
-> decltype(Impl(std::forward<Key>(k), 0)) {
|
60
|
+
return Impl(std::forward<Key>(k), 0);
|
41
61
|
}
|
42
62
|
};
|
43
63
|
|
@@ -52,9 +72,6 @@ struct hash_policy_traits {
|
|
52
72
|
// The actual object stored in the hash table.
|
53
73
|
using slot_type = typename Policy::slot_type;
|
54
74
|
|
55
|
-
// The type of the keys stored in the hashtable.
|
56
|
-
using key_type = typename Policy::key_type;
|
57
|
-
|
58
75
|
// The argument type for insertions into the hashtable. This is different
|
59
76
|
// from value_type for increased performance. See initializer_list constructor
|
60
77
|
// and insert() member functions for more details.
|
@@ -156,7 +173,7 @@ struct hash_policy_traits {
|
|
156
173
|
// Returns the "key" portion of the slot.
|
157
174
|
// Used for node handle manipulation.
|
158
175
|
template <class P = Policy>
|
159
|
-
static auto
|
176
|
+
static auto mutable_key(slot_type* slot)
|
160
177
|
-> decltype(P::apply(ReturnKey(), element(slot))) {
|
161
178
|
return P::apply(ReturnKey(), element(slot));
|
162
179
|
}
|
@@ -67,6 +67,7 @@ void HashtablezInfo::PrepareForSampling() {
|
|
67
67
|
capacity.store(0, std::memory_order_relaxed);
|
68
68
|
size.store(0, std::memory_order_relaxed);
|
69
69
|
num_erases.store(0, std::memory_order_relaxed);
|
70
|
+
num_rehashes.store(0, std::memory_order_relaxed);
|
70
71
|
max_probe_length.store(0, std::memory_order_relaxed);
|
71
72
|
total_probe_length.store(0, std::memory_order_relaxed);
|
72
73
|
hashes_bitwise_or.store(0, std::memory_order_relaxed);
|
@@ -226,7 +227,7 @@ void RecordInsertSlow(HashtablezInfo* info, size_t hash,
|
|
226
227
|
// SwissTables probe in groups of 16, so scale this to count items probes and
|
227
228
|
// not offset from desired.
|
228
229
|
size_t probe_length = distance_from_desired;
|
229
|
-
#if
|
230
|
+
#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
|
230
231
|
probe_length /= 16;
|
231
232
|
#else
|
232
233
|
probe_length /= 8;
|
@@ -73,6 +73,7 @@ struct HashtablezInfo {
|
|
73
73
|
std::atomic<size_t> capacity;
|
74
74
|
std::atomic<size_t> size;
|
75
75
|
std::atomic<size_t> num_erases;
|
76
|
+
std::atomic<size_t> num_rehashes;
|
76
77
|
std::atomic<size_t> max_probe_length;
|
77
78
|
std::atomic<size_t> total_probe_length;
|
78
79
|
std::atomic<size_t> hashes_bitwise_or;
|
@@ -98,13 +99,18 @@ struct HashtablezInfo {
|
|
98
99
|
};
|
99
100
|
|
100
101
|
inline void RecordRehashSlow(HashtablezInfo* info, size_t total_probe_length) {
|
101
|
-
#if
|
102
|
+
#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
|
102
103
|
total_probe_length /= 16;
|
103
104
|
#else
|
104
105
|
total_probe_length /= 8;
|
105
106
|
#endif
|
106
107
|
info->total_probe_length.store(total_probe_length, std::memory_order_relaxed);
|
107
108
|
info->num_erases.store(0, std::memory_order_relaxed);
|
109
|
+
// There is only one concurrent writer, so `load` then `store` is sufficient
|
110
|
+
// instead of using `fetch_add`.
|
111
|
+
info->num_rehashes.store(
|
112
|
+
1 + info->num_rehashes.load(std::memory_order_relaxed),
|
113
|
+
std::memory_order_relaxed);
|
108
114
|
}
|
109
115
|
|
110
116
|
inline void RecordStorageChangedSlow(HashtablezInfo* info, size_t size,
|
@@ -113,7 +119,8 @@ inline void RecordStorageChangedSlow(HashtablezInfo* info, size_t size,
|
|
113
119
|
info->capacity.store(capacity, std::memory_order_relaxed);
|
114
120
|
if (size == 0) {
|
115
121
|
// This is a clear, reset the total/num_erases too.
|
116
|
-
|
122
|
+
info->total_probe_length.store(0, std::memory_order_relaxed);
|
123
|
+
info->num_erases.store(0, std::memory_order_relaxed);
|
117
124
|
}
|
118
125
|
}
|
119
126
|
|
@@ -122,12 +129,21 @@ void RecordInsertSlow(HashtablezInfo* info, size_t hash,
|
|
122
129
|
|
123
130
|
inline void RecordEraseSlow(HashtablezInfo* info) {
|
124
131
|
info->size.fetch_sub(1, std::memory_order_relaxed);
|
125
|
-
|
132
|
+
// There is only one concurrent writer, so `load` then `store` is sufficient
|
133
|
+
// instead of using `fetch_add`.
|
134
|
+
info->num_erases.store(
|
135
|
+
1 + info->num_erases.load(std::memory_order_relaxed),
|
136
|
+
std::memory_order_relaxed);
|
126
137
|
}
|
127
138
|
|
128
139
|
HashtablezInfo* SampleSlow(int64_t* next_sample);
|
129
140
|
void UnsampleSlow(HashtablezInfo* info);
|
130
141
|
|
142
|
+
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
143
|
+
#error ABSL_INTERNAL_HASHTABLEZ_SAMPLE cannot be directly set
|
144
|
+
#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
145
|
+
|
146
|
+
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
131
147
|
class HashtablezInfoHandle {
|
132
148
|
public:
|
133
149
|
explicit HashtablezInfoHandle() : info_(nullptr) {}
|
@@ -179,19 +195,27 @@ class HashtablezInfoHandle {
|
|
179
195
|
friend class HashtablezInfoHandlePeer;
|
180
196
|
HashtablezInfo* info_;
|
181
197
|
};
|
198
|
+
#else
|
199
|
+
// Ensure that when Hashtablez is turned off at compile time, HashtablezInfo can
|
200
|
+
// be removed by the linker, in order to reduce the binary size.
|
201
|
+
class HashtablezInfoHandle {
|
202
|
+
public:
|
203
|
+
explicit HashtablezInfoHandle() = default;
|
204
|
+
explicit HashtablezInfoHandle(std::nullptr_t) {}
|
182
205
|
|
183
|
-
|
184
|
-
|
185
|
-
|
206
|
+
inline void RecordStorageChanged(size_t /*size*/, size_t /*capacity*/) {}
|
207
|
+
inline void RecordRehash(size_t /*total_probe_length*/) {}
|
208
|
+
inline void RecordInsert(size_t /*hash*/, size_t /*distance_from_desired*/) {}
|
209
|
+
inline void RecordErase() {}
|
186
210
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
#endif
|
211
|
+
friend inline void swap(HashtablezInfoHandle& /*lhs*/,
|
212
|
+
HashtablezInfoHandle& /*rhs*/) {}
|
213
|
+
};
|
214
|
+
#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
191
215
|
|
192
216
|
#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
193
217
|
extern ABSL_PER_THREAD_TLS_KEYWORD int64_t global_next_sample;
|
194
|
-
#endif //
|
218
|
+
#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
|
195
219
|
|
196
220
|
// Returns an RAII sampling handle that manages registration and unregistation
|
197
221
|
// with the global sampler.
|
@@ -16,33 +16,34 @@
|
|
16
16
|
#ifndef ABSL_CONTAINER_INTERNAL_HAVE_SSE_H_
|
17
17
|
#define ABSL_CONTAINER_INTERNAL_HAVE_SSE_H_
|
18
18
|
|
19
|
-
#ifndef
|
19
|
+
#ifndef ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
|
20
20
|
#if defined(__SSE2__) || \
|
21
21
|
(defined(_MSC_VER) && \
|
22
22
|
(defined(_M_X64) || (defined(_M_IX86) && _M_IX86_FP >= 2)))
|
23
|
-
#define
|
23
|
+
#define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 1
|
24
24
|
#else
|
25
|
-
#define
|
25
|
+
#define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2 0
|
26
26
|
#endif
|
27
27
|
#endif
|
28
28
|
|
29
|
-
#ifndef
|
29
|
+
#ifndef ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3
|
30
30
|
#ifdef __SSSE3__
|
31
|
-
#define
|
31
|
+
#define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 1
|
32
32
|
#else
|
33
|
-
#define
|
33
|
+
#define ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 0
|
34
34
|
#endif
|
35
35
|
#endif
|
36
36
|
|
37
|
-
#if
|
37
|
+
#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3 && \
|
38
|
+
!ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
|
38
39
|
#error "Bad configuration!"
|
39
40
|
#endif
|
40
41
|
|
41
|
-
#if
|
42
|
+
#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
|
42
43
|
#include <emmintrin.h>
|
43
44
|
#endif
|
44
45
|
|
45
|
-
#if
|
46
|
+
#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3
|
46
47
|
#include <tmmintrin.h>
|
47
48
|
#endif
|
48
49
|
|
@@ -163,6 +163,7 @@
|
|
163
163
|
#include <assert.h>
|
164
164
|
#include <stddef.h>
|
165
165
|
#include <stdint.h>
|
166
|
+
|
166
167
|
#include <ostream>
|
167
168
|
#include <string>
|
168
169
|
#include <tuple>
|
@@ -170,15 +171,16 @@
|
|
170
171
|
#include <typeinfo>
|
171
172
|
#include <utility>
|
172
173
|
|
173
|
-
#
|
174
|
-
#include <sanitizer/asan_interface.h>
|
175
|
-
#endif
|
176
|
-
|
174
|
+
#include "absl/base/config.h"
|
177
175
|
#include "absl/meta/type_traits.h"
|
178
176
|
#include "absl/strings/str_cat.h"
|
179
177
|
#include "absl/types/span.h"
|
180
178
|
#include "absl/utility/utility.h"
|
181
179
|
|
180
|
+
#ifdef ABSL_HAVE_ADDRESS_SANITIZER
|
181
|
+
#include <sanitizer/asan_interface.h>
|
182
|
+
#endif
|
183
|
+
|
182
184
|
#if defined(__GXX_RTTI)
|
183
185
|
#define ABSL_INTERNAL_HAS_CXA_DEMANGLE
|
184
186
|
#endif
|
@@ -614,7 +616,7 @@ class LayoutImpl<std::tuple<Elements...>, absl::index_sequence<SizeSeq...>,
|
|
614
616
|
void PoisonPadding(const Char* p) const {
|
615
617
|
static_assert(N < NumOffsets, "Index out of bounds");
|
616
618
|
(void)p;
|
617
|
-
#ifdef
|
619
|
+
#ifdef ABSL_HAVE_ADDRESS_SANITIZER
|
618
620
|
PoisonPadding<Char, N - 1>(p);
|
619
621
|
// The `if` is an optimization. It doesn't affect the observable behaviour.
|
620
622
|
if (ElementAlignment<N - 1>::value % ElementAlignment<N>::value) {
|
@@ -104,6 +104,7 @@
|
|
104
104
|
|
105
105
|
#include "absl/base/internal/bits.h"
|
106
106
|
#include "absl/base/internal/endian.h"
|
107
|
+
#include "absl/base/optimization.h"
|
107
108
|
#include "absl/base/port.h"
|
108
109
|
#include "absl/container/internal/common.h"
|
109
110
|
#include "absl/container/internal/compressed_tuple.h"
|
@@ -121,6 +122,16 @@ namespace absl {
|
|
121
122
|
ABSL_NAMESPACE_BEGIN
|
122
123
|
namespace container_internal {
|
123
124
|
|
125
|
+
template <typename AllocType>
|
126
|
+
void SwapAlloc(AllocType& lhs, AllocType& rhs,
|
127
|
+
std::true_type /* propagate_on_container_swap */) {
|
128
|
+
using std::swap;
|
129
|
+
swap(lhs, rhs);
|
130
|
+
}
|
131
|
+
template <typename AllocType>
|
132
|
+
void SwapAlloc(AllocType& /*lhs*/, AllocType& /*rhs*/,
|
133
|
+
std::false_type /* propagate_on_container_swap */) {}
|
134
|
+
|
124
135
|
template <size_t Width>
|
125
136
|
class probe_seq {
|
126
137
|
public:
|
@@ -168,10 +179,14 @@ struct IsDecomposable<
|
|
168
179
|
|
169
180
|
// TODO(alkis): Switch to std::is_nothrow_swappable when gcc/clang supports it.
|
170
181
|
template <class T>
|
171
|
-
constexpr bool IsNoThrowSwappable() {
|
182
|
+
constexpr bool IsNoThrowSwappable(std::true_type = {} /* is_swappable */) {
|
172
183
|
using std::swap;
|
173
184
|
return noexcept(swap(std::declval<T&>(), std::declval<T&>()));
|
174
185
|
}
|
186
|
+
template <class T>
|
187
|
+
constexpr bool IsNoThrowSwappable(std::false_type /* is_swappable */) {
|
188
|
+
return false;
|
189
|
+
}
|
175
190
|
|
176
191
|
template <typename T>
|
177
192
|
int TrailingZeros(T x) {
|
@@ -312,7 +327,7 @@ inline bool IsFull(ctrl_t c) { return c >= 0; }
|
|
312
327
|
inline bool IsDeleted(ctrl_t c) { return c == kDeleted; }
|
313
328
|
inline bool IsEmptyOrDeleted(ctrl_t c) { return c < kSentinel; }
|
314
329
|
|
315
|
-
#if
|
330
|
+
#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
|
316
331
|
|
317
332
|
// https://github.com/abseil/abseil-cpp/issues/209
|
318
333
|
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87853
|
@@ -346,7 +361,7 @@ struct GroupSse2Impl {
|
|
346
361
|
|
347
362
|
// Returns a bitmask representing the positions of empty slots.
|
348
363
|
BitMask<uint32_t, kWidth> MatchEmpty() const {
|
349
|
-
#if
|
364
|
+
#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3
|
350
365
|
// This only works because kEmpty is -128.
|
351
366
|
return BitMask<uint32_t, kWidth>(
|
352
367
|
_mm_movemask_epi8(_mm_sign_epi8(ctrl, ctrl)));
|
@@ -372,7 +387,7 @@ struct GroupSse2Impl {
|
|
372
387
|
void ConvertSpecialToEmptyAndFullToDeleted(ctrl_t* dst) const {
|
373
388
|
auto msbs = _mm_set1_epi8(static_cast<char>(-128));
|
374
389
|
auto x126 = _mm_set1_epi8(126);
|
375
|
-
#if
|
390
|
+
#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSSE3
|
376
391
|
auto res = _mm_or_si128(_mm_shuffle_epi8(x126, ctrl), msbs);
|
377
392
|
#else
|
378
393
|
auto zero = _mm_setzero_si128();
|
@@ -384,7 +399,7 @@ struct GroupSse2Impl {
|
|
384
399
|
|
385
400
|
__m128i ctrl;
|
386
401
|
};
|
387
|
-
#endif //
|
402
|
+
#endif // ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
|
388
403
|
|
389
404
|
struct GroupPortableImpl {
|
390
405
|
static constexpr size_t kWidth = 8;
|
@@ -438,7 +453,7 @@ struct GroupPortableImpl {
|
|
438
453
|
uint64_t ctrl;
|
439
454
|
};
|
440
455
|
|
441
|
-
#if
|
456
|
+
#if ABSL_INTERNAL_RAW_HASH_SET_HAVE_SSE2
|
442
457
|
using Group = GroupSse2Impl;
|
443
458
|
#else
|
444
459
|
using Group = GroupPortableImpl;
|
@@ -496,6 +511,18 @@ inline size_t GrowthToLowerboundCapacity(size_t growth) {
|
|
496
511
|
return growth + static_cast<size_t>((static_cast<int64_t>(growth) - 1) / 7);
|
497
512
|
}
|
498
513
|
|
514
|
+
inline void AssertIsFull(ctrl_t* ctrl) {
|
515
|
+
ABSL_HARDENING_ASSERT((ctrl != nullptr && IsFull(*ctrl)) &&
|
516
|
+
"Invalid operation on iterator. The element might have "
|
517
|
+
"been erased, or the table might have rehashed.");
|
518
|
+
}
|
519
|
+
|
520
|
+
inline void AssertIsValid(ctrl_t* ctrl) {
|
521
|
+
ABSL_HARDENING_ASSERT((ctrl == nullptr || IsFull(*ctrl)) &&
|
522
|
+
"Invalid operation on iterator. The element might have "
|
523
|
+
"been erased, or the table might have rehashed.");
|
524
|
+
}
|
525
|
+
|
499
526
|
// Policy: a policy defines how to perform different operations on
|
500
527
|
// the slots of the hashtable (see hash_policy_traits.h for the full interface
|
501
528
|
// of policy).
|
@@ -510,7 +537,8 @@ inline size_t GrowthToLowerboundCapacity(size_t growth) {
|
|
510
537
|
// if they are equal, false if they are not. If two keys compare equal, then
|
511
538
|
// their hash values as defined by Hash MUST be equal.
|
512
539
|
//
|
513
|
-
// Allocator: an Allocator
|
540
|
+
// Allocator: an Allocator
|
541
|
+
// [https://en.cppreference.com/w/cpp/named_req/Allocator] with which
|
514
542
|
// the storage of the hashtable will be allocated and the elements will be
|
515
543
|
// constructed and destroyed.
|
516
544
|
template <class Policy, class Hash, class Eq, class Alloc>
|
@@ -616,7 +644,7 @@ class raw_hash_set {
|
|
616
644
|
|
617
645
|
// PRECONDITION: not an end() iterator.
|
618
646
|
reference operator*() const {
|
619
|
-
|
647
|
+
AssertIsFull(ctrl_);
|
620
648
|
return PolicyTraits::element(slot_);
|
621
649
|
}
|
622
650
|
|
@@ -625,7 +653,7 @@ class raw_hash_set {
|
|
625
653
|
|
626
654
|
// PRECONDITION: not an end() iterator.
|
627
655
|
iterator& operator++() {
|
628
|
-
|
656
|
+
AssertIsFull(ctrl_);
|
629
657
|
++ctrl_;
|
630
658
|
++slot_;
|
631
659
|
skip_empty_or_deleted();
|
@@ -639,8 +667,8 @@ class raw_hash_set {
|
|
639
667
|
}
|
640
668
|
|
641
669
|
friend bool operator==(const iterator& a, const iterator& b) {
|
642
|
-
a.
|
643
|
-
b.
|
670
|
+
AssertIsValid(a.ctrl_);
|
671
|
+
AssertIsValid(b.ctrl_);
|
644
672
|
return a.ctrl_ == b.ctrl_;
|
645
673
|
}
|
646
674
|
friend bool operator!=(const iterator& a, const iterator& b) {
|
@@ -648,24 +676,19 @@ class raw_hash_set {
|
|
648
676
|
}
|
649
677
|
|
650
678
|
private:
|
651
|
-
iterator(ctrl_t* ctrl) : ctrl_(ctrl)
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
void assert_is_valid() const {
|
656
|
-
assert(!ctrl_ || IsFull(*ctrl_) || *ctrl_ == kSentinel);
|
679
|
+
iterator(ctrl_t* ctrl, slot_type* slot) : ctrl_(ctrl), slot_(slot) {
|
680
|
+
// This assumption helps the compiler know that any non-end iterator is
|
681
|
+
// not equal to any end iterator.
|
682
|
+
ABSL_INTERNAL_ASSUME(ctrl != nullptr);
|
657
683
|
}
|
658
684
|
|
659
685
|
void skip_empty_or_deleted() {
|
660
686
|
while (IsEmptyOrDeleted(*ctrl_)) {
|
661
|
-
// ctrl is not necessarily aligned to Group::kWidth. It is also likely
|
662
|
-
// to read past the space for ctrl bytes and into slots. This is ok
|
663
|
-
// because ctrl has sizeof() == 1 and slot has sizeof() >= 1 so there
|
664
|
-
// is no way to read outside the combined slot array.
|
665
687
|
uint32_t shift = Group{ctrl_}.CountLeadingEmptyOrDeleted();
|
666
688
|
ctrl_ += shift;
|
667
689
|
slot_ += shift;
|
668
690
|
}
|
691
|
+
if (ABSL_PREDICT_FALSE(*ctrl_ == kSentinel)) ctrl_ = nullptr;
|
669
692
|
}
|
670
693
|
|
671
694
|
ctrl_t* ctrl_ = nullptr;
|
@@ -907,12 +930,12 @@ class raw_hash_set {
|
|
907
930
|
it.skip_empty_or_deleted();
|
908
931
|
return it;
|
909
932
|
}
|
910
|
-
iterator end() { return {
|
933
|
+
iterator end() { return {}; }
|
911
934
|
|
912
935
|
const_iterator begin() const {
|
913
936
|
return const_cast<raw_hash_set*>(this)->begin();
|
914
937
|
}
|
915
|
-
const_iterator end() const { return
|
938
|
+
const_iterator end() const { return {}; }
|
916
939
|
const_iterator cbegin() const { return begin(); }
|
917
940
|
const_iterator cend() const { return end(); }
|
918
941
|
|
@@ -1171,7 +1194,7 @@ class raw_hash_set {
|
|
1171
1194
|
// This overload is necessary because otherwise erase<K>(const K&) would be
|
1172
1195
|
// a better match if non-const iterator is passed as an argument.
|
1173
1196
|
void erase(iterator it) {
|
1174
|
-
it.
|
1197
|
+
AssertIsFull(it.ctrl_);
|
1175
1198
|
PolicyTraits::destroy(&alloc_ref(), it.slot_);
|
1176
1199
|
erase_meta_only(it);
|
1177
1200
|
}
|
@@ -1205,7 +1228,7 @@ class raw_hash_set {
|
|
1205
1228
|
}
|
1206
1229
|
|
1207
1230
|
node_type extract(const_iterator position) {
|
1208
|
-
position.inner_.
|
1231
|
+
AssertIsFull(position.inner_.ctrl_);
|
1209
1232
|
auto node =
|
1210
1233
|
CommonAccess::Transfer<node_type>(alloc_ref(), position.inner_.slot_);
|
1211
1234
|
erase_meta_only(position);
|
@@ -1222,8 +1245,8 @@ class raw_hash_set {
|
|
1222
1245
|
|
1223
1246
|
void swap(raw_hash_set& that) noexcept(
|
1224
1247
|
IsNoThrowSwappable<hasher>() && IsNoThrowSwappable<key_equal>() &&
|
1225
|
-
(
|
1226
|
-
|
1248
|
+
IsNoThrowSwappable<allocator_type>(
|
1249
|
+
typename AllocTraits::propagate_on_container_swap{})) {
|
1227
1250
|
using std::swap;
|
1228
1251
|
swap(ctrl_, that.ctrl_);
|
1229
1252
|
swap(slots_, that.slots_);
|
@@ -1233,12 +1256,8 @@ class raw_hash_set {
|
|
1233
1256
|
swap(hash_ref(), that.hash_ref());
|
1234
1257
|
swap(eq_ref(), that.eq_ref());
|
1235
1258
|
swap(infoz_, that.infoz_);
|
1236
|
-
|
1237
|
-
|
1238
|
-
} else {
|
1239
|
-
// If the allocators do not compare equal it is officially undefined
|
1240
|
-
// behavior. We choose to do nothing.
|
1241
|
-
}
|
1259
|
+
SwapAlloc(alloc_ref(), that.alloc_ref(),
|
1260
|
+
typename AllocTraits::propagate_on_container_swap{});
|
1242
1261
|
}
|
1243
1262
|
|
1244
1263
|
void rehash(size_t n) {
|
@@ -1308,6 +1327,7 @@ class raw_hash_set {
|
|
1308
1327
|
}
|
1309
1328
|
if (ABSL_PREDICT_TRUE(g.MatchEmpty())) return end();
|
1310
1329
|
seq.next();
|
1330
|
+
assert(seq.index() < capacity_ && "full table!");
|
1311
1331
|
}
|
1312
1332
|
}
|
1313
1333
|
template <class K = key_type>
|
@@ -1659,8 +1679,8 @@ class raw_hash_set {
|
|
1659
1679
|
#endif
|
1660
1680
|
return {seq.offset(mask.LowestBitSet()), seq.index()};
|
1661
1681
|
}
|
1662
|
-
assert(seq.index() < capacity_ && "full table!");
|
1663
1682
|
seq.next();
|
1683
|
+
assert(seq.index() < capacity_ && "full table!");
|
1664
1684
|
}
|
1665
1685
|
}
|
1666
1686
|
|
@@ -1691,6 +1711,7 @@ class raw_hash_set {
|
|
1691
1711
|
}
|
1692
1712
|
if (ABSL_PREDICT_TRUE(g.MatchEmpty())) break;
|
1693
1713
|
seq.next();
|
1714
|
+
assert(seq.index() < capacity_ && "full table!");
|
1694
1715
|
}
|
1695
1716
|
return {prepare_insert(hash), true};
|
1696
1717
|
}
|