grpc 1.72.0 → 1.73.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 +23 -6
- data/include/grpc/event_engine/event_engine.h +125 -8
- data/include/grpc/event_engine/internal/write_event.h +34 -0
- data/include/grpc/impl/channel_arg_names.h +17 -9
- data/include/grpc/impl/compression_types.h +3 -2
- data/include/grpc/impl/slice_type.h +1 -1
- data/include/grpc/support/json.h +3 -21
- data/include/grpc/support/port_platform.h +8 -5
- data/src/core/call/call_filters.h +28 -19
- data/src/core/call/call_spine.h +2 -0
- data/src/core/call/metadata.h +17 -0
- data/src/core/channelz/channel_trace.cc +50 -42
- data/src/core/channelz/channel_trace.h +35 -4
- data/src/core/channelz/channelz.cc +338 -125
- data/src/core/channelz/channelz.h +276 -34
- data/src/core/channelz/channelz_registry.cc +322 -117
- data/src/core/channelz/channelz_registry.h +179 -21
- data/src/core/channelz/ztrace_collector.h +315 -0
- data/src/core/client_channel/client_channel.cc +30 -29
- data/src/core/client_channel/client_channel_filter.cc +21 -20
- data/src/core/client_channel/client_channel_filter.h +0 -2
- data/src/core/client_channel/connector.h +0 -3
- data/src/core/client_channel/global_subchannel_pool.cc +68 -7
- data/src/core/client_channel/global_subchannel_pool.h +37 -4
- data/src/core/client_channel/subchannel.cc +7 -9
- data/src/core/client_channel/subchannel.h +2 -8
- data/src/core/client_channel/subchannel_pool_interface.cc +5 -6
- data/src/core/client_channel/subchannel_pool_interface.h +11 -1
- data/src/core/config/config_vars.cc +11 -1
- data/src/core/config/config_vars.h +8 -0
- data/src/core/config/core_configuration.cc +50 -11
- data/src/core/config/core_configuration.h +89 -7
- data/src/core/credentials/call/external/aws_request_signer.cc +3 -2
- data/src/core/credentials/call/external/url_external_account_credentials.cc +2 -2
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +1 -1
- data/src/core/credentials/call/jwt/jwt_verifier.cc +4 -4
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +4 -2
- data/src/core/credentials/transport/alts/alts_security_connector.cc +9 -8
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +2 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +41 -11
- data/src/core/credentials/transport/ssl/ssl_security_connector.h +2 -1
- data/src/core/credentials/transport/tls/ssl_utils.cc +18 -0
- data/src/core/credentials/transport/tls/ssl_utils.h +5 -0
- data/src/core/credentials/transport/tls/tls_security_connector.cc +2 -1
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +6 -3
- data/src/core/ext/filters/http/message_compress/compression_filter.h +34 -4
- data/src/core/ext/filters/http/server/http_server_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.h +14 -3
- data/src/core/ext/transport/chttp2/chttp2_plugin.cc +40 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +11 -112
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +3 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +33 -962
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -47
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +18 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +213 -105
- data/src/core/ext/transport/chttp2/transport/frame.h +78 -6
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +10 -0
- data/src/core/ext/transport/chttp2/transport/frame_data.h +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +15 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +5 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +11 -4
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +7 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +26 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +358 -1
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +252 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +29 -5
- data/src/core/ext/transport/chttp2/transport/internal_channel_arg_names.h +24 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +36 -21
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +10 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +6 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +60 -49
- data/src/core/ext/transport/inproc/inproc_transport.cc +7 -2
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +6 -2
- data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +12 -22
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +12 -22
- data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +28 -22
- data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +24 -67
- data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +29 -31
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +2 -2
- data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +0 -23
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +20 -0
- data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +8 -22
- data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +0 -23
- data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +64 -66
- data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +4 -95
- data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +28 -0
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +12 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +8 -36
- data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb.h +8 -0
- data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb.h +4 -0
- data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb.h +4 -0
- data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +8 -44
- data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +12 -40
- data/src/core/ext/upb-gen/google/api/http.upb.h +4 -0
- data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +193 -20
- data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +59 -21
- data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +4 -0
- data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +4 -22
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +0 -18
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +113 -53
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +20 -14
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb.h +154 -0
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c +40 -2
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.h +4 -0
- data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +8 -0
- data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +0 -18
- data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +0 -36
- data/src/core/ext/upb-gen/validate/validate.upb.h +12 -0
- data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb.h +4 -0
- data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +0 -18
- data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +8 -0
- data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +0 -54
- data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +20 -22
- data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb.h +4 -0
- data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +4 -0
- data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +4 -0
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c +123 -62
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c +200 -101
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.c +152 -77
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.c +524 -255
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/init_dump.upbdefs.c +44 -23
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/init_dump.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/listeners.upbdefs.c +66 -34
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/listeners.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/memory.upbdefs.c +54 -28
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/memory.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/metrics.upbdefs.c +46 -25
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/metrics.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/mutex_stats.upbdefs.c +47 -25
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/mutex_stats.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.c +256 -126
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/tap.upbdefs.c +50 -28
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/tap.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/annotations/deprecation.upbdefs.c +55 -28
- data/src/core/ext/upbdefs-gen/envoy/annotations/deprecation.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/annotations/resource.upbdefs.c +34 -18
- data/src/core/ext/upbdefs-gen/envoy/annotations/resource.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +414 -206
- data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +831 -413
- data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +143 -73
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +1132 -557
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.c +63 -34
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.c +255 -127
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +363 -178
- data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +227 -114
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/backoff.upbdefs.c +57 -31
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/backoff.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +596 -295
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/config_source.upbdefs.c +271 -137
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/config_source.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/event_service_config.upbdefs.c +56 -30
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/event_service_config.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/extension.upbdefs.c +45 -25
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/extension.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_method_list.upbdefs.c +59 -31
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_method_list.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +438 -217
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/health_check.upbdefs.c +441 -221
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/health_check.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.c +55 -30
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.c +57 -31
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +619 -303
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +70 -36
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/resolver.upbdefs.c +62 -33
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/resolver.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.c +47 -25
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.c +97 -49
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +97 -51
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/udp_socket_config.upbdefs.c +51 -27
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/udp_socket_config.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.c +147 -76
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +230 -116
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/load_report.upbdefs.c +277 -138
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/load_report.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/api_listener.upbdefs.c +48 -26
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/api_listener.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +388 -197
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.c +304 -153
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +173 -90
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/udp_listener_config.upbdefs.c +90 -47
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/udp_listener_config.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +98 -51
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +196 -99
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +237 -118
- data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +418 -210
- data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +194 -99
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +2003 -973
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/scoped_route.upbdefs.c +101 -53
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/scoped_route.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +352 -176
- data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/datadog.upbdefs.c +79 -42
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/datadog.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.c +67 -37
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/http_tracer.upbdefs.c +63 -34
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/http_tracer.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/lightstep.upbdefs.c +88 -47
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/lightstep.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +80 -43
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/service.upbdefs.c +53 -29
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/service.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/skywalking.upbdefs.c +86 -46
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/skywalking.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.c +55 -32
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/xray.upbdefs.c +91 -49
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/xray.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +105 -55
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.c +775 -379
- data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +52 -28
- data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +134 -68
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +189 -96
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upbdefs.c +116 -61
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +112 -58
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.c +160 -82
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +75 -39
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +1161 -570
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +52 -28
- data/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.c +55 -29
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -26
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +390 -194
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +126 -65
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +498 -246
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +74 -38
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +221 -110
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c +68 -36
- data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c +378 -187
- data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.c +100 -52
- data/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.c +257 -129
- data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +44 -24
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/path_transformation.upbdefs.c +68 -35
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/path_transformation.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/address.upbdefs.c +38 -20
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/address.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.c +59 -32
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/http_inputs.upbdefs.c +65 -34
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/http_inputs.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/metadata.upbdefs.c +72 -38
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/metadata.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/node.upbdefs.c +57 -31
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/node.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/number.upbdefs.c +52 -29
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/number.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/path.upbdefs.c +51 -28
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/path.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/regex.upbdefs.c +89 -47
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/regex.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/status_code_input.upbdefs.c +37 -20
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/status_code_input.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/string.upbdefs.c +89 -47
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/string.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/struct.upbdefs.c +67 -35
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/struct.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.c +112 -58
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/metadata/v3/metadata.upbdefs.c +110 -56
- data/src/core/ext/upbdefs-gen/envoy/type/metadata/v3/metadata.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +123 -62
- data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/hash_policy.upbdefs.c +59 -31
- data/src/core/ext/upbdefs-gen/envoy/type/v3/hash_policy.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/http.upbdefs.c +30 -16
- data/src/core/ext/upbdefs-gen/envoy/type/v3/http.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/http_status.upbdefs.c +143 -72
- data/src/core/ext/upbdefs-gen/envoy/type/v3/http_status.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/percent.upbdefs.c +61 -32
- data/src/core/ext/upbdefs-gen/envoy/type/v3/percent.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/range.upbdefs.c +51 -27
- data/src/core/ext/upbdefs-gen/envoy/type/v3/range.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_strategy.upbdefs.c +85 -45
- data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_strategy.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_unit.upbdefs.c +35 -19
- data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_unit.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/semantic_version.upbdefs.c +44 -23
- data/src/core/ext/upbdefs-gen/envoy/type/v3/semantic_version.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/envoy/type/v3/token_bucket.upbdefs.c +61 -33
- data/src/core/ext/upbdefs-gen/envoy/type/v3/token_bucket.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/api/annotations.upbdefs.c +35 -19
- data/src/core/ext/upbdefs-gen/google/api/annotations.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/checked.upbdefs.c +272 -133
- data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/checked.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/syntax.upbdefs.c +315 -154
- data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/syntax.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +64 -33
- data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +35 -19
- data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/any.upbdefs.c +26 -15
- data/src/core/ext/upbdefs-gen/google/protobuf/any.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +1106 -508
- data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.h +10 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/duration.upbdefs.c +28 -16
- data/src/core/ext/upbdefs-gen/google/protobuf/duration.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/empty.upbdefs.c +23 -13
- data/src/core/ext/upbdefs-gen/google/protobuf/empty.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/struct.upbdefs.c +69 -35
- data/src/core/ext/upbdefs-gen/google/protobuf/struct.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/timestamp.upbdefs.c +29 -16
- data/src/core/ext/upbdefs-gen/google/protobuf/timestamp.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/protobuf/wrappers.upbdefs.c +51 -26
- data/src/core/ext/upbdefs-gen/google/protobuf/wrappers.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/google/rpc/status.upbdefs.c +32 -17
- data/src/core/ext/upbdefs-gen/google/rpc/status.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +161 -79
- data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +84 -42
- data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +48 -26
- data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +26 -14
- data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +50 -26
- data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +36 -19
- data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/validate/validate.upbdefs.c +538 -261
- data/src/core/ext/upbdefs-gen/validate/validate.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/migrate.upbdefs.c +86 -43
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/migrate.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/security.upbdefs.c +49 -26
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/security.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/sensitive.upbdefs.c +27 -15
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/sensitive.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/status.upbdefs.c +87 -44
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/status.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/versioning.upbdefs.c +37 -20
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/versioning.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/authority.upbdefs.c +30 -17
- data/src/core/ext/upbdefs-gen/xds/core/v3/authority.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/cidr.upbdefs.c +41 -23
- data/src/core/ext/upbdefs-gen/xds/core/v3/cidr.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/collection_entry.upbdefs.c +62 -33
- data/src/core/ext/upbdefs-gen/xds/core/v3/collection_entry.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/context_params.upbdefs.c +36 -19
- data/src/core/ext/upbdefs-gen/xds/core/v3/context_params.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/extension.upbdefs.c +36 -20
- data/src/core/ext/upbdefs-gen/xds/core/v3/extension.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource.upbdefs.c +42 -23
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource_locator.upbdefs.c +76 -39
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource_locator.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource_name.upbdefs.c +45 -24
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource_name.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +41 -23
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/domain.upbdefs.c +53 -29
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/domain.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +29 -16
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/ip.upbdefs.c +58 -32
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/ip.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +207 -103
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/range.upbdefs.c +95 -49
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/range.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/regex.upbdefs.c +38 -20
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/regex.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +60 -31
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +67 -36
- data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/v3/range.upbdefs.c +31 -17
- data/src/core/ext/upbdefs-gen/xds/type/v3/range.upbdefs.h +5 -1
- data/src/core/ext/upbdefs-gen/xds/type/v3/typed_struct.upbdefs.c +31 -17
- data/src/core/ext/upbdefs-gen/xds/type/v3/typed_struct.upbdefs.h +5 -1
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +7 -22
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +596 -0
- data/src/core/handshaker/security/secure_endpoint.cc +769 -312
- data/src/core/handshaker/security/secure_endpoint.h +17 -0
- data/src/core/handshaker/security/security_handshaker.cc +3 -3
- data/src/core/lib/address_utils/sockaddr_utils.cc +5 -5
- data/src/core/lib/channel/channel_args.h +4 -0
- data/src/core/lib/channel/channel_stack.cc +29 -0
- data/src/core/lib/channel/channel_stack.h +9 -0
- data/src/core/lib/channel/promise_based_filter.h +707 -299
- data/src/core/lib/debug/trace_flags.cc +2 -2
- data/src/core/lib/debug/trace_flags.h +1 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +6 -2
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +4 -4
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +14 -6
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/extensions/blocking_dns.h +46 -0
- data/src/core/lib/event_engine/extensions/channelz.h +62 -0
- data/src/core/lib/event_engine/extensions/tcp_trace.h +2 -2
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +4 -7
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +3 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +6 -7
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +28 -22
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +22 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +15 -15
- data/src/core/lib/event_engine/query_extensions.h +10 -21
- data/src/core/lib/event_engine/tcp_socket_utils.cc +10 -9
- data/src/core/lib/event_engine/utils.cc +34 -0
- data/src/core/lib/event_engine/utils.h +3 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +2 -2
- data/src/core/lib/event_engine/windows/windows_endpoint.h +9 -2
- data/src/core/lib/experiments/experiments.cc +198 -51
- data/src/core/lib/experiments/experiments.h +78 -35
- data/src/core/lib/iomgr/combiner.cc +3 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +4 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +11 -8
- data/src/core/lib/iomgr/fork_posix.cc +0 -7
- data/src/core/lib/iomgr/iomgr.cc +0 -3
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +3 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +37 -47
- data/src/core/lib/iomgr/resolve_address_posix.h +15 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +22 -45
- data/src/core/lib/iomgr/resolve_address_windows.h +15 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +14 -6
- data/src/core/lib/iomgr/tcp_posix.cc +14 -12
- data/src/core/lib/iomgr/tcp_server_windows.cc +14 -2
- data/src/core/lib/promise/detail/promise_like.h +24 -0
- data/src/core/lib/promise/detail/seq_state.h +741 -0
- data/src/core/lib/promise/map.h +22 -5
- data/src/core/lib/promise/promise.h +2 -0
- data/src/core/lib/promise/seq.h +2 -0
- data/src/core/lib/promise/sleep.cc +6 -3
- data/src/core/lib/promise/try_seq.h +2 -0
- data/src/core/lib/resource_quota/memory_quota.cc +9 -0
- data/src/core/lib/resource_quota/memory_quota.h +1 -3
- data/src/core/lib/slice/slice_buffer.h +6 -0
- data/src/core/lib/surface/call.cc +4 -0
- data/src/core/lib/surface/channel_create.cc +61 -1
- data/src/core/lib/surface/init.cc +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/status_conversion.cc +7 -34
- data/src/core/lib/transport/transport.cc +2 -2
- data/src/core/lib/transport/transport.h +3 -0
- data/src/core/load_balancing/backend_metric_parser.cc +12 -18
- data/src/core/load_balancing/grpclb/grpclb.cc +2 -2
- data/src/core/load_balancing/health_check_client.cc +2 -4
- data/src/core/load_balancing/oob_backend_metric.cc +2 -4
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +4 -3
- data/src/core/load_balancing/pick_first/pick_first.cc +3 -3
- data/src/core/load_balancing/rls/rls.cc +6 -5
- data/src/core/load_balancing/round_robin/round_robin.cc +2 -3
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +4 -4
- data/src/core/load_balancing/weighted_target/weighted_target.cc +3 -9
- data/src/core/load_balancing/xds/xds_override_host.cc +55 -34
- data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
- data/src/core/resolver/sockaddr/sockaddr_resolver.cc +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +2 -1
- data/src/core/server/add_port.cc +87 -0
- data/src/core/server/server.cc +48 -53
- data/src/core/server/server.h +3 -5
- data/src/core/telemetry/call_tracer.cc +2 -2
- data/src/core/telemetry/call_tracer.h +1 -1
- data/src/core/{ext/transport/chttp2/transport → telemetry}/context_list_entry.h +3 -3
- data/src/core/telemetry/default_tcp_tracer.cc +26 -0
- data/src/core/telemetry/default_tcp_tracer.h +44 -0
- data/src/core/telemetry/stats.h +0 -5
- data/src/core/telemetry/stats_data.cc +376 -334
- data/src/core/telemetry/stats_data.h +260 -166
- data/src/core/telemetry/tcp_tracer.cc +38 -0
- data/src/core/telemetry/tcp_tracer.h +14 -16
- data/src/core/transport/auth_context.cc +0 -1
- data/src/core/transport/auth_context.h +0 -1
- data/src/core/transport/endpoint_transport.h +90 -0
- data/src/core/transport/endpoint_transport_client_channel_factory.cc +61 -0
- data/src/core/transport/endpoint_transport_client_channel_factory.h +57 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +33 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +3 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +76 -22
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +8 -2
- data/src/core/tsi/ssl_transport_security.cc +189 -71
- data/src/core/tsi/ssl_transport_security.h +6 -1
- data/src/core/tsi/transport_security.h +3 -0
- data/src/core/tsi/transport_security_grpc.h +7 -3
- data/src/core/tsi/transport_security_interface.h +30 -25
- data/src/core/util/backoff.cc +7 -14
- data/src/core/util/backoff.h +0 -1
- data/src/core/util/dual_ref_counted.h +48 -0
- data/src/core/util/function_signature.h +66 -0
- data/src/core/util/gcp_metadata_query.cc +3 -2
- data/src/core/util/http_client/httpcli_security_connector.cc +2 -1
- data/src/core/util/json/json_object_loader.h +3 -3
- data/src/core/util/latent_see.cc +28 -2
- data/src/core/util/latent_see.h +11 -23
- data/src/core/util/linux/env.cc +3 -1
- data/src/core/util/ref_counted_ptr.h +26 -0
- data/src/core/util/shared_bit_gen.cc +21 -0
- data/src/core/util/shared_bit_gen.h +44 -0
- data/src/core/util/single_set_ptr.h +35 -4
- data/src/core/util/uri.cc +75 -17
- data/src/core/util/uri.h +13 -8
- data/src/core/xds/grpc/xds_common_types_parser.cc +1 -9
- data/src/core/xds/grpc/xds_http_filter_registry.cc +1 -3
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +10 -17
- data/src/core/xds/grpc/xds_metadata_parser.cc +40 -64
- data/src/core/xds/grpc/xds_metadata_parser.h +0 -2
- data/src/core/xds/grpc/xds_route_config_parser.cc +55 -77
- data/src/core/xds/xds_client/xds_client.cc +1 -1
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +2 -6
- data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/algorithm.h +2 -2
- data/third_party/abseil-cpp/absl/algorithm/container.h +79 -48
- data/third_party/abseil-cpp/absl/base/attributes.h +66 -16
- data/third_party/abseil-cpp/absl/base/call_once.h +8 -5
- data/third_party/abseil-cpp/absl/base/config.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/nullability_impl.h +17 -56
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +5 -1
- data/third_party/abseil-cpp/absl/base/internal/tracing.cc +39 -0
- data/third_party/abseil-cpp/absl/base/internal/tracing.h +81 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +0 -10
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -0
- data/third_party/abseil-cpp/absl/base/macros.h +35 -4
- data/third_party/abseil-cpp/absl/base/nullability.h +72 -16
- data/third_party/abseil-cpp/absl/base/optimization.h +8 -12
- data/third_party/abseil-cpp/absl/base/options.h +5 -2
- data/third_party/abseil-cpp/absl/base/policy_checks.h +2 -0
- data/third_party/abseil-cpp/absl/container/btree_map.h +889 -0
- data/third_party/abseil-cpp/absl/container/btree_set.h +824 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -1
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +17 -3
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +17 -3
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/btree.h +3046 -0
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +763 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +9 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +1 -0
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +4 -2
- data/third_party/abseil-cpp/absl/container/internal/layout.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +142 -114
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +397 -231
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +56 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +21 -7
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +4 -2
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +17 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +7 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +9 -6
- data/third_party/abseil-cpp/absl/debugging/leak_check.cc +73 -0
- data/third_party/abseil-cpp/absl/debugging/leak_check.h +150 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +48 -9
- data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +1 -0
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +7 -0
- data/third_party/abseil-cpp/absl/flags/flag.h +14 -12
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +12 -4
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +16 -5
- data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +4 -0
- data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +3 -0
- data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +13 -12
- data/third_party/abseil-cpp/absl/flags/usage_config.cc +9 -4
- data/third_party/abseil-cpp/absl/hash/hash.h +26 -2
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +17 -17
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +196 -91
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +2 -4
- data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +2 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +27 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +102 -80
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +90 -38
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +80 -48
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +0 -3
- data/third_party/abseil-cpp/absl/log/internal/proto.h +25 -15
- data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +115 -0
- data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +107 -0
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +8 -1
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +5 -2
- data/third_party/abseil-cpp/absl/log/vlog_is_on.h +2 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -6
- data/third_party/abseil-cpp/absl/numeric/int128.h +15 -3
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +6 -4
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +6 -3
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +3 -1
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +3 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +2 -1
- data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +10 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +4 -2
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -1
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +5 -2
- data/third_party/abseil-cpp/absl/random/internal/platform.h +12 -12
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +56 -5
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +0 -1
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +1 -4
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +2 -3
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -2
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -1
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +2 -0
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +5 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +8 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +1 -1
- data/third_party/abseil-cpp/absl/status/status.h +1 -1
- data/third_party/abseil-cpp/absl/strings/ascii.cc +41 -26
- data/third_party/abseil-cpp/absl/strings/ascii.h +48 -8
- data/third_party/abseil-cpp/absl/strings/charconv.cc +4 -7
- data/third_party/abseil-cpp/absl/strings/charset.h +3 -4
- data/third_party/abseil-cpp/absl/strings/cord.h +5 -19
- data/third_party/abseil-cpp/absl/strings/escaping.cc +56 -48
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +48 -15
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -0
- data/third_party/abseil-cpp/absl/strings/match.h +21 -11
- data/third_party/abseil-cpp/absl/strings/numbers.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/str_cat.h +11 -0
- data/third_party/abseil-cpp/absl/strings/str_split.h +18 -1
- data/third_party/abseil-cpp/absl/strings/string_view.h +20 -19
- data/third_party/abseil-cpp/absl/strings/strip.h +11 -8
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +16 -10
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +6 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +5 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +38 -12
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +10 -2
- data/third_party/abseil-cpp/absl/synchronization/notification.h +11 -1
- data/third_party/abseil-cpp/absl/time/duration.cc +6 -51
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +3 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +2 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +2 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +3 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +2 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -4
- data/third_party/abseil-cpp/absl/time/time.h +84 -23
- data/third_party/abseil-cpp/absl/types/internal/span.h +3 -2
- data/third_party/abseil-cpp/absl/types/optional.h +4 -2
- data/third_party/abseil-cpp/absl/types/span.h +85 -43
- data/third_party/boringssl-with-bazel/src/crypto/aes/aes.cc +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.cc +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.cc +15 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +19 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.cc +79 -48
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.cc +11 -19
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.cc +3 -7
- data/third_party/boringssl-with-bazel/src/crypto/bcm_support.h +0 -35
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.cc +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +3 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.cc +0 -3
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.cc +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/bn/convert.cc +31 -47
- data/third_party/boringssl-with-bazel/src/crypto/bn/div.cc +100 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn/exponentiation.cc +166 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn/sqrt.cc +93 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.cc +14 -8
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/cipher/derive_key.cc +13 -15
- data/third_party/boringssl-with-bazel/src/crypto/cipher/e_aeseax.cc +289 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher/e_aesgcmsiv.cc +179 -102
- data/third_party/boringssl-with-bazel/src/crypto/cipher/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/cms/cms.cc +172 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.cc +28 -5
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.h +11 -9
- data/third_party/boringssl-with-bazel/src/crypto/cpu_intel.cc +0 -6
- data/third_party/boringssl-with-bazel/src/crypto/crypto.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/des/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.cc +13 -14
- data/third_party/boringssl-with-bazel/src/crypto/dh/params.cc +27 -61
- data/third_party/boringssl-with-bazel/src/crypto/digest/digest_extra.cc +16 -8
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.cc +112 -122
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.cc +23 -35
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/ec/ec_asn1.cc +47 -63
- data/third_party/boringssl-with-bazel/src/crypto/ec/hash_to_curve.cc +60 -68
- data/third_party/boringssl-with-bazel/src/crypto/ec/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/ecdsa/ecdsa_asn1.cc +11 -17
- data/third_party/boringssl-with-bazel/src/crypto/err/err.cc +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.cc +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.cc +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.cc +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.cc +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.cc +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.cc +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.cc +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/evp/sign.cc +23 -42
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.cc.inc +29 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/gcm.cc.inc +10 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +16 -45
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.cc.inc +15 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.cc +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm_interface.h +101 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.cc.inc +96 -187
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.cc.inc +24 -512
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.cc.inc +58 -80
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.cc.inc +29 -45
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +27 -25
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.cc.inc +7 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.cc.inc +27 -48
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.cc.inc +34 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.cc.inc +102 -154
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.cc.inc +3 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.cc.inc +1 -78
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.cc.inc +10 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +15 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.cc.inc +40 -53
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.cc.inc +57 -76
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.cc.inc +4 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.cc.inc +37 -52
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.cc.inc +13 -20
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.cc.inc +28 -39
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.cc.inc +6 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/keccak/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mldsa/fips_known_values.inc +1345 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mldsa/mldsa.cc.inc +335 -28
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mlkem/fips_known_values.inc +411 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mlkem/mlkem.cc.inc +265 -33
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.cc.inc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.cc.inc +19 -26
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.cc.inc +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.cc.inc +121 -138
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.cc.inc +96 -83
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +8 -20
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/fips_known_values.inc +674 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +235 -60
- data/third_party/boringssl-with-bazel/src/crypto/fuzzer_mode.cc +30 -0
- data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -30
- data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/md5/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/mem.cc +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.cc +2 -8
- data/third_party/boringssl-with-bazel/src/crypto/pem/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.cc +8 -13
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +22 -8
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.cc +19 -17
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.cc +134 -136
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +14 -8
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.cc +25 -21
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.cc +36 -52
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.cc +97 -79
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/rand/deterministic.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand/fork_detect.cc +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/rand/getentropy.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand/{sysrand_internal.h → internal.h} +22 -4
- data/third_party/boringssl-with-bazel/src/crypto/rand/ios.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand/trusty.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand/urandom.cc +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand/windows.cc +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/rsa/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/rsa/rsa_crypt.cc +14 -22
- data/third_party/boringssl-with-bazel/src/crypto/spake2plus/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.cc +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.cc +3 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.cc +8 -12
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +15 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_conf.cc +16 -24
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_info.cc +18 -21
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.cc +10 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.cc +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.cc +10 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.cc +64 -85
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.cc +16 -32
- data/third_party/boringssl-with-bazel/src/gen/crypto/err_data.cc +576 -567
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +16 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -54
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +8 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bcm_public.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +7 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cms.h +146 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +23 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/des.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +19 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/experimental/kyber.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +4 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/mldsa.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/mlkem.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +10 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +19 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/posix_time.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rc4.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/slhdsa.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +291 -40
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/target.h +0 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +7 -4
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +32 -26
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +49 -49
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +253 -50
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +12 -12
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +7 -5
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -1
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +24 -32
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +93 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +6 -12
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +18 -4
- data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +83 -7
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +173 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +5 -18
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +28 -15
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +31 -7
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +13 -1
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +7 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +13 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +2 -5
- data/third_party/upb/upb/hash/common.c +310 -189
- data/third_party/upb/upb/hash/common.h +44 -43
- data/third_party/upb/upb/hash/int_table.h +29 -5
- data/third_party/upb/upb/hash/str_table.h +6 -0
- data/third_party/upb/upb/mem/arena.c +180 -57
- data/third_party/upb/upb/mem/arena.h +10 -0
- data/third_party/upb/upb/mem/internal/arena.h +62 -24
- data/third_party/upb/upb/message/accessors.c +1 -5
- data/third_party/upb/upb/message/array.c +7 -6
- data/third_party/upb/upb/message/array.h +4 -4
- data/third_party/upb/upb/message/internal/accessors.h +3 -3
- data/third_party/upb/upb/message/internal/extension.c +0 -12
- data/third_party/upb/upb/message/internal/extension.h +0 -4
- data/third_party/upb/upb/message/internal/iterator.h +3 -3
- data/third_party/upb/upb/message/internal/map.h +75 -20
- data/third_party/upb/upb/message/internal/map_sorter.h +10 -2
- data/third_party/upb/upb/message/internal/message.h +53 -5
- data/third_party/upb/upb/message/map.c +68 -20
- data/third_party/upb/upb/message/map.h +8 -1
- data/third_party/upb/upb/message/map_gencode_util.h +3 -45
- data/third_party/upb/upb/message/map_sorter.c +32 -8
- data/third_party/upb/upb/message/merge.h +3 -3
- data/third_party/upb/upb/message/message.c +120 -14
- data/third_party/upb/upb/message/message.h +17 -8
- data/third_party/upb/upb/mini_descriptor/build_enum.c +15 -5
- data/third_party/upb/upb/mini_descriptor/decode.c +18 -2
- data/third_party/upb/upb/mini_descriptor/link.c +4 -0
- data/third_party/upb/upb/mini_table/extension.h +8 -1
- data/third_party/upb/upb/mini_table/extension_registry.c +1 -1
- data/third_party/upb/upb/mini_table/internal/enum.h +1 -1
- data/third_party/upb/upb/mini_table/internal/extension.h +24 -1
- data/third_party/upb/upb/mini_table/internal/field.h +4 -4
- data/third_party/upb/upb/mini_table/internal/message.h +1 -1
- data/third_party/upb/upb/port/def.inc +32 -16
- data/third_party/upb/upb/port/undef.inc +1 -0
- data/third_party/upb/upb/reflection/def_pool.h +2 -2
- data/third_party/upb/upb/reflection/descriptor_bootstrap.h +3 -3
- data/third_party/upb/upb/reflection/enum_def.c +4 -4
- data/third_party/upb/upb/reflection/enum_reserved_range.c +1 -1
- data/third_party/upb/upb/reflection/enum_value_def.c +9 -8
- data/third_party/upb/upb/reflection/extension_range.c +1 -2
- data/third_party/upb/upb/reflection/field_def.c +3 -5
- data/third_party/upb/upb/reflection/field_def.h +1 -1
- data/third_party/upb/upb/reflection/file_def.c +4 -5
- data/third_party/upb/upb/reflection/internal/def_builder.h +35 -10
- data/third_party/upb/upb/reflection/internal/enum_value_def.h +1 -1
- data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
- data/third_party/upb/upb/reflection/message_def.c +4 -7
- data/third_party/upb/upb/reflection/message_reserved_range.c +1 -1
- data/third_party/upb/upb/reflection/method_def.c +1 -1
- data/third_party/upb/upb/reflection/oneof_def.c +3 -3
- data/third_party/upb/upb/reflection/service_def.c +2 -5
- data/third_party/upb/upb/text/encode.c +16 -0
- data/third_party/upb/upb/text/internal/encode.h +2 -1
- data/third_party/upb/upb/wire/decode.c +104 -72
- data/third_party/upb/upb/wire/encode.c +37 -13
- data/third_party/upb/upb/wire/internal/decode_fast.c +2 -2
- data/third_party/upb/upb/wire/internal/decode_fast.h +4 -0
- metadata +43 -7
- data/src/core/lib/iomgr/executor.cc +0 -441
- data/src/core/lib/iomgr/executor.h +0 -119
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/polyval.cc.inc +0 -89
@@ -41,12 +41,6 @@
|
|
41
41
|
// When heterogeneous lookup is disabled, only the explicit `key_type` overloads
|
42
42
|
// exist.
|
43
43
|
//
|
44
|
-
// find() also supports passing the hash explicitly:
|
45
|
-
//
|
46
|
-
// iterator find(const key_type& key, size_t hash);
|
47
|
-
// template <class U>
|
48
|
-
// iterator find(const U& key, size_t hash);
|
49
|
-
//
|
50
44
|
// In addition the pointer to element and iterator stability guarantees are
|
51
45
|
// weaker: all iterators and pointers are invalidated after a new element is
|
52
46
|
// inserted.
|
@@ -190,6 +184,7 @@
|
|
190
184
|
#include <cstddef>
|
191
185
|
#include <cstdint>
|
192
186
|
#include <cstring>
|
187
|
+
#include <functional>
|
193
188
|
#include <initializer_list>
|
194
189
|
#include <iterator>
|
195
190
|
#include <limits>
|
@@ -208,11 +203,14 @@
|
|
208
203
|
#include "absl/base/port.h"
|
209
204
|
#include "absl/base/prefetch.h"
|
210
205
|
#include "absl/container/internal/common.h" // IWYU pragma: export // for node_handle
|
206
|
+
#include "absl/container/internal/common_policy_traits.h"
|
211
207
|
#include "absl/container/internal/compressed_tuple.h"
|
212
208
|
#include "absl/container/internal/container_memory.h"
|
209
|
+
#include "absl/container/internal/hash_function_defaults.h"
|
213
210
|
#include "absl/container/internal/hash_policy_traits.h"
|
214
211
|
#include "absl/container/internal/hashtable_debug_hooks.h"
|
215
212
|
#include "absl/container/internal/hashtablez_sampler.h"
|
213
|
+
#include "absl/hash/hash.h"
|
216
214
|
#include "absl/memory/memory.h"
|
217
215
|
#include "absl/meta/type_traits.h"
|
218
216
|
#include "absl/numeric/bits.h"
|
@@ -252,6 +250,15 @@ namespace container_internal {
|
|
252
250
|
#define ABSL_SWISSTABLE_ENABLE_GENERATIONS
|
253
251
|
#endif
|
254
252
|
|
253
|
+
#ifdef ABSL_SWISSTABLE_ASSERT
|
254
|
+
#error ABSL_SWISSTABLE_ASSERT cannot be directly set
|
255
|
+
#else
|
256
|
+
// We use this macro for assertions that users may see when the table is in an
|
257
|
+
// invalid state that sanitizers may help diagnose.
|
258
|
+
#define ABSL_SWISSTABLE_ASSERT(CONDITION) \
|
259
|
+
assert((CONDITION) && "Try enabling sanitizers.")
|
260
|
+
#endif
|
261
|
+
|
255
262
|
// We use uint8_t so we don't need to worry about padding.
|
256
263
|
using GenerationType = uint8_t;
|
257
264
|
|
@@ -322,7 +329,7 @@ class probe_seq {
|
|
322
329
|
// sequence and `mask` (usually the capacity of the table) as the mask to
|
323
330
|
// apply to each value in the progression.
|
324
331
|
probe_seq(size_t hash, size_t mask) {
|
325
|
-
|
332
|
+
ABSL_SWISSTABLE_ASSERT(((mask + 1) & mask) == 0 && "not a mask");
|
326
333
|
mask_ = mask;
|
327
334
|
offset_ = hash & mask_;
|
328
335
|
}
|
@@ -452,7 +459,7 @@ class BitMask : public NonIterableBitMask<T, SignificantBits, Shift> {
|
|
452
459
|
public:
|
453
460
|
explicit BitMask(T mask) : Base(mask) {
|
454
461
|
if (Shift == 3 && !NullifyBitsOnIteration) {
|
455
|
-
|
462
|
+
ABSL_SWISSTABLE_ASSERT(this->mask_ == (this->mask_ & kMsbs8Bytes));
|
456
463
|
}
|
457
464
|
}
|
458
465
|
// BitMask is an iterator over the indices of its abstract bits.
|
@@ -536,6 +543,18 @@ static_assert(ctrl_t::kDeleted == static_cast<ctrl_t>(-2),
|
|
536
543
|
// See definition comment for why this is size 32.
|
537
544
|
ABSL_DLL extern const ctrl_t kEmptyGroup[32];
|
538
545
|
|
546
|
+
// We use these sentinel capacity values in debug mode to indicate different
|
547
|
+
// classes of bugs.
|
548
|
+
enum InvalidCapacity : size_t {
|
549
|
+
kAboveMaxValidCapacity = ~size_t{} - 100,
|
550
|
+
kReentrance,
|
551
|
+
kDestroyed,
|
552
|
+
|
553
|
+
// These two must be last because we use `>= kMovedFrom` to mean moved-from.
|
554
|
+
kMovedFrom,
|
555
|
+
kSelfMovedFrom,
|
556
|
+
};
|
557
|
+
|
539
558
|
// Returns a pointer to a control byte group that can be used by empty tables.
|
540
559
|
inline ctrl_t* EmptyGroup() {
|
541
560
|
// Const must be cast away here; no uses of this function will actually write
|
@@ -687,10 +706,8 @@ struct GroupSse2Impl {
|
|
687
706
|
// Returns a bitmask representing the positions of slots that match hash.
|
688
707
|
BitMask<uint16_t, kWidth> Match(h2_t hash) const {
|
689
708
|
auto match = _mm_set1_epi8(static_cast<char>(hash));
|
690
|
-
|
691
|
-
result = BitMask<uint16_t, kWidth>(
|
709
|
+
return BitMask<uint16_t, kWidth>(
|
692
710
|
static_cast<uint16_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
|
693
|
-
return result;
|
694
711
|
}
|
695
712
|
|
696
713
|
// Returns a bitmask representing the positions of empty slots.
|
@@ -1105,19 +1122,20 @@ class GrowthInfo {
|
|
1105
1122
|
|
1106
1123
|
// Overwrites single empty slot with a full slot.
|
1107
1124
|
void OverwriteEmptyAsFull() {
|
1108
|
-
|
1125
|
+
ABSL_SWISSTABLE_ASSERT(GetGrowthLeft() > 0);
|
1109
1126
|
--growth_left_info_;
|
1110
1127
|
}
|
1111
1128
|
|
1112
1129
|
// Overwrites several empty slots with full slots.
|
1113
1130
|
void OverwriteManyEmptyAsFull(size_t cnt) {
|
1114
|
-
|
1131
|
+
ABSL_SWISSTABLE_ASSERT(GetGrowthLeft() >= cnt);
|
1115
1132
|
growth_left_info_ -= cnt;
|
1116
1133
|
}
|
1117
1134
|
|
1118
1135
|
// Overwrites specified control element with full slot.
|
1119
1136
|
void OverwriteControlAsFull(ctrl_t ctrl) {
|
1120
|
-
|
1137
|
+
ABSL_SWISSTABLE_ASSERT(GetGrowthLeft() >=
|
1138
|
+
static_cast<size_t>(IsEmpty(ctrl)));
|
1121
1139
|
growth_left_info_ -= static_cast<size_t>(IsEmpty(ctrl));
|
1122
1140
|
}
|
1123
1141
|
|
@@ -1187,7 +1205,7 @@ class RawHashSetLayout {
|
|
1187
1205
|
slot_offset_(
|
1188
1206
|
(generation_offset_ + NumGenerationBytes() + slot_align - 1) &
|
1189
1207
|
(~slot_align + 1)) {
|
1190
|
-
|
1208
|
+
ABSL_SWISSTABLE_ASSERT(IsValidCapacity(capacity));
|
1191
1209
|
}
|
1192
1210
|
|
1193
1211
|
// Returns the capacity of a table.
|
@@ -1208,6 +1226,9 @@ class RawHashSetLayout {
|
|
1208
1226
|
// Given the capacity of a table, computes the total size of the backing
|
1209
1227
|
// array.
|
1210
1228
|
size_t alloc_size(size_t slot_size) const {
|
1229
|
+
ABSL_SWISSTABLE_ASSERT(
|
1230
|
+
slot_size <=
|
1231
|
+
((std::numeric_limits<size_t>::max)() - slot_offset_) / capacity_);
|
1211
1232
|
return slot_offset_ + capacity_ * slot_size;
|
1212
1233
|
}
|
1213
1234
|
|
@@ -1232,6 +1253,10 @@ constexpr size_t SooCapacity() { return 1; }
|
|
1232
1253
|
struct soo_tag_t {};
|
1233
1254
|
// Sentinel type to indicate SOO CommonFields construction with full size.
|
1234
1255
|
struct full_soo_tag_t {};
|
1256
|
+
// Sentinel type to indicate non-SOO CommonFields construction.
|
1257
|
+
struct non_soo_tag_t {};
|
1258
|
+
// Sentinel value to indicate an uninitialized CommonFields for use in swapping.
|
1259
|
+
struct uninitialized_tag_t {};
|
1235
1260
|
|
1236
1261
|
// Suppress erroneous uninitialized memory errors on GCC. For example, GCC
|
1237
1262
|
// thinks that the call to slot_array() in find_or_prepare_insert() is reading
|
@@ -1313,10 +1338,13 @@ union HeapOrSoo {
|
|
1313
1338
|
// of this state to helper functions as a single argument.
|
1314
1339
|
class CommonFields : public CommonFieldsGenerationInfo {
|
1315
1340
|
public:
|
1316
|
-
CommonFields() : capacity_(0), size_(0), heap_or_soo_(EmptyGroup()) {}
|
1317
1341
|
explicit CommonFields(soo_tag_t) : capacity_(SooCapacity()), size_(0) {}
|
1318
1342
|
explicit CommonFields(full_soo_tag_t)
|
1319
1343
|
: capacity_(SooCapacity()), size_(size_t{1} << HasInfozShift()) {}
|
1344
|
+
explicit CommonFields(non_soo_tag_t)
|
1345
|
+
: capacity_(0), size_(0), heap_or_soo_(EmptyGroup()) {}
|
1346
|
+
// For use in swapping.
|
1347
|
+
explicit CommonFields(uninitialized_tag_t) {}
|
1320
1348
|
|
1321
1349
|
// Not copyable
|
1322
1350
|
CommonFields(const CommonFields&) = delete;
|
@@ -1328,7 +1356,8 @@ class CommonFields : public CommonFieldsGenerationInfo {
|
|
1328
1356
|
|
1329
1357
|
template <bool kSooEnabled>
|
1330
1358
|
static CommonFields CreateDefault() {
|
1331
|
-
return kSooEnabled ? CommonFields{soo_tag_t{}}
|
1359
|
+
return kSooEnabled ? CommonFields{soo_tag_t{}}
|
1360
|
+
: CommonFields{non_soo_tag_t{}};
|
1332
1361
|
}
|
1333
1362
|
|
1334
1363
|
// The inline data for SOO is written on top of control_/slots_.
|
@@ -1342,7 +1371,8 @@ class CommonFields : public CommonFieldsGenerationInfo {
|
|
1342
1371
|
void set_control(ctrl_t* c) { heap_or_soo_.control() = c; }
|
1343
1372
|
void* backing_array_start() const {
|
1344
1373
|
// growth_info (and maybe infoz) is stored before control bytes.
|
1345
|
-
|
1374
|
+
ABSL_SWISSTABLE_ASSERT(
|
1375
|
+
reinterpret_cast<uintptr_t>(control()) % alignof(size_t) == 0);
|
1346
1376
|
return control() - ControlOffset(has_infoz());
|
1347
1377
|
}
|
1348
1378
|
|
@@ -1365,18 +1395,20 @@ class CommonFields : public CommonFieldsGenerationInfo {
|
|
1365
1395
|
size_ = size_t{1} << HasInfozShift();
|
1366
1396
|
}
|
1367
1397
|
void increment_size() {
|
1368
|
-
|
1398
|
+
ABSL_SWISSTABLE_ASSERT(size() < capacity());
|
1369
1399
|
size_ += size_t{1} << HasInfozShift();
|
1370
1400
|
}
|
1371
1401
|
void decrement_size() {
|
1372
|
-
|
1402
|
+
ABSL_SWISSTABLE_ASSERT(size() > 0);
|
1373
1403
|
size_ -= size_t{1} << HasInfozShift();
|
1374
1404
|
}
|
1375
1405
|
|
1376
1406
|
// The total number of available slots.
|
1377
1407
|
size_t capacity() const { return capacity_; }
|
1378
1408
|
void set_capacity(size_t c) {
|
1379
|
-
|
1409
|
+
// We allow setting above the max valid capacity for debugging purposes.
|
1410
|
+
ABSL_SWISSTABLE_ASSERT(c == 0 || IsValidCapacity(c) ||
|
1411
|
+
c > kAboveMaxValidCapacity);
|
1380
1412
|
capacity_ = c;
|
1381
1413
|
}
|
1382
1414
|
|
@@ -1388,7 +1420,8 @@ class CommonFields : public CommonFieldsGenerationInfo {
|
|
1388
1420
|
|
1389
1421
|
GrowthInfo& growth_info() {
|
1390
1422
|
auto* gl_ptr = reinterpret_cast<GrowthInfo*>(control()) - 1;
|
1391
|
-
|
1423
|
+
ABSL_SWISSTABLE_ASSERT(
|
1424
|
+
reinterpret_cast<uintptr_t>(gl_ptr) % alignof(GrowthInfo) == 0);
|
1392
1425
|
return *gl_ptr;
|
1393
1426
|
}
|
1394
1427
|
GrowthInfo growth_info() const {
|
@@ -1408,7 +1441,7 @@ class CommonFields : public CommonFieldsGenerationInfo {
|
|
1408
1441
|
: HashtablezInfoHandle();
|
1409
1442
|
}
|
1410
1443
|
void set_infoz(HashtablezInfoHandle infoz) {
|
1411
|
-
|
1444
|
+
ABSL_SWISSTABLE_ASSERT(has_infoz());
|
1412
1445
|
*reinterpret_cast<HashtablezInfoHandle*>(backing_array_start()) = infoz;
|
1413
1446
|
}
|
1414
1447
|
|
@@ -1444,6 +1477,20 @@ class CommonFields : public CommonFieldsGenerationInfo {
|
|
1444
1477
|
std::count(control(), control() + capacity(), ctrl_t::kDeleted));
|
1445
1478
|
}
|
1446
1479
|
|
1480
|
+
// Helper to enable sanitizer mode validation to protect against reentrant
|
1481
|
+
// calls during element constructor/destructor.
|
1482
|
+
template <typename F>
|
1483
|
+
void RunWithReentrancyGuard(F f) {
|
1484
|
+
#ifdef NDEBUG
|
1485
|
+
f();
|
1486
|
+
return;
|
1487
|
+
#endif
|
1488
|
+
const size_t cap = capacity();
|
1489
|
+
set_capacity(InvalidCapacity::kReentrance);
|
1490
|
+
f();
|
1491
|
+
set_capacity(cap);
|
1492
|
+
}
|
1493
|
+
|
1447
1494
|
private:
|
1448
1495
|
// We store the has_infoz bit in the lowest bit of size_.
|
1449
1496
|
static constexpr size_t HasInfozShift() { return 1; }
|
@@ -1454,8 +1501,8 @@ class CommonFields : public CommonFieldsGenerationInfo {
|
|
1454
1501
|
// We can't assert that SOO is enabled because we don't have SooEnabled(), but
|
1455
1502
|
// we assert what we can.
|
1456
1503
|
void AssertInSooMode() const {
|
1457
|
-
|
1458
|
-
|
1504
|
+
ABSL_SWISSTABLE_ASSERT(capacity() == SooCapacity());
|
1505
|
+
ABSL_SWISSTABLE_ASSERT(!has_infoz());
|
1459
1506
|
}
|
1460
1507
|
|
1461
1508
|
// The number of slots in the backing array. This is always 2^N-1 for an
|
@@ -1481,7 +1528,7 @@ class raw_hash_set;
|
|
1481
1528
|
|
1482
1529
|
// Returns the next valid capacity after `n`.
|
1483
1530
|
inline size_t NextCapacity(size_t n) {
|
1484
|
-
|
1531
|
+
ABSL_SWISSTABLE_ASSERT(IsValidCapacity(n) || n == 0);
|
1485
1532
|
return n * 2 + 1;
|
1486
1533
|
}
|
1487
1534
|
|
@@ -1500,6 +1547,15 @@ inline size_t NormalizeCapacity(size_t n) {
|
|
1500
1547
|
return n ? ~size_t{} >> countl_zero(n) : 1;
|
1501
1548
|
}
|
1502
1549
|
|
1550
|
+
template <size_t kSlotSize>
|
1551
|
+
size_t MaxValidCapacity() {
|
1552
|
+
return NormalizeCapacity((std::numeric_limits<size_t>::max)() / 4 /
|
1553
|
+
kSlotSize);
|
1554
|
+
}
|
1555
|
+
|
1556
|
+
// Use a non-inlined function to avoid code bloat.
|
1557
|
+
[[noreturn]] void HashTableSizeOverflow();
|
1558
|
+
|
1503
1559
|
// General notes on capacity/growth methods below:
|
1504
1560
|
// - We use 7/8th as maximum load factor. For 16-wide groups, that gives an
|
1505
1561
|
// average of two empty slots per group.
|
@@ -1511,7 +1567,7 @@ inline size_t NormalizeCapacity(size_t n) {
|
|
1511
1567
|
// Given `capacity`, applies the load factor; i.e., it returns the maximum
|
1512
1568
|
// number of values we should put into the table before a resizing rehash.
|
1513
1569
|
inline size_t CapacityToGrowth(size_t capacity) {
|
1514
|
-
|
1570
|
+
ABSL_SWISSTABLE_ASSERT(IsValidCapacity(capacity));
|
1515
1571
|
// `capacity*7/8`
|
1516
1572
|
if (Group::kWidth == 8 && capacity == 7) {
|
1517
1573
|
// x-x/8 does not work when x==7.
|
@@ -1703,7 +1759,7 @@ inline void AssertSameContainer(const ctrl_t* ctrl_a, const ctrl_t* ctrl_b,
|
|
1703
1759
|
"hashtable.");
|
1704
1760
|
fail_if(true, "Comparing non-end() iterators from different hashtables.");
|
1705
1761
|
} else {
|
1706
|
-
|
1762
|
+
ABSL_HARDENING_ASSERT_SLOW(
|
1707
1763
|
AreItersFromSameContainer(ctrl_a, ctrl_b, slot_a, slot_b) &&
|
1708
1764
|
"Invalid iterator comparison. The iterators may be from different "
|
1709
1765
|
"containers or the container might have rehashed or moved. Consider "
|
@@ -1769,7 +1825,7 @@ inline FindInfo find_first_non_full(const CommonFields& common, size_t hash) {
|
|
1769
1825
|
seq.index()};
|
1770
1826
|
}
|
1771
1827
|
seq.next();
|
1772
|
-
|
1828
|
+
ABSL_SWISSTABLE_ASSERT(seq.index() <= common.capacity() && "full table!");
|
1773
1829
|
}
|
1774
1830
|
}
|
1775
1831
|
|
@@ -1801,7 +1857,7 @@ inline void ResetCtrl(CommonFields& common, size_t slot_size) {
|
|
1801
1857
|
// Sets sanitizer poisoning for slot corresponding to control byte being set.
|
1802
1858
|
inline void DoSanitizeOnSetCtrl(const CommonFields& c, size_t i, ctrl_t h,
|
1803
1859
|
size_t slot_size) {
|
1804
|
-
|
1860
|
+
ABSL_SWISSTABLE_ASSERT(i < c.capacity());
|
1805
1861
|
auto* slot_i = static_cast<const char*>(c.slot_array()) + i * slot_size;
|
1806
1862
|
if (IsFull(h)) {
|
1807
1863
|
SanitizerUnpoisonMemoryRegion(slot_i, slot_size);
|
@@ -1831,7 +1887,7 @@ inline void SetCtrl(const CommonFields& c, size_t i, h2_t h, size_t slot_size) {
|
|
1831
1887
|
// setting the cloned control byte.
|
1832
1888
|
inline void SetCtrlInSingleGroupTable(const CommonFields& c, size_t i, ctrl_t h,
|
1833
1889
|
size_t slot_size) {
|
1834
|
-
|
1890
|
+
ABSL_SWISSTABLE_ASSERT(is_single_group(c.capacity()));
|
1835
1891
|
DoSanitizeOnSetCtrl(c, i, h, slot_size);
|
1836
1892
|
ctrl_t* ctrl = c.control();
|
1837
1893
|
ctrl[i] = h;
|
@@ -1871,8 +1927,8 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline void IterateOverFullSlots(
|
|
1871
1927
|
// Small tables capacity fits into portable group, where
|
1872
1928
|
// GroupPortableImpl::MaskFull is more efficient for the
|
1873
1929
|
// capacity <= GroupPortableImpl::kWidth.
|
1874
|
-
|
1875
|
-
|
1930
|
+
ABSL_SWISSTABLE_ASSERT(cap <= GroupPortableImpl::kWidth &&
|
1931
|
+
"unexpectedly large small capacity");
|
1876
1932
|
static_assert(Group::kWidth >= GroupPortableImpl::kWidth,
|
1877
1933
|
"unexpected group width");
|
1878
1934
|
// Group starts from kSentinel slot, so indices in the mask will
|
@@ -1889,19 +1945,21 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline void IterateOverFullSlots(
|
|
1889
1945
|
ABSL_ATTRIBUTE_UNUSED const size_t original_size_for_assert = remaining;
|
1890
1946
|
while (remaining != 0) {
|
1891
1947
|
for (uint32_t i : GroupFullEmptyOrDeleted(ctrl).MaskFull()) {
|
1892
|
-
|
1948
|
+
ABSL_SWISSTABLE_ASSERT(IsFull(ctrl[i]) &&
|
1949
|
+
"hash table was modified unexpectedly");
|
1893
1950
|
cb(ctrl + i, slot + i);
|
1894
1951
|
--remaining;
|
1895
1952
|
}
|
1896
1953
|
ctrl += Group::kWidth;
|
1897
1954
|
slot += Group::kWidth;
|
1898
|
-
|
1899
|
-
|
1955
|
+
ABSL_SWISSTABLE_ASSERT(
|
1956
|
+
(remaining == 0 || *(ctrl - 1) != ctrl_t::kSentinel) &&
|
1957
|
+
"hash table was modified unexpectedly");
|
1900
1958
|
}
|
1901
1959
|
// NOTE: erasure of the current element is allowed in callback for
|
1902
1960
|
// absl::erase_if specialization. So we use `>=`.
|
1903
|
-
|
1904
|
-
|
1961
|
+
ABSL_SWISSTABLE_ASSERT(original_size_for_assert >= c.size() &&
|
1962
|
+
"hash table was modified unexpectedly");
|
1905
1963
|
}
|
1906
1964
|
|
1907
1965
|
template <typename CharAlloc>
|
@@ -1956,34 +2014,16 @@ class HashSetResizeHelper {
|
|
1956
2014
|
// `GrowSizeIntoSingleGroup*` in case `IsGrowingIntoSingleGroupApplicable`.
|
1957
2015
|
// Falls back to `find_first_non_full` in case of big groups.
|
1958
2016
|
static FindInfo FindFirstNonFullAfterResize(const CommonFields& c,
|
1959
|
-
size_t old_capacity,
|
1960
|
-
size_t hash) {
|
1961
|
-
if (!IsGrowingIntoSingleGroupApplicable(old_capacity, c.capacity())) {
|
1962
|
-
return find_first_non_full(c, hash);
|
1963
|
-
}
|
1964
|
-
// Find a location for the new element non-deterministically.
|
1965
|
-
// Note that any position is correct.
|
1966
|
-
// It will located at `half_old_capacity` or one of the other
|
1967
|
-
// empty slots with approximately 50% probability each.
|
1968
|
-
size_t offset = probe(c, hash).offset();
|
1969
|
-
|
1970
|
-
// Note that we intentionally use unsigned int underflow.
|
1971
|
-
if (offset - (old_capacity + 1) >= old_capacity) {
|
1972
|
-
// Offset fall on kSentinel or into the mostly occupied first half.
|
1973
|
-
offset = old_capacity / 2;
|
1974
|
-
}
|
1975
|
-
assert(IsEmpty(c.control()[offset]));
|
1976
|
-
return FindInfo{offset, 0};
|
1977
|
-
}
|
2017
|
+
size_t old_capacity, size_t hash);
|
1978
2018
|
|
1979
2019
|
HeapOrSoo& old_heap_or_soo() { return old_heap_or_soo_; }
|
1980
2020
|
void* old_soo_data() { return old_heap_or_soo_.get_soo_data(); }
|
1981
2021
|
ctrl_t* old_ctrl() const {
|
1982
|
-
|
2022
|
+
ABSL_SWISSTABLE_ASSERT(!was_soo_);
|
1983
2023
|
return old_heap_or_soo_.control();
|
1984
2024
|
}
|
1985
2025
|
void* old_slots() const {
|
1986
|
-
|
2026
|
+
ABSL_SWISSTABLE_ASSERT(!was_soo_);
|
1987
2027
|
return old_heap_or_soo_.slot_array().get();
|
1988
2028
|
}
|
1989
2029
|
size_t old_capacity() const { return old_capacity_; }
|
@@ -2034,7 +2074,7 @@ class HashSetResizeHelper {
|
|
2034
2074
|
ctrl_t soo_slot_h2,
|
2035
2075
|
size_t key_size,
|
2036
2076
|
size_t value_size) {
|
2037
|
-
|
2077
|
+
ABSL_SWISSTABLE_ASSERT(c.capacity());
|
2038
2078
|
HashtablezInfoHandle infoz =
|
2039
2079
|
ShouldSampleHashtablezInfo<Alloc>()
|
2040
2080
|
? SampleHashtablezInfo<SooEnabled>(SizeOfSlot, key_size, value_size,
|
@@ -2091,21 +2131,20 @@ class HashSetResizeHelper {
|
|
2091
2131
|
// 1. GrowIntoSingleGroupShuffleControlBytes was already called.
|
2092
2132
|
template <class PolicyTraits, class Alloc>
|
2093
2133
|
void GrowSizeIntoSingleGroup(CommonFields& c, Alloc& alloc_ref) {
|
2094
|
-
|
2095
|
-
|
2134
|
+
ABSL_SWISSTABLE_ASSERT(old_capacity_ < Group::kWidth / 2);
|
2135
|
+
ABSL_SWISSTABLE_ASSERT(
|
2136
|
+
IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity()));
|
2096
2137
|
using slot_type = typename PolicyTraits::slot_type;
|
2097
|
-
|
2138
|
+
ABSL_SWISSTABLE_ASSERT(is_single_group(c.capacity()));
|
2098
2139
|
|
2099
|
-
auto* new_slots = static_cast<slot_type*>(c.slot_array());
|
2140
|
+
auto* new_slots = static_cast<slot_type*>(c.slot_array()) + 1;
|
2100
2141
|
auto* old_slots_ptr = static_cast<slot_type*>(old_slots());
|
2142
|
+
auto* old_ctrl_ptr = old_ctrl();
|
2101
2143
|
|
2102
|
-
size_t
|
2103
|
-
|
2104
|
-
|
2105
|
-
|
2106
|
-
SanitizerUnpoisonMemoryRegion(new_slots + new_i, sizeof(slot_type));
|
2107
|
-
PolicyTraits::transfer(&alloc_ref, new_slots + new_i,
|
2108
|
-
old_slots_ptr + i);
|
2144
|
+
for (size_t i = 0; i < old_capacity_; ++i, ++new_slots) {
|
2145
|
+
if (IsFull(old_ctrl_ptr[i])) {
|
2146
|
+
SanitizerUnpoisonMemoryRegion(new_slots, sizeof(slot_type));
|
2147
|
+
PolicyTraits::transfer(&alloc_ref, new_slots, old_slots_ptr + i);
|
2109
2148
|
}
|
2110
2149
|
}
|
2111
2150
|
PoisonSingleGroupEmptySlots(c, sizeof(slot_type));
|
@@ -2147,27 +2186,25 @@ class HashSetResizeHelper {
|
|
2147
2186
|
// 1. new_ctrl is allocated for new_capacity,
|
2148
2187
|
// but not initialized.
|
2149
2188
|
// 2. new_capacity is a single group.
|
2189
|
+
// 3. old_capacity > 0.
|
2150
2190
|
//
|
2151
2191
|
// All elements are transferred into the first `old_capacity + 1` positions
|
2152
|
-
// of the new_ctrl. Elements are
|
2153
|
-
//
|
2154
|
-
//
|
2155
|
-
//
|
2192
|
+
// of the new_ctrl. Elements are shifted by 1 in order to keep a space at the
|
2193
|
+
// beginning for the new element.
|
2194
|
+
// Position of the new added element will be based on `H1` and is not
|
2195
|
+
// deterministic.
|
2156
2196
|
//
|
2157
2197
|
// Examples:
|
2158
2198
|
// S = kSentinel, E = kEmpty
|
2159
2199
|
//
|
2160
|
-
// old_ctrl = SEEEEEEEE...
|
2161
|
-
// new_ctrl = ESEEEEEEE...
|
2162
|
-
//
|
2163
2200
|
// old_ctrl = 0SEEEEEEE...
|
2164
2201
|
// new_ctrl = E0ESE0EEE...
|
2165
2202
|
//
|
2166
2203
|
// old_ctrl = 012S012EEEEEEEEE...
|
2167
|
-
// new_ctrl =
|
2204
|
+
// new_ctrl = E012EEESE012EEE...
|
2168
2205
|
//
|
2169
2206
|
// old_ctrl = 0123456S0123456EEEEEEEEEEE...
|
2170
|
-
// new_ctrl =
|
2207
|
+
// new_ctrl = E0123456EEEEEESE0123456EEE...
|
2171
2208
|
void GrowIntoSingleGroupShuffleControlBytes(ctrl_t* new_ctrl,
|
2172
2209
|
size_t new_capacity) const;
|
2173
2210
|
|
@@ -2376,6 +2413,10 @@ class raw_hash_set {
|
|
2376
2413
|
alignof(slot_type) <= alignof(HeapOrSoo);
|
2377
2414
|
}
|
2378
2415
|
|
2416
|
+
constexpr static size_t DefaultCapacity() {
|
2417
|
+
return SooEnabled() ? SooCapacity() : 0;
|
2418
|
+
}
|
2419
|
+
|
2379
2420
|
// Whether `size` fits in the SOO capacity of this table.
|
2380
2421
|
bool fits_in_soo(size_t size) const {
|
2381
2422
|
return SooEnabled() && size <= SooCapacity();
|
@@ -2402,23 +2443,14 @@ class raw_hash_set {
|
|
2402
2443
|
static_assert(std::is_lvalue_reference<reference>::value,
|
2403
2444
|
"Policy::element() must return a reference");
|
2404
2445
|
|
2405
|
-
template <typename T>
|
2406
|
-
struct SameAsElementReference
|
2407
|
-
: std::is_same<typename std::remove_cv<
|
2408
|
-
typename std::remove_reference<reference>::type>::type,
|
2409
|
-
typename std::remove_cv<
|
2410
|
-
typename std::remove_reference<T>::type>::type> {};
|
2411
|
-
|
2412
2446
|
// An enabler for insert(T&&): T must be convertible to init_type or be the
|
2413
2447
|
// same as [cv] value_type [ref].
|
2414
|
-
// Note: we separate SameAsElementReference into its own type to avoid using
|
2415
|
-
// reference unless we need to. MSVC doesn't seem to like it in some
|
2416
|
-
// cases.
|
2417
2448
|
template <class T>
|
2418
|
-
using
|
2419
|
-
absl::
|
2420
|
-
|
2421
|
-
|
2449
|
+
using Insertable = absl::disjunction<
|
2450
|
+
std::is_same<absl::remove_cvref_t<reference>, absl::remove_cvref_t<T>>,
|
2451
|
+
std::is_convertible<T, init_type>>;
|
2452
|
+
template <class T>
|
2453
|
+
using IsNotBitField = std::is_pointer<T*>;
|
2422
2454
|
|
2423
2455
|
// RequiresNotInit is a workaround for gcc prior to 7.1.
|
2424
2456
|
// See https://godbolt.org/g/Y4xsUh.
|
@@ -2429,6 +2461,17 @@ class raw_hash_set {
|
|
2429
2461
|
template <class... Ts>
|
2430
2462
|
using IsDecomposable = IsDecomposable<void, PolicyTraits, Hash, Eq, Ts...>;
|
2431
2463
|
|
2464
|
+
template <class T>
|
2465
|
+
using IsDecomposableAndInsertable =
|
2466
|
+
IsDecomposable<std::enable_if_t<Insertable<T>::value, T>>;
|
2467
|
+
|
2468
|
+
// Evaluates to true if an assignment from the given type would require the
|
2469
|
+
// source object to remain alive for the life of the element.
|
2470
|
+
template <class U>
|
2471
|
+
using IsLifetimeBoundAssignmentFrom = std::conditional_t<
|
2472
|
+
policy_trait_element_is_owner<Policy>::value, std::false_type,
|
2473
|
+
type_traits_internal::IsLifetimeBoundAssignment<init_type, U>>;
|
2474
|
+
|
2432
2475
|
public:
|
2433
2476
|
static_assert(std::is_same<pointer, value_type*>::value,
|
2434
2477
|
"Allocators with custom pointer types are not supported");
|
@@ -2613,7 +2656,11 @@ class raw_hash_set {
|
|
2613
2656
|
const allocator_type& alloc = allocator_type())
|
2614
2657
|
: settings_(CommonFields::CreateDefault<SooEnabled()>(), hash, eq,
|
2615
2658
|
alloc) {
|
2616
|
-
if (bucket_count > (
|
2659
|
+
if (bucket_count > DefaultCapacity()) {
|
2660
|
+
if (ABSL_PREDICT_FALSE(bucket_count >
|
2661
|
+
MaxValidCapacity<sizeof(slot_type)>())) {
|
2662
|
+
HashTableSizeOverflow();
|
2663
|
+
}
|
2617
2664
|
resize(NormalizeCapacity(bucket_count));
|
2618
2665
|
}
|
2619
2666
|
}
|
@@ -2672,7 +2719,8 @@ class raw_hash_set {
|
|
2672
2719
|
// absl::flat_hash_set<int> a, b{a};
|
2673
2720
|
//
|
2674
2721
|
// RequiresNotInit<T> is a workaround for gcc prior to 7.1.
|
2675
|
-
template <class T, RequiresNotInit<T> = 0,
|
2722
|
+
template <class T, RequiresNotInit<T> = 0,
|
2723
|
+
std::enable_if_t<Insertable<T>::value, int> = 0>
|
2676
2724
|
raw_hash_set(std::initializer_list<T> init, size_t bucket_count = 0,
|
2677
2725
|
const hasher& hash = hasher(), const key_equal& eq = key_equal(),
|
2678
2726
|
const allocator_type& alloc = allocator_type())
|
@@ -2683,7 +2731,8 @@ class raw_hash_set {
|
|
2683
2731
|
const allocator_type& alloc = allocator_type())
|
2684
2732
|
: raw_hash_set(init.begin(), init.end(), bucket_count, hash, eq, alloc) {}
|
2685
2733
|
|
2686
|
-
template <class T, RequiresNotInit<T> = 0,
|
2734
|
+
template <class T, RequiresNotInit<T> = 0,
|
2735
|
+
std::enable_if_t<Insertable<T>::value, int> = 0>
|
2687
2736
|
raw_hash_set(std::initializer_list<T> init, size_t bucket_count,
|
2688
2737
|
const hasher& hash, const allocator_type& alloc)
|
2689
2738
|
: raw_hash_set(init, bucket_count, hash, key_equal(), alloc) {}
|
@@ -2692,7 +2741,8 @@ class raw_hash_set {
|
|
2692
2741
|
const hasher& hash, const allocator_type& alloc)
|
2693
2742
|
: raw_hash_set(init, bucket_count, hash, key_equal(), alloc) {}
|
2694
2743
|
|
2695
|
-
template <class T, RequiresNotInit<T> = 0,
|
2744
|
+
template <class T, RequiresNotInit<T> = 0,
|
2745
|
+
std::enable_if_t<Insertable<T>::value, int> = 0>
|
2696
2746
|
raw_hash_set(std::initializer_list<T> init, size_t bucket_count,
|
2697
2747
|
const allocator_type& alloc)
|
2698
2748
|
: raw_hash_set(init, bucket_count, hasher(), key_equal(), alloc) {}
|
@@ -2701,7 +2751,8 @@ class raw_hash_set {
|
|
2701
2751
|
const allocator_type& alloc)
|
2702
2752
|
: raw_hash_set(init, bucket_count, hasher(), key_equal(), alloc) {}
|
2703
2753
|
|
2704
|
-
template <class T, RequiresNotInit<T> = 0,
|
2754
|
+
template <class T, RequiresNotInit<T> = 0,
|
2755
|
+
std::enable_if_t<Insertable<T>::value, int> = 0>
|
2705
2756
|
raw_hash_set(std::initializer_list<T> init, const allocator_type& alloc)
|
2706
2757
|
: raw_hash_set(init, 0, hasher(), key_equal(), alloc) {}
|
2707
2758
|
|
@@ -2716,6 +2767,7 @@ class raw_hash_set {
|
|
2716
2767
|
raw_hash_set(const raw_hash_set& that, const allocator_type& a)
|
2717
2768
|
: raw_hash_set(GrowthToLowerboundCapacity(that.size()), that.hash_ref(),
|
2718
2769
|
that.eq_ref(), a) {
|
2770
|
+
that.AssertNotDebugCapacity();
|
2719
2771
|
const size_t size = that.size();
|
2720
2772
|
if (size == 0) {
|
2721
2773
|
return;
|
@@ -2723,14 +2775,14 @@ class raw_hash_set {
|
|
2723
2775
|
// We don't use `that.is_soo()` here because `that` can have non-SOO
|
2724
2776
|
// capacity but have a size that fits into SOO capacity.
|
2725
2777
|
if (fits_in_soo(size)) {
|
2726
|
-
|
2778
|
+
ABSL_SWISSTABLE_ASSERT(size == 1);
|
2727
2779
|
common().set_full_soo();
|
2728
2780
|
emplace_at(soo_iterator(), *that.begin());
|
2729
2781
|
const HashtablezInfoHandle infoz = try_sample_soo();
|
2730
2782
|
if (infoz.IsSampled()) resize_with_soo_infoz(infoz);
|
2731
2783
|
return;
|
2732
2784
|
}
|
2733
|
-
|
2785
|
+
ABSL_SWISSTABLE_ASSERT(!that.is_soo());
|
2734
2786
|
const size_t cap = capacity();
|
2735
2787
|
// Note about single group tables:
|
2736
2788
|
// 1. It is correct to have any order of elements.
|
@@ -2762,7 +2814,8 @@ class raw_hash_set {
|
|
2762
2814
|
offset = (offset + shift) & cap;
|
2763
2815
|
}
|
2764
2816
|
const h2_t h2 = static_cast<h2_t>(*that_ctrl);
|
2765
|
-
|
2817
|
+
ABSL_SWISSTABLE_ASSERT( // We rely that hash is not changed for small
|
2818
|
+
// tables.
|
2766
2819
|
H2(PolicyTraits::apply(HashElement{hash_ref()},
|
2767
2820
|
PolicyTraits::element(that_slot))) == h2 &&
|
2768
2821
|
"hash function value changed unexpectedly during the copy");
|
@@ -2786,7 +2839,6 @@ class raw_hash_set {
|
|
2786
2839
|
: // Hash, equality and allocator are copied instead of moved because
|
2787
2840
|
// `that` must be left valid. If Hash is std::function<Key>, moving it
|
2788
2841
|
// would create a nullptr functor that cannot be called.
|
2789
|
-
// TODO(b/296061262): move instead of copying hash/eq/alloc.
|
2790
2842
|
// Note: we avoid using exchange for better generated code.
|
2791
2843
|
settings_(PolicyTraits::transfer_uses_memcpy() || !that.is_full_soo()
|
2792
2844
|
? std::move(that.common())
|
@@ -2796,7 +2848,7 @@ class raw_hash_set {
|
|
2796
2848
|
transfer(soo_slot(), that.soo_slot());
|
2797
2849
|
}
|
2798
2850
|
that.common() = CommonFields::CreateDefault<SooEnabled()>();
|
2799
|
-
|
2851
|
+
annotate_for_bug_detection_on_move(that);
|
2800
2852
|
}
|
2801
2853
|
|
2802
2854
|
raw_hash_set(raw_hash_set&& that, const allocator_type& a)
|
@@ -2804,13 +2856,14 @@ class raw_hash_set {
|
|
2804
2856
|
that.eq_ref(), a) {
|
2805
2857
|
if (a == that.alloc_ref()) {
|
2806
2858
|
swap_common(that);
|
2807
|
-
|
2859
|
+
annotate_for_bug_detection_on_move(that);
|
2808
2860
|
} else {
|
2809
2861
|
move_elements_allocs_unequal(std::move(that));
|
2810
2862
|
}
|
2811
2863
|
}
|
2812
2864
|
|
2813
2865
|
raw_hash_set& operator=(const raw_hash_set& that) {
|
2866
|
+
that.AssertNotDebugCapacity();
|
2814
2867
|
if (ABSL_PREDICT_FALSE(this == &that)) return *this;
|
2815
2868
|
constexpr bool propagate_alloc =
|
2816
2869
|
AllocTraits::propagate_on_container_copy_assignment::value;
|
@@ -2835,7 +2888,12 @@ class raw_hash_set {
|
|
2835
2888
|
typename AllocTraits::propagate_on_container_move_assignment());
|
2836
2889
|
}
|
2837
2890
|
|
2838
|
-
~raw_hash_set() {
|
2891
|
+
~raw_hash_set() {
|
2892
|
+
destructor_impl();
|
2893
|
+
#ifndef NDEBUG
|
2894
|
+
common().set_capacity(InvalidCapacity::kDestroyed);
|
2895
|
+
#endif
|
2896
|
+
}
|
2839
2897
|
|
2840
2898
|
iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
2841
2899
|
if (ABSL_PREDICT_FALSE(empty())) return end();
|
@@ -2843,10 +2901,11 @@ class raw_hash_set {
|
|
2843
2901
|
iterator it = {control(), common().slots_union(),
|
2844
2902
|
common().generation_ptr()};
|
2845
2903
|
it.skip_empty_or_deleted();
|
2846
|
-
|
2904
|
+
ABSL_SWISSTABLE_ASSERT(IsFull(*it.control()));
|
2847
2905
|
return it;
|
2848
2906
|
}
|
2849
2907
|
iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
2908
|
+
AssertNotDebugCapacity();
|
2850
2909
|
return iterator(common().generation_ptr());
|
2851
2910
|
}
|
2852
2911
|
|
@@ -2854,7 +2913,7 @@ class raw_hash_set {
|
|
2854
2913
|
return const_cast<raw_hash_set*>(this)->begin();
|
2855
2914
|
}
|
2856
2915
|
const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
2857
|
-
return
|
2916
|
+
return const_cast<raw_hash_set*>(this)->end();
|
2858
2917
|
}
|
2859
2918
|
const_iterator cbegin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
2860
2919
|
return begin();
|
@@ -2862,18 +2921,28 @@ class raw_hash_set {
|
|
2862
2921
|
const_iterator cend() const ABSL_ATTRIBUTE_LIFETIME_BOUND { return end(); }
|
2863
2922
|
|
2864
2923
|
bool empty() const { return !size(); }
|
2865
|
-
size_t size() const {
|
2924
|
+
size_t size() const {
|
2925
|
+
AssertNotDebugCapacity();
|
2926
|
+
return common().size();
|
2927
|
+
}
|
2866
2928
|
size_t capacity() const {
|
2867
2929
|
const size_t cap = common().capacity();
|
2868
|
-
// Compiler complains when using functions in
|
2869
|
-
ABSL_ATTRIBUTE_UNUSED static constexpr
|
2870
|
-
|
2871
|
-
ABSL_ASSUME(
|
2930
|
+
// Compiler complains when using functions in ASSUME so use local variable.
|
2931
|
+
ABSL_ATTRIBUTE_UNUSED static constexpr size_t kDefaultCapacity =
|
2932
|
+
DefaultCapacity();
|
2933
|
+
ABSL_ASSUME(cap >= kDefaultCapacity);
|
2872
2934
|
return cap;
|
2873
2935
|
}
|
2874
|
-
size_t max_size() const {
|
2936
|
+
size_t max_size() const {
|
2937
|
+
return CapacityToGrowth(MaxValidCapacity<sizeof(slot_type)>());
|
2938
|
+
}
|
2875
2939
|
|
2876
2940
|
ABSL_ATTRIBUTE_REINITIALIZES void clear() {
|
2941
|
+
if (SwisstableGenerationsEnabled() &&
|
2942
|
+
capacity() >= InvalidCapacity::kMovedFrom) {
|
2943
|
+
common().set_capacity(DefaultCapacity());
|
2944
|
+
}
|
2945
|
+
AssertNotDebugCapacity();
|
2877
2946
|
// Iterating over this container is O(bucket_count()). When bucket_count()
|
2878
2947
|
// is much greater than size(), iteration becomes prohibitively expensive.
|
2879
2948
|
// For clear() it is more important to reuse the allocated array when the
|
@@ -2901,15 +2970,26 @@ class raw_hash_set {
|
|
2901
2970
|
//
|
2902
2971
|
// flat_hash_map<std::string, int> m;
|
2903
2972
|
// m.insert(std::make_pair("abc", 42));
|
2904
|
-
|
2905
|
-
|
2906
|
-
|
2907
|
-
|
2908
|
-
|
2973
|
+
template <class T,
|
2974
|
+
std::enable_if_t<IsDecomposableAndInsertable<T>::value &&
|
2975
|
+
IsNotBitField<T>::value &&
|
2976
|
+
!IsLifetimeBoundAssignmentFrom<T>::value,
|
2977
|
+
int> = 0>
|
2909
2978
|
std::pair<iterator, bool> insert(T&& value) ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
2910
2979
|
return emplace(std::forward<T>(value));
|
2911
2980
|
}
|
2912
2981
|
|
2982
|
+
template <class T,
|
2983
|
+
std::enable_if_t<IsDecomposableAndInsertable<T>::value &&
|
2984
|
+
IsNotBitField<T>::value &&
|
2985
|
+
IsLifetimeBoundAssignmentFrom<T>::value,
|
2986
|
+
int> = 0>
|
2987
|
+
std::pair<iterator, bool> insert(
|
2988
|
+
T&& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
|
2989
|
+
ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
2990
|
+
return emplace(std::forward<T>(value));
|
2991
|
+
}
|
2992
|
+
|
2913
2993
|
// This overload kicks in when the argument is a bitfield or an lvalue of
|
2914
2994
|
// insertable and decomposable type.
|
2915
2995
|
//
|
@@ -2921,13 +3001,23 @@ class raw_hash_set {
|
|
2921
3001
|
// const char* p = "hello";
|
2922
3002
|
// s.insert(p);
|
2923
3003
|
//
|
2924
|
-
template <
|
2925
|
-
|
2926
|
-
|
3004
|
+
template <class T, std::enable_if_t<
|
3005
|
+
IsDecomposableAndInsertable<const T&>::value &&
|
3006
|
+
!IsLifetimeBoundAssignmentFrom<const T&>::value,
|
3007
|
+
int> = 0>
|
2927
3008
|
std::pair<iterator, bool> insert(const T& value)
|
2928
3009
|
ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
2929
3010
|
return emplace(value);
|
2930
3011
|
}
|
3012
|
+
template <class T,
|
3013
|
+
std::enable_if_t<IsDecomposableAndInsertable<const T&>::value &&
|
3014
|
+
IsLifetimeBoundAssignmentFrom<const T&>::value,
|
3015
|
+
int> = 0>
|
3016
|
+
std::pair<iterator, bool> insert(
|
3017
|
+
const T& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
|
3018
|
+
ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
3019
|
+
return emplace(value);
|
3020
|
+
}
|
2931
3021
|
|
2932
3022
|
// This overload kicks in when the argument is an rvalue of init_type. Its
|
2933
3023
|
// purpose is to handle brace-init-list arguments.
|
@@ -2935,22 +3025,43 @@ class raw_hash_set {
|
|
2935
3025
|
// flat_hash_map<std::string, int> s;
|
2936
3026
|
// s.insert({"abc", 42});
|
2937
3027
|
std::pair<iterator, bool> insert(init_type&& value)
|
2938
|
-
ABSL_ATTRIBUTE_LIFETIME_BOUND
|
3028
|
+
ABSL_ATTRIBUTE_LIFETIME_BOUND
|
3029
|
+
#if __cplusplus >= 202002L
|
3030
|
+
requires(!IsLifetimeBoundAssignmentFrom<init_type>::value)
|
3031
|
+
#endif
|
3032
|
+
{
|
2939
3033
|
return emplace(std::move(value));
|
2940
3034
|
}
|
3035
|
+
#if __cplusplus >= 202002L
|
3036
|
+
std::pair<iterator, bool> insert(
|
3037
|
+
init_type&& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
|
3038
|
+
ABSL_ATTRIBUTE_LIFETIME_BOUND
|
3039
|
+
requires(IsLifetimeBoundAssignmentFrom<init_type>::value)
|
3040
|
+
{
|
3041
|
+
return emplace(std::move(value));
|
3042
|
+
}
|
3043
|
+
#endif
|
2941
3044
|
|
2942
|
-
|
2943
|
-
|
2944
|
-
|
2945
|
-
|
2946
|
-
|
3045
|
+
template <class T,
|
3046
|
+
std::enable_if_t<IsDecomposableAndInsertable<T>::value &&
|
3047
|
+
IsNotBitField<T>::value &&
|
3048
|
+
!IsLifetimeBoundAssignmentFrom<T>::value,
|
3049
|
+
int> = 0>
|
2947
3050
|
iterator insert(const_iterator, T&& value) ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
2948
3051
|
return insert(std::forward<T>(value)).first;
|
2949
3052
|
}
|
3053
|
+
template <class T,
|
3054
|
+
std::enable_if_t<IsDecomposableAndInsertable<T>::value &&
|
3055
|
+
IsNotBitField<T>::value &&
|
3056
|
+
IsLifetimeBoundAssignmentFrom<T>::value,
|
3057
|
+
int> = 0>
|
3058
|
+
iterator insert(const_iterator, T&& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(
|
3059
|
+
this)) ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
3060
|
+
return insert(std::forward<T>(value)).first;
|
3061
|
+
}
|
2950
3062
|
|
2951
|
-
template <
|
2952
|
-
|
2953
|
-
typename std::enable_if<IsDecomposable<const T&>::value, int>::type = 0>
|
3063
|
+
template <class T, std::enable_if_t<
|
3064
|
+
IsDecomposableAndInsertable<const T&>::value, int> = 0>
|
2954
3065
|
iterator insert(const_iterator,
|
2955
3066
|
const T& value) ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
2956
3067
|
return insert(value).first;
|
@@ -2966,7 +3077,8 @@ class raw_hash_set {
|
|
2966
3077
|
for (; first != last; ++first) emplace(*first);
|
2967
3078
|
}
|
2968
3079
|
|
2969
|
-
template <class T, RequiresNotInit<T> = 0,
|
3080
|
+
template <class T, RequiresNotInit<T> = 0,
|
3081
|
+
std::enable_if_t<Insertable<const T&>::value, int> = 0>
|
2970
3082
|
void insert(std::initializer_list<T> ilist) {
|
2971
3083
|
insert(ilist.begin(), ilist.end());
|
2972
3084
|
}
|
@@ -3005,8 +3117,8 @@ class raw_hash_set {
|
|
3005
3117
|
// flat_hash_map<std::string, std::string> m = {{"abc", "def"}};
|
3006
3118
|
// // Creates no std::string copies and makes no heap allocations.
|
3007
3119
|
// m.emplace("abc", "xyz");
|
3008
|
-
template <class... Args,
|
3009
|
-
|
3120
|
+
template <class... Args,
|
3121
|
+
std::enable_if_t<IsDecomposable<Args...>::value, int> = 0>
|
3010
3122
|
std::pair<iterator, bool> emplace(Args&&... args)
|
3011
3123
|
ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
3012
3124
|
return PolicyTraits::apply(EmplaceDecomposable{*this},
|
@@ -3016,8 +3128,8 @@ class raw_hash_set {
|
|
3016
3128
|
// This overload kicks in if we cannot deduce the key from args. It constructs
|
3017
3129
|
// value_type unconditionally and then either moves it into the table or
|
3018
3130
|
// destroys.
|
3019
|
-
template <class... Args,
|
3020
|
-
|
3131
|
+
template <class... Args,
|
3132
|
+
std::enable_if_t<!IsDecomposable<Args...>::value, int> = 0>
|
3021
3133
|
std::pair<iterator, bool> emplace(Args&&... args)
|
3022
3134
|
ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
3023
3135
|
alignas(slot_type) unsigned char raw[sizeof(slot_type)];
|
@@ -3068,7 +3180,7 @@ class raw_hash_set {
|
|
3068
3180
|
public:
|
3069
3181
|
template <class... Args>
|
3070
3182
|
void operator()(Args&&... args) const {
|
3071
|
-
|
3183
|
+
ABSL_SWISSTABLE_ASSERT(*slot_);
|
3072
3184
|
PolicyTraits::construct(alloc_, *slot_, std::forward<Args>(args)...);
|
3073
3185
|
*slot_ = nullptr;
|
3074
3186
|
}
|
@@ -3087,7 +3199,7 @@ class raw_hash_set {
|
|
3087
3199
|
if (res.second) {
|
3088
3200
|
slot_type* slot = res.first.slot();
|
3089
3201
|
std::forward<F>(f)(constructor(&alloc_ref(), &slot));
|
3090
|
-
|
3202
|
+
ABSL_SWISSTABLE_ASSERT(!slot);
|
3091
3203
|
}
|
3092
3204
|
return res.first;
|
3093
3205
|
}
|
@@ -3109,24 +3221,16 @@ class raw_hash_set {
|
|
3109
3221
|
return 1;
|
3110
3222
|
}
|
3111
3223
|
|
3112
|
-
// Erases the element pointed to by `it`.
|
3113
|
-
// this method returns void to reduce algorithmic complexity to O(1).
|
3114
|
-
// iterator is invalidated
|
3115
|
-
// erase.
|
3116
|
-
// idiom (which also works for some standard containers):
|
3117
|
-
//
|
3118
|
-
// for (auto it = m.begin(), end = m.end(); it != end;) {
|
3119
|
-
// // `erase()` will invalidate `it`, so advance `it` first.
|
3120
|
-
// auto copy_it = it++;
|
3121
|
-
// if (<pred>) {
|
3122
|
-
// m.erase(copy_it);
|
3123
|
-
// }
|
3124
|
-
// }
|
3224
|
+
// Erases the element pointed to by `it`. Unlike `std::unordered_set::erase`,
|
3225
|
+
// this method returns void to reduce algorithmic complexity to O(1). The
|
3226
|
+
// iterator is invalidated so any increment should be done before calling
|
3227
|
+
// erase (e.g. `erase(it++)`).
|
3125
3228
|
void erase(const_iterator cit) { erase(cit.inner_); }
|
3126
3229
|
|
3127
3230
|
// This overload is necessary because otherwise erase<K>(const K&) would be
|
3128
3231
|
// a better match if non-const iterator is passed as an argument.
|
3129
3232
|
void erase(iterator it) {
|
3233
|
+
AssertNotDebugCapacity();
|
3130
3234
|
AssertIsFull(it.control(), it.generation(), it.generation_ptr(), "erase()");
|
3131
3235
|
destroy(it.slot());
|
3132
3236
|
if (is_soo()) {
|
@@ -3138,6 +3242,7 @@ class raw_hash_set {
|
|
3138
3242
|
|
3139
3243
|
iterator erase(const_iterator first,
|
3140
3244
|
const_iterator last) ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
3245
|
+
AssertNotDebugCapacity();
|
3141
3246
|
// We check for empty first because ClearBackingArray requires that
|
3142
3247
|
// capacity() > 0 as a precondition.
|
3143
3248
|
if (empty()) return end();
|
@@ -3167,6 +3272,8 @@ class raw_hash_set {
|
|
3167
3272
|
// If the element already exists in `this`, it is left unmodified in `src`.
|
3168
3273
|
template <typename H, typename E>
|
3169
3274
|
void merge(raw_hash_set<Policy, H, E, Alloc>& src) { // NOLINT
|
3275
|
+
AssertNotDebugCapacity();
|
3276
|
+
src.AssertNotDebugCapacity();
|
3170
3277
|
assert(this != &src);
|
3171
3278
|
// Returns whether insertion took place.
|
3172
3279
|
const auto insert_slot = [this](slot_type* src_slot) {
|
@@ -3193,6 +3300,7 @@ class raw_hash_set {
|
|
3193
3300
|
}
|
3194
3301
|
|
3195
3302
|
node_type extract(const_iterator position) {
|
3303
|
+
AssertNotDebugCapacity();
|
3196
3304
|
AssertIsFull(position.control(), position.inner_.generation(),
|
3197
3305
|
position.inner_.generation_ptr(), "extract()");
|
3198
3306
|
auto node = CommonAccess::Transfer<node_type>(alloc_ref(), position.slot());
|
@@ -3204,9 +3312,8 @@ class raw_hash_set {
|
|
3204
3312
|
return node;
|
3205
3313
|
}
|
3206
3314
|
|
3207
|
-
template <
|
3208
|
-
|
3209
|
-
typename std::enable_if<!std::is_same<K, iterator>::value, int>::type = 0>
|
3315
|
+
template <class K = key_type,
|
3316
|
+
std::enable_if_t<!std::is_same<K, iterator>::value, int> = 0>
|
3210
3317
|
node_type extract(const key_arg<K>& key) {
|
3211
3318
|
auto it = find(key);
|
3212
3319
|
return it == end() ? node_type() : extract(const_iterator{it});
|
@@ -3216,6 +3323,8 @@ class raw_hash_set {
|
|
3216
3323
|
IsNoThrowSwappable<hasher>() && IsNoThrowSwappable<key_equal>() &&
|
3217
3324
|
IsNoThrowSwappable<allocator_type>(
|
3218
3325
|
typename AllocTraits::propagate_on_container_swap{})) {
|
3326
|
+
AssertNotDebugCapacity();
|
3327
|
+
that.AssertNotDebugCapacity();
|
3219
3328
|
using std::swap;
|
3220
3329
|
swap_common(that);
|
3221
3330
|
swap(hash_ref(), that.hash_ref());
|
@@ -3241,7 +3350,7 @@ class raw_hash_set {
|
|
3241
3350
|
resize(kInitialSampledCapacity);
|
3242
3351
|
}
|
3243
3352
|
// This asserts that we didn't lose sampling coverage in `resize`.
|
3244
|
-
|
3353
|
+
ABSL_SWISSTABLE_ASSERT(infoz().IsSampled());
|
3245
3354
|
return;
|
3246
3355
|
}
|
3247
3356
|
alignas(slot_type) unsigned char slot_space[sizeof(slot_type)];
|
@@ -3260,6 +3369,9 @@ class raw_hash_set {
|
|
3260
3369
|
auto m = NormalizeCapacity(n | GrowthToLowerboundCapacity(size()));
|
3261
3370
|
// n == 0 unconditionally rehashes as per the standard.
|
3262
3371
|
if (n == 0 || m > cap) {
|
3372
|
+
if (ABSL_PREDICT_FALSE(m > MaxValidCapacity<sizeof(slot_type)>())) {
|
3373
|
+
HashTableSizeOverflow();
|
3374
|
+
}
|
3263
3375
|
resize(m);
|
3264
3376
|
|
3265
3377
|
// This is after resize, to ensure that we have completed the allocation
|
@@ -3272,6 +3384,9 @@ class raw_hash_set {
|
|
3272
3384
|
const size_t max_size_before_growth =
|
3273
3385
|
is_soo() ? SooCapacity() : size() + growth_left();
|
3274
3386
|
if (n > max_size_before_growth) {
|
3387
|
+
if (ABSL_PREDICT_FALSE(n > max_size())) {
|
3388
|
+
HashTableSizeOverflow();
|
3389
|
+
}
|
3275
3390
|
size_t m = GrowthToLowerboundCapacity(n);
|
3276
3391
|
resize(NormalizeCapacity(m));
|
3277
3392
|
|
@@ -3304,7 +3419,7 @@ class raw_hash_set {
|
|
3304
3419
|
// specific benchmarks indicating its importance.
|
3305
3420
|
template <class K = key_type>
|
3306
3421
|
void prefetch(const key_arg<K>& key) const {
|
3307
|
-
if (
|
3422
|
+
if (capacity() == DefaultCapacity()) return;
|
3308
3423
|
(void)key;
|
3309
3424
|
// Avoid probing if we won't be able to prefetch the addresses received.
|
3310
3425
|
#ifdef ABSL_HAVE_PREFETCH
|
@@ -3315,32 +3430,27 @@ class raw_hash_set {
|
|
3315
3430
|
#endif // ABSL_HAVE_PREFETCH
|
3316
3431
|
}
|
3317
3432
|
|
3318
|
-
// The API of find() has two extensions.
|
3319
|
-
//
|
3320
|
-
// 1. The hash can be passed by the user. It must be equal to the hash of the
|
3321
|
-
// key.
|
3322
|
-
//
|
3323
|
-
// 2. The type of the key argument doesn't have to be key_type. This is so
|
3324
|
-
// called heterogeneous key support.
|
3325
3433
|
template <class K = key_type>
|
3434
|
+
ABSL_DEPRECATE_AND_INLINE()
|
3326
3435
|
iterator find(const key_arg<K>& key,
|
3327
|
-
size_t
|
3328
|
-
|
3329
|
-
if (is_soo()) return find_soo(key);
|
3330
|
-
return find_non_soo(key, hash);
|
3436
|
+
size_t) ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
3437
|
+
return find(key);
|
3331
3438
|
}
|
3439
|
+
// The API of find() has one extension: the type of the key argument doesn't
|
3440
|
+
// have to be key_type. This is so called heterogeneous key support.
|
3332
3441
|
template <class K = key_type>
|
3333
3442
|
iterator find(const key_arg<K>& key) ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
3334
|
-
|
3443
|
+
AssertOnFind(key);
|
3335
3444
|
if (is_soo()) return find_soo(key);
|
3336
3445
|
prefetch_heap_block();
|
3337
3446
|
return find_non_soo(key, hash_ref()(key));
|
3338
3447
|
}
|
3339
3448
|
|
3340
3449
|
template <class K = key_type>
|
3450
|
+
ABSL_DEPRECATE_AND_INLINE()
|
3341
3451
|
const_iterator find(const key_arg<K>& key,
|
3342
|
-
size_t
|
3343
|
-
return
|
3452
|
+
size_t) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
3453
|
+
return find(key);
|
3344
3454
|
}
|
3345
3455
|
template <class K = key_type>
|
3346
3456
|
const_iterator find(const key_arg<K>& key) const
|
@@ -3392,7 +3502,16 @@ class raw_hash_set {
|
|
3392
3502
|
if (outer->capacity() > inner->capacity()) std::swap(outer, inner);
|
3393
3503
|
for (const value_type& elem : *outer) {
|
3394
3504
|
auto it = PolicyTraits::apply(FindElement{*inner}, elem);
|
3395
|
-
if (it == inner->end()
|
3505
|
+
if (it == inner->end()) return false;
|
3506
|
+
// Note: we used key_equal to check for key equality in FindElement, but
|
3507
|
+
// we may need to do an additional comparison using
|
3508
|
+
// value_type::operator==. E.g. the keys could be equal and the
|
3509
|
+
// mapped_types could be unequal in a map or even in a set, key_equal
|
3510
|
+
// could ignore some fields that aren't ignored by operator==.
|
3511
|
+
static constexpr bool kKeyEqIsValueEq =
|
3512
|
+
std::is_same<key_type, value_type>::value &&
|
3513
|
+
std::is_same<key_equal, hash_default_eq<key_type>>::value;
|
3514
|
+
if (!kKeyEqIsValueEq && !(*it == elem)) return false;
|
3396
3515
|
}
|
3397
3516
|
return true;
|
3398
3517
|
}
|
@@ -3476,23 +3595,26 @@ class raw_hash_set {
|
|
3476
3595
|
slot_type&& slot;
|
3477
3596
|
};
|
3478
3597
|
|
3479
|
-
// TODO(b/303305702): re-enable reentrant validation.
|
3480
3598
|
template <typename... Args>
|
3481
3599
|
inline void construct(slot_type* slot, Args&&... args) {
|
3482
|
-
|
3600
|
+
common().RunWithReentrancyGuard([&] {
|
3601
|
+
PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
|
3602
|
+
});
|
3483
3603
|
}
|
3484
3604
|
inline void destroy(slot_type* slot) {
|
3485
|
-
|
3605
|
+
common().RunWithReentrancyGuard(
|
3606
|
+
[&] { PolicyTraits::destroy(&alloc_ref(), slot); });
|
3486
3607
|
}
|
3487
3608
|
inline void transfer(slot_type* to, slot_type* from) {
|
3488
|
-
|
3609
|
+
common().RunWithReentrancyGuard(
|
3610
|
+
[&] { PolicyTraits::transfer(&alloc_ref(), to, from); });
|
3489
3611
|
}
|
3490
3612
|
|
3491
3613
|
// TODO(b/289225379): consider having a helper class that has the impls for
|
3492
3614
|
// SOO functionality.
|
3493
3615
|
template <class K = key_type>
|
3494
3616
|
iterator find_soo(const key_arg<K>& key) {
|
3495
|
-
|
3617
|
+
ABSL_SWISSTABLE_ASSERT(is_soo());
|
3496
3618
|
return empty() || !PolicyTraits::apply(EqualElement<K>{key, eq_ref()},
|
3497
3619
|
PolicyTraits::element(soo_slot()))
|
3498
3620
|
? end()
|
@@ -3501,7 +3623,7 @@ class raw_hash_set {
|
|
3501
3623
|
|
3502
3624
|
template <class K = key_type>
|
3503
3625
|
iterator find_non_soo(const key_arg<K>& key, size_t hash) {
|
3504
|
-
|
3626
|
+
ABSL_SWISSTABLE_ASSERT(!is_soo());
|
3505
3627
|
auto seq = probe(common(), hash);
|
3506
3628
|
const ctrl_t* ctrl = control();
|
3507
3629
|
while (true) {
|
@@ -3514,7 +3636,7 @@ class raw_hash_set {
|
|
3514
3636
|
}
|
3515
3637
|
if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
|
3516
3638
|
seq.next();
|
3517
|
-
|
3639
|
+
ABSL_SWISSTABLE_ASSERT(seq.index() <= capacity() && "full table!");
|
3518
3640
|
}
|
3519
3641
|
}
|
3520
3642
|
|
@@ -3522,14 +3644,14 @@ class raw_hash_set {
|
|
3522
3644
|
// insertion into an empty SOO table and in copy construction when the size
|
3523
3645
|
// can fit in SOO capacity.
|
3524
3646
|
inline HashtablezInfoHandle try_sample_soo() {
|
3525
|
-
|
3647
|
+
ABSL_SWISSTABLE_ASSERT(is_soo());
|
3526
3648
|
if (!ShouldSampleHashtablezInfo<CharAlloc>()) return HashtablezInfoHandle{};
|
3527
3649
|
return Sample(sizeof(slot_type), sizeof(key_type), sizeof(value_type),
|
3528
3650
|
SooCapacity());
|
3529
3651
|
}
|
3530
3652
|
|
3531
3653
|
inline void destroy_slots() {
|
3532
|
-
|
3654
|
+
ABSL_SWISSTABLE_ASSERT(!is_soo());
|
3533
3655
|
if (PolicyTraits::template destroy_is_trivial<Alloc>()) return;
|
3534
3656
|
IterateOverFullSlots(
|
3535
3657
|
common(), slot_array(),
|
@@ -3538,7 +3660,7 @@ class raw_hash_set {
|
|
3538
3660
|
}
|
3539
3661
|
|
3540
3662
|
inline void dealloc() {
|
3541
|
-
|
3663
|
+
ABSL_SWISSTABLE_ASSERT(capacity() != 0);
|
3542
3664
|
// Unpoison before returning the memory to the allocator.
|
3543
3665
|
SanitizerUnpoisonMemoryRegion(slot_array(), sizeof(slot_type) * capacity());
|
3544
3666
|
infoz().Unregister();
|
@@ -3548,6 +3670,10 @@ class raw_hash_set {
|
|
3548
3670
|
}
|
3549
3671
|
|
3550
3672
|
inline void destructor_impl() {
|
3673
|
+
if (SwisstableGenerationsEnabled() &&
|
3674
|
+
capacity() >= InvalidCapacity::kMovedFrom) {
|
3675
|
+
return;
|
3676
|
+
}
|
3551
3677
|
if (capacity() == 0) return;
|
3552
3678
|
if (is_soo()) {
|
3553
3679
|
if (!empty()) {
|
@@ -3564,7 +3690,7 @@ class raw_hash_set {
|
|
3564
3690
|
// This merely updates the pertinent control byte. This can be used in
|
3565
3691
|
// conjunction with Policy::transfer to move the object to another place.
|
3566
3692
|
void erase_meta_only(const_iterator it) {
|
3567
|
-
|
3693
|
+
ABSL_SWISSTABLE_ASSERT(!is_soo());
|
3568
3694
|
EraseMetaOnly(common(), static_cast<size_t>(it.control() - control()),
|
3569
3695
|
sizeof(slot_type));
|
3570
3696
|
}
|
@@ -3590,7 +3716,7 @@ class raw_hash_set {
|
|
3590
3716
|
// SOO tables, since they need to switch from SOO to heap in order to
|
3591
3717
|
// store the infoz.
|
3592
3718
|
void resize_with_soo_infoz(HashtablezInfoHandle forced_infoz) {
|
3593
|
-
|
3719
|
+
ABSL_SWISSTABLE_ASSERT(forced_infoz.IsSampled());
|
3594
3720
|
raw_hash_set::resize_impl(common(), NextCapacity(SooCapacity()),
|
3595
3721
|
forced_infoz);
|
3596
3722
|
}
|
@@ -3601,8 +3727,8 @@ class raw_hash_set {
|
|
3601
3727
|
CommonFields& common, size_t new_capacity,
|
3602
3728
|
HashtablezInfoHandle forced_infoz) {
|
3603
3729
|
raw_hash_set* set = reinterpret_cast<raw_hash_set*>(&common);
|
3604
|
-
|
3605
|
-
|
3730
|
+
ABSL_SWISSTABLE_ASSERT(IsValidCapacity(new_capacity));
|
3731
|
+
ABSL_SWISSTABLE_ASSERT(!set->fits_in_soo(new_capacity));
|
3606
3732
|
const bool was_soo = set->is_soo();
|
3607
3733
|
const bool had_soo_slot = was_soo && !set->empty();
|
3608
3734
|
const ctrl_t soo_slot_h2 =
|
@@ -3637,7 +3763,7 @@ class raw_hash_set {
|
|
3637
3763
|
// InitializeSlots did all the work including infoz().RecordRehash().
|
3638
3764
|
return;
|
3639
3765
|
}
|
3640
|
-
|
3766
|
+
ABSL_SWISSTABLE_ASSERT(resize_helper.old_capacity() > 0);
|
3641
3767
|
// Nothing more to do in this case.
|
3642
3768
|
if (was_soo && !had_soo_slot) return;
|
3643
3769
|
|
@@ -3690,15 +3816,18 @@ class raw_hash_set {
|
|
3690
3816
|
static slot_type* to_slot(void* buf) { return static_cast<slot_type*>(buf); }
|
3691
3817
|
|
3692
3818
|
// Requires that lhs does not have a full SOO slot.
|
3693
|
-
static void move_common(bool
|
3819
|
+
static void move_common(bool rhs_is_full_soo, allocator_type& rhs_alloc,
|
3694
3820
|
CommonFields& lhs, CommonFields&& rhs) {
|
3695
|
-
if (PolicyTraits::transfer_uses_memcpy() || !
|
3821
|
+
if (PolicyTraits::transfer_uses_memcpy() || !rhs_is_full_soo) {
|
3696
3822
|
lhs = std::move(rhs);
|
3697
3823
|
} else {
|
3698
3824
|
lhs.move_non_heap_or_soo_fields(rhs);
|
3699
|
-
|
3700
|
-
|
3701
|
-
|
3825
|
+
rhs.RunWithReentrancyGuard([&] {
|
3826
|
+
lhs.RunWithReentrancyGuard([&] {
|
3827
|
+
PolicyTraits::transfer(&rhs_alloc, to_slot(lhs.soo_data()),
|
3828
|
+
to_slot(rhs.soo_data()));
|
3829
|
+
});
|
3830
|
+
});
|
3702
3831
|
}
|
3703
3832
|
}
|
3704
3833
|
|
@@ -3710,7 +3839,7 @@ class raw_hash_set {
|
|
3710
3839
|
swap(common(), that.common());
|
3711
3840
|
return;
|
3712
3841
|
}
|
3713
|
-
CommonFields tmp = CommonFields
|
3842
|
+
CommonFields tmp = CommonFields(uninitialized_tag_t{});
|
3714
3843
|
const bool that_is_full_soo = that.is_full_soo();
|
3715
3844
|
move_common(that_is_full_soo, that.alloc_ref(), tmp,
|
3716
3845
|
std::move(that.common()));
|
@@ -3718,8 +3847,17 @@ class raw_hash_set {
|
|
3718
3847
|
move_common(that_is_full_soo, that.alloc_ref(), common(), std::move(tmp));
|
3719
3848
|
}
|
3720
3849
|
|
3721
|
-
void
|
3722
|
-
|
3850
|
+
void annotate_for_bug_detection_on_move(
|
3851
|
+
ABSL_ATTRIBUTE_UNUSED raw_hash_set& that) {
|
3852
|
+
// We only enable moved-from validation when generations are enabled (rather
|
3853
|
+
// than using NDEBUG) to avoid issues in which NDEBUG is enabled in some
|
3854
|
+
// translation units but not in others.
|
3855
|
+
if (SwisstableGenerationsEnabled()) {
|
3856
|
+
that.common().set_capacity(this == &that ? InvalidCapacity::kSelfMovedFrom
|
3857
|
+
: InvalidCapacity::kMovedFrom);
|
3858
|
+
}
|
3859
|
+
if (!SwisstableGenerationsEnabled() || capacity() == DefaultCapacity() ||
|
3860
|
+
capacity() > kAboveMaxValidCapacity) {
|
3723
3861
|
return;
|
3724
3862
|
}
|
3725
3863
|
common().increment_generation();
|
@@ -3735,13 +3873,12 @@ class raw_hash_set {
|
|
3735
3873
|
destructor_impl();
|
3736
3874
|
move_common(that.is_full_soo(), that.alloc_ref(), common(),
|
3737
3875
|
std::move(that.common()));
|
3738
|
-
// TODO(b/296061262): move instead of copying hash/eq/alloc.
|
3739
3876
|
hash_ref() = that.hash_ref();
|
3740
3877
|
eq_ref() = that.eq_ref();
|
3741
3878
|
CopyAlloc(alloc_ref(), that.alloc_ref(),
|
3742
3879
|
std::integral_constant<bool, propagate_alloc>());
|
3743
3880
|
that.common() = CommonFields::CreateDefault<SooEnabled()>();
|
3744
|
-
|
3881
|
+
annotate_for_bug_detection_on_move(that);
|
3745
3882
|
return *this;
|
3746
3883
|
}
|
3747
3884
|
|
@@ -3755,7 +3892,7 @@ class raw_hash_set {
|
|
3755
3892
|
}
|
3756
3893
|
if (!that.is_soo()) that.dealloc();
|
3757
3894
|
that.common() = CommonFields::CreateDefault<SooEnabled()>();
|
3758
|
-
|
3895
|
+
annotate_for_bug_detection_on_move(that);
|
3759
3896
|
return *this;
|
3760
3897
|
}
|
3761
3898
|
|
@@ -3774,7 +3911,6 @@ class raw_hash_set {
|
|
3774
3911
|
// We can't take over that's memory so we need to move each element.
|
3775
3912
|
// While moving elements, this should have that's hash/eq so copy hash/eq
|
3776
3913
|
// before moving elements.
|
3777
|
-
// TODO(b/296061262): move instead of copying hash/eq.
|
3778
3914
|
hash_ref() = that.hash_ref();
|
3779
3915
|
eq_ref() = that.eq_ref();
|
3780
3916
|
return move_elements_allocs_unequal(std::move(that));
|
@@ -3803,7 +3939,7 @@ class raw_hash_set {
|
|
3803
3939
|
|
3804
3940
|
template <class K>
|
3805
3941
|
std::pair<iterator, bool> find_or_prepare_insert_non_soo(const K& key) {
|
3806
|
-
|
3942
|
+
ABSL_SWISSTABLE_ASSERT(!is_soo());
|
3807
3943
|
prefetch_heap_block();
|
3808
3944
|
auto hash = hash_ref()(key);
|
3809
3945
|
auto seq = probe(common(), hash);
|
@@ -3826,16 +3962,57 @@ class raw_hash_set {
|
|
3826
3962
|
true};
|
3827
3963
|
}
|
3828
3964
|
seq.next();
|
3829
|
-
|
3965
|
+
ABSL_SWISSTABLE_ASSERT(seq.index() <= capacity() && "full table!");
|
3830
3966
|
}
|
3831
3967
|
}
|
3832
3968
|
|
3833
3969
|
protected:
|
3970
|
+
// Asserts for correctness that we run on find/find_or_prepare_insert.
|
3971
|
+
template <class K>
|
3972
|
+
void AssertOnFind(ABSL_ATTRIBUTE_UNUSED const K& key) {
|
3973
|
+
AssertHashEqConsistent(key);
|
3974
|
+
AssertNotDebugCapacity();
|
3975
|
+
}
|
3976
|
+
|
3977
|
+
// Asserts that the capacity is not a sentinel invalid value.
|
3978
|
+
void AssertNotDebugCapacity() const {
|
3979
|
+
if (ABSL_PREDICT_TRUE(capacity() <
|
3980
|
+
InvalidCapacity::kAboveMaxValidCapacity)) {
|
3981
|
+
return;
|
3982
|
+
}
|
3983
|
+
assert(capacity() != InvalidCapacity::kReentrance &&
|
3984
|
+
"Reentrant container access during element construction/destruction "
|
3985
|
+
"is not allowed.");
|
3986
|
+
assert(capacity() != InvalidCapacity::kDestroyed &&
|
3987
|
+
"Use of destroyed hash table.");
|
3988
|
+
if (SwisstableGenerationsEnabled() &&
|
3989
|
+
ABSL_PREDICT_FALSE(capacity() >= InvalidCapacity::kMovedFrom)) {
|
3990
|
+
if (capacity() == InvalidCapacity::kSelfMovedFrom) {
|
3991
|
+
// If this log triggers, then a hash table was move-assigned to itself
|
3992
|
+
// and then used again later without being reinitialized.
|
3993
|
+
ABSL_RAW_LOG(FATAL, "Use of self-move-assigned hash table.");
|
3994
|
+
}
|
3995
|
+
ABSL_RAW_LOG(FATAL, "Use of moved-from hash table.");
|
3996
|
+
}
|
3997
|
+
}
|
3998
|
+
|
3834
3999
|
// Asserts that hash and equal functors provided by the user are consistent,
|
3835
4000
|
// meaning that `eq(k1, k2)` implies `hash(k1)==hash(k2)`.
|
3836
4001
|
template <class K>
|
3837
|
-
void AssertHashEqConsistent(
|
3838
|
-
#
|
4002
|
+
void AssertHashEqConsistent(const K& key) {
|
4003
|
+
#ifdef NDEBUG
|
4004
|
+
return;
|
4005
|
+
#endif
|
4006
|
+
// If the hash/eq functors are known to be consistent, then skip validation.
|
4007
|
+
if (std::is_same<hasher, absl::container_internal::StringHash>::value &&
|
4008
|
+
std::is_same<key_equal, absl::container_internal::StringEq>::value) {
|
4009
|
+
return;
|
4010
|
+
}
|
4011
|
+
if (std::is_scalar<key_type>::value &&
|
4012
|
+
std::is_same<hasher, absl::Hash<key_type>>::value &&
|
4013
|
+
std::is_same<key_equal, std::equal_to<key_type>>::value) {
|
4014
|
+
return;
|
4015
|
+
}
|
3839
4016
|
if (empty()) return;
|
3840
4017
|
|
3841
4018
|
const size_t hash_of_arg = hash_ref()(key);
|
@@ -3847,21 +4024,8 @@ class raw_hash_set {
|
|
3847
4024
|
|
3848
4025
|
const size_t hash_of_slot =
|
3849
4026
|
PolicyTraits::apply(HashElement{hash_ref()}, element);
|
3850
|
-
const bool is_hash_equal =
|
3851
|
-
|
3852
|
-
// In this case, we're going to crash. Do a couple of other checks for
|
3853
|
-
// idempotence issues. Recalculating hash/eq here is also convenient for
|
3854
|
-
// debugging with gdb/lldb.
|
3855
|
-
const size_t once_more_hash_arg = hash_ref()(key);
|
3856
|
-
assert(hash_of_arg == once_more_hash_arg && "hash is not idempotent.");
|
3857
|
-
const size_t once_more_hash_slot =
|
3858
|
-
PolicyTraits::apply(HashElement{hash_ref()}, element);
|
3859
|
-
assert(hash_of_slot == once_more_hash_slot &&
|
3860
|
-
"hash is not idempotent.");
|
3861
|
-
const bool once_more_eq =
|
3862
|
-
PolicyTraits::apply(EqualElement<K>{key, eq_ref()}, element);
|
3863
|
-
assert(is_key_equal == once_more_eq && "equality is not idempotent.");
|
3864
|
-
}
|
4027
|
+
ABSL_ATTRIBUTE_UNUSED const bool is_hash_equal =
|
4028
|
+
hash_of_arg == hash_of_slot;
|
3865
4029
|
assert((!is_key_equal || is_hash_equal) &&
|
3866
4030
|
"eq(k1, k2) must imply that hash(k1) == hash(k2). "
|
3867
4031
|
"hash/eq functors are inconsistent.");
|
@@ -3874,7 +4038,6 @@ class raw_hash_set {
|
|
3874
4038
|
// We only do validation for small tables so that it's constant time.
|
3875
4039
|
if (capacity() > 16) return;
|
3876
4040
|
IterateOverFullSlots(common(), slot_array(), assert_consistent);
|
3877
|
-
#endif
|
3878
4041
|
}
|
3879
4042
|
|
3880
4043
|
// Attempts to find `key` in the table; if it isn't found, returns an iterator
|
@@ -3882,7 +4045,7 @@ class raw_hash_set {
|
|
3882
4045
|
// `key`'s H2. Returns a bool indicating whether an insertion can take place.
|
3883
4046
|
template <class K>
|
3884
4047
|
std::pair<iterator, bool> find_or_prepare_insert(const K& key) {
|
3885
|
-
|
4048
|
+
AssertOnFind(key);
|
3886
4049
|
if (is_soo()) return find_or_prepare_insert_soo(key);
|
3887
4050
|
return find_or_prepare_insert_non_soo(key);
|
3888
4051
|
}
|
@@ -3926,16 +4089,16 @@ class raw_hash_set {
|
|
3926
4089
|
//
|
3927
4090
|
// See `CapacityToGrowth()`.
|
3928
4091
|
size_t growth_left() const {
|
3929
|
-
|
4092
|
+
ABSL_SWISSTABLE_ASSERT(!is_soo());
|
3930
4093
|
return common().growth_left();
|
3931
4094
|
}
|
3932
4095
|
|
3933
4096
|
GrowthInfo& growth_info() {
|
3934
|
-
|
4097
|
+
ABSL_SWISSTABLE_ASSERT(!is_soo());
|
3935
4098
|
return common().growth_info();
|
3936
4099
|
}
|
3937
4100
|
GrowthInfo growth_info() const {
|
3938
|
-
|
4101
|
+
ABSL_SWISSTABLE_ASSERT(!is_soo());
|
3939
4102
|
return common().growth_info();
|
3940
4103
|
}
|
3941
4104
|
|
@@ -3943,7 +4106,7 @@ class raw_hash_set {
|
|
3943
4106
|
// cache misses. This is intended to overlap with execution of calculating the
|
3944
4107
|
// hash for a key.
|
3945
4108
|
void prefetch_heap_block() const {
|
3946
|
-
|
4109
|
+
ABSL_SWISSTABLE_ASSERT(!is_soo());
|
3947
4110
|
#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
|
3948
4111
|
__builtin_prefetch(control(), 0, 1);
|
3949
4112
|
#endif
|
@@ -3953,15 +4116,15 @@ class raw_hash_set {
|
|
3953
4116
|
const CommonFields& common() const { return settings_.template get<0>(); }
|
3954
4117
|
|
3955
4118
|
ctrl_t* control() const {
|
3956
|
-
|
4119
|
+
ABSL_SWISSTABLE_ASSERT(!is_soo());
|
3957
4120
|
return common().control();
|
3958
4121
|
}
|
3959
4122
|
slot_type* slot_array() const {
|
3960
|
-
|
4123
|
+
ABSL_SWISSTABLE_ASSERT(!is_soo());
|
3961
4124
|
return static_cast<slot_type*>(common().slot_array());
|
3962
4125
|
}
|
3963
4126
|
slot_type* soo_slot() {
|
3964
|
-
|
4127
|
+
ABSL_SWISSTABLE_ASSERT(is_soo());
|
3965
4128
|
return static_cast<slot_type*>(common().soo_data());
|
3966
4129
|
}
|
3967
4130
|
const slot_type* soo_slot() const {
|
@@ -3974,7 +4137,7 @@ class raw_hash_set {
|
|
3974
4137
|
return const_cast<raw_hash_set*>(this)->soo_iterator();
|
3975
4138
|
}
|
3976
4139
|
HashtablezInfoHandle infoz() {
|
3977
|
-
|
4140
|
+
ABSL_SWISSTABLE_ASSERT(!is_soo());
|
3978
4141
|
return common().infoz();
|
3979
4142
|
}
|
3980
4143
|
|
@@ -4023,7 +4186,7 @@ class raw_hash_set {
|
|
4023
4186
|
(std::is_same<SlotAlloc, std::allocator<slot_type>>::value
|
4024
4187
|
? &DeallocateStandard<alignof(slot_type)>
|
4025
4188
|
: &raw_hash_set::dealloc_fn),
|
4026
|
-
&raw_hash_set::resize_impl
|
4189
|
+
&raw_hash_set::resize_impl
|
4027
4190
|
};
|
4028
4191
|
return value;
|
4029
4192
|
}
|
@@ -4047,7 +4210,8 @@ struct HashtableFreeFunctionsAccess {
|
|
4047
4210
|
if (c->is_soo()) {
|
4048
4211
|
auto it = c->soo_iterator();
|
4049
4212
|
if (!pred(*it)) {
|
4050
|
-
|
4213
|
+
ABSL_SWISSTABLE_ASSERT(c->size() == 1 &&
|
4214
|
+
"hash table was modified unexpectedly");
|
4051
4215
|
return 0;
|
4052
4216
|
}
|
4053
4217
|
c->destroy(it.slot());
|
@@ -4067,8 +4231,9 @@ struct HashtableFreeFunctionsAccess {
|
|
4067
4231
|
});
|
4068
4232
|
// NOTE: IterateOverFullSlots allow removal of the current element, so we
|
4069
4233
|
// verify the size additionally here.
|
4070
|
-
|
4071
|
-
|
4234
|
+
ABSL_SWISSTABLE_ASSERT(original_size_for_assert - num_deleted ==
|
4235
|
+
c->size() &&
|
4236
|
+
"hash table was modified unexpectedly");
|
4072
4237
|
return num_deleted;
|
4073
4238
|
}
|
4074
4239
|
|
@@ -4162,5 +4327,6 @@ ABSL_NAMESPACE_END
|
|
4162
4327
|
#undef ABSL_SWISSTABLE_ENABLE_GENERATIONS
|
4163
4328
|
#undef ABSL_SWISSTABLE_IGNORE_UNINITIALIZED
|
4164
4329
|
#undef ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN
|
4330
|
+
#undef ABSL_SWISSTABLE_ASSERT
|
4165
4331
|
|
4166
4332
|
#endif // ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_H_
|