grpc 1.47.0 → 1.48.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -70,6 +70,7 @@
|
|
70
70
|
#include <string>
|
71
71
|
#include <type_traits>
|
72
72
|
|
73
|
+
#include "absl/base/attributes.h"
|
73
74
|
#include "absl/base/config.h"
|
74
75
|
#include "absl/base/internal/endian.h"
|
75
76
|
#include "absl/base/internal/per_thread_tls.h"
|
@@ -78,9 +79,13 @@
|
|
78
79
|
#include "absl/container/inlined_vector.h"
|
79
80
|
#include "absl/functional/function_ref.h"
|
80
81
|
#include "absl/meta/type_traits.h"
|
82
|
+
#include "absl/strings/cord_analysis.h"
|
83
|
+
#include "absl/strings/cord_buffer.h"
|
84
|
+
#include "absl/strings/internal/cord_data_edge.h"
|
81
85
|
#include "absl/strings/internal/cord_internal.h"
|
82
86
|
#include "absl/strings/internal/cord_rep_btree.h"
|
83
87
|
#include "absl/strings/internal/cord_rep_btree_reader.h"
|
88
|
+
#include "absl/strings/internal/cord_rep_crc.h"
|
84
89
|
#include "absl/strings/internal/cord_rep_ring.h"
|
85
90
|
#include "absl/strings/internal/cordz_functions.h"
|
86
91
|
#include "absl/strings/internal/cordz_info.h"
|
@@ -100,6 +105,20 @@ template <typename Releaser>
|
|
100
105
|
Cord MakeCordFromExternal(absl::string_view, Releaser&&);
|
101
106
|
void CopyCordToString(const Cord& src, std::string* dst);
|
102
107
|
|
108
|
+
// Cord memory accounting modes
|
109
|
+
enum class CordMemoryAccounting {
|
110
|
+
// Counts the *approximate* number of bytes held in full or in part by this
|
111
|
+
// Cord (which may not remain the same between invocations). Cords that share
|
112
|
+
// memory could each be "charged" independently for the same shared memory.
|
113
|
+
kTotal,
|
114
|
+
|
115
|
+
// Counts the *approximate* number of bytes held in full or in part by this
|
116
|
+
// Cord weighted by the sharing ratio of that data. For example, if some data
|
117
|
+
// edge is shared by 4 different Cords, then each cord is attributed 1/4th of
|
118
|
+
// the total memory usage as a 'fair share' of the total memory usage.
|
119
|
+
kFairShare,
|
120
|
+
};
|
121
|
+
|
103
122
|
// Cord
|
104
123
|
//
|
105
124
|
// A Cord is a sequence of characters, designed to be more efficient than a
|
@@ -214,7 +233,7 @@ class Cord {
|
|
214
233
|
//
|
215
234
|
// Releases the Cord data. Any nodes that share data with other Cords, if
|
216
235
|
// applicable, will have their reference counts reduced by 1.
|
217
|
-
void Clear();
|
236
|
+
ABSL_ATTRIBUTE_REINITIALIZES void Clear();
|
218
237
|
|
219
238
|
// Cord::Append()
|
220
239
|
//
|
@@ -226,6 +245,45 @@ class Cord {
|
|
226
245
|
template <typename T, EnableIfString<T> = 0>
|
227
246
|
void Append(T&& src);
|
228
247
|
|
248
|
+
// Appends `buffer` to this cord, unless `buffer` has a zero length in which
|
249
|
+
// case this method has no effect on this cord instance.
|
250
|
+
// This method is guaranteed to consume `buffer`.
|
251
|
+
void Append(CordBuffer buffer);
|
252
|
+
|
253
|
+
// Returns a CordBuffer, re-using potential existing capacity in this cord.
|
254
|
+
//
|
255
|
+
// Cord instances may have additional unused capacity in the last (or first)
|
256
|
+
// nodes of the underlying tree to facilitate amortized growth. This method
|
257
|
+
// allows applications to explicitly use this spare capacity if available,
|
258
|
+
// or create a new CordBuffer instance otherwise.
|
259
|
+
// If this cord has a final non-shared node with at least `min_capacity`
|
260
|
+
// available, then this method will return that buffer including its data
|
261
|
+
// contents. I.e.; the returned buffer will have a non-zero length, and
|
262
|
+
// a capacity of at least `buffer.length + min_capacity`. Otherwise, this
|
263
|
+
// method will return `CordBuffer::CreateWithDefaultLimit(capacity)`.
|
264
|
+
//
|
265
|
+
// Below an example of using GetAppendBuffer. Notice that in this example we
|
266
|
+
// use `GetAppendBuffer()` only on the first iteration. As we know nothing
|
267
|
+
// about any initial extra capacity in `cord`, we may be able to use the extra
|
268
|
+
// capacity. But as we add new buffers with fully utilized contents after that
|
269
|
+
// we avoid calling `GetAppendBuffer()` on subsequent iterations: while this
|
270
|
+
// works fine, it results in an unnecessary inspection of cord contents:
|
271
|
+
//
|
272
|
+
// void AppendRandomDataToCord(absl::Cord &cord, size_t n) {
|
273
|
+
// bool first = true;
|
274
|
+
// while (n > 0) {
|
275
|
+
// CordBuffer buffer = first ? cord.GetAppendBuffer(n)
|
276
|
+
// : CordBuffer::CreateWithDefaultLimit(n);
|
277
|
+
// absl::Span<char> data = buffer.available_up_to(n);
|
278
|
+
// FillRandomValues(data.data(), data.size());
|
279
|
+
// buffer.IncreaseLengthBy(data.size());
|
280
|
+
// cord.Append(std::move(buffer));
|
281
|
+
// n -= data.size();
|
282
|
+
// first = false;
|
283
|
+
// }
|
284
|
+
// }
|
285
|
+
CordBuffer GetAppendBuffer(size_t capacity, size_t min_capacity = 16);
|
286
|
+
|
229
287
|
// Cord::Prepend()
|
230
288
|
//
|
231
289
|
// Prepends data to the Cord, which may come from another Cord or other string
|
@@ -235,6 +293,11 @@ class Cord {
|
|
235
293
|
template <typename T, EnableIfString<T> = 0>
|
236
294
|
void Prepend(T&& src);
|
237
295
|
|
296
|
+
// Prepends `buffer` to this cord, unless `buffer` has a zero length in which
|
297
|
+
// case this method has no effect on this cord instance.
|
298
|
+
// This method is guaranteed to consume `buffer`.
|
299
|
+
void Prepend(CordBuffer buffer);
|
300
|
+
|
238
301
|
// Cord::RemovePrefix()
|
239
302
|
//
|
240
303
|
// Removes the first `n` bytes of a Cord.
|
@@ -270,11 +333,10 @@ class Cord {
|
|
270
333
|
|
271
334
|
// Cord::EstimatedMemoryUsage()
|
272
335
|
//
|
273
|
-
// Returns the *approximate* number of bytes held
|
274
|
-
//
|
275
|
-
|
276
|
-
|
277
|
-
size_t EstimatedMemoryUsage() const;
|
336
|
+
// Returns the *approximate* number of bytes held by this cord.
|
337
|
+
// See CordMemoryAccounting for more information on the accounting method.
|
338
|
+
size_t EstimatedMemoryUsage(CordMemoryAccounting accounting_method =
|
339
|
+
CordMemoryAccounting::kTotal) const;
|
278
340
|
|
279
341
|
// Cord::Compare()
|
280
342
|
//
|
@@ -324,7 +386,7 @@ class Cord {
|
|
324
386
|
//----------------------------------------------------------------------------
|
325
387
|
//
|
326
388
|
// A `Cord::ChunkIterator` allows iteration over the constituent chunks of its
|
327
|
-
// Cord. Such iteration allows you to perform non-const
|
389
|
+
// Cord. Such iteration allows you to perform non-const operations on the data
|
328
390
|
// of a Cord without modifying it.
|
329
391
|
//
|
330
392
|
// Generally, you do not instantiate a `Cord::ChunkIterator` directly;
|
@@ -372,12 +434,6 @@ class Cord {
|
|
372
434
|
using CordRepBtree = absl::cord_internal::CordRepBtree;
|
373
435
|
using CordRepBtreeReader = absl::cord_internal::CordRepBtreeReader;
|
374
436
|
|
375
|
-
// Stack of right children of concat nodes that we have to visit.
|
376
|
-
// Keep this at the end of the structure to avoid cache-thrashing.
|
377
|
-
// TODO(jgm): Benchmark to see if there's a more optimal value than 47 for
|
378
|
-
// the inlined vector size (47 exists for backward compatibility).
|
379
|
-
using Stack = absl::InlinedVector<absl::cord_internal::CordRep*, 47>;
|
380
|
-
|
381
437
|
// Constructs a `begin()` iterator from `tree`. `tree` must not be null.
|
382
438
|
explicit ChunkIterator(cord_internal::CordRep* tree);
|
383
439
|
|
@@ -393,17 +449,10 @@ class Cord {
|
|
393
449
|
Cord AdvanceAndReadBytes(size_t n);
|
394
450
|
void AdvanceBytes(size_t n);
|
395
451
|
|
396
|
-
// Stack specific operator++
|
397
|
-
ChunkIterator& AdvanceStack();
|
398
|
-
|
399
452
|
// Btree specific operator++
|
400
453
|
ChunkIterator& AdvanceBtree();
|
401
454
|
void AdvanceBytesBtree(size_t n);
|
402
455
|
|
403
|
-
// Iterates `n` bytes, where `n` is expected to be greater than or equal to
|
404
|
-
// `current_chunk_.size()`.
|
405
|
-
void AdvanceBytesSlowPath(size_t n);
|
406
|
-
|
407
456
|
// A view into bytes of the current `CordRep`. It may only be a view to a
|
408
457
|
// suffix of bytes if this is being used by `CharIterator`.
|
409
458
|
absl::string_view current_chunk_;
|
@@ -416,12 +465,9 @@ class Cord {
|
|
416
465
|
|
417
466
|
// Cord reader for cord btrees. Empty if not traversing a btree.
|
418
467
|
CordRepBtreeReader btree_reader_;
|
419
|
-
|
420
|
-
// See 'Stack' alias definition.
|
421
|
-
Stack stack_of_right_children_;
|
422
468
|
};
|
423
469
|
|
424
|
-
// Cord::
|
470
|
+
// Cord::chunk_begin()
|
425
471
|
//
|
426
472
|
// Returns an iterator to the first chunk of the `Cord`.
|
427
473
|
//
|
@@ -437,7 +483,7 @@ class Cord {
|
|
437
483
|
// }
|
438
484
|
ChunkIterator chunk_begin() const;
|
439
485
|
|
440
|
-
// Cord::
|
486
|
+
// Cord::chunk_end()
|
441
487
|
//
|
442
488
|
// Returns an iterator one increment past the last chunk of the `Cord`.
|
443
489
|
//
|
@@ -447,7 +493,7 @@ class Cord {
|
|
447
493
|
ChunkIterator chunk_end() const;
|
448
494
|
|
449
495
|
//----------------------------------------------------------------------------
|
450
|
-
// Cord::
|
496
|
+
// Cord::ChunkRange
|
451
497
|
//----------------------------------------------------------------------------
|
452
498
|
//
|
453
499
|
// `ChunkRange` is a helper class for iterating over the chunks of the `Cord`,
|
@@ -461,7 +507,7 @@ class Cord {
|
|
461
507
|
class ChunkRange {
|
462
508
|
public:
|
463
509
|
// Fulfill minimum c++ container requirements [container.requirements]
|
464
|
-
//
|
510
|
+
// These (partial) container type definitions allow ChunkRange to be used
|
465
511
|
// in various utilities expecting a subset of [container.requirements].
|
466
512
|
// For example, the below enables using `::testing::ElementsAre(...)`
|
467
513
|
using value_type = absl::string_view;
|
@@ -481,9 +527,9 @@ class Cord {
|
|
481
527
|
|
482
528
|
// Cord::Chunks()
|
483
529
|
//
|
484
|
-
// Returns a `Cord::
|
485
|
-
//
|
486
|
-
//
|
530
|
+
// Returns a `Cord::ChunkRange` for iterating over the chunks of a `Cord` with
|
531
|
+
// a range-based for-loop. For most iteration tasks on a Cord, use
|
532
|
+
// `Cord::Chunks()` to retrieve this iterator.
|
487
533
|
//
|
488
534
|
// Example:
|
489
535
|
//
|
@@ -549,7 +595,7 @@ class Cord {
|
|
549
595
|
ChunkIterator chunk_iterator_;
|
550
596
|
};
|
551
597
|
|
552
|
-
// Cord::
|
598
|
+
// Cord::AdvanceAndRead()
|
553
599
|
//
|
554
600
|
// Advances the `Cord::CharIterator` by `n_bytes` and returns the bytes
|
555
601
|
// advanced as a separate `Cord`. `n_bytes` must be less than or equal to the
|
@@ -557,21 +603,21 @@ class Cord {
|
|
557
603
|
// valid to pass `char_end()` and `0`.
|
558
604
|
static Cord AdvanceAndRead(CharIterator* it, size_t n_bytes);
|
559
605
|
|
560
|
-
// Cord::
|
606
|
+
// Cord::Advance()
|
561
607
|
//
|
562
608
|
// Advances the `Cord::CharIterator` by `n_bytes`. `n_bytes` must be less than
|
563
609
|
// or equal to the number of bytes remaining within the Cord; otherwise,
|
564
610
|
// behavior is undefined. It is valid to pass `char_end()` and `0`.
|
565
611
|
static void Advance(CharIterator* it, size_t n_bytes);
|
566
612
|
|
567
|
-
// Cord::
|
613
|
+
// Cord::ChunkRemaining()
|
568
614
|
//
|
569
615
|
// Returns the longest contiguous view starting at the iterator's position.
|
570
616
|
//
|
571
617
|
// `it` must be dereferenceable.
|
572
618
|
static absl::string_view ChunkRemaining(const CharIterator& it);
|
573
619
|
|
574
|
-
// Cord::
|
620
|
+
// Cord::char_begin()
|
575
621
|
//
|
576
622
|
// Returns an iterator to the first character of the `Cord`.
|
577
623
|
//
|
@@ -580,7 +626,7 @@ class Cord {
|
|
580
626
|
// a `CharIterator` where range-based for-loops may not be available.
|
581
627
|
CharIterator char_begin() const;
|
582
628
|
|
583
|
-
// Cord::
|
629
|
+
// Cord::char_end()
|
584
630
|
//
|
585
631
|
// Returns an iterator to one past the last character of the `Cord`.
|
586
632
|
//
|
@@ -589,13 +635,13 @@ class Cord {
|
|
589
635
|
// a `CharIterator` where range-based for-loops are not useful.
|
590
636
|
CharIterator char_end() const;
|
591
637
|
|
592
|
-
// Cord::
|
638
|
+
// Cord::CharRange
|
593
639
|
//
|
594
640
|
// `CharRange` is a helper class for iterating over the characters of a
|
595
641
|
// producing an iterator which can be used within a range-based for loop.
|
596
642
|
// Construction of a `CharRange` will return an iterator pointing to the first
|
597
643
|
// character of the Cord. Generally, do not construct a `CharRange` directly;
|
598
|
-
// instead, prefer to use the `Cord::Chars()` method
|
644
|
+
// instead, prefer to use the `Cord::Chars()` method shown below.
|
599
645
|
//
|
600
646
|
// Implementation note: `CharRange` is simply a convenience wrapper over
|
601
647
|
// `Cord::char_begin()` and `Cord::char_end()`.
|
@@ -620,11 +666,11 @@ class Cord {
|
|
620
666
|
const Cord* cord_;
|
621
667
|
};
|
622
668
|
|
623
|
-
// Cord::
|
669
|
+
// Cord::Chars()
|
624
670
|
//
|
625
|
-
// Returns a `Cord::
|
626
|
-
//
|
627
|
-
//
|
671
|
+
// Returns a `Cord::CharRange` for iterating over the characters of a `Cord`
|
672
|
+
// with a range-based for-loop. For most character-based iteration tasks on a
|
673
|
+
// Cord, use `Cord::Chars()` to retrieve this iterator.
|
628
674
|
//
|
629
675
|
// Example:
|
630
676
|
//
|
@@ -671,6 +717,29 @@ class Cord {
|
|
671
717
|
cord->Append(part);
|
672
718
|
}
|
673
719
|
|
720
|
+
// Cord::SetExpectedChecksum()
|
721
|
+
//
|
722
|
+
// Stores a checksum value with this non-empty cord instance, for later
|
723
|
+
// retrieval.
|
724
|
+
//
|
725
|
+
// The expected checksum is a number stored out-of-band, alongside the data.
|
726
|
+
// It is preserved across copies and assignments, but any mutations to a cord
|
727
|
+
// will cause it to lose its expected checksum.
|
728
|
+
//
|
729
|
+
// The expected checksum is not part of a Cord's value, and does not affect
|
730
|
+
// operations such as equality or hashing.
|
731
|
+
//
|
732
|
+
// This field is intended to store a CRC32C checksum for later validation, to
|
733
|
+
// help support end-to-end checksum workflows. However, the Cord API itself
|
734
|
+
// does no CRC validation, and assigns no meaning to this number.
|
735
|
+
//
|
736
|
+
// This call has no effect if this cord is empty.
|
737
|
+
void SetExpectedChecksum(uint32_t crc);
|
738
|
+
|
739
|
+
// Returns this cord's expected checksum, if it has one. Otherwise, returns
|
740
|
+
// nullopt.
|
741
|
+
absl::optional<uint32_t> ExpectedChecksum() const;
|
742
|
+
|
674
743
|
template <typename H>
|
675
744
|
friend H AbslHashValue(H hash_state, const absl::Cord& c) {
|
676
745
|
absl::optional<absl::string_view> maybe_flat = c.TryFlat();
|
@@ -686,7 +755,8 @@ class Cord {
|
|
686
755
|
// be used by spelling absl::strings_internal::MakeStringConstant, which is
|
687
756
|
// also an internal API.
|
688
757
|
template <typename T>
|
689
|
-
|
758
|
+
// NOLINTNEXTLINE(google-explicit-constructor)
|
759
|
+
constexpr Cord(strings_internal::StringConstant<T>);
|
690
760
|
|
691
761
|
private:
|
692
762
|
using CordRep = absl::cord_internal::CordRep;
|
@@ -738,12 +808,12 @@ class Cord {
|
|
738
808
|
bool empty() const;
|
739
809
|
size_t size() const;
|
740
810
|
const char* data() const; // Returns nullptr if holding pointer
|
741
|
-
void set_data(const char* data, size_t n,
|
742
|
-
|
743
|
-
char* set_data(size_t n); // Write data to the result
|
811
|
+
void set_data(const char* data, size_t n); // Discards pointer, if any
|
812
|
+
char* set_data(size_t n); // Write data to the result
|
744
813
|
// Returns nullptr if holding bytes
|
745
814
|
absl::cord_internal::CordRep* tree() const;
|
746
815
|
absl::cord_internal::CordRep* as_tree() const;
|
816
|
+
const char* as_chars() const;
|
747
817
|
// Returns non-null iff was holding a pointer
|
748
818
|
absl::cord_internal::CordRep* clear();
|
749
819
|
// Converts to pointer if necessary.
|
@@ -831,6 +901,11 @@ class Cord {
|
|
831
901
|
// Returns true if the Cord is being profiled by cordz.
|
832
902
|
bool is_profiled() const { return data_.is_tree() && data_.is_profiled(); }
|
833
903
|
|
904
|
+
// Returns the available inlined capacity, or 0 if is_tree() == true.
|
905
|
+
size_t remaining_inline_capacity() const {
|
906
|
+
return data_.is_tree() ? 0 : kMaxInline - data_.inline_size();
|
907
|
+
}
|
908
|
+
|
834
909
|
// Returns the profiled CordzInfo, or nullptr if not sampled.
|
835
910
|
absl::cord_internal::CordzInfo* cordz_info() const {
|
836
911
|
return data_.cordz_info();
|
@@ -861,9 +936,6 @@ class Cord {
|
|
861
936
|
};
|
862
937
|
InlineRep contents_;
|
863
938
|
|
864
|
-
// Helper for MemoryUsage().
|
865
|
-
static size_t MemoryUsageAux(const absl::cord_internal::CordRep* rep);
|
866
|
-
|
867
939
|
// Helper for GetFlat() and TryFlat().
|
868
940
|
static bool GetFlatAux(absl::cord_internal::CordRep* rep,
|
869
941
|
absl::string_view* fragment);
|
@@ -901,6 +973,15 @@ class Cord {
|
|
901
973
|
template <typename C>
|
902
974
|
void AppendImpl(C&& src);
|
903
975
|
|
976
|
+
// Appends / Prepends `src` to this instance, using precise sizing.
|
977
|
+
// This method does explicitly not attempt to use any spare capacity
|
978
|
+
// in any pending last added private owned flat.
|
979
|
+
// Requires `src` to be <= kMaxFlatLength.
|
980
|
+
void AppendPrecise(absl::string_view src, MethodIdentifier method);
|
981
|
+
void PrependPrecise(absl::string_view src, MethodIdentifier method);
|
982
|
+
|
983
|
+
CordBuffer GetAppendBufferSlowPath(size_t capacity, size_t min_capacity);
|
984
|
+
|
904
985
|
// Prepends the provided data to this instance. `method` contains the public
|
905
986
|
// API method for this action which is tracked for Cordz sampling purposes.
|
906
987
|
void PrependArray(absl::string_view src, MethodIdentifier method);
|
@@ -938,8 +1019,8 @@ namespace cord_internal {
|
|
938
1019
|
// Fast implementation of memmove for up to 15 bytes. This implementation is
|
939
1020
|
// safe for overlapping regions. If nullify_tail is true, the destination is
|
940
1021
|
// padded with '\0' up to 16 bytes.
|
941
|
-
|
942
|
-
|
1022
|
+
template <bool nullify_tail = false>
|
1023
|
+
inline void SmallMemmove(char* dst, const char* src, size_t n) {
|
943
1024
|
if (n >= 8) {
|
944
1025
|
assert(n <= 16);
|
945
1026
|
uint64_t buf1;
|
@@ -976,22 +1057,16 @@ inline void SmallMemmove(char* dst, const char* src, size_t n,
|
|
976
1057
|
}
|
977
1058
|
|
978
1059
|
// Does non-template-specific `CordRepExternal` initialization.
|
979
|
-
//
|
1060
|
+
// Requires `data` to be non-empty.
|
980
1061
|
void InitializeCordRepExternal(absl::string_view data, CordRepExternal* rep);
|
981
1062
|
|
982
1063
|
// Creates a new `CordRep` that owns `data` and `releaser` and returns a pointer
|
983
|
-
// to it
|
1064
|
+
// to it. Requires `data` to be non-empty.
|
984
1065
|
template <typename Releaser>
|
985
1066
|
// NOLINTNEXTLINE - suppress clang-tidy raw pointer return.
|
986
1067
|
CordRep* NewExternalRep(absl::string_view data, Releaser&& releaser) {
|
1068
|
+
assert(!data.empty());
|
987
1069
|
using ReleaserType = absl::decay_t<Releaser>;
|
988
|
-
if (data.empty()) {
|
989
|
-
// Never create empty external nodes.
|
990
|
-
InvokeReleaser(Rank0{}, ReleaserType(std::forward<Releaser>(releaser)),
|
991
|
-
data);
|
992
|
-
return nullptr;
|
993
|
-
}
|
994
|
-
|
995
1070
|
CordRepExternal* rep = new CordRepExternalImpl<ReleaserType>(
|
996
1071
|
std::forward<Releaser>(releaser), 0);
|
997
1072
|
InitializeCordRepExternal(data, rep);
|
@@ -1011,10 +1086,15 @@ inline CordRep* NewExternalRep(absl::string_view data,
|
|
1011
1086
|
template <typename Releaser>
|
1012
1087
|
Cord MakeCordFromExternal(absl::string_view data, Releaser&& releaser) {
|
1013
1088
|
Cord cord;
|
1014
|
-
if (
|
1015
|
-
|
1016
|
-
|
1089
|
+
if (ABSL_PREDICT_TRUE(!data.empty())) {
|
1090
|
+
cord.contents_.EmplaceTree(::absl::cord_internal::NewExternalRep(
|
1091
|
+
data, std::forward<Releaser>(releaser)),
|
1017
1092
|
Cord::MethodIdentifier::kMakeCordFromExternal);
|
1093
|
+
} else {
|
1094
|
+
using ReleaserType = absl::decay_t<Releaser>;
|
1095
|
+
cord_internal::InvokeReleaser(
|
1096
|
+
cord_internal::Rank0{}, ReleaserType(std::forward<Releaser>(releaser)),
|
1097
|
+
data);
|
1018
1098
|
}
|
1019
1099
|
return cord;
|
1020
1100
|
}
|
@@ -1069,6 +1149,11 @@ inline const char* Cord::InlineRep::data() const {
|
|
1069
1149
|
return is_tree() ? nullptr : data_.as_chars();
|
1070
1150
|
}
|
1071
1151
|
|
1152
|
+
inline const char* Cord::InlineRep::as_chars() const {
|
1153
|
+
assert(!data_.is_tree());
|
1154
|
+
return data_.as_chars();
|
1155
|
+
}
|
1156
|
+
|
1072
1157
|
inline absl::cord_internal::CordRep* Cord::InlineRep::as_tree() const {
|
1073
1158
|
assert(data_.is_tree());
|
1074
1159
|
return data_.as_tree();
|
@@ -1207,10 +1292,15 @@ inline size_t Cord::size() const {
|
|
1207
1292
|
|
1208
1293
|
inline bool Cord::empty() const { return contents_.empty(); }
|
1209
1294
|
|
1210
|
-
inline size_t Cord::EstimatedMemoryUsage(
|
1295
|
+
inline size_t Cord::EstimatedMemoryUsage(
|
1296
|
+
CordMemoryAccounting accounting_method) const {
|
1211
1297
|
size_t result = sizeof(Cord);
|
1212
1298
|
if (const absl::cord_internal::CordRep* rep = contents_.tree()) {
|
1213
|
-
|
1299
|
+
if (accounting_method == CordMemoryAccounting::kFairShare) {
|
1300
|
+
result += cord_internal::GetEstimatedFairShareMemoryUsage(rep);
|
1301
|
+
} else {
|
1302
|
+
result += cord_internal::GetEstimatedMemoryUsage(rep);
|
1303
|
+
}
|
1214
1304
|
}
|
1215
1305
|
return result;
|
1216
1306
|
}
|
@@ -1248,6 +1338,31 @@ inline void Cord::Prepend(absl::string_view src) {
|
|
1248
1338
|
PrependArray(src, CordzUpdateTracker::kPrependString);
|
1249
1339
|
}
|
1250
1340
|
|
1341
|
+
inline void Cord::Append(CordBuffer buffer) {
|
1342
|
+
if (ABSL_PREDICT_FALSE(buffer.length() == 0)) return;
|
1343
|
+
absl::string_view short_value;
|
1344
|
+
if (CordRep* rep = buffer.ConsumeValue(short_value)) {
|
1345
|
+
contents_.AppendTree(rep, CordzUpdateTracker::kAppendCordBuffer);
|
1346
|
+
} else {
|
1347
|
+
AppendPrecise(short_value, CordzUpdateTracker::kAppendCordBuffer);
|
1348
|
+
}
|
1349
|
+
}
|
1350
|
+
|
1351
|
+
inline void Cord::Prepend(CordBuffer buffer) {
|
1352
|
+
if (ABSL_PREDICT_FALSE(buffer.length() == 0)) return;
|
1353
|
+
absl::string_view short_value;
|
1354
|
+
if (CordRep* rep = buffer.ConsumeValue(short_value)) {
|
1355
|
+
contents_.PrependTree(rep, CordzUpdateTracker::kPrependCordBuffer);
|
1356
|
+
} else {
|
1357
|
+
PrependPrecise(short_value, CordzUpdateTracker::kPrependCordBuffer);
|
1358
|
+
}
|
1359
|
+
}
|
1360
|
+
|
1361
|
+
inline CordBuffer Cord::GetAppendBuffer(size_t capacity, size_t min_capacity) {
|
1362
|
+
if (empty()) return CordBuffer::CreateWithDefaultLimit(capacity);
|
1363
|
+
return GetAppendBufferSlowPath(capacity, min_capacity);
|
1364
|
+
}
|
1365
|
+
|
1251
1366
|
extern template void Cord::Append(std::string&& src);
|
1252
1367
|
extern template void Cord::Prepend(std::string&& src);
|
1253
1368
|
|
@@ -1274,27 +1389,27 @@ inline bool Cord::StartsWith(absl::string_view rhs) const {
|
|
1274
1389
|
}
|
1275
1390
|
|
1276
1391
|
inline void Cord::ChunkIterator::InitTree(cord_internal::CordRep* tree) {
|
1392
|
+
tree = cord_internal::SkipCrcNode(tree);
|
1277
1393
|
if (tree->tag == cord_internal::BTREE) {
|
1278
1394
|
current_chunk_ = btree_reader_.Init(tree->btree());
|
1279
|
-
|
1395
|
+
} else {
|
1396
|
+
current_leaf_ = tree;
|
1397
|
+
current_chunk_ = cord_internal::EdgeData(tree);
|
1280
1398
|
}
|
1281
|
-
|
1282
|
-
stack_of_right_children_.push_back(tree);
|
1283
|
-
operator++();
|
1284
1399
|
}
|
1285
1400
|
|
1286
|
-
inline Cord::ChunkIterator::ChunkIterator(cord_internal::CordRep* tree)
|
1287
|
-
|
1401
|
+
inline Cord::ChunkIterator::ChunkIterator(cord_internal::CordRep* tree) {
|
1402
|
+
bytes_remaining_ = tree->length;
|
1288
1403
|
InitTree(tree);
|
1289
1404
|
}
|
1290
1405
|
|
1291
|
-
inline Cord::ChunkIterator::ChunkIterator(const Cord* cord)
|
1292
|
-
|
1293
|
-
|
1294
|
-
InitTree(
|
1406
|
+
inline Cord::ChunkIterator::ChunkIterator(const Cord* cord) {
|
1407
|
+
if (CordRep* tree = cord->contents_.tree()) {
|
1408
|
+
bytes_remaining_ = tree->length;
|
1409
|
+
InitTree(tree);
|
1295
1410
|
} else {
|
1296
|
-
|
1297
|
-
|
1411
|
+
bytes_remaining_ = cord->contents_.inline_size();
|
1412
|
+
current_chunk_ = {cord->contents_.data(), bytes_remaining_};
|
1298
1413
|
}
|
1299
1414
|
}
|
1300
1415
|
|
@@ -1324,8 +1439,11 @@ inline Cord::ChunkIterator& Cord::ChunkIterator::operator++() {
|
|
1324
1439
|
assert(bytes_remaining_ >= current_chunk_.size());
|
1325
1440
|
bytes_remaining_ -= current_chunk_.size();
|
1326
1441
|
if (bytes_remaining_ > 0) {
|
1327
|
-
|
1328
|
-
|
1442
|
+
if (btree_reader_) {
|
1443
|
+
return AdvanceBtree();
|
1444
|
+
} else {
|
1445
|
+
assert(!current_chunk_.empty()); // Called on invalid iterator.
|
1446
|
+
}
|
1329
1447
|
current_chunk_ = {};
|
1330
1448
|
}
|
1331
1449
|
return *this;
|
@@ -1366,7 +1484,11 @@ inline void Cord::ChunkIterator::AdvanceBytes(size_t n) {
|
|
1366
1484
|
if (ABSL_PREDICT_TRUE(n < current_chunk_.size())) {
|
1367
1485
|
RemoveChunkPrefix(n);
|
1368
1486
|
} else if (n != 0) {
|
1369
|
-
|
1487
|
+
if (btree_reader_) {
|
1488
|
+
AdvanceBytesBtree(n);
|
1489
|
+
} else {
|
1490
|
+
bytes_remaining_ = 0;
|
1491
|
+
}
|
1370
1492
|
}
|
1371
1493
|
}
|
1372
1494
|
|
@@ -1457,7 +1579,7 @@ inline void Cord::ForEachChunk(
|
|
1457
1579
|
}
|
1458
1580
|
}
|
1459
1581
|
|
1460
|
-
// Nonmember Cord-to-Cord relational
|
1582
|
+
// Nonmember Cord-to-Cord relational operators.
|
1461
1583
|
inline bool operator==(const Cord& lhs, const Cord& rhs) {
|
1462
1584
|
if (lhs.contents_.IsSame(rhs.contents_)) return true;
|
1463
1585
|
size_t rhs_size = rhs.size();
|
@@ -1508,7 +1630,6 @@ class CordTestAccess {
|
|
1508
1630
|
public:
|
1509
1631
|
static size_t FlatOverhead();
|
1510
1632
|
static size_t MaxFlatLength();
|
1511
|
-
static size_t SizeofCordRepConcat();
|
1512
1633
|
static size_t SizeofCordRepExternal();
|
1513
1634
|
static size_t SizeofCordRepSubstring();
|
1514
1635
|
static size_t FlatTagToLength(uint8_t tag);
|