grpc 1.42.0 → 1.43.1
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 +85 -34
- data/include/grpc/event_engine/event_engine.h +37 -13
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
- data/include/grpc/event_engine/memory_allocator.h +27 -11
- data/include/grpc/event_engine/memory_request.h +57 -0
- data/include/grpc/grpc_security.h +276 -145
- data/include/grpc/grpc_security_constants.h +1 -14
- data/include/grpc/impl/codegen/port_platform.h +7 -3
- data/src/core/ext/filters/client_channel/backend_metric.cc +6 -7
- data/src/core/ext/filters/client_channel/backend_metric.h +3 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +81 -40
- data/src/core/ext/filters/client_channel/client_channel.h +5 -4
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +4 -4
- data/src/core/ext/filters/client_channel/health/health_check_client.h +1 -1
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +12 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +27 -80
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +82 -34
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +47 -91
- data/src/core/ext/filters/client_channel/lb_policy.h +75 -59
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +8 -12
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +6 -12
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +222 -294
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -7
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -2
- data/src/core/ext/filters/client_channel/subchannel.cc +4 -4
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -30
- data/src/core/ext/filters/http/http_filters_plugin.cc +3 -5
- data/src/core/ext/filters/http/server/http_server_filter.cc +11 -28
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +70 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +265 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +32 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -20
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +8 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +11 -14
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +6 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +54 -79
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +9 -13
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +53 -62
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -2
- data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +83 -19
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +33 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +66 -92
- data/src/core/ext/transport/chttp2/transport/internal.h +8 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +16 -7
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +197 -165
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +18 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +26 -2
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +107 -82
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +188 -160
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +35 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +253 -218
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +36 -25
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +56 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +162 -128
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +51 -36
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +114 -90
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +89 -71
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +117 -93
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +13 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +18 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +22 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +41 -27
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +59 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +58 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +73 -57
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +81 -64
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +25 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +19 -7
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +63 -45
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +66 -47
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +93 -75
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +41 -28
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +503 -440
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +26 -13
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +13 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +35 -20
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +44 -31
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +22 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +210 -181
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +5 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +64 -48
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +33 -20
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +81 -65
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +75 -58
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +61 -46
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +26 -12
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +22 -10
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +27 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +20 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +30 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +38 -21
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +41 -26
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +17 -5
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +22 -9
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +20 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +7 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +116 -93
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.c +102 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.h +306 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c +56 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.h +135 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +122 -98
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c +115 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.h +371 -0
- data/src/core/ext/upb-generated/google/api/http.upb.c +35 -22
- data/src/core/ext/upb-generated/google/api/http.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +247 -210
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +12 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +37 -23
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +37 -18
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +2 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +17 -6
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +26 -14
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +105 -83
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +20 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +16 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +65 -47
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -36
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +26 -13
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +2 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +67 -7
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +27 -3
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +19 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +27 -3
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +26 -2
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +320 -251
- data/src/core/ext/upb-generated/validate/validate.upb.h +20 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +54 -9
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +17 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +13 -2
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +24 -12
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +19 -7
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +18 -7
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +27 -15
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +18 -7
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +28 -15
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +16 -5
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +2 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +2 -49
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +2 -35
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +2 -41
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +2 -55
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +2 -53
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +2 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +2 -21
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +2 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +2 -21
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +2 -23
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +2 -111
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +2 -43
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +2 -59
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +2 -23
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +2 -51
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +2 -7
- data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_api.cc +409 -304
- data/src/core/ext/xds/xds_api.h +3 -1
- data/src/core/ext/xds/xds_bootstrap.cc +6 -3
- data/src/core/ext/xds/xds_certificate_provider.h +1 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +3 -4
- data/src/core/ext/xds/xds_client.cc +395 -291
- data/src/core/ext/xds/xds_client.h +47 -38
- data/src/core/ext/xds/xds_routing.cc +247 -0
- data/src/core/ext/xds/xds_routing.h +98 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +975 -261
- data/src/core/lib/avl/avl.h +389 -88
- data/src/core/lib/backoff/backoff.cc +2 -2
- data/src/core/lib/channel/channel_args.cc +17 -17
- data/src/core/lib/channel/channel_args.h +11 -10
- data/src/core/lib/channel/channel_args_preconditioning.cc +47 -0
- data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
- data/src/core/lib/channel/channel_stack_builder.cc +0 -2
- data/src/core/lib/channel/channel_trace.cc +6 -6
- data/src/core/lib/channel/channelz.cc +1 -1
- data/src/core/lib/compression/compression_args.cc +7 -5
- data/src/core/lib/compression/compression_args.h +6 -4
- data/src/core/lib/config/core_configuration.cc +3 -1
- data/src/core/lib/config/core_configuration.h +11 -0
- data/src/core/lib/debug/trace.h +2 -2
- data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
- data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
- data/src/core/lib/event_engine/event_engine.cc +0 -13
- data/src/core/lib/event_engine/event_engine_factory.cc +49 -0
- data/src/core/lib/event_engine/event_engine_factory.h +33 -0
- data/src/core/lib/event_engine/memory_allocator.cc +70 -0
- data/src/core/lib/gpr/tls.h +6 -0
- data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
- data/src/core/lib/gprpp/global_config_env.cc +7 -7
- data/src/core/lib/gprpp/global_config_env.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +2 -3
- data/src/core/lib/gprpp/orphanable.h +1 -1
- data/src/core/lib/gprpp/ref_counted.h +1 -1
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
- data/src/core/lib/gprpp/status_helper.h +1 -1
- data/src/core/lib/gprpp/table.h +13 -1
- data/src/core/lib/http/httpcli.cc +30 -26
- data/src/core/lib/http/httpcli.h +14 -12
- data/src/core/lib/iomgr/buffer_list.cc +9 -9
- data/src/core/lib/iomgr/buffer_list.h +13 -13
- data/src/core/lib/iomgr/call_combiner.cc +2 -3
- data/src/core/lib/iomgr/endpoint.h +0 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -24
- data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
- data/src/core/lib/iomgr/event_engine/endpoint.cc +2 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +5 -25
- data/src/core/lib/iomgr/event_engine/resolver.cc +3 -2
- data/src/core/lib/iomgr/event_engine/tcp.cc +7 -5
- data/src/core/lib/iomgr/event_engine/timer.cc +4 -3
- data/src/core/lib/iomgr/exec_ctx.h +11 -11
- data/src/core/lib/iomgr/executor.cc +12 -15
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +2 -4
- data/src/core/lib/iomgr/tcp_client.h +1 -3
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -9
- data/src/core/lib/iomgr/tcp_client_custom.cc +4 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +7 -23
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +1 -10
- data/src/core/lib/iomgr/tcp_custom.cc +9 -36
- data/src/core/lib/iomgr/tcp_custom.h +0 -1
- data/src/core/lib/iomgr/tcp_posix.cc +28 -33
- data/src/core/lib/iomgr/tcp_posix.h +1 -3
- data/src/core/lib/iomgr/tcp_server.cc +4 -6
- data/src/core/lib/iomgr/tcp_server.h +6 -8
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -15
- data/src/core/lib/iomgr/tcp_server_posix.cc +18 -22
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
- data/src/core/lib/iomgr/tcp_server_windows.cc +5 -12
- data/src/core/lib/iomgr/tcp_windows.cc +2 -7
- data/src/core/lib/iomgr/tcp_windows.h +1 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +1 -1
- data/src/core/lib/iomgr/work_serializer.cc +115 -44
- data/src/core/lib/iomgr/work_serializer.h +16 -4
- data/src/core/lib/json/json_reader.cc +83 -35
- data/src/core/lib/json/json_util.cc +1 -1
- data/src/core/lib/promise/activity.cc +115 -0
- data/src/core/lib/promise/activity.h +499 -0
- data/src/core/lib/promise/context.h +86 -0
- data/src/core/lib/promise/detail/basic_seq.h +407 -0
- data/src/core/lib/promise/detail/promise_factory.h +189 -0
- data/src/core/lib/promise/detail/promise_like.h +85 -0
- data/src/core/lib/promise/detail/status.h +44 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
- data/src/core/lib/promise/loop.h +108 -0
- data/src/core/lib/promise/map.h +88 -0
- data/src/core/lib/promise/poll.h +60 -0
- data/src/core/lib/promise/race.h +84 -0
- data/src/core/lib/promise/seq.h +71 -0
- data/src/core/lib/resource_quota/api.cc +108 -0
- data/src/core/lib/resource_quota/api.h +41 -0
- data/src/core/lib/resource_quota/memory_quota.cc +454 -0
- data/src/core/lib/resource_quota/memory_quota.h +421 -0
- data/src/core/lib/resource_quota/resource_quota.cc +33 -0
- data/src/core/lib/resource_quota/resource_quota.h +58 -0
- data/src/core/lib/resource_quota/thread_quota.cc +43 -0
- data/src/core/lib/resource_quota/thread_quota.h +57 -0
- data/src/core/lib/resource_quota/trace.cc +19 -0
- data/src/core/lib/resource_quota/trace.h +24 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +13 -19
- data/src/core/lib/security/authorization/evaluate_args.h +2 -1
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +3 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +11 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -10
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +3 -4
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +4 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -22
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +11 -90
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +19 -82
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +28 -33
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +3 -4
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +7 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +10 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +344 -195
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +64 -41
- data/src/core/lib/security/transport/security_handshaker.cc +2 -2
- data/src/core/lib/slice/percent_encoding.cc +30 -86
- data/src/core/lib/slice/percent_encoding.h +5 -11
- data/src/core/lib/slice/slice.cc +7 -7
- data/src/core/lib/slice/slice.h +341 -0
- data/src/core/lib/slice/slice_buffer.cc +4 -0
- data/src/core/lib/slice/slice_intern.cc +1 -1
- data/src/core/lib/slice/slice_refcount.h +5 -1
- data/src/core/lib/slice/slice_refcount_base.h +19 -11
- data/src/core/lib/slice/static_slice.cc +331 -483
- data/src/core/lib/slice/static_slice.h +101 -132
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +85 -59
- data/src/core/lib/surface/channel.cc +4 -29
- data/src/core/lib/surface/channel.h +2 -12
- data/src/core/lib/surface/completion_queue.cc +2 -2
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +24 -17
- data/src/core/lib/surface/server.cc +22 -22
- data/src/core/lib/surface/server.h +8 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/byte_stream.cc +4 -0
- data/src/core/lib/transport/metadata.h +4 -4
- data/src/core/lib/transport/metadata_batch.cc +5 -0
- data/src/core/lib/transport/metadata_batch.h +174 -99
- data/src/core/lib/transport/parsed_metadata.cc +35 -0
- data/src/core/lib/transport/parsed_metadata.h +180 -61
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +529 -614
- data/src/core/lib/transport/static_metadata.h +0 -18
- data/src/core/lib/transport/transport.cc +4 -26
- data/src/core/lib/transport/transport.h +0 -1
- data/src/core/lib/transport/transport_op_string.cc +1 -1
- data/src/core/lib/uri/uri_parser.cc +19 -19
- data/src/core/lib/uri/uri_parser.h +2 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/local_transport_security.cc +15 -15
- data/src/core/tsi/ssl_transport_security.cc +30 -1
- data/src/core/tsi/ssl_transport_security.h +1 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -10
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +9 -15
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
- data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
- data/third_party/abseil-cpp/absl/base/config.h +67 -37
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
- data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
- data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
- data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
- data/third_party/abseil-cpp/absl/status/status.cc +9 -17
- data/third_party/abseil-cpp/absl/status/status.h +19 -15
- data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
- data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
- data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
- data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
- data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
- data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
- data/third_party/abseil-cpp/absl/time/time.h +67 -36
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
- data/third_party/abseil-cpp/absl/types/span.h +3 -3
- data/third_party/boringssl-with-bazel/err_data.c +681 -677
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +17 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +3 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +6 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
- data/third_party/upb/upb/decode.c +309 -178
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/decode_internal.h +1 -0
- data/third_party/upb/upb/def.c +330 -85
- data/third_party/upb/upb/def.h +45 -14
- data/third_party/upb/upb/def.hpp +17 -4
- data/third_party/upb/upb/encode.c +100 -40
- data/third_party/upb/upb/msg.c +22 -9
- data/third_party/upb/upb/msg_internal.h +90 -8
- data/third_party/upb/upb/reflection.c +98 -58
- data/third_party/upb/upb/reflection.h +6 -2
- data/third_party/upb/upb/text_encode.c +3 -3
- data/third_party/upb/upb/upb.c +8 -0
- metadata +116 -56
- data/src/core/lib/avl/avl.cc +0 -306
- data/src/core/lib/gprpp/match.h +0 -73
- data/src/core/lib/gprpp/overload.h +0 -59
- data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
- data/src/core/lib/iomgr/resource_quota.cc +0 -1106
- data/src/core/lib/iomgr/resource_quota.h +0 -226
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
@@ -21,8 +21,11 @@
|
|
21
21
|
#include <iterator>
|
22
22
|
#include <limits>
|
23
23
|
#include <memory>
|
24
|
+
#include <new>
|
25
|
+
#include <type_traits>
|
24
26
|
#include <utility>
|
25
27
|
|
28
|
+
#include "absl/base/attributes.h"
|
26
29
|
#include "absl/base/macros.h"
|
27
30
|
#include "absl/container/internal/compressed_tuple.h"
|
28
31
|
#include "absl/memory/memory.h"
|
@@ -36,116 +39,132 @@ namespace inlined_vector_internal {
|
|
36
39
|
// GCC does not deal very well with the below code
|
37
40
|
#if !defined(__clang__) && defined(__GNUC__)
|
38
41
|
#pragma GCC diagnostic push
|
42
|
+
#pragma GCC diagnostic ignored "-Warray-bounds"
|
39
43
|
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
40
44
|
#endif
|
41
45
|
|
46
|
+
template <typename A>
|
47
|
+
using AllocatorTraits = std::allocator_traits<A>;
|
48
|
+
template <typename A>
|
49
|
+
using ValueType = typename AllocatorTraits<A>::value_type;
|
50
|
+
template <typename A>
|
51
|
+
using SizeType = typename AllocatorTraits<A>::size_type;
|
52
|
+
template <typename A>
|
53
|
+
using Pointer = typename AllocatorTraits<A>::pointer;
|
54
|
+
template <typename A>
|
55
|
+
using ConstPointer = typename AllocatorTraits<A>::const_pointer;
|
56
|
+
template <typename A>
|
57
|
+
using SizeType = typename AllocatorTraits<A>::size_type;
|
58
|
+
template <typename A>
|
59
|
+
using DifferenceType = typename AllocatorTraits<A>::difference_type;
|
60
|
+
template <typename A>
|
61
|
+
using Reference = ValueType<A>&;
|
62
|
+
template <typename A>
|
63
|
+
using ConstReference = const ValueType<A>&;
|
64
|
+
template <typename A>
|
65
|
+
using Iterator = Pointer<A>;
|
66
|
+
template <typename A>
|
67
|
+
using ConstIterator = ConstPointer<A>;
|
68
|
+
template <typename A>
|
69
|
+
using ReverseIterator = typename std::reverse_iterator<Iterator<A>>;
|
70
|
+
template <typename A>
|
71
|
+
using ConstReverseIterator = typename std::reverse_iterator<ConstIterator<A>>;
|
72
|
+
template <typename A>
|
73
|
+
using MoveIterator = typename std::move_iterator<Iterator<A>>;
|
74
|
+
|
42
75
|
template <typename Iterator>
|
43
76
|
using IsAtLeastForwardIterator = std::is_convertible<
|
44
77
|
typename std::iterator_traits<Iterator>::iterator_category,
|
45
78
|
std::forward_iterator_tag>;
|
46
79
|
|
47
|
-
template <typename
|
48
|
-
typename ValueType =
|
49
|
-
typename absl::allocator_traits<AllocatorType>::value_type>
|
80
|
+
template <typename A>
|
50
81
|
using IsMemcpyOk =
|
51
|
-
absl::conjunction<std::is_same<
|
52
|
-
absl::is_trivially_copy_constructible<ValueType
|
53
|
-
absl::is_trivially_copy_assignable<ValueType
|
54
|
-
absl::is_trivially_destructible<ValueType
|
82
|
+
absl::conjunction<std::is_same<A, std::allocator<ValueType<A>>>,
|
83
|
+
absl::is_trivially_copy_constructible<ValueType<A>>,
|
84
|
+
absl::is_trivially_copy_assignable<ValueType<A>>,
|
85
|
+
absl::is_trivially_destructible<ValueType<A>>>;
|
86
|
+
|
87
|
+
template <typename T>
|
88
|
+
struct TypeIdentity {
|
89
|
+
using type = T;
|
90
|
+
};
|
55
91
|
|
56
|
-
template
|
57
|
-
|
58
|
-
|
59
|
-
|
92
|
+
// Used for function arguments in template functions to prevent ADL by forcing
|
93
|
+
// callers to explicitly specify the template parameter.
|
94
|
+
template <typename T>
|
95
|
+
using NoTypeDeduction = typename TypeIdentity<T>::type;
|
60
96
|
|
97
|
+
template <typename A>
|
98
|
+
void DestroyElements(NoTypeDeduction<A>& allocator, Pointer<A> destroy_first,
|
99
|
+
SizeType<A> destroy_size) {
|
61
100
|
if (destroy_first != nullptr) {
|
62
|
-
for (
|
101
|
+
for (SizeType<A> i = destroy_size; i != 0;) {
|
63
102
|
--i;
|
64
|
-
AllocatorTraits
|
65
|
-
}
|
66
|
-
|
67
|
-
#if !defined(NDEBUG)
|
68
|
-
{
|
69
|
-
using ValueType = typename AllocatorTraits::value_type;
|
70
|
-
|
71
|
-
// Overwrite unused memory with `0xab` so we can catch uninitialized
|
72
|
-
// usage.
|
73
|
-
//
|
74
|
-
// Cast to `void*` to tell the compiler that we don't care that we might
|
75
|
-
// be scribbling on a vtable pointer.
|
76
|
-
void* memory_ptr = destroy_first;
|
77
|
-
auto memory_size = destroy_size * sizeof(ValueType);
|
78
|
-
std::memset(memory_ptr, 0xab, memory_size);
|
103
|
+
AllocatorTraits<A>::destroy(allocator, destroy_first + i);
|
79
104
|
}
|
80
|
-
#endif // !defined(NDEBUG)
|
81
105
|
}
|
82
106
|
}
|
83
107
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
108
|
+
template <typename A>
|
109
|
+
struct Allocation {
|
110
|
+
Pointer<A> data;
|
111
|
+
SizeType<A> capacity;
|
112
|
+
};
|
89
113
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
114
|
+
template <typename A,
|
115
|
+
bool IsOverAligned =
|
116
|
+
(alignof(ValueType<A>) > ABSL_INTERNAL_DEFAULT_NEW_ALIGNMENT)>
|
117
|
+
struct MallocAdapter {
|
118
|
+
static Allocation<A> Allocate(A& allocator, SizeType<A> requested_capacity) {
|
119
|
+
return {AllocatorTraits<A>::allocate(allocator, requested_capacity),
|
120
|
+
requested_capacity};
|
121
|
+
}
|
95
122
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
123
|
+
static void Deallocate(A& allocator, Pointer<A> pointer,
|
124
|
+
SizeType<A> capacity) {
|
125
|
+
AllocatorTraits<A>::deallocate(allocator, pointer, capacity);
|
126
|
+
}
|
127
|
+
};
|
100
128
|
|
101
|
-
template <typename
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
for (SizeType i = 0; i < construct_size; ++i) {
|
106
|
-
ABSL_INTERNAL_TRY {
|
107
|
-
values_ptr->ConstructNext(alloc_ptr, construct_first + i);
|
108
|
-
}
|
129
|
+
template <typename A, typename ValueAdapter>
|
130
|
+
void ConstructElements(NoTypeDeduction<A>& allocator,
|
131
|
+
Pointer<A> construct_first, ValueAdapter& values,
|
132
|
+
SizeType<A> construct_size) {
|
133
|
+
for (SizeType<A> i = 0; i < construct_size; ++i) {
|
134
|
+
ABSL_INTERNAL_TRY { values.ConstructNext(allocator, construct_first + i); }
|
109
135
|
ABSL_INTERNAL_CATCH_ANY {
|
110
|
-
|
136
|
+
DestroyElements<A>(allocator, construct_first, i);
|
111
137
|
ABSL_INTERNAL_RETHROW;
|
112
138
|
}
|
113
139
|
}
|
114
140
|
}
|
115
141
|
|
116
|
-
template <typename
|
117
|
-
void AssignElements(Pointer assign_first, ValueAdapter
|
118
|
-
SizeType assign_size) {
|
119
|
-
for (SizeType i = 0; i < assign_size; ++i) {
|
120
|
-
|
142
|
+
template <typename A, typename ValueAdapter>
|
143
|
+
void AssignElements(Pointer<A> assign_first, ValueAdapter& values,
|
144
|
+
SizeType<A> assign_size) {
|
145
|
+
for (SizeType<A> i = 0; i < assign_size; ++i) {
|
146
|
+
values.AssignNext(assign_first + i);
|
121
147
|
}
|
122
148
|
}
|
123
149
|
|
124
|
-
template <typename
|
150
|
+
template <typename A>
|
125
151
|
struct StorageView {
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
Pointer data;
|
131
|
-
SizeType size;
|
132
|
-
SizeType capacity;
|
152
|
+
Pointer<A> data;
|
153
|
+
SizeType<A> size;
|
154
|
+
SizeType<A> capacity;
|
133
155
|
};
|
134
156
|
|
135
|
-
template <typename
|
157
|
+
template <typename A, typename Iterator>
|
136
158
|
class IteratorValueAdapter {
|
137
|
-
using AllocatorTraits = absl::allocator_traits<AllocatorType>;
|
138
|
-
using Pointer = typename AllocatorTraits::pointer;
|
139
|
-
|
140
159
|
public:
|
141
160
|
explicit IteratorValueAdapter(const Iterator& it) : it_(it) {}
|
142
161
|
|
143
|
-
void ConstructNext(
|
144
|
-
AllocatorTraits
|
162
|
+
void ConstructNext(A& allocator, Pointer<A> construct_at) {
|
163
|
+
AllocatorTraits<A>::construct(allocator, construct_at, *it_);
|
145
164
|
++it_;
|
146
165
|
}
|
147
166
|
|
148
|
-
void AssignNext(Pointer assign_at) {
|
167
|
+
void AssignNext(Pointer<A> assign_at) {
|
149
168
|
*assign_at = *it_;
|
150
169
|
++it_;
|
151
170
|
}
|
@@ -154,166 +173,123 @@ class IteratorValueAdapter {
|
|
154
173
|
Iterator it_;
|
155
174
|
};
|
156
175
|
|
157
|
-
template <typename
|
176
|
+
template <typename A>
|
158
177
|
class CopyValueAdapter {
|
159
|
-
using AllocatorTraits = absl::allocator_traits<AllocatorType>;
|
160
|
-
using ValueType = typename AllocatorTraits::value_type;
|
161
|
-
using Pointer = typename AllocatorTraits::pointer;
|
162
|
-
using ConstPointer = typename AllocatorTraits::const_pointer;
|
163
|
-
|
164
178
|
public:
|
165
|
-
explicit CopyValueAdapter(
|
179
|
+
explicit CopyValueAdapter(ConstPointer<A> p) : ptr_(p) {}
|
166
180
|
|
167
|
-
void ConstructNext(
|
168
|
-
AllocatorTraits
|
181
|
+
void ConstructNext(A& allocator, Pointer<A> construct_at) {
|
182
|
+
AllocatorTraits<A>::construct(allocator, construct_at, *ptr_);
|
169
183
|
}
|
170
184
|
|
171
|
-
void AssignNext(Pointer assign_at) { *assign_at = *ptr_; }
|
185
|
+
void AssignNext(Pointer<A> assign_at) { *assign_at = *ptr_; }
|
172
186
|
|
173
187
|
private:
|
174
|
-
ConstPointer ptr_;
|
188
|
+
ConstPointer<A> ptr_;
|
175
189
|
};
|
176
190
|
|
177
|
-
template <typename
|
191
|
+
template <typename A>
|
178
192
|
class DefaultValueAdapter {
|
179
|
-
using AllocatorTraits = absl::allocator_traits<AllocatorType>;
|
180
|
-
using ValueType = typename AllocatorTraits::value_type;
|
181
|
-
using Pointer = typename AllocatorTraits::pointer;
|
182
|
-
|
183
193
|
public:
|
184
194
|
explicit DefaultValueAdapter() {}
|
185
195
|
|
186
|
-
void ConstructNext(
|
187
|
-
AllocatorTraits
|
196
|
+
void ConstructNext(A& allocator, Pointer<A> construct_at) {
|
197
|
+
AllocatorTraits<A>::construct(allocator, construct_at);
|
188
198
|
}
|
189
199
|
|
190
|
-
void AssignNext(Pointer assign_at) { *assign_at = ValueType(); }
|
200
|
+
void AssignNext(Pointer<A> assign_at) { *assign_at = ValueType<A>(); }
|
191
201
|
};
|
192
202
|
|
193
|
-
template <typename
|
203
|
+
template <typename A>
|
194
204
|
class AllocationTransaction {
|
195
|
-
using AllocatorTraits = absl::allocator_traits<AllocatorType>;
|
196
|
-
using Pointer = typename AllocatorTraits::pointer;
|
197
|
-
using SizeType = typename AllocatorTraits::size_type;
|
198
|
-
|
199
205
|
public:
|
200
|
-
explicit AllocationTransaction(
|
201
|
-
:
|
206
|
+
explicit AllocationTransaction(A& allocator)
|
207
|
+
: allocator_data_(allocator, nullptr), capacity_(0) {}
|
202
208
|
|
203
209
|
~AllocationTransaction() {
|
204
210
|
if (DidAllocate()) {
|
205
|
-
|
211
|
+
MallocAdapter<A>::Deallocate(GetAllocator(), GetData(), GetCapacity());
|
206
212
|
}
|
207
213
|
}
|
208
214
|
|
209
215
|
AllocationTransaction(const AllocationTransaction&) = delete;
|
210
216
|
void operator=(const AllocationTransaction&) = delete;
|
211
217
|
|
212
|
-
|
213
|
-
Pointer
|
214
|
-
SizeType
|
218
|
+
A& GetAllocator() { return allocator_data_.template get<0>(); }
|
219
|
+
Pointer<A>& GetData() { return allocator_data_.template get<1>(); }
|
220
|
+
SizeType<A>& GetCapacity() { return capacity_; }
|
215
221
|
|
216
222
|
bool DidAllocate() { return GetData() != nullptr; }
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
223
|
+
|
224
|
+
Pointer<A> Allocate(SizeType<A> requested_capacity) {
|
225
|
+
Allocation<A> result =
|
226
|
+
MallocAdapter<A>::Allocate(GetAllocator(), requested_capacity);
|
227
|
+
GetData() = result.data;
|
228
|
+
GetCapacity() = result.capacity;
|
229
|
+
return result.data;
|
230
|
+
}
|
231
|
+
|
232
|
+
ABSL_MUST_USE_RESULT Allocation<A> Release() && {
|
233
|
+
Allocation<A> result = {GetData(), GetCapacity()};
|
234
|
+
Reset();
|
235
|
+
return result;
|
221
236
|
}
|
222
237
|
|
238
|
+
private:
|
223
239
|
void Reset() {
|
224
240
|
GetData() = nullptr;
|
225
241
|
GetCapacity() = 0;
|
226
242
|
}
|
227
243
|
|
228
|
-
|
229
|
-
|
230
|
-
SizeType capacity_ = 0;
|
244
|
+
container_internal::CompressedTuple<A, Pointer<A>> allocator_data_;
|
245
|
+
SizeType<A> capacity_;
|
231
246
|
};
|
232
247
|
|
233
|
-
template <typename
|
248
|
+
template <typename A>
|
234
249
|
class ConstructionTransaction {
|
235
|
-
using AllocatorTraits = absl::allocator_traits<AllocatorType>;
|
236
|
-
using Pointer = typename AllocatorTraits::pointer;
|
237
|
-
using SizeType = typename AllocatorTraits::size_type;
|
238
|
-
|
239
250
|
public:
|
240
|
-
explicit ConstructionTransaction(
|
241
|
-
:
|
251
|
+
explicit ConstructionTransaction(A& allocator)
|
252
|
+
: allocator_data_(allocator, nullptr), size_(0) {}
|
242
253
|
|
243
254
|
~ConstructionTransaction() {
|
244
255
|
if (DidConstruct()) {
|
245
|
-
|
246
|
-
GetData(), GetSize());
|
256
|
+
DestroyElements<A>(GetAllocator(), GetData(), GetSize());
|
247
257
|
}
|
248
258
|
}
|
249
259
|
|
250
260
|
ConstructionTransaction(const ConstructionTransaction&) = delete;
|
251
261
|
void operator=(const ConstructionTransaction&) = delete;
|
252
262
|
|
253
|
-
|
254
|
-
Pointer
|
255
|
-
SizeType
|
263
|
+
A& GetAllocator() { return allocator_data_.template get<0>(); }
|
264
|
+
Pointer<A>& GetData() { return allocator_data_.template get<1>(); }
|
265
|
+
SizeType<A>& GetSize() { return size_; }
|
256
266
|
|
257
267
|
bool DidConstruct() { return GetData() != nullptr; }
|
258
268
|
template <typename ValueAdapter>
|
259
|
-
void Construct(Pointer data, ValueAdapter
|
260
|
-
|
261
|
-
data, values_ptr, size);
|
269
|
+
void Construct(Pointer<A> data, ValueAdapter& values, SizeType<A> size) {
|
270
|
+
ConstructElements<A>(GetAllocator(), data, values, size);
|
262
271
|
GetData() = data;
|
263
272
|
GetSize() = size;
|
264
273
|
}
|
265
|
-
void Commit() {
|
274
|
+
void Commit() && {
|
266
275
|
GetData() = nullptr;
|
267
276
|
GetSize() = 0;
|
268
277
|
}
|
269
278
|
|
270
279
|
private:
|
271
|
-
container_internal::CompressedTuple<
|
272
|
-
SizeType size_
|
280
|
+
container_internal::CompressedTuple<A, Pointer<A>> allocator_data_;
|
281
|
+
SizeType<A> size_;
|
273
282
|
};
|
274
283
|
|
275
284
|
template <typename T, size_t N, typename A>
|
276
285
|
class Storage {
|
277
286
|
public:
|
278
|
-
|
279
|
-
using allocator_type = typename AllocatorTraits::allocator_type;
|
280
|
-
using value_type = typename AllocatorTraits::value_type;
|
281
|
-
using pointer = typename AllocatorTraits::pointer;
|
282
|
-
using const_pointer = typename AllocatorTraits::const_pointer;
|
283
|
-
using size_type = typename AllocatorTraits::size_type;
|
284
|
-
using difference_type = typename AllocatorTraits::difference_type;
|
285
|
-
|
286
|
-
using reference = value_type&;
|
287
|
-
using const_reference = const value_type&;
|
288
|
-
using RValueReference = value_type&&;
|
289
|
-
using iterator = pointer;
|
290
|
-
using const_iterator = const_pointer;
|
291
|
-
using reverse_iterator = std::reverse_iterator<iterator>;
|
292
|
-
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
|
293
|
-
using MoveIterator = std::move_iterator<iterator>;
|
294
|
-
using IsMemcpyOk = inlined_vector_internal::IsMemcpyOk<allocator_type>;
|
295
|
-
|
296
|
-
using StorageView = inlined_vector_internal::StorageView<allocator_type>;
|
297
|
-
|
298
|
-
template <typename Iterator>
|
299
|
-
using IteratorValueAdapter =
|
300
|
-
inlined_vector_internal::IteratorValueAdapter<allocator_type, Iterator>;
|
301
|
-
using CopyValueAdapter =
|
302
|
-
inlined_vector_internal::CopyValueAdapter<allocator_type>;
|
303
|
-
using DefaultValueAdapter =
|
304
|
-
inlined_vector_internal::DefaultValueAdapter<allocator_type>;
|
305
|
-
|
306
|
-
using AllocationTransaction =
|
307
|
-
inlined_vector_internal::AllocationTransaction<allocator_type>;
|
308
|
-
using ConstructionTransaction =
|
309
|
-
inlined_vector_internal::ConstructionTransaction<allocator_type>;
|
310
|
-
|
311
|
-
static size_type NextCapacity(size_type current_capacity) {
|
287
|
+
static SizeType<A> NextCapacity(SizeType<A> current_capacity) {
|
312
288
|
return current_capacity * 2;
|
313
289
|
}
|
314
290
|
|
315
|
-
static
|
316
|
-
|
291
|
+
static SizeType<A> ComputeCapacity(SizeType<A> current_capacity,
|
292
|
+
SizeType<A> requested_capacity) {
|
317
293
|
return (std::max)(NextCapacity(current_capacity), requested_capacity);
|
318
294
|
}
|
319
295
|
|
@@ -321,15 +297,15 @@ class Storage {
|
|
321
297
|
// Storage Constructors and Destructor
|
322
298
|
// ---------------------------------------------------------------------------
|
323
299
|
|
324
|
-
Storage() : metadata_(
|
300
|
+
Storage() : metadata_(A(), /* size and is_allocated */ 0) {}
|
325
301
|
|
326
|
-
explicit Storage(const
|
327
|
-
: metadata_(
|
302
|
+
explicit Storage(const A& allocator)
|
303
|
+
: metadata_(allocator, /* size and is_allocated */ 0) {}
|
328
304
|
|
329
305
|
~Storage() {
|
330
306
|
if (GetSizeAndIsAllocated() == 0) {
|
331
307
|
// Empty and not allocated; nothing to do.
|
332
|
-
} else if (IsMemcpyOk
|
308
|
+
} else if (IsMemcpyOk<A>::value) {
|
333
309
|
// No destructors need to be run; just deallocate if necessary.
|
334
310
|
DeallocateIfAllocated();
|
335
311
|
} else {
|
@@ -341,52 +317,48 @@ class Storage {
|
|
341
317
|
// Storage Member Accessors
|
342
318
|
// ---------------------------------------------------------------------------
|
343
319
|
|
344
|
-
|
320
|
+
SizeType<A>& GetSizeAndIsAllocated() { return metadata_.template get<1>(); }
|
345
321
|
|
346
|
-
const
|
322
|
+
const SizeType<A>& GetSizeAndIsAllocated() const {
|
347
323
|
return metadata_.template get<1>();
|
348
324
|
}
|
349
325
|
|
350
|
-
|
326
|
+
SizeType<A> GetSize() const { return GetSizeAndIsAllocated() >> 1; }
|
351
327
|
|
352
328
|
bool GetIsAllocated() const { return GetSizeAndIsAllocated() & 1; }
|
353
329
|
|
354
|
-
|
330
|
+
Pointer<A> GetAllocatedData() { return data_.allocated.allocated_data; }
|
355
331
|
|
356
|
-
|
332
|
+
ConstPointer<A> GetAllocatedData() const {
|
357
333
|
return data_.allocated.allocated_data;
|
358
334
|
}
|
359
335
|
|
360
|
-
|
361
|
-
return reinterpret_cast<
|
336
|
+
Pointer<A> GetInlinedData() {
|
337
|
+
return reinterpret_cast<Pointer<A>>(
|
362
338
|
std::addressof(data_.inlined.inlined_data[0]));
|
363
339
|
}
|
364
340
|
|
365
|
-
|
366
|
-
return reinterpret_cast<
|
341
|
+
ConstPointer<A> GetInlinedData() const {
|
342
|
+
return reinterpret_cast<ConstPointer<A>>(
|
367
343
|
std::addressof(data_.inlined.inlined_data[0]));
|
368
344
|
}
|
369
345
|
|
370
|
-
|
346
|
+
SizeType<A> GetAllocatedCapacity() const {
|
371
347
|
return data_.allocated.allocated_capacity;
|
372
348
|
}
|
373
349
|
|
374
|
-
|
350
|
+
SizeType<A> GetInlinedCapacity() const { return static_cast<SizeType<A>>(N); }
|
375
351
|
|
376
|
-
StorageView MakeStorageView() {
|
377
|
-
return GetIsAllocated()
|
378
|
-
|
379
|
-
|
380
|
-
|
352
|
+
StorageView<A> MakeStorageView() {
|
353
|
+
return GetIsAllocated() ? StorageView<A>{GetAllocatedData(), GetSize(),
|
354
|
+
GetAllocatedCapacity()}
|
355
|
+
: StorageView<A>{GetInlinedData(), GetSize(),
|
356
|
+
GetInlinedCapacity()};
|
381
357
|
}
|
382
358
|
|
383
|
-
|
384
|
-
return std::addressof(metadata_.template get<0>());
|
385
|
-
}
|
359
|
+
A& GetAllocator() { return metadata_.template get<0>(); }
|
386
360
|
|
387
|
-
const
|
388
|
-
return std::addressof(metadata_.template get<0>());
|
389
|
-
}
|
361
|
+
const A& GetAllocator() const { return metadata_.template get<0>(); }
|
390
362
|
|
391
363
|
// ---------------------------------------------------------------------------
|
392
364
|
// Storage Member Mutators
|
@@ -395,74 +367,67 @@ class Storage {
|
|
395
367
|
ABSL_ATTRIBUTE_NOINLINE void InitFrom(const Storage& other);
|
396
368
|
|
397
369
|
template <typename ValueAdapter>
|
398
|
-
void Initialize(ValueAdapter values,
|
370
|
+
void Initialize(ValueAdapter values, SizeType<A> new_size);
|
399
371
|
|
400
372
|
template <typename ValueAdapter>
|
401
|
-
void Assign(ValueAdapter values,
|
373
|
+
void Assign(ValueAdapter values, SizeType<A> new_size);
|
402
374
|
|
403
375
|
template <typename ValueAdapter>
|
404
|
-
void Resize(ValueAdapter values,
|
376
|
+
void Resize(ValueAdapter values, SizeType<A> new_size);
|
405
377
|
|
406
378
|
template <typename ValueAdapter>
|
407
|
-
|
408
|
-
|
379
|
+
Iterator<A> Insert(ConstIterator<A> pos, ValueAdapter values,
|
380
|
+
SizeType<A> insert_count);
|
409
381
|
|
410
382
|
template <typename... Args>
|
411
|
-
|
383
|
+
Reference<A> EmplaceBack(Args&&... args);
|
412
384
|
|
413
|
-
|
385
|
+
Iterator<A> Erase(ConstIterator<A> from, ConstIterator<A> to);
|
414
386
|
|
415
|
-
void Reserve(
|
387
|
+
void Reserve(SizeType<A> requested_capacity);
|
416
388
|
|
417
389
|
void ShrinkToFit();
|
418
390
|
|
419
391
|
void Swap(Storage* other_storage_ptr);
|
420
392
|
|
421
393
|
void SetIsAllocated() {
|
422
|
-
GetSizeAndIsAllocated() |= static_cast<
|
394
|
+
GetSizeAndIsAllocated() |= static_cast<SizeType<A>>(1);
|
423
395
|
}
|
424
396
|
|
425
397
|
void UnsetIsAllocated() {
|
426
|
-
GetSizeAndIsAllocated() &= ((std::numeric_limits<
|
398
|
+
GetSizeAndIsAllocated() &= ((std::numeric_limits<SizeType<A>>::max)() - 1);
|
427
399
|
}
|
428
400
|
|
429
|
-
void SetSize(
|
401
|
+
void SetSize(SizeType<A> size) {
|
430
402
|
GetSizeAndIsAllocated() =
|
431
|
-
(size << 1) | static_cast<
|
403
|
+
(size << 1) | static_cast<SizeType<A>>(GetIsAllocated());
|
432
404
|
}
|
433
405
|
|
434
|
-
void SetAllocatedSize(
|
435
|
-
GetSizeAndIsAllocated() = (size << 1) | static_cast<
|
406
|
+
void SetAllocatedSize(SizeType<A> size) {
|
407
|
+
GetSizeAndIsAllocated() = (size << 1) | static_cast<SizeType<A>>(1);
|
436
408
|
}
|
437
409
|
|
438
|
-
void SetInlinedSize(
|
439
|
-
GetSizeAndIsAllocated() = size << static_cast<
|
410
|
+
void SetInlinedSize(SizeType<A> size) {
|
411
|
+
GetSizeAndIsAllocated() = size << static_cast<SizeType<A>>(1);
|
440
412
|
}
|
441
413
|
|
442
|
-
void AddSize(
|
443
|
-
GetSizeAndIsAllocated() += count << static_cast<
|
414
|
+
void AddSize(SizeType<A> count) {
|
415
|
+
GetSizeAndIsAllocated() += count << static_cast<SizeType<A>>(1);
|
444
416
|
}
|
445
417
|
|
446
|
-
void SubtractSize(
|
418
|
+
void SubtractSize(SizeType<A> count) {
|
447
419
|
assert(count <= GetSize());
|
448
420
|
|
449
|
-
GetSizeAndIsAllocated() -= count << static_cast<
|
450
|
-
}
|
451
|
-
|
452
|
-
void SetAllocatedData(pointer data, size_type capacity) {
|
453
|
-
data_.allocated.allocated_data = data;
|
454
|
-
data_.allocated.allocated_capacity = capacity;
|
421
|
+
GetSizeAndIsAllocated() -= count << static_cast<SizeType<A>>(1);
|
455
422
|
}
|
456
423
|
|
457
|
-
void
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
allocation_tx_ptr->Reset();
|
424
|
+
void SetAllocation(Allocation<A> allocation) {
|
425
|
+
data_.allocated.allocated_data = allocation.data;
|
426
|
+
data_.allocated.allocated_capacity = allocation.capacity;
|
462
427
|
}
|
463
428
|
|
464
429
|
void MemcpyFrom(const Storage& other_storage) {
|
465
|
-
assert(IsMemcpyOk
|
430
|
+
assert(IsMemcpyOk<A>::value || other_storage.GetIsAllocated());
|
466
431
|
|
467
432
|
GetSizeAndIsAllocated() = other_storage.GetSizeAndIsAllocated();
|
468
433
|
data_ = other_storage.data_;
|
@@ -470,24 +435,23 @@ class Storage {
|
|
470
435
|
|
471
436
|
void DeallocateIfAllocated() {
|
472
437
|
if (GetIsAllocated()) {
|
473
|
-
|
474
|
-
|
438
|
+
MallocAdapter<A>::Deallocate(GetAllocator(), GetAllocatedData(),
|
439
|
+
GetAllocatedCapacity());
|
475
440
|
}
|
476
441
|
}
|
477
442
|
|
478
443
|
private:
|
479
444
|
ABSL_ATTRIBUTE_NOINLINE void DestroyContents();
|
480
445
|
|
481
|
-
using Metadata =
|
482
|
-
container_internal::CompressedTuple<allocator_type, size_type>;
|
446
|
+
using Metadata = container_internal::CompressedTuple<A, SizeType<A>>;
|
483
447
|
|
484
448
|
struct Allocated {
|
485
|
-
|
486
|
-
|
449
|
+
Pointer<A> allocated_data;
|
450
|
+
SizeType<A> allocated_capacity;
|
487
451
|
};
|
488
452
|
|
489
453
|
struct Inlined {
|
490
|
-
alignas(
|
454
|
+
alignas(ValueType<A>) char inlined_data[sizeof(ValueType<A>[N])];
|
491
455
|
};
|
492
456
|
|
493
457
|
union Data {
|
@@ -496,7 +460,7 @@ class Storage {
|
|
496
460
|
};
|
497
461
|
|
498
462
|
template <typename... Args>
|
499
|
-
ABSL_ATTRIBUTE_NOINLINE
|
463
|
+
ABSL_ATTRIBUTE_NOINLINE Reference<A> EmplaceBackSlow(Args&&... args);
|
500
464
|
|
501
465
|
Metadata metadata_;
|
502
466
|
Data data_;
|
@@ -504,17 +468,17 @@ class Storage {
|
|
504
468
|
|
505
469
|
template <typename T, size_t N, typename A>
|
506
470
|
void Storage<T, N, A>::DestroyContents() {
|
507
|
-
|
508
|
-
|
471
|
+
Pointer<A> data = GetIsAllocated() ? GetAllocatedData() : GetInlinedData();
|
472
|
+
DestroyElements<A>(GetAllocator(), data, GetSize());
|
509
473
|
DeallocateIfAllocated();
|
510
474
|
}
|
511
475
|
|
512
476
|
template <typename T, size_t N, typename A>
|
513
477
|
void Storage<T, N, A>::InitFrom(const Storage& other) {
|
514
|
-
const
|
478
|
+
const SizeType<A> n = other.GetSize();
|
515
479
|
assert(n > 0); // Empty sources handled handled in caller.
|
516
|
-
|
517
|
-
|
480
|
+
ConstPointer<A> src;
|
481
|
+
Pointer<A> dst;
|
518
482
|
if (!other.GetIsAllocated()) {
|
519
483
|
dst = GetInlinedData();
|
520
484
|
src = other.GetInlinedData();
|
@@ -522,43 +486,48 @@ void Storage<T, N, A>::InitFrom(const Storage& other) {
|
|
522
486
|
// Because this is only called from the `InlinedVector` constructors, it's
|
523
487
|
// safe to take on the allocation with size `0`. If `ConstructElements(...)`
|
524
488
|
// throws, deallocation will be automatically handled by `~Storage()`.
|
525
|
-
|
526
|
-
|
527
|
-
|
489
|
+
SizeType<A> requested_capacity = ComputeCapacity(GetInlinedCapacity(), n);
|
490
|
+
Allocation<A> allocation =
|
491
|
+
MallocAdapter<A>::Allocate(GetAllocator(), requested_capacity);
|
492
|
+
SetAllocation(allocation);
|
493
|
+
dst = allocation.data;
|
528
494
|
src = other.GetAllocatedData();
|
529
495
|
}
|
530
|
-
if (IsMemcpyOk
|
531
|
-
|
496
|
+
if (IsMemcpyOk<A>::value) {
|
497
|
+
std::memcpy(reinterpret_cast<char*>(dst),
|
498
|
+
reinterpret_cast<const char*>(src), n * sizeof(ValueType<A>));
|
532
499
|
} else {
|
533
|
-
auto values = IteratorValueAdapter<
|
534
|
-
|
500
|
+
auto values = IteratorValueAdapter<A, ConstPointer<A>>(src);
|
501
|
+
ConstructElements<A>(GetAllocator(), dst, values, n);
|
535
502
|
}
|
536
503
|
GetSizeAndIsAllocated() = other.GetSizeAndIsAllocated();
|
537
504
|
}
|
538
505
|
|
539
506
|
template <typename T, size_t N, typename A>
|
540
507
|
template <typename ValueAdapter>
|
541
|
-
auto Storage<T, N, A>::Initialize(ValueAdapter values,
|
508
|
+
auto Storage<T, N, A>::Initialize(ValueAdapter values, SizeType<A> new_size)
|
542
509
|
-> void {
|
543
510
|
// Only callable from constructors!
|
544
511
|
assert(!GetIsAllocated());
|
545
512
|
assert(GetSize() == 0);
|
546
513
|
|
547
|
-
|
514
|
+
Pointer<A> construct_data;
|
548
515
|
if (new_size > GetInlinedCapacity()) {
|
549
516
|
// Because this is only called from the `InlinedVector` constructors, it's
|
550
517
|
// safe to take on the allocation with size `0`. If `ConstructElements(...)`
|
551
518
|
// throws, deallocation will be automatically handled by `~Storage()`.
|
552
|
-
|
553
|
-
|
554
|
-
|
519
|
+
SizeType<A> requested_capacity =
|
520
|
+
ComputeCapacity(GetInlinedCapacity(), new_size);
|
521
|
+
Allocation<A> allocation =
|
522
|
+
MallocAdapter<A>::Allocate(GetAllocator(), requested_capacity);
|
523
|
+
construct_data = allocation.data;
|
524
|
+
SetAllocation(allocation);
|
555
525
|
SetIsAllocated();
|
556
526
|
} else {
|
557
527
|
construct_data = GetInlinedData();
|
558
528
|
}
|
559
529
|
|
560
|
-
|
561
|
-
&values, new_size);
|
530
|
+
ConstructElements<A>(GetAllocator(), construct_data, values, new_size);
|
562
531
|
|
563
532
|
// Since the initial size was guaranteed to be `0` and the allocated bit is
|
564
533
|
// already correct for either case, *adding* `new_size` gives us the correct
|
@@ -568,18 +537,20 @@ auto Storage<T, N, A>::Initialize(ValueAdapter values, size_type new_size)
|
|
568
537
|
|
569
538
|
template <typename T, size_t N, typename A>
|
570
539
|
template <typename ValueAdapter>
|
571
|
-
auto Storage<T, N, A>::Assign(ValueAdapter values,
|
572
|
-
|
540
|
+
auto Storage<T, N, A>::Assign(ValueAdapter values, SizeType<A> new_size)
|
541
|
+
-> void {
|
542
|
+
StorageView<A> storage_view = MakeStorageView();
|
573
543
|
|
574
|
-
AllocationTransaction allocation_tx(
|
544
|
+
AllocationTransaction<A> allocation_tx(GetAllocator());
|
575
545
|
|
576
|
-
absl::Span<
|
577
|
-
absl::Span<
|
578
|
-
absl::Span<
|
546
|
+
absl::Span<ValueType<A>> assign_loop;
|
547
|
+
absl::Span<ValueType<A>> construct_loop;
|
548
|
+
absl::Span<ValueType<A>> destroy_loop;
|
579
549
|
|
580
550
|
if (new_size > storage_view.capacity) {
|
581
|
-
|
582
|
-
|
551
|
+
SizeType<A> requested_capacity =
|
552
|
+
ComputeCapacity(storage_view.capacity, new_size);
|
553
|
+
construct_loop = {allocation_tx.Allocate(requested_capacity), new_size};
|
583
554
|
destroy_loop = {storage_view.data, storage_view.size};
|
584
555
|
} else if (new_size > storage_view.size) {
|
585
556
|
assign_loop = {storage_view.data, storage_view.size};
|
@@ -590,18 +561,16 @@ auto Storage<T, N, A>::Assign(ValueAdapter values, size_type new_size) -> void {
|
|
590
561
|
destroy_loop = {storage_view.data + new_size, storage_view.size - new_size};
|
591
562
|
}
|
592
563
|
|
593
|
-
|
594
|
-
assign_loop.size());
|
564
|
+
AssignElements<A>(assign_loop.data(), values, assign_loop.size());
|
595
565
|
|
596
|
-
|
597
|
-
|
566
|
+
ConstructElements<A>(GetAllocator(), construct_loop.data(), values,
|
567
|
+
construct_loop.size());
|
598
568
|
|
599
|
-
|
600
|
-
destroy_loop.size());
|
569
|
+
DestroyElements<A>(GetAllocator(), destroy_loop.data(), destroy_loop.size());
|
601
570
|
|
602
571
|
if (allocation_tx.DidAllocate()) {
|
603
572
|
DeallocateIfAllocated();
|
604
|
-
|
573
|
+
SetAllocation(std::move(allocation_tx).Release());
|
605
574
|
SetIsAllocated();
|
606
575
|
}
|
607
576
|
|
@@ -610,19 +579,18 @@ auto Storage<T, N, A>::Assign(ValueAdapter values, size_type new_size) -> void {
|
|
610
579
|
|
611
580
|
template <typename T, size_t N, typename A>
|
612
581
|
template <typename ValueAdapter>
|
613
|
-
auto Storage<T, N, A>::Resize(ValueAdapter values,
|
614
|
-
|
615
|
-
|
616
|
-
const
|
617
|
-
|
582
|
+
auto Storage<T, N, A>::Resize(ValueAdapter values, SizeType<A> new_size)
|
583
|
+
-> void {
|
584
|
+
StorageView<A> storage_view = MakeStorageView();
|
585
|
+
Pointer<A> const base = storage_view.data;
|
586
|
+
const SizeType<A> size = storage_view.size;
|
587
|
+
A& alloc = GetAllocator();
|
618
588
|
if (new_size <= size) {
|
619
589
|
// Destroy extra old elements.
|
620
|
-
|
621
|
-
size - new_size);
|
590
|
+
DestroyElements<A>(alloc, base + new_size, size - new_size);
|
622
591
|
} else if (new_size <= storage_view.capacity) {
|
623
592
|
// Construct new elements in place.
|
624
|
-
|
625
|
-
new_size - size);
|
593
|
+
ConstructElements<A>(alloc, base + size, values, new_size - size);
|
626
594
|
} else {
|
627
595
|
// Steps:
|
628
596
|
// a. Allocate new backing store.
|
@@ -631,21 +599,22 @@ auto Storage<T, N, A>::Resize(ValueAdapter values, size_type new_size) -> void {
|
|
631
599
|
// d. Destroy all elements in old backing store.
|
632
600
|
// Use transactional wrappers for the first two steps so we can roll
|
633
601
|
// back if necessary due to exceptions.
|
634
|
-
AllocationTransaction allocation_tx(alloc);
|
635
|
-
|
636
|
-
|
602
|
+
AllocationTransaction<A> allocation_tx(alloc);
|
603
|
+
SizeType<A> requested_capacity =
|
604
|
+
ComputeCapacity(storage_view.capacity, new_size);
|
605
|
+
Pointer<A> new_data = allocation_tx.Allocate(requested_capacity);
|
637
606
|
|
638
|
-
ConstructionTransaction construction_tx(alloc);
|
639
|
-
construction_tx.Construct(new_data + size,
|
607
|
+
ConstructionTransaction<A> construction_tx(alloc);
|
608
|
+
construction_tx.Construct(new_data + size, values, new_size - size);
|
640
609
|
|
641
|
-
IteratorValueAdapter<MoveIterator
|
642
|
-
|
643
|
-
|
610
|
+
IteratorValueAdapter<A, MoveIterator<A>> move_values(
|
611
|
+
(MoveIterator<A>(base)));
|
612
|
+
ConstructElements<A>(alloc, new_data, move_values, size);
|
644
613
|
|
645
|
-
|
646
|
-
construction_tx.Commit();
|
614
|
+
DestroyElements<A>(alloc, base, size);
|
615
|
+
std::move(construction_tx).Commit();
|
647
616
|
DeallocateIfAllocated();
|
648
|
-
|
617
|
+
SetAllocation(std::move(allocation_tx).Release());
|
649
618
|
SetIsAllocated();
|
650
619
|
}
|
651
620
|
SetSize(new_size);
|
@@ -653,76 +622,76 @@ auto Storage<T, N, A>::Resize(ValueAdapter values, size_type new_size) -> void {
|
|
653
622
|
|
654
623
|
template <typename T, size_t N, typename A>
|
655
624
|
template <typename ValueAdapter>
|
656
|
-
auto Storage<T, N, A>::Insert(
|
657
|
-
|
658
|
-
StorageView storage_view = MakeStorageView();
|
625
|
+
auto Storage<T, N, A>::Insert(ConstIterator<A> pos, ValueAdapter values,
|
626
|
+
SizeType<A> insert_count) -> Iterator<A> {
|
627
|
+
StorageView<A> storage_view = MakeStorageView();
|
659
628
|
|
660
|
-
|
661
|
-
std::distance(
|
662
|
-
|
663
|
-
|
629
|
+
SizeType<A> insert_index =
|
630
|
+
std::distance(ConstIterator<A>(storage_view.data), pos);
|
631
|
+
SizeType<A> insert_end_index = insert_index + insert_count;
|
632
|
+
SizeType<A> new_size = storage_view.size + insert_count;
|
664
633
|
|
665
634
|
if (new_size > storage_view.capacity) {
|
666
|
-
AllocationTransaction allocation_tx(
|
667
|
-
ConstructionTransaction construction_tx(
|
668
|
-
ConstructionTransaction
|
635
|
+
AllocationTransaction<A> allocation_tx(GetAllocator());
|
636
|
+
ConstructionTransaction<A> construction_tx(GetAllocator());
|
637
|
+
ConstructionTransaction<A> move_construction_tx(GetAllocator());
|
669
638
|
|
670
|
-
IteratorValueAdapter<MoveIterator
|
671
|
-
MoveIterator(storage_view.data));
|
639
|
+
IteratorValueAdapter<A, MoveIterator<A>> move_values(
|
640
|
+
MoveIterator<A>(storage_view.data));
|
672
641
|
|
673
|
-
|
674
|
-
|
642
|
+
SizeType<A> requested_capacity =
|
643
|
+
ComputeCapacity(storage_view.capacity, new_size);
|
644
|
+
Pointer<A> new_data = allocation_tx.Allocate(requested_capacity);
|
675
645
|
|
676
|
-
construction_tx.Construct(new_data + insert_index,
|
646
|
+
construction_tx.Construct(new_data + insert_index, values, insert_count);
|
677
647
|
|
678
|
-
|
648
|
+
move_construction_tx.Construct(new_data, move_values, insert_index);
|
679
649
|
|
680
|
-
|
681
|
-
|
682
|
-
storage_view.size - insert_index);
|
650
|
+
ConstructElements<A>(GetAllocator(), new_data + insert_end_index,
|
651
|
+
move_values, storage_view.size - insert_index);
|
683
652
|
|
684
|
-
|
685
|
-
storage_view.size);
|
653
|
+
DestroyElements<A>(GetAllocator(), storage_view.data, storage_view.size);
|
686
654
|
|
687
|
-
construction_tx.Commit();
|
688
|
-
|
655
|
+
std::move(construction_tx).Commit();
|
656
|
+
std::move(move_construction_tx).Commit();
|
689
657
|
DeallocateIfAllocated();
|
690
|
-
|
658
|
+
SetAllocation(std::move(allocation_tx).Release());
|
691
659
|
|
692
660
|
SetAllocatedSize(new_size);
|
693
|
-
return
|
661
|
+
return Iterator<A>(new_data + insert_index);
|
694
662
|
} else {
|
695
|
-
|
663
|
+
SizeType<A> move_construction_destination_index =
|
696
664
|
(std::max)(insert_end_index, storage_view.size);
|
697
665
|
|
698
|
-
ConstructionTransaction move_construction_tx(
|
666
|
+
ConstructionTransaction<A> move_construction_tx(GetAllocator());
|
699
667
|
|
700
|
-
IteratorValueAdapter<MoveIterator
|
701
|
-
MoveIterator(storage_view.data +
|
702
|
-
|
703
|
-
absl::Span<
|
668
|
+
IteratorValueAdapter<A, MoveIterator<A>> move_construction_values(
|
669
|
+
MoveIterator<A>(storage_view.data +
|
670
|
+
(move_construction_destination_index - insert_count)));
|
671
|
+
absl::Span<ValueType<A>> move_construction = {
|
704
672
|
storage_view.data + move_construction_destination_index,
|
705
673
|
new_size - move_construction_destination_index};
|
706
674
|
|
707
|
-
|
708
|
-
absl::Span<
|
675
|
+
Pointer<A> move_assignment_values = storage_view.data + insert_index;
|
676
|
+
absl::Span<ValueType<A>> move_assignment = {
|
709
677
|
storage_view.data + insert_end_index,
|
710
678
|
move_construction_destination_index - insert_end_index};
|
711
679
|
|
712
|
-
absl::Span<
|
713
|
-
|
680
|
+
absl::Span<ValueType<A>> insert_assignment = {move_assignment_values,
|
681
|
+
move_construction.size()};
|
714
682
|
|
715
|
-
absl::Span<
|
683
|
+
absl::Span<ValueType<A>> insert_construction = {
|
716
684
|
insert_assignment.data() + insert_assignment.size(),
|
717
685
|
insert_count - insert_assignment.size()};
|
718
686
|
|
719
687
|
move_construction_tx.Construct(move_construction.data(),
|
720
|
-
|
688
|
+
move_construction_values,
|
721
689
|
move_construction.size());
|
722
690
|
|
723
|
-
for (
|
724
|
-
|
725
|
-
|
691
|
+
for (Pointer<A>
|
692
|
+
destination = move_assignment.data() + move_assignment.size(),
|
693
|
+
last_destination = move_assignment.data(),
|
694
|
+
source = move_assignment_values + move_assignment.size();
|
726
695
|
;) {
|
727
696
|
--destination;
|
728
697
|
--source;
|
@@ -730,30 +699,29 @@ auto Storage<T, N, A>::Insert(const_iterator pos, ValueAdapter values,
|
|
730
699
|
*destination = std::move(*source);
|
731
700
|
}
|
732
701
|
|
733
|
-
|
734
|
-
|
702
|
+
AssignElements<A>(insert_assignment.data(), values,
|
703
|
+
insert_assignment.size());
|
735
704
|
|
736
|
-
|
737
|
-
|
738
|
-
insert_construction.size());
|
705
|
+
ConstructElements<A>(GetAllocator(), insert_construction.data(), values,
|
706
|
+
insert_construction.size());
|
739
707
|
|
740
|
-
move_construction_tx.Commit();
|
708
|
+
std::move(move_construction_tx).Commit();
|
741
709
|
|
742
710
|
AddSize(insert_count);
|
743
|
-
return
|
711
|
+
return Iterator<A>(storage_view.data + insert_index);
|
744
712
|
}
|
745
713
|
}
|
746
714
|
|
747
715
|
template <typename T, size_t N, typename A>
|
748
716
|
template <typename... Args>
|
749
|
-
auto Storage<T, N, A>::EmplaceBack(Args&&... args) ->
|
750
|
-
StorageView storage_view = MakeStorageView();
|
751
|
-
const
|
717
|
+
auto Storage<T, N, A>::EmplaceBack(Args&&... args) -> Reference<A> {
|
718
|
+
StorageView<A> storage_view = MakeStorageView();
|
719
|
+
const SizeType<A> n = storage_view.size;
|
752
720
|
if (ABSL_PREDICT_TRUE(n != storage_view.capacity)) {
|
753
721
|
// Fast path; new element fits.
|
754
|
-
|
755
|
-
AllocatorTraits
|
756
|
-
|
722
|
+
Pointer<A> last_ptr = storage_view.data + n;
|
723
|
+
AllocatorTraits<A>::construct(GetAllocator(), last_ptr,
|
724
|
+
std::forward<Args>(args)...);
|
757
725
|
AddSize(1);
|
758
726
|
return *last_ptr;
|
759
727
|
}
|
@@ -763,87 +731,83 @@ auto Storage<T, N, A>::EmplaceBack(Args&&... args) -> reference {
|
|
763
731
|
|
764
732
|
template <typename T, size_t N, typename A>
|
765
733
|
template <typename... Args>
|
766
|
-
auto Storage<T, N, A>::EmplaceBackSlow(Args&&... args) ->
|
767
|
-
StorageView storage_view = MakeStorageView();
|
768
|
-
AllocationTransaction allocation_tx(
|
769
|
-
IteratorValueAdapter<MoveIterator
|
770
|
-
MoveIterator(storage_view.data));
|
771
|
-
|
772
|
-
|
773
|
-
|
734
|
+
auto Storage<T, N, A>::EmplaceBackSlow(Args&&... args) -> Reference<A> {
|
735
|
+
StorageView<A> storage_view = MakeStorageView();
|
736
|
+
AllocationTransaction<A> allocation_tx(GetAllocator());
|
737
|
+
IteratorValueAdapter<A, MoveIterator<A>> move_values(
|
738
|
+
MoveIterator<A>(storage_view.data));
|
739
|
+
SizeType<A> requested_capacity = NextCapacity(storage_view.capacity);
|
740
|
+
Pointer<A> construct_data = allocation_tx.Allocate(requested_capacity);
|
741
|
+
Pointer<A> last_ptr = construct_data + storage_view.size;
|
774
742
|
|
775
743
|
// Construct new element.
|
776
|
-
AllocatorTraits
|
777
|
-
|
744
|
+
AllocatorTraits<A>::construct(GetAllocator(), last_ptr,
|
745
|
+
std::forward<Args>(args)...);
|
778
746
|
// Move elements from old backing store to new backing store.
|
779
747
|
ABSL_INTERNAL_TRY {
|
780
|
-
|
781
|
-
|
782
|
-
storage_view.size);
|
748
|
+
ConstructElements<A>(GetAllocator(), allocation_tx.GetData(), move_values,
|
749
|
+
storage_view.size);
|
783
750
|
}
|
784
751
|
ABSL_INTERNAL_CATCH_ANY {
|
785
|
-
AllocatorTraits
|
752
|
+
AllocatorTraits<A>::destroy(GetAllocator(), last_ptr);
|
786
753
|
ABSL_INTERNAL_RETHROW;
|
787
754
|
}
|
788
755
|
// Destroy elements in old backing store.
|
789
|
-
|
790
|
-
storage_view.size);
|
756
|
+
DestroyElements<A>(GetAllocator(), storage_view.data, storage_view.size);
|
791
757
|
|
792
758
|
DeallocateIfAllocated();
|
793
|
-
|
759
|
+
SetAllocation(std::move(allocation_tx).Release());
|
794
760
|
SetIsAllocated();
|
795
761
|
AddSize(1);
|
796
762
|
return *last_ptr;
|
797
763
|
}
|
798
764
|
|
799
765
|
template <typename T, size_t N, typename A>
|
800
|
-
auto Storage<T, N, A>::Erase(
|
801
|
-
->
|
802
|
-
StorageView storage_view = MakeStorageView();
|
766
|
+
auto Storage<T, N, A>::Erase(ConstIterator<A> from, ConstIterator<A> to)
|
767
|
+
-> Iterator<A> {
|
768
|
+
StorageView<A> storage_view = MakeStorageView();
|
803
769
|
|
804
|
-
|
805
|
-
|
806
|
-
std::distance(
|
807
|
-
|
770
|
+
SizeType<A> erase_size = std::distance(from, to);
|
771
|
+
SizeType<A> erase_index =
|
772
|
+
std::distance(ConstIterator<A>(storage_view.data), from);
|
773
|
+
SizeType<A> erase_end_index = erase_index + erase_size;
|
808
774
|
|
809
|
-
IteratorValueAdapter<MoveIterator
|
810
|
-
MoveIterator(storage_view.data + erase_end_index));
|
775
|
+
IteratorValueAdapter<A, MoveIterator<A>> move_values(
|
776
|
+
MoveIterator<A>(storage_view.data + erase_end_index));
|
811
777
|
|
812
|
-
|
813
|
-
|
814
|
-
storage_view.size - erase_end_index);
|
778
|
+
AssignElements<A>(storage_view.data + erase_index, move_values,
|
779
|
+
storage_view.size - erase_end_index);
|
815
780
|
|
816
|
-
|
817
|
-
|
818
|
-
|
781
|
+
DestroyElements<A>(GetAllocator(),
|
782
|
+
storage_view.data + (storage_view.size - erase_size),
|
783
|
+
erase_size);
|
819
784
|
|
820
785
|
SubtractSize(erase_size);
|
821
|
-
return
|
786
|
+
return Iterator<A>(storage_view.data + erase_index);
|
822
787
|
}
|
823
788
|
|
824
789
|
template <typename T, size_t N, typename A>
|
825
|
-
auto Storage<T, N, A>::Reserve(
|
826
|
-
StorageView storage_view = MakeStorageView();
|
790
|
+
auto Storage<T, N, A>::Reserve(SizeType<A> requested_capacity) -> void {
|
791
|
+
StorageView<A> storage_view = MakeStorageView();
|
827
792
|
|
828
793
|
if (ABSL_PREDICT_FALSE(requested_capacity <= storage_view.capacity)) return;
|
829
794
|
|
830
|
-
AllocationTransaction allocation_tx(
|
795
|
+
AllocationTransaction<A> allocation_tx(GetAllocator());
|
831
796
|
|
832
|
-
IteratorValueAdapter<MoveIterator
|
833
|
-
MoveIterator(storage_view.data));
|
797
|
+
IteratorValueAdapter<A, MoveIterator<A>> move_values(
|
798
|
+
MoveIterator<A>(storage_view.data));
|
834
799
|
|
835
|
-
|
800
|
+
SizeType<A> new_requested_capacity =
|
836
801
|
ComputeCapacity(storage_view.capacity, requested_capacity);
|
837
|
-
|
802
|
+
Pointer<A> new_data = allocation_tx.Allocate(new_requested_capacity);
|
838
803
|
|
839
|
-
|
840
|
-
|
804
|
+
ConstructElements<A>(GetAllocator(), new_data, move_values,
|
805
|
+
storage_view.size);
|
841
806
|
|
842
|
-
|
843
|
-
storage_view.size);
|
807
|
+
DestroyElements<A>(GetAllocator(), storage_view.data, storage_view.size);
|
844
808
|
|
845
809
|
DeallocateIfAllocated();
|
846
|
-
|
810
|
+
SetAllocation(std::move(allocation_tx).Release());
|
847
811
|
SetIsAllocated();
|
848
812
|
}
|
849
813
|
|
@@ -852,41 +816,44 @@ auto Storage<T, N, A>::ShrinkToFit() -> void {
|
|
852
816
|
// May only be called on allocated instances!
|
853
817
|
assert(GetIsAllocated());
|
854
818
|
|
855
|
-
StorageView storage_view{GetAllocatedData(), GetSize(),
|
856
|
-
|
819
|
+
StorageView<A> storage_view{GetAllocatedData(), GetSize(),
|
820
|
+
GetAllocatedCapacity()};
|
857
821
|
|
858
822
|
if (ABSL_PREDICT_FALSE(storage_view.size == storage_view.capacity)) return;
|
859
823
|
|
860
|
-
AllocationTransaction allocation_tx(
|
824
|
+
AllocationTransaction<A> allocation_tx(GetAllocator());
|
861
825
|
|
862
|
-
IteratorValueAdapter<MoveIterator
|
863
|
-
MoveIterator(storage_view.data));
|
826
|
+
IteratorValueAdapter<A, MoveIterator<A>> move_values(
|
827
|
+
MoveIterator<A>(storage_view.data));
|
864
828
|
|
865
|
-
|
829
|
+
Pointer<A> construct_data;
|
866
830
|
if (storage_view.size > GetInlinedCapacity()) {
|
867
|
-
|
868
|
-
construct_data = allocation_tx.Allocate(
|
831
|
+
SizeType<A> requested_capacity = storage_view.size;
|
832
|
+
construct_data = allocation_tx.Allocate(requested_capacity);
|
833
|
+
if (allocation_tx.GetCapacity() >= storage_view.capacity) {
|
834
|
+
// Already using the smallest available heap allocation.
|
835
|
+
return;
|
836
|
+
}
|
869
837
|
} else {
|
870
838
|
construct_data = GetInlinedData();
|
871
839
|
}
|
872
840
|
|
873
841
|
ABSL_INTERNAL_TRY {
|
874
|
-
|
875
|
-
|
842
|
+
ConstructElements<A>(GetAllocator(), construct_data, move_values,
|
843
|
+
storage_view.size);
|
876
844
|
}
|
877
845
|
ABSL_INTERNAL_CATCH_ANY {
|
878
|
-
|
846
|
+
SetAllocation({storage_view.data, storage_view.capacity});
|
879
847
|
ABSL_INTERNAL_RETHROW;
|
880
848
|
}
|
881
849
|
|
882
|
-
|
883
|
-
storage_view.size);
|
850
|
+
DestroyElements<A>(GetAllocator(), storage_view.data, storage_view.size);
|
884
851
|
|
885
|
-
|
886
|
-
|
852
|
+
MallocAdapter<A>::Deallocate(GetAllocator(), storage_view.data,
|
853
|
+
storage_view.capacity);
|
887
854
|
|
888
855
|
if (allocation_tx.DidAllocate()) {
|
889
|
-
|
856
|
+
SetAllocation(std::move(allocation_tx).Release());
|
890
857
|
} else {
|
891
858
|
UnsetIsAllocated();
|
892
859
|
}
|
@@ -904,58 +871,56 @@ auto Storage<T, N, A>::Swap(Storage* other_storage_ptr) -> void {
|
|
904
871
|
Storage* large_ptr = other_storage_ptr;
|
905
872
|
if (small_ptr->GetSize() > large_ptr->GetSize()) swap(small_ptr, large_ptr);
|
906
873
|
|
907
|
-
for (
|
874
|
+
for (SizeType<A> i = 0; i < small_ptr->GetSize(); ++i) {
|
908
875
|
swap(small_ptr->GetInlinedData()[i], large_ptr->GetInlinedData()[i]);
|
909
876
|
}
|
910
877
|
|
911
|
-
IteratorValueAdapter<MoveIterator
|
912
|
-
MoveIterator(large_ptr->GetInlinedData() + small_ptr->GetSize()));
|
878
|
+
IteratorValueAdapter<A, MoveIterator<A>> move_values(
|
879
|
+
MoveIterator<A>(large_ptr->GetInlinedData() + small_ptr->GetSize()));
|
913
880
|
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
|
881
|
+
ConstructElements<A>(large_ptr->GetAllocator(),
|
882
|
+
small_ptr->GetInlinedData() + small_ptr->GetSize(),
|
883
|
+
move_values,
|
884
|
+
large_ptr->GetSize() - small_ptr->GetSize());
|
918
885
|
|
919
|
-
|
920
|
-
|
921
|
-
|
922
|
-
large_ptr->GetSize() - small_ptr->GetSize());
|
886
|
+
DestroyElements<A>(large_ptr->GetAllocator(),
|
887
|
+
large_ptr->GetInlinedData() + small_ptr->GetSize(),
|
888
|
+
large_ptr->GetSize() - small_ptr->GetSize());
|
923
889
|
} else {
|
924
890
|
Storage* allocated_ptr = this;
|
925
891
|
Storage* inlined_ptr = other_storage_ptr;
|
926
892
|
if (!allocated_ptr->GetIsAllocated()) swap(allocated_ptr, inlined_ptr);
|
927
893
|
|
928
|
-
StorageView allocated_storage_view{
|
929
|
-
|
930
|
-
|
894
|
+
StorageView<A> allocated_storage_view{
|
895
|
+
allocated_ptr->GetAllocatedData(), allocated_ptr->GetSize(),
|
896
|
+
allocated_ptr->GetAllocatedCapacity()};
|
931
897
|
|
932
|
-
IteratorValueAdapter<MoveIterator
|
933
|
-
MoveIterator(inlined_ptr->GetInlinedData()));
|
898
|
+
IteratorValueAdapter<A, MoveIterator<A>> move_values(
|
899
|
+
MoveIterator<A>(inlined_ptr->GetInlinedData()));
|
934
900
|
|
935
901
|
ABSL_INTERNAL_TRY {
|
936
|
-
|
937
|
-
|
938
|
-
|
902
|
+
ConstructElements<A>(inlined_ptr->GetAllocator(),
|
903
|
+
allocated_ptr->GetInlinedData(), move_values,
|
904
|
+
inlined_ptr->GetSize());
|
939
905
|
}
|
940
906
|
ABSL_INTERNAL_CATCH_ANY {
|
941
|
-
allocated_ptr->
|
942
|
-
|
907
|
+
allocated_ptr->SetAllocation(
|
908
|
+
{allocated_storage_view.data, allocated_storage_view.capacity});
|
943
909
|
ABSL_INTERNAL_RETHROW;
|
944
910
|
}
|
945
911
|
|
946
|
-
|
947
|
-
|
948
|
-
inlined_ptr->GetSize());
|
912
|
+
DestroyElements<A>(inlined_ptr->GetAllocator(),
|
913
|
+
inlined_ptr->GetInlinedData(), inlined_ptr->GetSize());
|
949
914
|
|
950
|
-
inlined_ptr->
|
951
|
-
|
915
|
+
inlined_ptr->SetAllocation(
|
916
|
+
{allocated_storage_view.data, allocated_storage_view.capacity});
|
952
917
|
}
|
953
918
|
|
954
919
|
swap(GetSizeAndIsAllocated(), other_storage_ptr->GetSizeAndIsAllocated());
|
955
|
-
swap(
|
920
|
+
swap(GetAllocator(), other_storage_ptr->GetAllocator());
|
956
921
|
}
|
957
922
|
|
958
|
-
// End ignore "maybe-uninitialized"
|
923
|
+
// End ignore "array-bounds" and "maybe-uninitialized"
|
959
924
|
#if !defined(__clang__) && defined(__GNUC__)
|
960
925
|
#pragma GCC diagnostic pop
|
961
926
|
#endif
|