grpc 1.73.0 → 1.74.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +38 -17
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +11 -5
- data/include/grpc/event_engine/event_engine.h +74 -17
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +2 -4
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +24 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +270 -181
- data/src/core/channelz/channelz.h +168 -55
- data/src/core/channelz/channelz_registry.cc +2 -1
- data/src/core/channelz/channelz_registry.h +24 -0
- data/src/core/channelz/property_list.cc +357 -0
- data/src/core/channelz/property_list.h +202 -0
- data/src/core/channelz/ztrace_collector.h +3 -2
- data/src/core/client_channel/backup_poller.cc +17 -2
- data/src/core/client_channel/client_channel.cc +17 -28
- data/src/core/client_channel/client_channel_filter.cc +19 -29
- data/src/core/client_channel/config_selector.h +8 -2
- data/src/core/client_channel/dynamic_filters.cc +5 -6
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +4 -1
- data/src/core/client_channel/retry_filter.cc +21 -27
- data/src/core/client_channel/retry_filter.h +10 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +43 -19
- data/src/core/client_channel/subchannel.h +8 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +1 -0
- data/src/core/config/core_configuration.h +11 -0
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/filter/auth/auth_filters.h +0 -25
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/handshaker/handshaker.cc +23 -14
- data/src/core/handshaker/handshaker.h +3 -0
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
- data/src/core/handshaker/security/secure_endpoint.cc +70 -25
- data/src/core/handshaker/security/security_handshaker.cc +4 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
- data/src/core/lib/channel/channel_args.cc +15 -0
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/channel_stack.cc +22 -23
- data/src/core/lib/channel/channel_stack.h +9 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
- data/src/core/lib/channel/promise_based_filter.h +5 -5
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +165 -46
- data/src/core/lib/event_engine/ares_resolver.h +48 -2
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/channelz.h +10 -6
- data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/shim.cc +9 -0
- data/src/core/lib/event_engine/shim.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
- data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
- data/src/core/lib/experiments/experiments.cc +45 -93
- data/src/core/lib/experiments/experiments.h +21 -51
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +7 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
- data/src/core/lib/iomgr/tcp_posix.cc +12 -6
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +1 -0
- data/src/core/lib/promise/arena_promise.h +23 -7
- data/src/core/lib/promise/detail/promise_factory.h +10 -0
- data/src/core/lib/promise/detail/promise_like.h +118 -11
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +687 -548
- data/src/core/lib/promise/if.h +20 -0
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/loop.h +65 -3
- data/src/core/lib/promise/map.h +24 -0
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +425 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/party.cc +50 -1
- data/src/core/lib/promise/party.h +66 -1
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +4 -1
- data/src/core/lib/promise/status_flag.h +7 -0
- data/src/core/lib/promise/try_seq.h +4 -1
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/arena.h +19 -0
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/channel_create.cc +88 -13
- data/src/core/lib/surface/channel_create.h +4 -0
- data/src/core/lib/surface/channel_init.cc +164 -47
- data/src/core/lib/surface/channel_init.h +64 -1
- data/src/core/lib/surface/filter_stack_call.cc +18 -9
- data/src/core/lib/surface/init.cc +6 -15
- data/src/core/lib/surface/legacy_channel.cc +3 -5
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/load_balancing/child_policy_handler.cc +2 -4
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/health_check_client.cc +1 -5
- data/src/core/load_balancing/lb_policy.h +1 -3
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/xds/xds_config.cc +6 -3
- data/src/core/resolver/xds/xds_config.h +9 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
- data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +31 -11
- data/src/core/server/server.cc +83 -12
- data/src/core/server/server.h +21 -2
- data/src/core/server/xds_server_config_fetcher.cc +63 -25
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/stats_data.cc +233 -207
- data/src/core/telemetry/stats_data.h +250 -153
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
- data/src/core/tsi/fake_transport_security.cc +17 -0
- data/src/core/tsi/ssl_transport_security.cc +2 -0
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/backoff.cc +1 -5
- data/src/core/util/backoff.h +1 -0
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/function_signature.h +15 -1
- data/src/core/util/http_client/httpcli.cc +12 -5
- data/src/core/util/http_client/httpcli.h +4 -1
- data/src/core/util/latent_see.h +8 -5
- data/src/core/util/log.cc +4 -0
- data/src/core/util/memory_usage.h +268 -0
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/shared_bit_gen.h +20 -0
- data/src/core/util/single_set_ptr.h +2 -2
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +53 -2
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +24 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
- data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
- data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_filter.h +7 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
- data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
- data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +26 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -8
- data/src/ruby/ext/grpc/rb_channel.c +72 -568
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
- data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
- data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
- data/third_party/abseil-cpp/absl/base/config.h +20 -129
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
- data/third_party/abseil-cpp/absl/base/options.h +3 -80
- data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
- data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
- data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
- data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- 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 +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
- data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- data/third_party/abseil-cpp/absl/time/time.h +20 -15
- data/third_party/abseil-cpp/absl/types/optional.h +7 -747
- data/third_party/abseil-cpp/absl/types/span.h +13 -11
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- metadata +72 -20
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -32,6 +32,7 @@
|
|
32
32
|
#endif
|
33
33
|
|
34
34
|
#include <cstddef>
|
35
|
+
#include <cstdint>
|
35
36
|
#include <cstdlib>
|
36
37
|
#include <cstring>
|
37
38
|
#include <ctime>
|
@@ -39,6 +40,7 @@
|
|
39
40
|
#include <string>
|
40
41
|
#include <type_traits>
|
41
42
|
|
43
|
+
#include "absl/base/attributes.h"
|
42
44
|
#include "absl/base/config.h"
|
43
45
|
#include "absl/base/internal/endian.h"
|
44
46
|
#include "absl/base/macros.h"
|
@@ -60,8 +62,8 @@ ABSL_NAMESPACE_BEGIN
|
|
60
62
|
// encountered, this function returns `false`, leaving `out` in an unspecified
|
61
63
|
// state.
|
62
64
|
template <typename int_type>
|
63
|
-
|
64
|
-
|
65
|
+
[[nodiscard]] bool SimpleAtoi(absl::string_view str,
|
66
|
+
int_type* absl_nonnull out);
|
65
67
|
|
66
68
|
// SimpleAtof()
|
67
69
|
//
|
@@ -72,8 +74,7 @@ ABSL_MUST_USE_RESULT bool SimpleAtoi(absl::string_view str,
|
|
72
74
|
// allowed formats for `str`, except SimpleAtof() is locale-independent and will
|
73
75
|
// always use the "C" locale. If any errors are encountered, this function
|
74
76
|
// returns `false`, leaving `out` in an unspecified state.
|
75
|
-
|
76
|
-
absl::Nonnull<float*> out);
|
77
|
+
[[nodiscard]] bool SimpleAtof(absl::string_view str, float* absl_nonnull out);
|
77
78
|
|
78
79
|
// SimpleAtod()
|
79
80
|
//
|
@@ -84,8 +85,7 @@ ABSL_MUST_USE_RESULT bool SimpleAtof(absl::string_view str,
|
|
84
85
|
// allowed formats for `str`, except SimpleAtod is locale-independent and will
|
85
86
|
// always use the "C" locale. If any errors are encountered, this function
|
86
87
|
// returns `false`, leaving `out` in an unspecified state.
|
87
|
-
|
88
|
-
absl::Nonnull<double*> out);
|
88
|
+
[[nodiscard]] bool SimpleAtod(absl::string_view str, double* absl_nonnull out);
|
89
89
|
|
90
90
|
// SimpleAtob()
|
91
91
|
//
|
@@ -95,8 +95,7 @@ ABSL_MUST_USE_RESULT bool SimpleAtod(absl::string_view str,
|
|
95
95
|
// are interpreted as boolean `false`: "false", "f", "no", "n", "0". If any
|
96
96
|
// errors are encountered, this function returns `false`, leaving `out` in an
|
97
97
|
// unspecified state.
|
98
|
-
|
99
|
-
absl::Nonnull<bool*> out);
|
98
|
+
[[nodiscard]] bool SimpleAtob(absl::string_view str, bool* absl_nonnull out);
|
100
99
|
|
101
100
|
// SimpleHexAtoi()
|
102
101
|
//
|
@@ -109,14 +108,14 @@ ABSL_MUST_USE_RESULT bool SimpleAtob(absl::string_view str,
|
|
109
108
|
// by this function. If any errors are encountered, this function returns
|
110
109
|
// `false`, leaving `out` in an unspecified state.
|
111
110
|
template <typename int_type>
|
112
|
-
|
113
|
-
|
111
|
+
[[nodiscard]] bool SimpleHexAtoi(absl::string_view str,
|
112
|
+
int_type* absl_nonnull out);
|
114
113
|
|
115
114
|
// Overloads of SimpleHexAtoi() for 128 bit integers.
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
115
|
+
[[nodiscard]] inline bool SimpleHexAtoi(absl::string_view str,
|
116
|
+
absl::int128* absl_nonnull out);
|
117
|
+
[[nodiscard]] inline bool SimpleHexAtoi(absl::string_view str,
|
118
|
+
absl::uint128* absl_nonnull out);
|
120
119
|
|
121
120
|
ABSL_NAMESPACE_END
|
122
121
|
} // namespace absl
|
@@ -127,6 +126,18 @@ namespace absl {
|
|
127
126
|
ABSL_NAMESPACE_BEGIN
|
128
127
|
namespace numbers_internal {
|
129
128
|
|
129
|
+
template <typename int_type>
|
130
|
+
constexpr bool is_signed() {
|
131
|
+
if constexpr (std::is_arithmetic<int_type>::value) {
|
132
|
+
// Use std::numeric_limits<T>::is_signed where it's defined to work.
|
133
|
+
return std::numeric_limits<int_type>::is_signed;
|
134
|
+
}
|
135
|
+
// TODO(jorg): This signed-ness check is used because it works correctly
|
136
|
+
// with enums, and it also serves to check that int_type is not a pointer.
|
137
|
+
// If one day something like std::is_signed<enum E> works, switch to it.
|
138
|
+
return static_cast<int_type>(1) - 2 < 0;
|
139
|
+
}
|
140
|
+
|
130
141
|
// Digit conversion.
|
131
142
|
ABSL_DLL extern const char kHexChar[17]; // 0123456789abcdef
|
132
143
|
ABSL_DLL extern const char
|
@@ -138,22 +149,30 @@ ABSL_DLL extern const char
|
|
138
149
|
// PutTwoDigits(42, buf);
|
139
150
|
// // buf[0] == '4'
|
140
151
|
// // buf[1] == '2'
|
141
|
-
void PutTwoDigits(uint32_t i,
|
152
|
+
void PutTwoDigits(uint32_t i, char* absl_nonnull buf);
|
142
153
|
|
143
154
|
// safe_strto?() functions for implementing SimpleAtoi()
|
144
155
|
|
145
|
-
bool
|
156
|
+
bool safe_strto8_base(absl::string_view text, int8_t* absl_nonnull value,
|
157
|
+
int base);
|
158
|
+
bool safe_strto16_base(absl::string_view text, int16_t* absl_nonnull value,
|
159
|
+
int base);
|
160
|
+
bool safe_strto32_base(absl::string_view text, int32_t* absl_nonnull value,
|
146
161
|
int base);
|
147
|
-
bool safe_strto64_base(absl::string_view text,
|
162
|
+
bool safe_strto64_base(absl::string_view text, int64_t* absl_nonnull value,
|
148
163
|
int base);
|
149
164
|
bool safe_strto128_base(absl::string_view text,
|
150
|
-
absl::
|
151
|
-
bool
|
165
|
+
absl::int128* absl_nonnull value, int base);
|
166
|
+
bool safe_strtou8_base(absl::string_view text, uint8_t* absl_nonnull value,
|
167
|
+
int base);
|
168
|
+
bool safe_strtou16_base(absl::string_view text, uint16_t* absl_nonnull value,
|
152
169
|
int base);
|
153
|
-
bool
|
170
|
+
bool safe_strtou32_base(absl::string_view text, uint32_t* absl_nonnull value,
|
171
|
+
int base);
|
172
|
+
bool safe_strtou64_base(absl::string_view text, uint64_t* absl_nonnull value,
|
154
173
|
int base);
|
155
174
|
bool safe_strtou128_base(absl::string_view text,
|
156
|
-
absl::
|
175
|
+
absl::uint128* absl_nonnull value, int base);
|
157
176
|
|
158
177
|
static const int kFastToBufferSize = 32;
|
159
178
|
static const int kSixDigitsToBufferSize = 16;
|
@@ -164,33 +183,30 @@ static const int kSixDigitsToBufferSize = 16;
|
|
164
183
|
// outside the range 0.0001-999999 are output using scientific notation
|
165
184
|
// (1.23456e+06). This routine is heavily optimized.
|
166
185
|
// Required buffer size is `kSixDigitsToBufferSize`.
|
167
|
-
size_t SixDigitsToBuffer(double d,
|
186
|
+
size_t SixDigitsToBuffer(double d, char* absl_nonnull buffer);
|
168
187
|
|
169
188
|
// WARNING: These functions may write more characters than necessary, because
|
170
189
|
// they are intended for speed. All functions take an output buffer
|
171
190
|
// as an argument and return a pointer to the last byte they wrote, which is the
|
172
191
|
// terminating '\0'. At most `kFastToBufferSize` bytes are written.
|
173
|
-
|
192
|
+
char* absl_nonnull FastIntToBuffer(int32_t i, char* absl_nonnull buffer)
|
174
193
|
ABSL_INTERNAL_NEED_MIN_SIZE(buffer, kFastToBufferSize);
|
175
|
-
|
194
|
+
char* absl_nonnull FastIntToBuffer(uint32_t n, char* absl_nonnull out_str)
|
176
195
|
ABSL_INTERNAL_NEED_MIN_SIZE(out_str, kFastToBufferSize);
|
177
|
-
|
196
|
+
char* absl_nonnull FastIntToBuffer(int64_t i, char* absl_nonnull buffer)
|
178
197
|
ABSL_INTERNAL_NEED_MIN_SIZE(buffer, kFastToBufferSize);
|
179
|
-
|
198
|
+
char* absl_nonnull FastIntToBuffer(uint64_t i, char* absl_nonnull buffer)
|
180
199
|
ABSL_INTERNAL_NEED_MIN_SIZE(buffer, kFastToBufferSize);
|
181
200
|
|
182
201
|
// For enums and integer types that are not an exact match for the types above,
|
183
202
|
// use templates to call the appropriate one of the four overloads above.
|
184
203
|
template <typename int_type>
|
185
|
-
|
204
|
+
char* absl_nonnull FastIntToBuffer(int_type i, char* absl_nonnull buffer)
|
186
205
|
ABSL_INTERNAL_NEED_MIN_SIZE(buffer, kFastToBufferSize) {
|
187
206
|
static_assert(sizeof(i) <= 64 / 8,
|
188
207
|
"FastIntToBuffer works only with 64-bit-or-less integers.");
|
189
|
-
// TODO(jorg): This signed-ness check is used because it works correctly
|
190
|
-
// with enums, and it also serves to check that int_type is not a pointer.
|
191
|
-
// If one day something like std::is_signed<enum E> works, switch to it.
|
192
208
|
// These conditions are constexpr bools to suppress MSVC warning C4127.
|
193
|
-
constexpr bool kIsSigned =
|
209
|
+
constexpr bool kIsSigned = is_signed<int_type>();
|
194
210
|
constexpr bool kUse64Bit = sizeof(i) > 32 / 8;
|
195
211
|
if (kIsSigned) {
|
196
212
|
if (kUse64Bit) {
|
@@ -210,39 +226,52 @@ absl::Nonnull<char*> FastIntToBuffer(int_type i, absl::Nonnull<char*> buffer)
|
|
210
226
|
// Implementation of SimpleAtoi, generalized to support arbitrary base (used
|
211
227
|
// with base different from 10 elsewhere in Abseil implementation).
|
212
228
|
template <typename int_type>
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
"SimpleAtoi works only with 32
|
229
|
+
[[nodiscard]] bool safe_strtoi_base(absl::string_view s,
|
230
|
+
int_type* absl_nonnull out, int base) {
|
231
|
+
static_assert(sizeof(*out) == 1 || sizeof(*out) == 2 || sizeof(*out) == 4 ||
|
232
|
+
sizeof(*out) == 8,
|
233
|
+
"SimpleAtoi works only with 8, 16, 32, or 64-bit integers.");
|
218
234
|
static_assert(!std::is_floating_point<int_type>::value,
|
219
235
|
"Use SimpleAtof or SimpleAtod instead.");
|
220
236
|
bool parsed;
|
221
|
-
// TODO(jorg): This signed-ness check is used because it works correctly
|
222
|
-
// with enums, and it also serves to check that int_type is not a pointer.
|
223
|
-
// If one day something like std::is_signed<enum E> works, switch to it.
|
224
237
|
// These conditions are constexpr bools to suppress MSVC warning C4127.
|
225
|
-
constexpr bool kIsSigned =
|
226
|
-
constexpr
|
238
|
+
constexpr bool kIsSigned = is_signed<int_type>();
|
239
|
+
constexpr int kIntTypeSize = sizeof(*out) * 8;
|
227
240
|
if (kIsSigned) {
|
228
|
-
if (
|
241
|
+
if (kIntTypeSize == 64) {
|
229
242
|
int64_t val;
|
230
243
|
parsed = numbers_internal::safe_strto64_base(s, &val, base);
|
231
244
|
*out = static_cast<int_type>(val);
|
232
|
-
} else {
|
245
|
+
} else if (kIntTypeSize == 32) {
|
233
246
|
int32_t val;
|
234
247
|
parsed = numbers_internal::safe_strto32_base(s, &val, base);
|
235
248
|
*out = static_cast<int_type>(val);
|
249
|
+
} else if (kIntTypeSize == 16) {
|
250
|
+
int16_t val;
|
251
|
+
parsed = numbers_internal::safe_strto16_base(s, &val, base);
|
252
|
+
*out = static_cast<int_type>(val);
|
253
|
+
} else if (kIntTypeSize == 8) {
|
254
|
+
int8_t val;
|
255
|
+
parsed = numbers_internal::safe_strto8_base(s, &val, base);
|
256
|
+
*out = static_cast<int_type>(val);
|
236
257
|
}
|
237
258
|
} else {
|
238
|
-
if (
|
259
|
+
if (kIntTypeSize == 64) {
|
239
260
|
uint64_t val;
|
240
261
|
parsed = numbers_internal::safe_strtou64_base(s, &val, base);
|
241
262
|
*out = static_cast<int_type>(val);
|
242
|
-
} else {
|
263
|
+
} else if (kIntTypeSize == 32) {
|
243
264
|
uint32_t val;
|
244
265
|
parsed = numbers_internal::safe_strtou32_base(s, &val, base);
|
245
266
|
*out = static_cast<int_type>(val);
|
267
|
+
} else if (kIntTypeSize == 16) {
|
268
|
+
uint16_t val;
|
269
|
+
parsed = numbers_internal::safe_strtou16_base(s, &val, base);
|
270
|
+
*out = static_cast<int_type>(val);
|
271
|
+
} else if (kIntTypeSize == 8) {
|
272
|
+
uint8_t val;
|
273
|
+
parsed = numbers_internal::safe_strtou8_base(s, &val, base);
|
274
|
+
*out = static_cast<int_type>(val);
|
246
275
|
}
|
247
276
|
}
|
248
277
|
return parsed;
|
@@ -254,7 +283,7 @@ ABSL_MUST_USE_RESULT bool safe_strtoi_base(absl::string_view s,
|
|
254
283
|
// without the terminating null character. Thus `out` must be of length >= 16.
|
255
284
|
// Returns the number of non-pad digits of the output (it can never be zero
|
256
285
|
// since 0 has one digit).
|
257
|
-
inline size_t FastHexToBufferZeroPad16(uint64_t val,
|
286
|
+
inline size_t FastHexToBufferZeroPad16(uint64_t val, char* absl_nonnull out) {
|
258
287
|
#ifdef ABSL_INTERNAL_HAVE_SSSE3
|
259
288
|
uint64_t be = absl::big_endian::FromHost64(val);
|
260
289
|
const auto kNibbleMask = _mm_set1_epi8(0xf);
|
@@ -280,34 +309,34 @@ inline size_t FastHexToBufferZeroPad16(uint64_t val, absl::Nonnull<char*> out) {
|
|
280
309
|
} // namespace numbers_internal
|
281
310
|
|
282
311
|
template <typename int_type>
|
283
|
-
|
284
|
-
|
312
|
+
[[nodiscard]] bool SimpleAtoi(absl::string_view str,
|
313
|
+
int_type* absl_nonnull out) {
|
285
314
|
return numbers_internal::safe_strtoi_base(str, out, 10);
|
286
315
|
}
|
287
316
|
|
288
|
-
|
289
|
-
|
317
|
+
[[nodiscard]] inline bool SimpleAtoi(absl::string_view str,
|
318
|
+
absl::int128* absl_nonnull out) {
|
290
319
|
return numbers_internal::safe_strto128_base(str, out, 10);
|
291
320
|
}
|
292
321
|
|
293
|
-
|
294
|
-
|
322
|
+
[[nodiscard]] inline bool SimpleAtoi(absl::string_view str,
|
323
|
+
absl::uint128* absl_nonnull out) {
|
295
324
|
return numbers_internal::safe_strtou128_base(str, out, 10);
|
296
325
|
}
|
297
326
|
|
298
327
|
template <typename int_type>
|
299
|
-
|
300
|
-
|
328
|
+
[[nodiscard]] bool SimpleHexAtoi(absl::string_view str,
|
329
|
+
int_type* absl_nonnull out) {
|
301
330
|
return numbers_internal::safe_strtoi_base(str, out, 16);
|
302
331
|
}
|
303
332
|
|
304
|
-
|
305
|
-
|
333
|
+
[[nodiscard]] inline bool SimpleHexAtoi(absl::string_view str,
|
334
|
+
absl::int128* absl_nonnull out) {
|
306
335
|
return numbers_internal::safe_strto128_base(str, out, 16);
|
307
336
|
}
|
308
337
|
|
309
|
-
|
310
|
-
|
338
|
+
[[nodiscard]] inline bool SimpleHexAtoi(absl::string_view str,
|
339
|
+
absl::uint128* absl_nonnull out) {
|
311
340
|
return numbers_internal::safe_strtou128_base(str, out, 16);
|
312
341
|
}
|
313
342
|
|
@@ -42,8 +42,7 @@ ABSL_NAMESPACE_BEGIN
|
|
42
42
|
namespace {
|
43
43
|
// Append is merely a version of memcpy that returns the address of the byte
|
44
44
|
// after the area just overwritten.
|
45
|
-
inline
|
46
|
-
const AlphaNum& x) {
|
45
|
+
inline char* absl_nonnull Append(char* absl_nonnull out, const AlphaNum& x) {
|
47
46
|
// memcpy is allowed to overwrite arbitrary memory, so doing this after the
|
48
47
|
// call would force an extra fetch of x.size().
|
49
48
|
char* after = out + x.size();
|
@@ -159,7 +158,7 @@ std::string CatPieces(std::initializer_list<absl::string_view> pieces) {
|
|
159
158
|
assert(((src).size() == 0) || \
|
160
159
|
(uintptr_t((src).data() - (dest).data()) > uintptr_t((dest).size())))
|
161
160
|
|
162
|
-
void AppendPieces(
|
161
|
+
void AppendPieces(std::string* absl_nonnull dest,
|
163
162
|
std::initializer_list<absl::string_view> pieces) {
|
164
163
|
size_t old_size = dest->size();
|
165
164
|
size_t to_append = 0;
|
@@ -183,7 +182,7 @@ void AppendPieces(absl::Nonnull<std::string*> dest,
|
|
183
182
|
|
184
183
|
} // namespace strings_internal
|
185
184
|
|
186
|
-
void StrAppend(
|
185
|
+
void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a) {
|
187
186
|
ASSERT_NO_OVERLAP(*dest, a);
|
188
187
|
std::string::size_type old_size = dest->size();
|
189
188
|
STLStringAppendUninitializedAmortized(dest, a.size());
|
@@ -193,7 +192,7 @@ void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a) {
|
|
193
192
|
assert(out == begin + dest->size());
|
194
193
|
}
|
195
194
|
|
196
|
-
void StrAppend(
|
195
|
+
void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
|
197
196
|
const AlphaNum& b) {
|
198
197
|
ASSERT_NO_OVERLAP(*dest, a);
|
199
198
|
ASSERT_NO_OVERLAP(*dest, b);
|
@@ -206,7 +205,7 @@ void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a,
|
|
206
205
|
assert(out == begin + dest->size());
|
207
206
|
}
|
208
207
|
|
209
|
-
void StrAppend(
|
208
|
+
void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
|
210
209
|
const AlphaNum& b, const AlphaNum& c) {
|
211
210
|
ASSERT_NO_OVERLAP(*dest, a);
|
212
211
|
ASSERT_NO_OVERLAP(*dest, b);
|
@@ -221,7 +220,7 @@ void StrAppend(absl::Nonnull<std::string*> dest, const AlphaNum& a,
|
|
221
220
|
assert(out == begin + dest->size());
|
222
221
|
}
|
223
222
|
|
224
|
-
void StrAppend(
|
223
|
+
void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
|
225
224
|
const AlphaNum& b, const AlphaNum& c, const AlphaNum& d) {
|
226
225
|
ASSERT_NO_OVERLAP(*dest, a);
|
227
226
|
ASSERT_NO_OVERLAP(*dest, b);
|
@@ -111,7 +111,7 @@
|
|
111
111
|
#include "absl/strings/numbers.h"
|
112
112
|
#include "absl/strings/string_view.h"
|
113
113
|
|
114
|
-
#if
|
114
|
+
#if !defined(ABSL_USES_STD_STRING_VIEW)
|
115
115
|
#include <string_view>
|
116
116
|
#endif
|
117
117
|
|
@@ -191,29 +191,29 @@ struct Hex {
|
|
191
191
|
template <typename Int>
|
192
192
|
explicit Hex(
|
193
193
|
Int v, PadSpec spec = absl::kNoPad,
|
194
|
-
|
195
|
-
|
194
|
+
std::enable_if_t<sizeof(Int) == 1 && !std::is_pointer<Int>::value, bool> =
|
195
|
+
true)
|
196
196
|
: Hex(spec, static_cast<uint8_t>(v)) {}
|
197
197
|
template <typename Int>
|
198
198
|
explicit Hex(
|
199
199
|
Int v, PadSpec spec = absl::kNoPad,
|
200
|
-
|
201
|
-
|
200
|
+
std::enable_if_t<sizeof(Int) == 2 && !std::is_pointer<Int>::value, bool> =
|
201
|
+
true)
|
202
202
|
: Hex(spec, static_cast<uint16_t>(v)) {}
|
203
203
|
template <typename Int>
|
204
204
|
explicit Hex(
|
205
205
|
Int v, PadSpec spec = absl::kNoPad,
|
206
|
-
|
207
|
-
|
206
|
+
std::enable_if_t<sizeof(Int) == 4 && !std::is_pointer<Int>::value, bool> =
|
207
|
+
true)
|
208
208
|
: Hex(spec, static_cast<uint32_t>(v)) {}
|
209
209
|
template <typename Int>
|
210
210
|
explicit Hex(
|
211
211
|
Int v, PadSpec spec = absl::kNoPad,
|
212
|
-
|
213
|
-
|
212
|
+
std::enable_if_t<sizeof(Int) == 8 && !std::is_pointer<Int>::value, bool> =
|
213
|
+
true)
|
214
214
|
: Hex(spec, static_cast<uint64_t>(v)) {}
|
215
215
|
template <typename Pointee>
|
216
|
-
explicit Hex(
|
216
|
+
explicit Hex(Pointee* absl_nullable v, PadSpec spec = absl::kNoPad)
|
217
217
|
: Hex(spec, reinterpret_cast<uintptr_t>(v)) {}
|
218
218
|
|
219
219
|
template <typename S>
|
@@ -262,7 +262,7 @@ struct Dec {
|
|
262
262
|
|
263
263
|
template <typename Int>
|
264
264
|
explicit Dec(Int v, PadSpec spec = absl::kNoPad,
|
265
|
-
|
265
|
+
std::enable_if_t<sizeof(Int) <= 8, bool> = true)
|
266
266
|
: value(v >= 0 ? static_cast<uint64_t>(v)
|
267
267
|
: uint64_t{0} - static_cast<uint64_t>(v)),
|
268
268
|
width(spec == absl::kNoPad ? 1
|
@@ -359,14 +359,14 @@ class AlphaNum {
|
|
359
359
|
ABSL_ATTRIBUTE_LIFETIME_BOUND)
|
360
360
|
: piece_(&buf.data[0], buf.size) {}
|
361
361
|
|
362
|
-
AlphaNum(
|
362
|
+
AlphaNum(const char* absl_nullable c_str // NOLINT(runtime/explicit)
|
363
363
|
ABSL_ATTRIBUTE_LIFETIME_BOUND)
|
364
364
|
: piece_(NullSafeStringView(c_str)) {}
|
365
365
|
AlphaNum(absl::string_view pc // NOLINT(runtime/explicit)
|
366
366
|
ABSL_ATTRIBUTE_LIFETIME_BOUND)
|
367
367
|
: piece_(pc) {}
|
368
368
|
|
369
|
-
#if
|
369
|
+
#if !defined(ABSL_USES_STD_STRING_VIEW)
|
370
370
|
AlphaNum(std::string_view pc // NOLINT(runtime/explicit)
|
371
371
|
ABSL_ATTRIBUTE_LIFETIME_BOUND)
|
372
372
|
: piece_(pc.data(), pc.size()) {}
|
@@ -392,7 +392,7 @@ class AlphaNum {
|
|
392
392
|
AlphaNum& operator=(const AlphaNum&) = delete;
|
393
393
|
|
394
394
|
absl::string_view::size_type size() const { return piece_.size(); }
|
395
|
-
|
395
|
+
const char* absl_nullable data() const { return piece_.data(); }
|
396
396
|
absl::string_view Piece() const { return piece_; }
|
397
397
|
|
398
398
|
// Match unscoped enums. Use integral promotion so that a `char`-backed
|
@@ -462,7 +462,7 @@ namespace strings_internal {
|
|
462
462
|
|
463
463
|
// Do not call directly - this is not part of the public API.
|
464
464
|
std::string CatPieces(std::initializer_list<absl::string_view> pieces);
|
465
|
-
void AppendPieces(
|
465
|
+
void AppendPieces(std::string* absl_nonnull dest,
|
466
466
|
std::initializer_list<absl::string_view> pieces);
|
467
467
|
|
468
468
|
template <typename Integer>
|
@@ -538,28 +538,28 @@ using EnableIfFastCase = T;
|
|
538
538
|
|
539
539
|
} // namespace strings_internal
|
540
540
|
|
541
|
-
|
541
|
+
[[nodiscard]] inline std::string StrCat() { return std::string(); }
|
542
542
|
|
543
543
|
template <typename T>
|
544
|
-
|
544
|
+
[[nodiscard]] inline std::string StrCat(
|
545
545
|
strings_internal::EnableIfFastCase<T> a) {
|
546
546
|
return strings_internal::SingleArgStrCat(a);
|
547
547
|
}
|
548
|
-
|
548
|
+
[[nodiscard]] inline std::string StrCat(const AlphaNum& a) {
|
549
549
|
return std::string(a.data(), a.size());
|
550
550
|
}
|
551
551
|
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
552
|
+
[[nodiscard]] std::string StrCat(const AlphaNum& a, const AlphaNum& b);
|
553
|
+
[[nodiscard]] std::string StrCat(const AlphaNum& a, const AlphaNum& b,
|
554
|
+
const AlphaNum& c);
|
555
|
+
[[nodiscard]] std::string StrCat(const AlphaNum& a, const AlphaNum& b,
|
556
|
+
const AlphaNum& c, const AlphaNum& d);
|
557
557
|
|
558
558
|
// Support 5 or more arguments
|
559
559
|
template <typename... AV>
|
560
|
-
|
561
|
-
|
562
|
-
|
560
|
+
[[nodiscard]] inline std::string StrCat(const AlphaNum& a, const AlphaNum& b,
|
561
|
+
const AlphaNum& c, const AlphaNum& d,
|
562
|
+
const AlphaNum& e, const AV&... args) {
|
563
563
|
return strings_internal::CatPieces(
|
564
564
|
{a.Piece(), b.Piece(), c.Piece(), d.Piece(), e.Piece(),
|
565
565
|
static_cast<const AlphaNum&>(args).Piece()...});
|
@@ -592,18 +592,18 @@ ABSL_MUST_USE_RESULT inline std::string StrCat(
|
|
592
592
|
// absl::string_view p = s;
|
593
593
|
// StrAppend(&s, p);
|
594
594
|
|
595
|
-
inline void StrAppend(
|
596
|
-
void StrAppend(
|
597
|
-
void StrAppend(
|
595
|
+
inline void StrAppend(std::string* absl_nonnull) {}
|
596
|
+
void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a);
|
597
|
+
void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
|
598
598
|
const AlphaNum& b);
|
599
|
-
void StrAppend(
|
599
|
+
void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
|
600
600
|
const AlphaNum& b, const AlphaNum& c);
|
601
|
-
void StrAppend(
|
601
|
+
void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
|
602
602
|
const AlphaNum& b, const AlphaNum& c, const AlphaNum& d);
|
603
603
|
|
604
604
|
// Support 5 or more arguments
|
605
605
|
template <typename... AV>
|
606
|
-
inline void StrAppend(
|
606
|
+
inline void StrAppend(std::string* absl_nonnull dest, const AlphaNum& a,
|
607
607
|
const AlphaNum& b, const AlphaNum& c, const AlphaNum& d,
|
608
608
|
const AlphaNum& e, const AV&... args) {
|
609
609
|
strings_internal::AppendPieces(
|
@@ -112,7 +112,7 @@ class UntypedFormatSpec {
|
|
112
112
|
|
113
113
|
protected:
|
114
114
|
explicit UntypedFormatSpec(
|
115
|
-
|
115
|
+
const str_format_internal::ParsedFormatBase* absl_nonnull pc)
|
116
116
|
: spec_(pc) {}
|
117
117
|
|
118
118
|
private:
|
@@ -152,7 +152,7 @@ str_format_internal::StreamedWrapper<T> FormatStreamed(const T& v) {
|
|
152
152
|
// EXPECT_EQ(8, n);
|
153
153
|
class FormatCountCapture {
|
154
154
|
public:
|
155
|
-
explicit FormatCountCapture(
|
155
|
+
explicit FormatCountCapture(int* absl_nonnull p) : p_(p) {}
|
156
156
|
|
157
157
|
private:
|
158
158
|
// FormatCountCaptureHelper is used to define FormatConvertImpl() for this
|
@@ -161,8 +161,8 @@ class FormatCountCapture {
|
|
161
161
|
// Unused() is here because of the false positive from -Wunused-private-field
|
162
162
|
// p_ is used in the templated function of the friend FormatCountCaptureHelper
|
163
163
|
// class.
|
164
|
-
|
165
|
-
|
164
|
+
int* absl_nonnull Unused() { return p_; }
|
165
|
+
int* absl_nonnull p_;
|
166
166
|
};
|
167
167
|
|
168
168
|
// FormatSpec
|
@@ -359,8 +359,8 @@ using ParsedFormat = str_format_internal::ExtendedParsedFormat<
|
|
359
359
|
//
|
360
360
|
// Returns an empty string in case of error.
|
361
361
|
template <typename... Args>
|
362
|
-
|
363
|
-
|
362
|
+
[[nodiscard]] std::string StrFormat(const FormatSpec<Args...>& format,
|
363
|
+
const Args&... args) {
|
364
364
|
return str_format_internal::FormatPack(
|
365
365
|
str_format_internal::UntypedFormatSpecImpl::Extract(format),
|
366
366
|
{str_format_internal::FormatArgImpl(args)...});
|
@@ -377,7 +377,7 @@ ABSL_MUST_USE_RESULT std::string StrFormat(const FormatSpec<Args...>& format,
|
|
377
377
|
// std::string orig("For example PI is approximately ");
|
378
378
|
// std::cout << StrAppendFormat(&orig, "%12.6f", 3.14);
|
379
379
|
template <typename... Args>
|
380
|
-
std::string& StrAppendFormat(
|
380
|
+
std::string& StrAppendFormat(std::string* absl_nonnull dst,
|
381
381
|
const FormatSpec<Args...>& format,
|
382
382
|
const Args&... args) {
|
383
383
|
return str_format_internal::AppendPack(
|
@@ -396,7 +396,7 @@ std::string& StrAppendFormat(absl::Nonnull<std::string*> dst,
|
|
396
396
|
//
|
397
397
|
// std::cout << StreamFormat("%12.6f", 3.14);
|
398
398
|
template <typename... Args>
|
399
|
-
|
399
|
+
[[nodiscard]] str_format_internal::Streamable StreamFormat(
|
400
400
|
const FormatSpec<Args...>& format, const Args&... args) {
|
401
401
|
return str_format_internal::Streamable(
|
402
402
|
str_format_internal::UntypedFormatSpecImpl::Extract(format),
|
@@ -437,7 +437,7 @@ int PrintF(const FormatSpec<Args...>& format, const Args&... args) {
|
|
437
437
|
// Outputs: "The capital of Mongolia is Ulaanbaatar"
|
438
438
|
//
|
439
439
|
template <typename... Args>
|
440
|
-
int FPrintF(
|
440
|
+
int FPrintF(std::FILE* absl_nonnull output, const FormatSpec<Args...>& format,
|
441
441
|
const Args&... args) {
|
442
442
|
return str_format_internal::FprintF(
|
443
443
|
output, str_format_internal::UntypedFormatSpecImpl::Extract(format),
|
@@ -466,7 +466,7 @@ int FPrintF(absl::Nonnull<std::FILE*> output, const FormatSpec<Args...>& format,
|
|
466
466
|
// Post-condition: output == "The capital of Mongolia is Ulaanbaatar"
|
467
467
|
//
|
468
468
|
template <typename... Args>
|
469
|
-
int SNPrintF(
|
469
|
+
int SNPrintF(char* absl_nonnull output, std::size_t size,
|
470
470
|
const FormatSpec<Args...>& format, const Args&... args) {
|
471
471
|
return str_format_internal::SnprintF(
|
472
472
|
output, size, str_format_internal::UntypedFormatSpecImpl::Extract(format),
|
@@ -500,7 +500,7 @@ class FormatRawSink {
|
|
500
500
|
template <typename T,
|
501
501
|
typename = typename std::enable_if<std::is_constructible<
|
502
502
|
str_format_internal::FormatRawSinkImpl, T*>::value>::type>
|
503
|
-
FormatRawSink(
|
503
|
+
FormatRawSink(T* absl_nonnull raw) // NOLINT
|
504
504
|
: sink_(raw) {}
|
505
505
|
|
506
506
|
private:
|
@@ -582,9 +582,9 @@ using FormatArg = str_format_internal::FormatArgImpl;
|
|
582
582
|
// return std::move(out);
|
583
583
|
// }
|
584
584
|
//
|
585
|
-
|
586
|
-
|
587
|
-
|
585
|
+
[[nodiscard]] inline bool FormatUntyped(FormatRawSink raw_sink,
|
586
|
+
const UntypedFormatSpec& format,
|
587
|
+
absl::Span<const FormatArg> args) {
|
588
588
|
return str_format_internal::FormatUntyped(
|
589
589
|
str_format_internal::FormatRawSinkImpl::Extract(raw_sink),
|
590
590
|
str_format_internal::UntypedFormatSpecImpl::Extract(format), args);
|
@@ -609,7 +609,7 @@ ABSL_MUST_USE_RESULT inline bool FormatUntyped(
|
|
609
609
|
//
|
610
610
|
// Note that unlike with AbslFormatConvert(), AbslStringify() does not allow
|
611
611
|
// customization of allowed conversion characters. AbslStringify() uses `%v` as
|
612
|
-
// the underlying conversion
|
612
|
+
// the underlying conversion specifier. Additionally, AbslStringify() supports
|
613
613
|
// use with absl::StrCat while AbslFormatConvert() does not.
|
614
614
|
//
|
615
615
|
// Example:
|
@@ -857,16 +857,16 @@ class FormatSink {
|
|
857
857
|
}
|
858
858
|
|
859
859
|
// Support `absl::Format(&sink, format, args...)`.
|
860
|
-
friend void AbslFormatFlush(
|
860
|
+
friend void AbslFormatFlush(FormatSink* absl_nonnull sink,
|
861
861
|
absl::string_view v) {
|
862
862
|
sink->Append(v);
|
863
863
|
}
|
864
864
|
|
865
865
|
private:
|
866
866
|
friend str_format_internal::FormatSinkImpl;
|
867
|
-
explicit FormatSink(
|
867
|
+
explicit FormatSink(str_format_internal::FormatSinkImpl* absl_nonnull s)
|
868
868
|
: sink_(s) {}
|
869
|
-
|
869
|
+
str_format_internal::FormatSinkImpl* absl_nonnull sink_;
|
870
870
|
};
|
871
871
|
|
872
872
|
// FormatConvertResult
|
@@ -37,8 +37,8 @@ using FixedMapping =
|
|
37
37
|
// occurred.
|
38
38
|
int ApplySubstitutions(
|
39
39
|
absl::string_view s,
|
40
|
-
|
41
|
-
|
40
|
+
std::vector<strings_internal::ViableSubstitution>* absl_nonnull subs_ptr,
|
41
|
+
std::string* absl_nonnull result_ptr) {
|
42
42
|
auto& subs = *subs_ptr;
|
43
43
|
int substitutions = 0;
|
44
44
|
size_t pos = 0;
|
@@ -83,7 +83,7 @@ std::string StrReplaceAll(absl::string_view s,
|
|
83
83
|
}
|
84
84
|
|
85
85
|
int StrReplaceAll(strings_internal::FixedMapping replacements,
|
86
|
-
|
86
|
+
std::string* absl_nonnull target) {
|
87
87
|
return StrReplaceAll<strings_internal::FixedMapping>(replacements, target);
|
88
88
|
}
|
89
89
|
|