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
@@ -21,7 +21,6 @@
|
|
21
21
|
#include <type_traits>
|
22
22
|
#include <utility>
|
23
23
|
|
24
|
-
#include "absl/base/internal/invoke.h"
|
25
24
|
#include "absl/container/internal/compressed_tuple.h"
|
26
25
|
#include "absl/meta/type_traits.h"
|
27
26
|
#include "absl/utility/utility.h"
|
@@ -33,9 +32,8 @@ namespace functional_internal {
|
|
33
32
|
// Invoke the method, expanding the tuple of bound arguments.
|
34
33
|
template <class R, class Tuple, size_t... Idx, class... Args>
|
35
34
|
R Apply(Tuple&& bound, absl::index_sequence<Idx...>, Args&&... free) {
|
36
|
-
return
|
37
|
-
|
38
|
-
std::forward<Args>(free)...);
|
35
|
+
return std::invoke(std::forward<Tuple>(bound).template get<Idx>()...,
|
36
|
+
std::forward<Args>(free)...);
|
39
37
|
}
|
40
38
|
|
41
39
|
template <class F, class... BoundArgs>
|
@@ -50,23 +48,23 @@ class FrontBinder {
|
|
50
48
|
constexpr explicit FrontBinder(absl::in_place_t, Ts&&... ts)
|
51
49
|
: bound_args_(std::forward<Ts>(ts)...) {}
|
52
50
|
|
53
|
-
template <class... FreeArgs,
|
54
|
-
|
51
|
+
template <class... FreeArgs,
|
52
|
+
class R = std::invoke_result_t<F&, BoundArgs&..., FreeArgs&&...>>
|
55
53
|
R operator()(FreeArgs&&... free_args) & {
|
56
54
|
return functional_internal::Apply<R>(bound_args_, Idx(),
|
57
55
|
std::forward<FreeArgs>(free_args)...);
|
58
56
|
}
|
59
57
|
|
60
58
|
template <class... FreeArgs,
|
61
|
-
class R =
|
62
|
-
|
59
|
+
class R = std::invoke_result_t<const F&, const BoundArgs&...,
|
60
|
+
FreeArgs&&...>>
|
63
61
|
R operator()(FreeArgs&&... free_args) const& {
|
64
62
|
return functional_internal::Apply<R>(bound_args_, Idx(),
|
65
63
|
std::forward<FreeArgs>(free_args)...);
|
66
64
|
}
|
67
65
|
|
68
|
-
template <class... FreeArgs,
|
69
|
-
|
66
|
+
template <class... FreeArgs,
|
67
|
+
class R = std::invoke_result_t<F&&, BoundArgs&&..., FreeArgs&&...>>
|
70
68
|
R operator()(FreeArgs&&... free_args) && {
|
71
69
|
// This overload is called when *this is an rvalue. If some of the bound
|
72
70
|
// arguments are stored by value or rvalue reference, we move them.
|
@@ -75,8 +73,8 @@ class FrontBinder {
|
|
75
73
|
}
|
76
74
|
|
77
75
|
template <class... FreeArgs,
|
78
|
-
class R =
|
79
|
-
|
76
|
+
class R = std::invoke_result_t<const F&&, const BoundArgs&&...,
|
77
|
+
FreeArgs&&...>>
|
80
78
|
R operator()(FreeArgs&&... free_args) const&& {
|
81
79
|
// This overload is called when *this is an rvalue. If some of the bound
|
82
80
|
// arguments are stored by value or rvalue reference, we move them.
|
@@ -19,7 +19,6 @@
|
|
19
19
|
#include <functional>
|
20
20
|
#include <type_traits>
|
21
21
|
|
22
|
-
#include "absl/base/internal/invoke.h"
|
23
22
|
#include "absl/functional/any_invocable.h"
|
24
23
|
#include "absl/meta/type_traits.h"
|
25
24
|
|
@@ -74,15 +73,13 @@ using Invoker = R (*)(VoidPtr, typename ForwardT<Args>::type...);
|
|
74
73
|
template <typename Obj, typename R, typename... Args>
|
75
74
|
R InvokeObject(VoidPtr ptr, typename ForwardT<Args>::type... args) {
|
76
75
|
auto o = static_cast<const Obj*>(ptr.obj);
|
77
|
-
return static_cast<R>(
|
78
|
-
absl::base_internal::invoke(*o, std::forward<Args>(args)...));
|
76
|
+
return static_cast<R>(std::invoke(*o, std::forward<Args>(args)...));
|
79
77
|
}
|
80
78
|
|
81
79
|
template <typename Fun, typename R, typename... Args>
|
82
80
|
R InvokeFunction(VoidPtr ptr, typename ForwardT<Args>::type... args) {
|
83
81
|
auto f = reinterpret_cast<Fun>(ptr.fun);
|
84
|
-
return static_cast<R>(
|
85
|
-
absl::base_internal::invoke(f, std::forward<Args>(args)...));
|
82
|
+
return static_cast<R>(std::invoke(f, std::forward<Args>(args)...));
|
86
83
|
}
|
87
84
|
|
88
85
|
template <typename Sig>
|
@@ -87,6 +87,7 @@
|
|
87
87
|
#include "absl/base/config.h"
|
88
88
|
#include "absl/functional/function_ref.h"
|
89
89
|
#include "absl/hash/internal/hash.h"
|
90
|
+
#include "absl/hash/internal/weakly_mixed_integer.h"
|
90
91
|
#include "absl/meta/type_traits.h"
|
91
92
|
|
92
93
|
namespace absl {
|
@@ -356,6 +357,12 @@ class HashState : public hash_internal::HashStateBase<HashState> {
|
|
356
357
|
hash_state.combine_contiguous_(hash_state.state_, first, size);
|
357
358
|
return hash_state;
|
358
359
|
}
|
360
|
+
|
361
|
+
static HashState combine_weakly_mixed_integer(
|
362
|
+
HashState hash_state, hash_internal::WeaklyMixedInteger value) {
|
363
|
+
hash_state.combine_weakly_mixed_integer_(hash_state.state_, value);
|
364
|
+
return hash_state;
|
365
|
+
}
|
359
366
|
using HashState::HashStateBase::combine_contiguous;
|
360
367
|
|
361
368
|
private:
|
@@ -371,6 +378,13 @@ class HashState : public hash_internal::HashStateBase<HashState> {
|
|
371
378
|
state = T::combine_contiguous(std::move(state), first, size);
|
372
379
|
}
|
373
380
|
|
381
|
+
template <typename T>
|
382
|
+
static void CombineWeaklyMixedIntegerImpl(
|
383
|
+
void* p, hash_internal::WeaklyMixedInteger value) {
|
384
|
+
T& state = *static_cast<T*>(p);
|
385
|
+
state = T::combine_weakly_mixed_integer(std::move(state), value);
|
386
|
+
}
|
387
|
+
|
374
388
|
static HashState combine_raw(HashState hash_state, uint64_t value) {
|
375
389
|
hash_state.combine_raw_(hash_state.state_, value);
|
376
390
|
return hash_state;
|
@@ -385,6 +399,7 @@ class HashState : public hash_internal::HashStateBase<HashState> {
|
|
385
399
|
template <typename T>
|
386
400
|
void Init(T* state) {
|
387
401
|
state_ = state;
|
402
|
+
combine_weakly_mixed_integer_ = &CombineWeaklyMixedIntegerImpl<T>;
|
388
403
|
combine_contiguous_ = &CombineContiguousImpl<T>;
|
389
404
|
combine_raw_ = &CombineRawImpl<T>;
|
390
405
|
run_combine_unordered_ = &RunCombineUnorderedImpl<T>;
|
@@ -424,6 +439,7 @@ class HashState : public hash_internal::HashStateBase<HashState> {
|
|
424
439
|
// Do not erase an already erased state.
|
425
440
|
void Init(HashState* state) {
|
426
441
|
state_ = state->state_;
|
442
|
+
combine_weakly_mixed_integer_ = state->combine_weakly_mixed_integer_;
|
427
443
|
combine_contiguous_ = state->combine_contiguous_;
|
428
444
|
combine_raw_ = state->combine_raw_;
|
429
445
|
run_combine_unordered_ = state->run_combine_unordered_;
|
@@ -435,6 +451,8 @@ class HashState : public hash_internal::HashStateBase<HashState> {
|
|
435
451
|
}
|
436
452
|
|
437
453
|
void* state_;
|
454
|
+
void (*combine_weakly_mixed_integer_)(
|
455
|
+
void*, absl::hash_internal::WeaklyMixedInteger);
|
438
456
|
void (*combine_contiguous_)(void*, const unsigned char*, size_t);
|
439
457
|
void (*combine_raw_)(void*, uint64_t);
|
440
458
|
HashState (*run_combine_unordered_)(
|
@@ -55,13 +55,9 @@ uint64_t MixingHashState::CombineLargeContiguousImpl64(
|
|
55
55
|
|
56
56
|
ABSL_CONST_INIT const void* const MixingHashState::kSeed = &kSeed;
|
57
57
|
|
58
|
-
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
59
|
-
constexpr uint64_t MixingHashState::kStaticRandomData[];
|
60
|
-
#endif
|
61
|
-
|
62
58
|
uint64_t MixingHashState::LowLevelHashImpl(const unsigned char* data,
|
63
59
|
size_t len) {
|
64
|
-
return
|
60
|
+
return LowLevelHashLenGt32(data, len, Seed(), &kStaticRandomData[0]);
|
65
61
|
}
|
66
62
|
|
67
63
|
} // namespace hash_internal
|
@@ -24,15 +24,29 @@
|
|
24
24
|
#include <TargetConditionals.h>
|
25
25
|
#endif
|
26
26
|
|
27
|
+
// We include config.h here to make sure that ABSL_INTERNAL_CPLUSPLUS_LANG is
|
28
|
+
// defined.
|
27
29
|
#include "absl/base/config.h"
|
28
30
|
|
31
|
+
// GCC15 warns that <ciso646> is deprecated in C++17 and suggests using
|
32
|
+
// <version> instead, even though <version> is not available in C++17 mode prior
|
33
|
+
// to GCC9.
|
34
|
+
#if defined(__has_include)
|
35
|
+
#if __has_include(<version>)
|
36
|
+
#define ABSL_INTERNAL_VERSION_HEADER_AVAILABLE 1
|
37
|
+
#endif
|
38
|
+
#endif
|
39
|
+
|
29
40
|
// For feature testing and determining which headers can be included.
|
30
|
-
#if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
|
41
|
+
#if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L || \
|
42
|
+
defined(ABSL_INTERNAL_VERSION_HEADER_AVAILABLE)
|
31
43
|
#include <version>
|
32
44
|
#else
|
33
45
|
#include <ciso646>
|
34
46
|
#endif
|
35
47
|
|
48
|
+
#undef ABSL_INTERNAL_VERSION_HEADER_AVAILABLE
|
49
|
+
|
36
50
|
#include <algorithm>
|
37
51
|
#include <array>
|
38
52
|
#include <bitset>
|
@@ -51,6 +65,7 @@
|
|
51
65
|
#include <memory>
|
52
66
|
#include <set>
|
53
67
|
#include <string>
|
68
|
+
#include <string_view>
|
54
69
|
#include <tuple>
|
55
70
|
#include <type_traits>
|
56
71
|
#include <unordered_map>
|
@@ -65,7 +80,7 @@
|
|
65
80
|
#include "absl/base/port.h"
|
66
81
|
#include "absl/container/fixed_array.h"
|
67
82
|
#include "absl/hash/internal/city.h"
|
68
|
-
#include "absl/hash/internal/
|
83
|
+
#include "absl/hash/internal/weakly_mixed_integer.h"
|
69
84
|
#include "absl/meta/type_traits.h"
|
70
85
|
#include "absl/numeric/bits.h"
|
71
86
|
#include "absl/numeric/int128.h"
|
@@ -78,14 +93,6 @@
|
|
78
93
|
#include <filesystem> // NOLINT
|
79
94
|
#endif
|
80
95
|
|
81
|
-
#ifdef ABSL_HAVE_STD_STRING_VIEW
|
82
|
-
#include <string_view>
|
83
|
-
#endif
|
84
|
-
|
85
|
-
#ifdef __ARM_ACLE
|
86
|
-
#include <arm_acle.h>
|
87
|
-
#endif
|
88
|
-
|
89
96
|
namespace absl {
|
90
97
|
ABSL_NAMESPACE_BEGIN
|
91
98
|
|
@@ -375,14 +382,14 @@ template <typename H, typename T,
|
|
375
382
|
H hash_bytes(H hash_state, const T& value) {
|
376
383
|
const unsigned char* start = reinterpret_cast<const unsigned char*>(&value);
|
377
384
|
uint64_t v;
|
378
|
-
if (sizeof(T) == 1) {
|
385
|
+
if constexpr (sizeof(T) == 1) {
|
379
386
|
v = *start;
|
380
|
-
} else if (sizeof(T) == 2) {
|
387
|
+
} else if constexpr (sizeof(T) == 2) {
|
381
388
|
v = absl::base_internal::UnalignedLoad16(start);
|
382
|
-
} else if (sizeof(T) == 4) {
|
389
|
+
} else if constexpr (sizeof(T) == 4) {
|
383
390
|
v = absl::base_internal::UnalignedLoad32(start);
|
384
391
|
} else {
|
385
|
-
|
392
|
+
static_assert(sizeof(T) == 8);
|
386
393
|
v = absl::base_internal::UnalignedLoad64(start);
|
387
394
|
}
|
388
395
|
return CombineRaw()(std::move(hash_state), v);
|
@@ -394,6 +401,11 @@ H hash_bytes(H hash_state, const T& value) {
|
|
394
401
|
return H::combine_contiguous(std::move(hash_state), start, sizeof(value));
|
395
402
|
}
|
396
403
|
|
404
|
+
template <typename H>
|
405
|
+
H hash_weakly_mixed_integer(H hash_state, WeaklyMixedInteger value) {
|
406
|
+
return H::combine_weakly_mixed_integer(std::move(hash_state), value);
|
407
|
+
}
|
408
|
+
|
397
409
|
// -----------------------------------------------------------------------------
|
398
410
|
// AbslHashValue for Basic Types
|
399
411
|
// -----------------------------------------------------------------------------
|
@@ -512,7 +524,7 @@ H AbslHashValue(H hash_state, T C::*ptr) {
|
|
512
524
|
// padding (namely when they have 1 or 3 ints). The value below is a lower
|
513
525
|
// bound on the number of salient, non-padding bytes that we use for
|
514
526
|
// hashing.
|
515
|
-
if (alignof(T C::*) == alignof(int)) {
|
527
|
+
if constexpr (alignof(T C::*) == alignof(int)) {
|
516
528
|
// No padding when all subobjects have the same size as the total
|
517
529
|
// alignment. This happens in 32-bit mode.
|
518
530
|
return n;
|
@@ -609,7 +621,7 @@ template <typename H>
|
|
609
621
|
H AbslHashValue(H hash_state, absl::string_view str) {
|
610
622
|
return H::combine(
|
611
623
|
H::combine_contiguous(std::move(hash_state), str.data(), str.size()),
|
612
|
-
str.size());
|
624
|
+
WeaklyMixedInteger{str.size()});
|
613
625
|
}
|
614
626
|
|
615
627
|
// Support std::wstring, std::u16string and std::u32string.
|
@@ -622,11 +634,9 @@ H AbslHashValue(
|
|
622
634
|
const std::basic_string<Char, std::char_traits<Char>, Alloc>& str) {
|
623
635
|
return H::combine(
|
624
636
|
H::combine_contiguous(std::move(hash_state), str.data(), str.size()),
|
625
|
-
str.size());
|
637
|
+
WeaklyMixedInteger{str.size()});
|
626
638
|
}
|
627
639
|
|
628
|
-
#ifdef ABSL_HAVE_STD_STRING_VIEW
|
629
|
-
|
630
640
|
// Support std::wstring_view, std::u16string_view and std::u32string_view.
|
631
641
|
template <typename Char, typename H,
|
632
642
|
typename = absl::enable_if_t<std::is_same<Char, wchar_t>::value ||
|
@@ -635,11 +645,9 @@ template <typename Char, typename H,
|
|
635
645
|
H AbslHashValue(H hash_state, std::basic_string_view<Char> str) {
|
636
646
|
return H::combine(
|
637
647
|
H::combine_contiguous(std::move(hash_state), str.data(), str.size()),
|
638
|
-
str.size());
|
648
|
+
WeaklyMixedInteger{str.size()});
|
639
649
|
}
|
640
650
|
|
641
|
-
#endif // ABSL_HAVE_STD_STRING_VIEW
|
642
|
-
|
643
651
|
#if defined(__cpp_lib_filesystem) && __cpp_lib_filesystem >= 201703L && \
|
644
652
|
(!defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) || \
|
645
653
|
__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 130000) && \
|
@@ -685,7 +693,7 @@ typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue(
|
|
685
693
|
for (const auto& t : deque) {
|
686
694
|
hash_state = H::combine(std::move(hash_state), t);
|
687
695
|
}
|
688
|
-
return H::combine(std::move(hash_state), deque.size());
|
696
|
+
return H::combine(std::move(hash_state), WeaklyMixedInteger{deque.size()});
|
689
697
|
}
|
690
698
|
|
691
699
|
// AbslHashValue for hashing std::forward_list
|
@@ -697,7 +705,7 @@ typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue(
|
|
697
705
|
hash_state = H::combine(std::move(hash_state), t);
|
698
706
|
++size;
|
699
707
|
}
|
700
|
-
return H::combine(std::move(hash_state), size);
|
708
|
+
return H::combine(std::move(hash_state), WeaklyMixedInteger{size});
|
701
709
|
}
|
702
710
|
|
703
711
|
// AbslHashValue for hashing std::list
|
@@ -707,7 +715,7 @@ typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue(
|
|
707
715
|
for (const auto& t : list) {
|
708
716
|
hash_state = H::combine(std::move(hash_state), t);
|
709
717
|
}
|
710
|
-
return H::combine(std::move(hash_state), list.size());
|
718
|
+
return H::combine(std::move(hash_state), WeaklyMixedInteger{list.size()});
|
711
719
|
}
|
712
720
|
|
713
721
|
// AbslHashValue for hashing std::vector
|
@@ -721,7 +729,7 @@ typename std::enable_if<is_hashable<T>::value && !std::is_same<T, bool>::value,
|
|
721
729
|
AbslHashValue(H hash_state, const std::vector<T, Allocator>& vector) {
|
722
730
|
return H::combine(H::combine_contiguous(std::move(hash_state), vector.data(),
|
723
731
|
vector.size()),
|
724
|
-
vector.size());
|
732
|
+
WeaklyMixedInteger{vector.size()});
|
725
733
|
}
|
726
734
|
|
727
735
|
// AbslHashValue special cases for hashing std::vector<bool>
|
@@ -742,7 +750,8 @@ AbslHashValue(H hash_state, const std::vector<T, Allocator>& vector) {
|
|
742
750
|
unsigned char c = static_cast<unsigned char>(i);
|
743
751
|
hash_state = combiner.add_buffer(std::move(hash_state), &c, sizeof(c));
|
744
752
|
}
|
745
|
-
return H::combine(combiner.finalize(std::move(hash_state)),
|
753
|
+
return H::combine(combiner.finalize(std::move(hash_state)),
|
754
|
+
WeaklyMixedInteger{vector.size()});
|
746
755
|
}
|
747
756
|
#else
|
748
757
|
// When not working around the libstdc++ bug above, we still have to contend
|
@@ -758,7 +767,7 @@ typename std::enable_if<is_hashable<T>::value && std::is_same<T, bool>::value,
|
|
758
767
|
AbslHashValue(H hash_state, const std::vector<T, Allocator>& vector) {
|
759
768
|
return H::combine(std::move(hash_state),
|
760
769
|
std::hash<std::vector<T, Allocator>>{}(vector),
|
761
|
-
vector.size());
|
770
|
+
WeaklyMixedInteger{vector.size()});
|
762
771
|
}
|
763
772
|
#endif
|
764
773
|
|
@@ -775,7 +784,7 @@ AbslHashValue(H hash_state, const std::map<Key, T, Compare, Allocator>& map) {
|
|
775
784
|
for (const auto& t : map) {
|
776
785
|
hash_state = H::combine(std::move(hash_state), t);
|
777
786
|
}
|
778
|
-
return H::combine(std::move(hash_state), map.size());
|
787
|
+
return H::combine(std::move(hash_state), WeaklyMixedInteger{map.size()});
|
779
788
|
}
|
780
789
|
|
781
790
|
// AbslHashValue for hashing std::multimap
|
@@ -788,7 +797,7 @@ AbslHashValue(H hash_state,
|
|
788
797
|
for (const auto& t : map) {
|
789
798
|
hash_state = H::combine(std::move(hash_state), t);
|
790
799
|
}
|
791
|
-
return H::combine(std::move(hash_state), map.size());
|
800
|
+
return H::combine(std::move(hash_state), WeaklyMixedInteger{map.size()});
|
792
801
|
}
|
793
802
|
|
794
803
|
// AbslHashValue for hashing std::set
|
@@ -798,7 +807,7 @@ typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue(
|
|
798
807
|
for (const auto& t : set) {
|
799
808
|
hash_state = H::combine(std::move(hash_state), t);
|
800
809
|
}
|
801
|
-
return H::combine(std::move(hash_state), set.size());
|
810
|
+
return H::combine(std::move(hash_state), WeaklyMixedInteger{set.size()});
|
802
811
|
}
|
803
812
|
|
804
813
|
// AbslHashValue for hashing std::multiset
|
@@ -808,7 +817,7 @@ typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue(
|
|
808
817
|
for (const auto& t : set) {
|
809
818
|
hash_state = H::combine(std::move(hash_state), t);
|
810
819
|
}
|
811
|
-
return H::combine(std::move(hash_state), set.size());
|
820
|
+
return H::combine(std::move(hash_state), WeaklyMixedInteger{set.size()});
|
812
821
|
}
|
813
822
|
|
814
823
|
// -----------------------------------------------------------------------------
|
@@ -822,7 +831,7 @@ typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue(
|
|
822
831
|
H hash_state, const std::unordered_set<Key, Hash, KeyEqual, Alloc>& s) {
|
823
832
|
return H::combine(
|
824
833
|
H::combine_unordered(std::move(hash_state), s.begin(), s.end()),
|
825
|
-
s.size());
|
834
|
+
WeaklyMixedInteger{s.size()});
|
826
835
|
}
|
827
836
|
|
828
837
|
// AbslHashValue for hashing std::unordered_multiset
|
@@ -833,7 +842,7 @@ typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue(
|
|
833
842
|
const std::unordered_multiset<Key, Hash, KeyEqual, Alloc>& s) {
|
834
843
|
return H::combine(
|
835
844
|
H::combine_unordered(std::move(hash_state), s.begin(), s.end()),
|
836
|
-
s.size());
|
845
|
+
WeaklyMixedInteger{s.size()});
|
837
846
|
}
|
838
847
|
|
839
848
|
// AbslHashValue for hashing std::unordered_set
|
@@ -845,7 +854,7 @@ AbslHashValue(H hash_state,
|
|
845
854
|
const std::unordered_map<Key, T, Hash, KeyEqual, Alloc>& s) {
|
846
855
|
return H::combine(
|
847
856
|
H::combine_unordered(std::move(hash_state), s.begin(), s.end()),
|
848
|
-
s.size());
|
857
|
+
WeaklyMixedInteger{s.size()});
|
849
858
|
}
|
850
859
|
|
851
860
|
// AbslHashValue for hashing std::unordered_multiset
|
@@ -857,7 +866,7 @@ AbslHashValue(H hash_state,
|
|
857
866
|
const std::unordered_multimap<Key, T, Hash, KeyEqual, Alloc>& s) {
|
858
867
|
return H::combine(
|
859
868
|
H::combine_unordered(std::move(hash_state), s.begin(), s.end()),
|
860
|
-
s.size());
|
869
|
+
WeaklyMixedInteger{s.size()});
|
861
870
|
}
|
862
871
|
|
863
872
|
// -----------------------------------------------------------------------------
|
@@ -968,11 +977,20 @@ hash_range_or_bytes(H hash_state, const T* data, size_t size) {
|
|
968
977
|
// `false`.
|
969
978
|
struct HashSelect {
|
970
979
|
private:
|
980
|
+
struct WeaklyMixedIntegerProbe {
|
981
|
+
template <typename H>
|
982
|
+
static H Invoke(H state, WeaklyMixedInteger value) {
|
983
|
+
return hash_internal::hash_weakly_mixed_integer(std::move(state), value);
|
984
|
+
}
|
985
|
+
};
|
986
|
+
|
971
987
|
struct State : HashStateBase<State> {
|
972
988
|
static State combine_contiguous(State hash_state, const unsigned char*,
|
973
989
|
size_t);
|
974
990
|
using State::HashStateBase::combine_contiguous;
|
975
991
|
static State combine_raw(State state, uint64_t value);
|
992
|
+
static State combine_weakly_mixed_integer(State hash_state,
|
993
|
+
WeaklyMixedInteger value);
|
976
994
|
};
|
977
995
|
|
978
996
|
struct UniquelyRepresentedProbe {
|
@@ -1034,6 +1052,7 @@ struct HashSelect {
|
|
1034
1052
|
// disjunction provides short circuiting wrt instantiation.
|
1035
1053
|
template <typename T>
|
1036
1054
|
using Apply = absl::disjunction< //
|
1055
|
+
Probe<WeaklyMixedIntegerProbe, T>, //
|
1037
1056
|
Probe<UniquelyRepresentedProbe, T>, //
|
1038
1057
|
Probe<HashValueProbe, T>, //
|
1039
1058
|
Probe<LegacyHashProbe, T>, //
|
@@ -1063,8 +1082,7 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
1063
1082
|
};
|
1064
1083
|
|
1065
1084
|
static constexpr uint64_t kMul =
|
1066
|
-
|
1067
|
-
: uint64_t{0xdcb22ca68cb134ed};
|
1085
|
+
uint64_t{0xdcb22ca68cb134ed};
|
1068
1086
|
|
1069
1087
|
template <typename T>
|
1070
1088
|
using IntegralFastPath =
|
@@ -1099,7 +1117,7 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
1099
1117
|
template <typename T, absl::enable_if_t<IntegralFastPath<T>::value, int> = 0>
|
1100
1118
|
static size_t hash(T value) {
|
1101
1119
|
return static_cast<size_t>(
|
1102
|
-
WeakMix(Seed()
|
1120
|
+
WeakMix(Seed(), static_cast<std::make_unsigned_t<T>>(value)));
|
1103
1121
|
}
|
1104
1122
|
|
1105
1123
|
// Overload of MixingHashState::hash()
|
@@ -1114,6 +1132,18 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
1114
1132
|
MixingHashState() : state_(Seed()) {}
|
1115
1133
|
|
1116
1134
|
friend class MixingHashState::HashStateBase;
|
1135
|
+
template <typename H>
|
1136
|
+
friend H absl::hash_internal::hash_weakly_mixed_integer(H,
|
1137
|
+
WeaklyMixedInteger);
|
1138
|
+
|
1139
|
+
static MixingHashState combine_weakly_mixed_integer(
|
1140
|
+
MixingHashState hash_state, WeaklyMixedInteger value) {
|
1141
|
+
// Some transformation for the value is needed to make an empty
|
1142
|
+
// string/container change the mixing hash state.
|
1143
|
+
// We use constant smaller than 8 bits to make compiler use
|
1144
|
+
// `add` with an immediate operand with 1 byte value.
|
1145
|
+
return MixingHashState{hash_state.state_ + (0x57 + value.value)};
|
1146
|
+
}
|
1117
1147
|
|
1118
1148
|
template <typename CombinerT>
|
1119
1149
|
static MixingHashState RunCombineUnordered(MixingHashState state,
|
@@ -1152,7 +1182,7 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
1152
1182
|
// optimize Read1To3 and Read4To8 differently for the string case.
|
1153
1183
|
static MixingHashState combine_raw(MixingHashState hash_state,
|
1154
1184
|
uint64_t value) {
|
1155
|
-
return MixingHashState(WeakMix(hash_state.state_
|
1185
|
+
return MixingHashState(WeakMix(hash_state.state_, value));
|
1156
1186
|
}
|
1157
1187
|
|
1158
1188
|
// Implementation of the base case for combine_contiguous where we actually
|
@@ -1180,7 +1210,7 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
1180
1210
|
// Empty ranges have no effect.
|
1181
1211
|
return state;
|
1182
1212
|
}
|
1183
|
-
return WeakMix(state
|
1213
|
+
return WeakMix(state, v);
|
1184
1214
|
}
|
1185
1215
|
|
1186
1216
|
ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t CombineContiguousImpl9to16(
|
@@ -1222,8 +1252,8 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
1222
1252
|
size_t len);
|
1223
1253
|
|
1224
1254
|
// Reads 9 to 16 bytes from p.
|
1225
|
-
// The least significant 8 bytes are in .first, the rest
|
1226
|
-
//
|
1255
|
+
// The least significant 8 bytes are in .first, and the rest of the bytes are
|
1256
|
+
// in .second along with duplicated bytes from .first if len<16.
|
1227
1257
|
static std::pair<uint64_t, uint64_t> Read9To16(const unsigned char* p,
|
1228
1258
|
size_t len) {
|
1229
1259
|
uint64_t low_mem = Read8(p);
|
@@ -1251,11 +1281,7 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
1251
1281
|
#endif
|
1252
1282
|
}
|
1253
1283
|
|
1254
|
-
// Reads 4 to 8 bytes from p.
|
1255
|
-
// TODO(b/384509507): consider optimizing this by not requiring the output to
|
1256
|
-
// be equivalent to an integer load for 4/8 bytes. Currently, we rely on this
|
1257
|
-
// behavior for the HashConsistentAcrossIntTypes test case. Ditto for
|
1258
|
-
// Read1To3.
|
1284
|
+
// Reads 4 to 8 bytes from p. Some input bytes may be duplicated in output.
|
1259
1285
|
static uint64_t Read4To8(const unsigned char* p, size_t len) {
|
1260
1286
|
// If `len < 8`, we duplicate bytes in the middle.
|
1261
1287
|
// E.g.:
|
@@ -1274,7 +1300,7 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
1274
1300
|
return most_significant | least_significant;
|
1275
1301
|
}
|
1276
1302
|
|
1277
|
-
// Reads 1 to 3 bytes from p.
|
1303
|
+
// Reads 1 to 3 bytes from p. Some input bytes may be duplicated in output.
|
1278
1304
|
static uint32_t Read1To3(const unsigned char* p, size_t len) {
|
1279
1305
|
// The trick used by this implementation is to avoid branches.
|
1280
1306
|
// We always read three bytes by duplicating.
|
@@ -1290,27 +1316,26 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> {
|
|
1290
1316
|
}
|
1291
1317
|
|
1292
1318
|
ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Mix(uint64_t lhs, uint64_t rhs) {
|
1319
|
+
// For 32 bit platforms we are trying to use all 64 lower bits.
|
1320
|
+
if constexpr (sizeof(size_t) < 8) {
|
1321
|
+
uint64_t m = lhs * rhs;
|
1322
|
+
return m ^ (m >> 32);
|
1323
|
+
}
|
1293
1324
|
// Though the 128-bit product on AArch64 needs two instructions, it is
|
1294
1325
|
// still a good balance between speed and hash quality.
|
1295
|
-
|
1296
|
-
absl::conditional_t<sizeof(size_t) == 4, uint64_t, uint128>;
|
1297
|
-
MultType m = lhs;
|
1326
|
+
uint128 m = lhs;
|
1298
1327
|
m *= rhs;
|
1299
|
-
return
|
1328
|
+
return Uint128High64(m) ^ Uint128Low64(m);
|
1300
1329
|
}
|
1301
1330
|
|
1302
1331
|
// Slightly lower latency than Mix, but with lower quality. The byte swap
|
1303
1332
|
// helps ensure that low bits still have high quality.
|
1304
|
-
ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t WeakMix(uint64_t
|
1333
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t WeakMix(uint64_t lhs,
|
1334
|
+
uint64_t rhs) {
|
1335
|
+
const uint64_t n = lhs ^ rhs;
|
1305
1336
|
// WeakMix doesn't work well on 32-bit platforms so just use Mix.
|
1306
|
-
if (sizeof(size_t) < 8) return Mix(n, kMul);
|
1307
|
-
#ifdef __ARM_ACLE
|
1308
|
-
// gbswap_64 compiles to `rev` on ARM, but `rbit` is better because it
|
1309
|
-
// reverses bits rather than reversing bytes.
|
1310
|
-
return __rbitll(n * kMul);
|
1311
|
-
#else
|
1337
|
+
if constexpr (sizeof(size_t) < 8) return Mix(n, kMul);
|
1312
1338
|
return absl::gbswap_64(n * kMul);
|
1313
|
-
#endif
|
1314
1339
|
}
|
1315
1340
|
|
1316
1341
|
// An extern to avoid bloat on a direct call to LowLevelHash() with fixed
|