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
@@ -26,6 +26,7 @@
|
|
26
26
|
#include <cstring>
|
27
27
|
#include <cwchar>
|
28
28
|
#include <string>
|
29
|
+
#include <string_view>
|
29
30
|
#include <type_traits>
|
30
31
|
|
31
32
|
#include "absl/base/config.h"
|
@@ -34,13 +35,10 @@
|
|
34
35
|
#include "absl/numeric/int128.h"
|
35
36
|
#include "absl/strings/internal/str_format/extension.h"
|
36
37
|
#include "absl/strings/internal/str_format/float_conversion.h"
|
38
|
+
#include "absl/strings/internal/utf8.h"
|
37
39
|
#include "absl/strings/numbers.h"
|
38
40
|
#include "absl/strings/string_view.h"
|
39
41
|
|
40
|
-
#if defined(ABSL_HAVE_STD_STRING_VIEW)
|
41
|
-
#include <string_view>
|
42
|
-
#endif
|
43
|
-
|
44
42
|
namespace absl {
|
45
43
|
ABSL_NAMESPACE_BEGIN
|
46
44
|
namespace str_format_internal {
|
@@ -311,68 +309,16 @@ inline bool ConvertStringArg(string_view v, const FormatConversionSpecImpl conv,
|
|
311
309
|
conv.has_left_flag());
|
312
310
|
}
|
313
311
|
|
314
|
-
struct ShiftState {
|
315
|
-
bool saw_high_surrogate = false;
|
316
|
-
uint8_t bits = 0;
|
317
|
-
};
|
318
|
-
|
319
|
-
// Converts `v` from UTF-16 or UTF-32 to UTF-8 and writes to `buf`. `buf` is
|
320
|
-
// assumed to have enough space for the output. `s` is used to carry state
|
321
|
-
// between successive calls with a UTF-16 surrogate pair. Returns the number of
|
322
|
-
// chars written, or `static_cast<size_t>(-1)` on failure.
|
323
|
-
//
|
324
|
-
// This is basically std::wcrtomb(), but always outputting UTF-8 instead of
|
325
|
-
// respecting the current locale.
|
326
|
-
inline size_t WideToUtf8(wchar_t wc, char *buf, ShiftState &s) {
|
327
|
-
const auto v = static_cast<uint32_t>(wc);
|
328
|
-
if (v < 0x80) {
|
329
|
-
*buf = static_cast<char>(v);
|
330
|
-
return 1;
|
331
|
-
} else if (v < 0x800) {
|
332
|
-
*buf++ = static_cast<char>(0xc0 | (v >> 6));
|
333
|
-
*buf = static_cast<char>(0x80 | (v & 0x3f));
|
334
|
-
return 2;
|
335
|
-
} else if (v < 0xd800 || (v - 0xe000) < 0x2000) {
|
336
|
-
*buf++ = static_cast<char>(0xe0 | (v >> 12));
|
337
|
-
*buf++ = static_cast<char>(0x80 | ((v >> 6) & 0x3f));
|
338
|
-
*buf = static_cast<char>(0x80 | (v & 0x3f));
|
339
|
-
return 3;
|
340
|
-
} else if ((v - 0x10000) < 0x100000) {
|
341
|
-
*buf++ = static_cast<char>(0xf0 | (v >> 18));
|
342
|
-
*buf++ = static_cast<char>(0x80 | ((v >> 12) & 0x3f));
|
343
|
-
*buf++ = static_cast<char>(0x80 | ((v >> 6) & 0x3f));
|
344
|
-
*buf = static_cast<char>(0x80 | (v & 0x3f));
|
345
|
-
return 4;
|
346
|
-
} else if (v < 0xdc00) {
|
347
|
-
s.saw_high_surrogate = true;
|
348
|
-
s.bits = static_cast<uint8_t>(v & 0x3);
|
349
|
-
const uint8_t high_bits = ((v >> 6) & 0xf) + 1;
|
350
|
-
*buf++ = static_cast<char>(0xf0 | (high_bits >> 2));
|
351
|
-
*buf =
|
352
|
-
static_cast<char>(0x80 | static_cast<uint8_t>((high_bits & 0x3) << 4) |
|
353
|
-
static_cast<uint8_t>((v >> 2) & 0xf));
|
354
|
-
return 2;
|
355
|
-
} else if (v < 0xe000 && s.saw_high_surrogate) {
|
356
|
-
*buf++ = static_cast<char>(0x80 | static_cast<uint8_t>(s.bits << 4) |
|
357
|
-
static_cast<uint8_t>((v >> 6) & 0xf));
|
358
|
-
*buf = static_cast<char>(0x80 | (v & 0x3f));
|
359
|
-
s.saw_high_surrogate = false;
|
360
|
-
s.bits = 0;
|
361
|
-
return 2;
|
362
|
-
} else {
|
363
|
-
return static_cast<size_t>(-1);
|
364
|
-
}
|
365
|
-
}
|
366
|
-
|
367
312
|
inline bool ConvertStringArg(const wchar_t *v,
|
368
313
|
size_t len,
|
369
314
|
const FormatConversionSpecImpl conv,
|
370
315
|
FormatSinkImpl *sink) {
|
371
316
|
FixedArray<char> mb(len * 4);
|
372
|
-
ShiftState s;
|
317
|
+
strings_internal::ShiftState s;
|
373
318
|
size_t chars_written = 0;
|
374
319
|
for (size_t i = 0; i < len; ++i) {
|
375
|
-
const size_t chars =
|
320
|
+
const size_t chars =
|
321
|
+
strings_internal::WideToUtf8(v[i], &mb[chars_written], s);
|
376
322
|
if (chars == static_cast<size_t>(-1)) { return false; }
|
377
323
|
chars_written += chars;
|
378
324
|
}
|
@@ -382,8 +328,8 @@ inline bool ConvertStringArg(const wchar_t *v,
|
|
382
328
|
bool ConvertWCharTImpl(wchar_t v, const FormatConversionSpecImpl conv,
|
383
329
|
FormatSinkImpl *sink) {
|
384
330
|
char mb[4];
|
385
|
-
ShiftState s;
|
386
|
-
const size_t chars_written = WideToUtf8(v, mb, s);
|
331
|
+
strings_internal::ShiftState s;
|
332
|
+
const size_t chars_written = strings_internal::WideToUtf8(v, mb, s);
|
387
333
|
return chars_written != static_cast<size_t>(-1) && !s.saw_high_surrogate &&
|
388
334
|
ConvertStringArg(string_view(mb, chars_written), conv, sink);
|
389
335
|
}
|
@@ -510,13 +456,11 @@ StringConvertResult FormatConvertImpl(string_view v,
|
|
510
456
|
return {ConvertStringArg(v, conv, sink)};
|
511
457
|
}
|
512
458
|
|
513
|
-
#if defined(ABSL_HAVE_STD_STRING_VIEW)
|
514
459
|
StringConvertResult FormatConvertImpl(std::wstring_view v,
|
515
460
|
const FormatConversionSpecImpl conv,
|
516
461
|
FormatSinkImpl* sink) {
|
517
462
|
return {ConvertStringArg(v.data(), v.size(), conv, sink)};
|
518
463
|
}
|
519
|
-
#endif
|
520
464
|
|
521
465
|
StringPtrConvertResult FormatConvertImpl(const char* v,
|
522
466
|
const FormatConversionSpecImpl conv,
|
@@ -26,6 +26,7 @@
|
|
26
26
|
#include <memory>
|
27
27
|
#include <sstream>
|
28
28
|
#include <string>
|
29
|
+
#include <string_view>
|
29
30
|
#include <type_traits>
|
30
31
|
#include <utility>
|
31
32
|
|
@@ -37,10 +38,6 @@
|
|
37
38
|
#include "absl/strings/internal/str_format/extension.h"
|
38
39
|
#include "absl/strings/string_view.h"
|
39
40
|
|
40
|
-
#if defined(ABSL_HAVE_STD_STRING_VIEW)
|
41
|
-
#include <string_view>
|
42
|
-
#endif
|
43
|
-
|
44
41
|
namespace absl {
|
45
42
|
ABSL_NAMESPACE_BEGIN
|
46
43
|
|
@@ -228,7 +225,6 @@ StringConvertResult FormatConvertImpl(const std::wstring& v,
|
|
228
225
|
StringConvertResult FormatConvertImpl(string_view v,
|
229
226
|
FormatConversionSpecImpl conv,
|
230
227
|
FormatSinkImpl* sink);
|
231
|
-
#if defined(ABSL_HAVE_STD_STRING_VIEW)
|
232
228
|
StringConvertResult FormatConvertImpl(std::wstring_view v,
|
233
229
|
FormatConversionSpecImpl conv,
|
234
230
|
FormatSinkImpl* sink);
|
@@ -239,7 +235,6 @@ inline StringConvertResult FormatConvertImpl(std::string_view v,
|
|
239
235
|
return FormatConvertImpl(absl::string_view(v.data(), v.size()), conv, sink);
|
240
236
|
}
|
241
237
|
#endif // !ABSL_USES_STD_STRING_VIEW
|
242
|
-
#endif // ABSL_HAVE_STD_STRING_VIEW
|
243
238
|
|
244
239
|
using StringPtrConvertResult = ArgConvertResult<FormatConversionCharSetUnion(
|
245
240
|
FormatConversionCharSetInternal::s,
|
@@ -651,15 +646,10 @@ class FormatArgImpl {
|
|
651
646
|
ABSL_INTERNAL_FORMAT_DISPATCH_INSTANTIATE_(const wchar_t*, __VA_ARGS__); \
|
652
647
|
ABSL_INTERNAL_FORMAT_DISPATCH_INSTANTIATE_(std::wstring, __VA_ARGS__)
|
653
648
|
|
654
|
-
#if defined(ABSL_HAVE_STD_STRING_VIEW)
|
655
649
|
#define ABSL_INTERNAL_FORMAT_DISPATCH_OVERLOADS_EXPAND_(...) \
|
656
650
|
ABSL_INTERNAL_FORMAT_DISPATCH_OVERLOADS_EXPAND_NO_WSTRING_VIEW_( \
|
657
651
|
__VA_ARGS__); \
|
658
652
|
ABSL_INTERNAL_FORMAT_DISPATCH_INSTANTIATE_(std::wstring_view, __VA_ARGS__)
|
659
|
-
#else
|
660
|
-
#define ABSL_INTERNAL_FORMAT_DISPATCH_OVERLOADS_EXPAND_(...) \
|
661
|
-
ABSL_INTERNAL_FORMAT_DISPATCH_OVERLOADS_EXPAND_NO_WSTRING_VIEW_(__VA_ARGS__)
|
662
|
-
#endif
|
663
653
|
|
664
654
|
ABSL_INTERNAL_FORMAT_DISPATCH_OVERLOADS_EXPAND_(extern);
|
665
655
|
|
@@ -33,28 +33,6 @@ std::string FlagsToString(Flags v) {
|
|
33
33
|
return s;
|
34
34
|
}
|
35
35
|
|
36
|
-
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
37
|
-
|
38
|
-
#define ABSL_INTERNAL_X_VAL(id) \
|
39
|
-
constexpr absl::FormatConversionChar FormatConversionCharInternal::id;
|
40
|
-
ABSL_INTERNAL_CONVERSION_CHARS_EXPAND_(ABSL_INTERNAL_X_VAL, )
|
41
|
-
#undef ABSL_INTERNAL_X_VAL
|
42
|
-
// NOLINTNEXTLINE(readability-redundant-declaration)
|
43
|
-
constexpr absl::FormatConversionChar FormatConversionCharInternal::kNone;
|
44
|
-
|
45
|
-
#define ABSL_INTERNAL_CHAR_SET_CASE(c) \
|
46
|
-
constexpr FormatConversionCharSet FormatConversionCharSetInternal::c;
|
47
|
-
ABSL_INTERNAL_CONVERSION_CHARS_EXPAND_(ABSL_INTERNAL_CHAR_SET_CASE, )
|
48
|
-
#undef ABSL_INTERNAL_CHAR_SET_CASE
|
49
|
-
|
50
|
-
constexpr FormatConversionCharSet FormatConversionCharSetInternal::kStar;
|
51
|
-
constexpr FormatConversionCharSet FormatConversionCharSetInternal::kIntegral;
|
52
|
-
constexpr FormatConversionCharSet FormatConversionCharSetInternal::kFloating;
|
53
|
-
constexpr FormatConversionCharSet FormatConversionCharSetInternal::kNumeric;
|
54
|
-
constexpr FormatConversionCharSet FormatConversionCharSetInternal::kPointer;
|
55
|
-
|
56
|
-
#endif // ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
57
|
-
|
58
36
|
bool FormatSinkImpl::PutPaddedString(string_view value, int width,
|
59
37
|
int precision, bool left) {
|
60
38
|
size_t space_remaining = 0;
|
@@ -33,9 +33,11 @@ struct ClearErrnoGuard {
|
|
33
33
|
|
34
34
|
void BufferRawSink::Write(string_view v) {
|
35
35
|
size_t to_write = std::min(v.size(), size_);
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
if (to_write > 0) {
|
37
|
+
std::memcpy(buffer_, v.data(), to_write);
|
38
|
+
buffer_ += to_write;
|
39
|
+
size_ -= to_write;
|
40
|
+
}
|
39
41
|
total_written_ += v.size();
|
40
42
|
}
|
41
43
|
|
@@ -132,8 +132,10 @@ class ParsedFormatBase {
|
|
132
132
|
has_error_ = other.has_error_;
|
133
133
|
items_ = other.items_;
|
134
134
|
size_t text_size = items_.empty() ? 0 : items_.back().text_end;
|
135
|
-
data_
|
136
|
-
|
135
|
+
data_ = std::make_unique<char[]>(text_size);
|
136
|
+
if (text_size > 0) {
|
137
|
+
memcpy(data_.get(), other.data_.get(), text_size);
|
138
|
+
}
|
137
139
|
return *this;
|
138
140
|
}
|
139
141
|
|
@@ -43,6 +43,7 @@
|
|
43
43
|
#include <utility>
|
44
44
|
|
45
45
|
#include "absl/base/config.h"
|
46
|
+
#include "absl/base/internal/iterator_traits.h"
|
46
47
|
#include "absl/base/internal/raw_logging.h"
|
47
48
|
#include "absl/strings/internal/ostringstream.h"
|
48
49
|
#include "absl/strings/internal/resize_uninitialized.h"
|
@@ -228,9 +229,8 @@ std::string JoinAlgorithm(Iterator start, Iterator end, absl::string_view s,
|
|
228
229
|
// range will be traversed twice: once to calculate the total needed size, and
|
229
230
|
// then again to copy the elements and delimiters to the output string.
|
230
231
|
template <typename Iterator,
|
231
|
-
typename =
|
232
|
-
|
233
|
-
std::forward_iterator_tag>::value>::type>
|
232
|
+
typename = std::enable_if_t<
|
233
|
+
base_internal::IsAtLeastForwardIterator<Iterator>::value>>
|
234
234
|
std::string JoinAlgorithm(Iterator start, Iterator end, absl::string_view s,
|
235
235
|
NoFormatter) {
|
236
236
|
std::string result;
|
@@ -50,11 +50,6 @@ struct StringConstant {
|
|
50
50
|
"The input string_view must point to constant data.");
|
51
51
|
};
|
52
52
|
|
53
|
-
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
54
|
-
template <typename T>
|
55
|
-
constexpr absl::string_view StringConstant<T>::value;
|
56
|
-
#endif
|
57
|
-
|
58
53
|
// Factory function for `StringConstant` instances.
|
59
54
|
// It supports callables that have a constexpr default constructor and a
|
60
55
|
// constexpr operator().
|
@@ -16,11 +16,17 @@
|
|
16
16
|
|
17
17
|
#include "absl/strings/internal/utf8.h"
|
18
18
|
|
19
|
+
#include <cstddef>
|
20
|
+
#include <cstdint>
|
21
|
+
#include <limits>
|
22
|
+
|
23
|
+
#include "absl/base/config.h"
|
24
|
+
|
19
25
|
namespace absl {
|
20
26
|
ABSL_NAMESPACE_BEGIN
|
21
27
|
namespace strings_internal {
|
22
28
|
|
23
|
-
size_t EncodeUTF8Char(char
|
29
|
+
size_t EncodeUTF8Char(char* buffer, char32_t utf8_char) {
|
24
30
|
if (utf8_char <= 0x7F) {
|
25
31
|
*buffer = static_cast<char>(utf8_char);
|
26
32
|
return 1;
|
@@ -48,6 +54,95 @@ size_t EncodeUTF8Char(char *buffer, char32_t utf8_char) {
|
|
48
54
|
}
|
49
55
|
}
|
50
56
|
|
57
|
+
size_t WideToUtf8(wchar_t wc, char* buf, ShiftState& s) {
|
58
|
+
// Reinterpret the output buffer `buf` as `unsigned char*` for subsequent
|
59
|
+
// bitwise operations. This ensures well-defined behavior for bit
|
60
|
+
// manipulations (avoiding issues with signed `char`) and is safe under C++
|
61
|
+
// aliasing rules, as `unsigned char` can alias any type.
|
62
|
+
auto* ubuf = reinterpret_cast<unsigned char*>(buf);
|
63
|
+
const uint32_t v = static_cast<uint32_t>(wc);
|
64
|
+
constexpr size_t kError = static_cast<size_t>(-1);
|
65
|
+
|
66
|
+
if (v <= 0x007F) {
|
67
|
+
// 1-byte sequence (U+0000 to U+007F).
|
68
|
+
// 0xxxxxxx.
|
69
|
+
ubuf[0] = (0b0111'1111 & v);
|
70
|
+
s = {}; // Reset surrogate state.
|
71
|
+
return 1;
|
72
|
+
} else if (0x0080 <= v && v <= 0x07FF) {
|
73
|
+
// 2-byte sequence (U+0080 to U+07FF).
|
74
|
+
// 110xxxxx 10xxxxxx.
|
75
|
+
ubuf[0] = 0b1100'0000 | (0b0001'1111 & (v >> 6));
|
76
|
+
ubuf[1] = 0b1000'0000 | (0b0011'1111 & v);
|
77
|
+
s = {}; // Reset surrogate state.
|
78
|
+
return 2;
|
79
|
+
} else if ((0x0800 <= v && v <= 0xD7FF) || (0xE000 <= v && v <= 0xFFFF)) {
|
80
|
+
// 3-byte sequence (U+0800 to U+D7FF or U+E000 to U+FFFF).
|
81
|
+
// Excludes surrogate code points U+D800-U+DFFF.
|
82
|
+
// 1110xxxx 10xxxxxx 10xxxxxx.
|
83
|
+
ubuf[0] = 0b1110'0000 | (0b0000'1111 & (v >> 12));
|
84
|
+
ubuf[1] = 0b1000'0000 | (0b0011'1111 & (v >> 6));
|
85
|
+
ubuf[2] = 0b1000'0000 | (0b0011'1111 & v);
|
86
|
+
s = {}; // Reset surrogate state.
|
87
|
+
return 3;
|
88
|
+
} else if (0xD800 <= v && v <= 0xDBFF) {
|
89
|
+
// High Surrogate (U+D800 to U+DBFF).
|
90
|
+
// This part forms the first two bytes of an eventual 4-byte UTF-8 sequence.
|
91
|
+
const unsigned char high_bits_val = (0b0000'1111 & (v >> 6)) + 1;
|
92
|
+
|
93
|
+
// First byte of the 4-byte UTF-8 sequence (11110xxx).
|
94
|
+
ubuf[0] = 0b1111'0000 | (0b0000'0111 & (high_bits_val >> 2));
|
95
|
+
// Second byte of the 4-byte UTF-8 sequence (10xxxxxx).
|
96
|
+
ubuf[1] = 0b1000'0000 | //
|
97
|
+
(0b0011'0000 & (high_bits_val << 4)) | //
|
98
|
+
(0b0000'1111 & (v >> 2));
|
99
|
+
// Set state for high surrogate after writing to buffer.
|
100
|
+
s = {true, static_cast<unsigned char>(0b0000'0011 & v)};
|
101
|
+
return 2; // Wrote 2 bytes, expecting 2 more from a low surrogate.
|
102
|
+
} else if (0xDC00 <= v && v <= 0xDFFF) {
|
103
|
+
// Low Surrogate (U+DC00 to U+DFFF).
|
104
|
+
// This part forms the last two bytes of a 4-byte UTF-8 sequence,
|
105
|
+
// using state from a preceding high surrogate.
|
106
|
+
if (!s.saw_high_surrogate) {
|
107
|
+
// Error: Isolated low surrogate without a preceding high surrogate.
|
108
|
+
// s remains in its current (problematic) state.
|
109
|
+
// Caller should handle error.
|
110
|
+
return kError;
|
111
|
+
}
|
112
|
+
|
113
|
+
// Third byte of the 4-byte UTF-8 sequence (10xxxxxx).
|
114
|
+
ubuf[0] = 0b1000'0000 | //
|
115
|
+
(0b0011'0000 & (s.bits << 4)) | //
|
116
|
+
(0b0000'1111 & (v >> 6));
|
117
|
+
// Fourth byte of the 4-byte UTF-8 sequence (10xxxxxx).
|
118
|
+
ubuf[1] = 0b1000'0000 | (0b0011'1111 & v);
|
119
|
+
|
120
|
+
s = {}; // Reset surrogate state, pair complete.
|
121
|
+
return 2; // Wrote 2 more bytes, completing the 4-byte sequence.
|
122
|
+
} else if constexpr (0xFFFF < std::numeric_limits<wchar_t>::max()) {
|
123
|
+
// Conditionally compile the 4-byte direct conversion branch.
|
124
|
+
// This block is compiled only if wchar_t can represent values > 0xFFFF.
|
125
|
+
// It's placed after surrogate checks to ensure surrogates are handled by
|
126
|
+
// their specific logic. This inner 'if' is the runtime check for the 4-byte
|
127
|
+
// range. At this point, v is known not to be in the 1, 2, or 3-byte BMP
|
128
|
+
// ranges, nor is it a surrogate code point.
|
129
|
+
if (0x10000 <= v && v <= 0x10FFFF) {
|
130
|
+
// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx.
|
131
|
+
ubuf[0] = 0b1111'0000 | (0b0000'0111 & (v >> 18));
|
132
|
+
ubuf[1] = 0b1000'0000 | (0b0011'1111 & (v >> 12));
|
133
|
+
ubuf[2] = 0b1000'0000 | (0b0011'1111 & (v >> 6));
|
134
|
+
ubuf[3] = 0b1000'0000 | (0b0011'1111 & v);
|
135
|
+
s = {}; // Reset surrogate state.
|
136
|
+
return 4;
|
137
|
+
}
|
138
|
+
}
|
139
|
+
|
140
|
+
// Invalid wchar_t value (e.g., out of Unicode range, or unhandled after all
|
141
|
+
// checks).
|
142
|
+
s = {}; // Reset surrogate state.
|
143
|
+
return kError;
|
144
|
+
}
|
145
|
+
|
51
146
|
} // namespace strings_internal
|
52
147
|
ABSL_NAMESPACE_END
|
53
148
|
} // namespace absl
|
@@ -41,7 +41,21 @@ namespace strings_internal {
|
|
41
41
|
// characters into buffer, however never will more than kMaxEncodedUTF8Size
|
42
42
|
// bytes be written, regardless of the value of utf8_char.
|
43
43
|
enum { kMaxEncodedUTF8Size = 4 };
|
44
|
-
size_t EncodeUTF8Char(char
|
44
|
+
size_t EncodeUTF8Char(char* buffer, char32_t utf8_char);
|
45
|
+
|
46
|
+
struct ShiftState {
|
47
|
+
bool saw_high_surrogate = false;
|
48
|
+
unsigned char bits = 0;
|
49
|
+
};
|
50
|
+
|
51
|
+
// Converts `wc` from UTF-16 or UTF-32 to UTF-8 and writes to `buf`. `buf` is
|
52
|
+
// assumed to have enough space for the output. `s` is used to carry state
|
53
|
+
// between successive calls with a UTF-16 surrogate pair. Returns the number of
|
54
|
+
// chars written, or `static_cast<size_t>(-1)` on failure.
|
55
|
+
//
|
56
|
+
// This is basically std::wcrtomb(), but always outputting UTF-8 instead of
|
57
|
+
// respecting the current locale.
|
58
|
+
size_t WideToUtf8(wchar_t wc, char* buf, ShiftState& s);
|
45
59
|
|
46
60
|
} // namespace strings_internal
|
47
61
|
ABSL_NAMESPACE_END
|
@@ -47,7 +47,7 @@
|
|
47
47
|
namespace absl {
|
48
48
|
ABSL_NAMESPACE_BEGIN
|
49
49
|
|
50
|
-
bool SimpleAtof(absl::string_view str,
|
50
|
+
bool SimpleAtof(absl::string_view str, float* absl_nonnull out) {
|
51
51
|
*out = 0.0;
|
52
52
|
str = StripAsciiWhitespace(str);
|
53
53
|
// std::from_chars doesn't accept an initial +, but SimpleAtof does, so if one
|
@@ -78,7 +78,7 @@ bool SimpleAtof(absl::string_view str, absl::Nonnull<float*> out) {
|
|
78
78
|
return true;
|
79
79
|
}
|
80
80
|
|
81
|
-
bool SimpleAtod(absl::string_view str,
|
81
|
+
bool SimpleAtod(absl::string_view str, double* absl_nonnull out) {
|
82
82
|
*out = 0.0;
|
83
83
|
str = StripAsciiWhitespace(str);
|
84
84
|
// std::from_chars doesn't accept an initial +, but SimpleAtod does, so if one
|
@@ -109,7 +109,7 @@ bool SimpleAtod(absl::string_view str, absl::Nonnull<double*> out) {
|
|
109
109
|
return true;
|
110
110
|
}
|
111
111
|
|
112
|
-
bool SimpleAtob(absl::string_view str,
|
112
|
+
bool SimpleAtob(absl::string_view str, bool* absl_nonnull out) {
|
113
113
|
ABSL_RAW_CHECK(out != nullptr, "Output pointer must not be nullptr.");
|
114
114
|
if (EqualsIgnoreCase(str, "true") || EqualsIgnoreCase(str, "t") ||
|
115
115
|
EqualsIgnoreCase(str, "yes") || EqualsIgnoreCase(str, "y") ||
|
@@ -168,7 +168,7 @@ constexpr uint64_t kDivisionBy100Mul = 10486u;
|
|
168
168
|
constexpr uint64_t kDivisionBy100Div = 1 << 20;
|
169
169
|
|
170
170
|
// Encode functions write the ASCII output of input `n` to `out_str`.
|
171
|
-
inline char* EncodeHundred(uint32_t n,
|
171
|
+
inline char* EncodeHundred(uint32_t n, char* absl_nonnull out_str) {
|
172
172
|
int num_digits = static_cast<int>(n - 10) >> 8;
|
173
173
|
uint32_t div10 = (n * kDivisionBy10Mul) / kDivisionBy10Div;
|
174
174
|
uint32_t mod10 = n - 10u * div10;
|
@@ -178,7 +178,7 @@ inline char* EncodeHundred(uint32_t n, absl::Nonnull<char*> out_str) {
|
|
178
178
|
return out_str + 2 + num_digits;
|
179
179
|
}
|
180
180
|
|
181
|
-
inline char* EncodeTenThousand(uint32_t n,
|
181
|
+
inline char* EncodeTenThousand(uint32_t n, char* absl_nonnull out_str) {
|
182
182
|
// We split lower 2 digits and upper 2 digits of n into 2 byte consecutive
|
183
183
|
// blocks. 123 -> [\0\1][\0\23]. We divide by 10 both blocks
|
184
184
|
// (it's 1 division + zeroing upper bits), and compute modulo 10 as well "in
|
@@ -234,8 +234,8 @@ inline uint64_t PrepareEightDigits(uint32_t i) {
|
|
234
234
|
return tens;
|
235
235
|
}
|
236
236
|
|
237
|
-
inline ABSL_ATTRIBUTE_ALWAYS_INLINE
|
238
|
-
uint32_t n,
|
237
|
+
inline ABSL_ATTRIBUTE_ALWAYS_INLINE char* absl_nonnull EncodeFullU32(
|
238
|
+
uint32_t n, char* absl_nonnull out_str) {
|
239
239
|
if (n < 10) {
|
240
240
|
*out_str = static_cast<char>('0' + n);
|
241
241
|
return out_str + 1;
|
@@ -284,7 +284,7 @@ inline ABSL_ATTRIBUTE_ALWAYS_INLINE char* EncodeFullU64(uint64_t i,
|
|
284
284
|
|
285
285
|
} // namespace
|
286
286
|
|
287
|
-
void numbers_internal::PutTwoDigits(uint32_t i,
|
287
|
+
void numbers_internal::PutTwoDigits(uint32_t i, char* absl_nonnull buf) {
|
288
288
|
assert(i < 100);
|
289
289
|
uint32_t base = kTwoZeroBytes;
|
290
290
|
uint32_t div10 = (i * kDivisionBy10Mul) / kDivisionBy10Div;
|
@@ -293,15 +293,15 @@ void numbers_internal::PutTwoDigits(uint32_t i, absl::Nonnull<char*> buf) {
|
|
293
293
|
little_endian::Store16(buf, static_cast<uint16_t>(base));
|
294
294
|
}
|
295
295
|
|
296
|
-
|
297
|
-
uint32_t n,
|
296
|
+
char* absl_nonnull numbers_internal::FastIntToBuffer(
|
297
|
+
uint32_t n, char* absl_nonnull out_str) {
|
298
298
|
out_str = EncodeFullU32(n, out_str);
|
299
299
|
*out_str = '\0';
|
300
300
|
return out_str;
|
301
301
|
}
|
302
302
|
|
303
|
-
|
304
|
-
int32_t i,
|
303
|
+
char* absl_nonnull numbers_internal::FastIntToBuffer(
|
304
|
+
int32_t i, char* absl_nonnull buffer) {
|
305
305
|
uint32_t u = static_cast<uint32_t>(i);
|
306
306
|
if (i < 0) {
|
307
307
|
*buffer++ = '-';
|
@@ -315,15 +315,15 @@ absl::Nonnull<char*> numbers_internal::FastIntToBuffer(
|
|
315
315
|
return buffer;
|
316
316
|
}
|
317
317
|
|
318
|
-
|
319
|
-
uint64_t i,
|
318
|
+
char* absl_nonnull numbers_internal::FastIntToBuffer(
|
319
|
+
uint64_t i, char* absl_nonnull buffer) {
|
320
320
|
buffer = EncodeFullU64(i, buffer);
|
321
321
|
*buffer = '\0';
|
322
322
|
return buffer;
|
323
323
|
}
|
324
324
|
|
325
|
-
|
326
|
-
int64_t i,
|
325
|
+
char* absl_nonnull numbers_internal::FastIntToBuffer(
|
326
|
+
int64_t i, char* absl_nonnull buffer) {
|
327
327
|
uint64_t u = static_cast<uint64_t>(i);
|
328
328
|
if (i < 0) {
|
329
329
|
*buffer++ = '-';
|
@@ -464,7 +464,7 @@ static ExpDigits SplitToSix(const double value) {
|
|
464
464
|
// Since we'd like to know if the fractional part of d is close to a half,
|
465
465
|
// we multiply it by 65536 and see if the fractional part is close to 32768.
|
466
466
|
// (The number doesn't have to be a power of two,but powers of two are faster)
|
467
|
-
uint64_t d64k = d * 65536;
|
467
|
+
uint64_t d64k = static_cast<uint64_t>(d * 65536);
|
468
468
|
uint32_t dddddd; // A 6-digit decimal integer.
|
469
469
|
if ((d64k % 65536) == 32767 || (d64k % 65536) == 32768) {
|
470
470
|
// OK, it's fairly likely that precision was lost above, which is
|
@@ -478,7 +478,8 @@ static ExpDigits SplitToSix(const double value) {
|
|
478
478
|
// value we're representing, of course, is M.mmm... * 2^exp2.
|
479
479
|
int exp2;
|
480
480
|
double m = std::frexp(value, &exp2);
|
481
|
-
uint64_t mantissa =
|
481
|
+
uint64_t mantissa =
|
482
|
+
static_cast<uint64_t>(m * (32768.0 * 65536.0 * 65536.0 * 65536.0));
|
482
483
|
// std::frexp returns an m value in the range [0.5, 1.0), however we
|
483
484
|
// can't multiply it by 2^64 and convert to an integer because some FPUs
|
484
485
|
// throw an exception when converting an number higher than 2^63 into an
|
@@ -545,7 +546,7 @@ static ExpDigits SplitToSix(const double value) {
|
|
545
546
|
// Helper function for fast formatting of floating-point.
|
546
547
|
// The result is the same as "%g", a.k.a. "%.6g".
|
547
548
|
size_t numbers_internal::SixDigitsToBuffer(double d,
|
548
|
-
|
549
|
+
char* absl_nonnull const buffer) {
|
549
550
|
static_assert(std::numeric_limits<float>::is_iec559,
|
550
551
|
"IEEE-754/IEC-559 support only");
|
551
552
|
|
@@ -693,9 +694,9 @@ static constexpr std::array<int8_t, 256> kAsciiToInt = {
|
|
693
694
|
|
694
695
|
// Parse the sign and optional hex or oct prefix in text.
|
695
696
|
inline bool safe_parse_sign_and_base(
|
696
|
-
absl::
|
697
|
-
|
698
|
-
|
697
|
+
absl::string_view* absl_nonnull text /*inout*/,
|
698
|
+
int* absl_nonnull base_ptr /*inout*/,
|
699
|
+
bool* absl_nonnull negative_ptr /*output*/) {
|
699
700
|
if (text->data() == nullptr) {
|
700
701
|
return false;
|
701
702
|
}
|
@@ -980,7 +981,7 @@ ABSL_CONST_INIT const IntType LookupTables<IntType>::kVminOverBase[] =
|
|
980
981
|
|
981
982
|
template <typename IntType>
|
982
983
|
inline bool safe_parse_positive_int(absl::string_view text, int base,
|
983
|
-
|
984
|
+
IntType* absl_nonnull value_p) {
|
984
985
|
IntType value = 0;
|
985
986
|
const IntType vmax = std::numeric_limits<IntType>::max();
|
986
987
|
assert(vmax > 0);
|
@@ -1017,7 +1018,7 @@ inline bool safe_parse_positive_int(absl::string_view text, int base,
|
|
1017
1018
|
|
1018
1019
|
template <typename IntType>
|
1019
1020
|
inline bool safe_parse_negative_int(absl::string_view text, int base,
|
1020
|
-
|
1021
|
+
IntType* absl_nonnull value_p) {
|
1021
1022
|
IntType value = 0;
|
1022
1023
|
const IntType vmin = std::numeric_limits<IntType>::min();
|
1023
1024
|
assert(vmin < 0);
|
@@ -1062,7 +1063,7 @@ inline bool safe_parse_negative_int(absl::string_view text, int base,
|
|
1062
1063
|
// http://pubs.opengroup.org/onlinepubs/9699919799/functions/strtol.html
|
1063
1064
|
template <typename IntType>
|
1064
1065
|
inline bool safe_int_internal(absl::string_view text,
|
1065
|
-
|
1066
|
+
IntType* absl_nonnull value_p, int base) {
|
1066
1067
|
*value_p = 0;
|
1067
1068
|
bool negative;
|
1068
1069
|
if (!safe_parse_sign_and_base(&text, &base, &negative)) {
|
@@ -1077,7 +1078,7 @@ inline bool safe_int_internal(absl::string_view text,
|
|
1077
1078
|
|
1078
1079
|
template <typename IntType>
|
1079
1080
|
inline bool safe_uint_internal(absl::string_view text,
|
1080
|
-
|
1081
|
+
IntType* absl_nonnull value_p, int base) {
|
1081
1082
|
*value_p = 0;
|
1082
1083
|
bool negative;
|
1083
1084
|
if (!safe_parse_sign_and_base(&text, &base, &negative) || negative) {
|
@@ -1111,32 +1112,52 @@ ABSL_CONST_INIT ABSL_DLL const char kHexTable[513] =
|
|
1111
1112
|
"e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
|
1112
1113
|
"f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff";
|
1113
1114
|
|
1114
|
-
bool
|
1115
|
+
bool safe_strto8_base(absl::string_view text, int8_t* absl_nonnull value,
|
1116
|
+
int base) {
|
1117
|
+
return safe_int_internal<int8_t>(text, value, base);
|
1118
|
+
}
|
1119
|
+
|
1120
|
+
bool safe_strto16_base(absl::string_view text, int16_t* absl_nonnull value,
|
1121
|
+
int base) {
|
1122
|
+
return safe_int_internal<int16_t>(text, value, base);
|
1123
|
+
}
|
1124
|
+
|
1125
|
+
bool safe_strto32_base(absl::string_view text, int32_t* absl_nonnull value,
|
1115
1126
|
int base) {
|
1116
1127
|
return safe_int_internal<int32_t>(text, value, base);
|
1117
1128
|
}
|
1118
1129
|
|
1119
|
-
bool safe_strto64_base(absl::string_view text,
|
1130
|
+
bool safe_strto64_base(absl::string_view text, int64_t* absl_nonnull value,
|
1120
1131
|
int base) {
|
1121
1132
|
return safe_int_internal<int64_t>(text, value, base);
|
1122
1133
|
}
|
1123
1134
|
|
1124
|
-
bool safe_strto128_base(absl::string_view text,
|
1135
|
+
bool safe_strto128_base(absl::string_view text, int128* absl_nonnull value,
|
1125
1136
|
int base) {
|
1126
1137
|
return safe_int_internal<absl::int128>(text, value, base);
|
1127
1138
|
}
|
1128
1139
|
|
1129
|
-
bool
|
1140
|
+
bool safe_strtou8_base(absl::string_view text, uint8_t* absl_nonnull value,
|
1141
|
+
int base) {
|
1142
|
+
return safe_uint_internal<uint8_t>(text, value, base);
|
1143
|
+
}
|
1144
|
+
|
1145
|
+
bool safe_strtou16_base(absl::string_view text, uint16_t* absl_nonnull value,
|
1146
|
+
int base) {
|
1147
|
+
return safe_uint_internal<uint16_t>(text, value, base);
|
1148
|
+
}
|
1149
|
+
|
1150
|
+
bool safe_strtou32_base(absl::string_view text, uint32_t* absl_nonnull value,
|
1130
1151
|
int base) {
|
1131
1152
|
return safe_uint_internal<uint32_t>(text, value, base);
|
1132
1153
|
}
|
1133
1154
|
|
1134
|
-
bool safe_strtou64_base(absl::string_view text,
|
1155
|
+
bool safe_strtou64_base(absl::string_view text, uint64_t* absl_nonnull value,
|
1135
1156
|
int base) {
|
1136
1157
|
return safe_uint_internal<uint64_t>(text, value, base);
|
1137
1158
|
}
|
1138
1159
|
|
1139
|
-
bool safe_strtou128_base(absl::string_view text,
|
1160
|
+
bool safe_strtou128_base(absl::string_view text, uint128* absl_nonnull value,
|
1140
1161
|
int base) {
|
1141
1162
|
return safe_uint_internal<absl::uint128>(text, value, base);
|
1142
1163
|
}
|