mirror of https://github.com/grpc/grpc.git
Merge branch 'master' of https://github.com/grpc/grpc into more-bm-diff
commit
bb8cc8814b
187 changed files with 6279 additions and 4870 deletions
@ -0,0 +1,643 @@ |
||||
// $Id$ |
||||
// vim:ft=javascript |
||||
|
||||
ARG_WITH("grpc", "grpc support", "no"); |
||||
|
||||
if (PHP_GRPC != "no") { |
||||
|
||||
grpc_source = |
||||
"src\\php\\ext\\grpc\\byte_buffer.c " + |
||||
"src\\php\\ext\\grpc\\call.c " + |
||||
"src\\php\\ext\\grpc\\call_credentials.c " + |
||||
"src\\php\\ext\\grpc\\channel.c " + |
||||
"src\\php\\ext\\grpc\\channel_credentials.c " + |
||||
"src\\php\\ext\\grpc\\completion_queue.c " + |
||||
"src\\php\\ext\\grpc\\php_grpc.c " + |
||||
"src\\php\\ext\\grpc\\server.c " + |
||||
"src\\php\\ext\\grpc\\server_credentials.c " + |
||||
"src\\php\\ext\\grpc\\timeval.c " + |
||||
"src\\core\\lib\\profiling\\basic_timers.c " + |
||||
"src\\core\\lib\\profiling\\stap_timers.c " + |
||||
"src\\core\\lib\\support\\alloc.c " + |
||||
"src\\core\\lib\\support\\arena.c " + |
||||
"src\\core\\lib\\support\\atm.c " + |
||||
"src\\core\\lib\\support\\avl.c " + |
||||
"src\\core\\lib\\support\\backoff.c " + |
||||
"src\\core\\lib\\support\\cmdline.c " + |
||||
"src\\core\\lib\\support\\cpu_iphone.c " + |
||||
"src\\core\\lib\\support\\cpu_linux.c " + |
||||
"src\\core\\lib\\support\\cpu_posix.c " + |
||||
"src\\core\\lib\\support\\cpu_windows.c " + |
||||
"src\\core\\lib\\support\\env_linux.c " + |
||||
"src\\core\\lib\\support\\env_posix.c " + |
||||
"src\\core\\lib\\support\\env_windows.c " + |
||||
"src\\core\\lib\\support\\histogram.c " + |
||||
"src\\core\\lib\\support\\host_port.c " + |
||||
"src\\core\\lib\\support\\log.c " + |
||||
"src\\core\\lib\\support\\log_android.c " + |
||||
"src\\core\\lib\\support\\log_linux.c " + |
||||
"src\\core\\lib\\support\\log_posix.c " + |
||||
"src\\core\\lib\\support\\log_windows.c " + |
||||
"src\\core\\lib\\support\\mpscq.c " + |
||||
"src\\core\\lib\\support\\murmur_hash.c " + |
||||
"src\\core\\lib\\support\\stack_lockfree.c " + |
||||
"src\\core\\lib\\support\\string.c " + |
||||
"src\\core\\lib\\support\\string_posix.c " + |
||||
"src\\core\\lib\\support\\string_util_windows.c " + |
||||
"src\\core\\lib\\support\\string_windows.c " + |
||||
"src\\core\\lib\\support\\subprocess_posix.c " + |
||||
"src\\core\\lib\\support\\subprocess_windows.c " + |
||||
"src\\core\\lib\\support\\sync.c " + |
||||
"src\\core\\lib\\support\\sync_posix.c " + |
||||
"src\\core\\lib\\support\\sync_windows.c " + |
||||
"src\\core\\lib\\support\\thd.c " + |
||||
"src\\core\\lib\\support\\thd_posix.c " + |
||||
"src\\core\\lib\\support\\thd_windows.c " + |
||||
"src\\core\\lib\\support\\time.c " + |
||||
"src\\core\\lib\\support\\time_posix.c " + |
||||
"src\\core\\lib\\support\\time_precise.c " + |
||||
"src\\core\\lib\\support\\time_windows.c " + |
||||
"src\\core\\lib\\support\\tls_pthread.c " + |
||||
"src\\core\\lib\\support\\tmpfile_msys.c " + |
||||
"src\\core\\lib\\support\\tmpfile_posix.c " + |
||||
"src\\core\\lib\\support\\tmpfile_windows.c " + |
||||
"src\\core\\lib\\support\\wrap_memcpy.c " + |
||||
"src\\core\\lib\\surface\\init.c " + |
||||
"src\\core\\lib\\channel\\channel_args.c " + |
||||
"src\\core\\lib\\channel\\channel_stack.c " + |
||||
"src\\core\\lib\\channel\\channel_stack_builder.c " + |
||||
"src\\core\\lib\\channel\\connected_channel.c " + |
||||
"src\\core\\lib\\channel\\handshaker.c " + |
||||
"src\\core\\lib\\channel\\handshaker_factory.c " + |
||||
"src\\core\\lib\\channel\\handshaker_registry.c " + |
||||
"src\\core\\lib\\compression\\compression.c " + |
||||
"src\\core\\lib\\compression\\message_compress.c " + |
||||
"src\\core\\lib\\http\\format_request.c " + |
||||
"src\\core\\lib\\http\\httpcli.c " + |
||||
"src\\core\\lib\\http\\parser.c " + |
||||
"src\\core\\lib\\iomgr\\closure.c " + |
||||
"src\\core\\lib\\iomgr\\combiner.c " + |
||||
"src\\core\\lib\\iomgr\\endpoint.c " + |
||||
"src\\core\\lib\\iomgr\\endpoint_pair_posix.c " + |
||||
"src\\core\\lib\\iomgr\\endpoint_pair_uv.c " + |
||||
"src\\core\\lib\\iomgr\\endpoint_pair_windows.c " + |
||||
"src\\core\\lib\\iomgr\\error.c " + |
||||
"src\\core\\lib\\iomgr\\ev_epoll1_linux.c " + |
||||
"src\\core\\lib\\iomgr\\ev_epoll_limited_pollers_linux.c " + |
||||
"src\\core\\lib\\iomgr\\ev_epoll_thread_pool_linux.c " + |
||||
"src\\core\\lib\\iomgr\\ev_epollex_linux.c " + |
||||
"src\\core\\lib\\iomgr\\ev_epollsig_linux.c " + |
||||
"src\\core\\lib\\iomgr\\ev_poll_posix.c " + |
||||
"src\\core\\lib\\iomgr\\ev_posix.c " + |
||||
"src\\core\\lib\\iomgr\\ev_windows.c " + |
||||
"src\\core\\lib\\iomgr\\exec_ctx.c " + |
||||
"src\\core\\lib\\iomgr\\executor.c " + |
||||
"src\\core\\lib\\iomgr\\iocp_windows.c " + |
||||
"src\\core\\lib\\iomgr\\iomgr.c " + |
||||
"src\\core\\lib\\iomgr\\iomgr_posix.c " + |
||||
"src\\core\\lib\\iomgr\\iomgr_uv.c " + |
||||
"src\\core\\lib\\iomgr\\iomgr_windows.c " + |
||||
"src\\core\\lib\\iomgr\\is_epollexclusive_available.c " + |
||||
"src\\core\\lib\\iomgr\\load_file.c " + |
||||
"src\\core\\lib\\iomgr\\lockfree_event.c " + |
||||
"src\\core\\lib\\iomgr\\network_status_tracker.c " + |
||||
"src\\core\\lib\\iomgr\\polling_entity.c " + |
||||
"src\\core\\lib\\iomgr\\pollset_set_uv.c " + |
||||
"src\\core\\lib\\iomgr\\pollset_set_windows.c " + |
||||
"src\\core\\lib\\iomgr\\pollset_uv.c " + |
||||
"src\\core\\lib\\iomgr\\pollset_windows.c " + |
||||
"src\\core\\lib\\iomgr\\resolve_address_posix.c " + |
||||
"src\\core\\lib\\iomgr\\resolve_address_uv.c " + |
||||
"src\\core\\lib\\iomgr\\resolve_address_windows.c " + |
||||
"src\\core\\lib\\iomgr\\resource_quota.c " + |
||||
"src\\core\\lib\\iomgr\\sockaddr_utils.c " + |
||||
"src\\core\\lib\\iomgr\\socket_factory_posix.c " + |
||||
"src\\core\\lib\\iomgr\\socket_mutator.c " + |
||||
"src\\core\\lib\\iomgr\\socket_utils_common_posix.c " + |
||||
"src\\core\\lib\\iomgr\\socket_utils_linux.c " + |
||||
"src\\core\\lib\\iomgr\\socket_utils_posix.c " + |
||||
"src\\core\\lib\\iomgr\\socket_utils_uv.c " + |
||||
"src\\core\\lib\\iomgr\\socket_utils_windows.c " + |
||||
"src\\core\\lib\\iomgr\\socket_windows.c " + |
||||
"src\\core\\lib\\iomgr\\tcp_client_posix.c " + |
||||
"src\\core\\lib\\iomgr\\tcp_client_uv.c " + |
||||
"src\\core\\lib\\iomgr\\tcp_client_windows.c " + |
||||
"src\\core\\lib\\iomgr\\tcp_posix.c " + |
||||
"src\\core\\lib\\iomgr\\tcp_server_posix.c " + |
||||
"src\\core\\lib\\iomgr\\tcp_server_utils_posix_common.c " + |
||||
"src\\core\\lib\\iomgr\\tcp_server_utils_posix_ifaddrs.c " + |
||||
"src\\core\\lib\\iomgr\\tcp_server_utils_posix_noifaddrs.c " + |
||||
"src\\core\\lib\\iomgr\\tcp_server_uv.c " + |
||||
"src\\core\\lib\\iomgr\\tcp_server_windows.c " + |
||||
"src\\core\\lib\\iomgr\\tcp_uv.c " + |
||||
"src\\core\\lib\\iomgr\\tcp_windows.c " + |
||||
"src\\core\\lib\\iomgr\\time_averaged_stats.c " + |
||||
"src\\core\\lib\\iomgr\\timer_generic.c " + |
||||
"src\\core\\lib\\iomgr\\timer_heap.c " + |
||||
"src\\core\\lib\\iomgr\\timer_manager.c " + |
||||
"src\\core\\lib\\iomgr\\timer_uv.c " + |
||||
"src\\core\\lib\\iomgr\\udp_server.c " + |
||||
"src\\core\\lib\\iomgr\\unix_sockets_posix.c " + |
||||
"src\\core\\lib\\iomgr\\unix_sockets_posix_noop.c " + |
||||
"src\\core\\lib\\iomgr\\wakeup_fd_cv.c " + |
||||
"src\\core\\lib\\iomgr\\wakeup_fd_eventfd.c " + |
||||
"src\\core\\lib\\iomgr\\wakeup_fd_nospecial.c " + |
||||
"src\\core\\lib\\iomgr\\wakeup_fd_pipe.c " + |
||||
"src\\core\\lib\\iomgr\\wakeup_fd_posix.c " + |
||||
"src\\core\\lib\\iomgr\\workqueue_uv.c " + |
||||
"src\\core\\lib\\iomgr\\workqueue_windows.c " + |
||||
"src\\core\\lib\\json\\json.c " + |
||||
"src\\core\\lib\\json\\json_reader.c " + |
||||
"src\\core\\lib\\json\\json_string.c " + |
||||
"src\\core\\lib\\json\\json_writer.c " + |
||||
"src\\core\\lib\\slice\\b64.c " + |
||||
"src\\core\\lib\\slice\\percent_encoding.c " + |
||||
"src\\core\\lib\\slice\\slice.c " + |
||||
"src\\core\\lib\\slice\\slice_buffer.c " + |
||||
"src\\core\\lib\\slice\\slice_hash_table.c " + |
||||
"src\\core\\lib\\slice\\slice_intern.c " + |
||||
"src\\core\\lib\\slice\\slice_string_helpers.c " + |
||||
"src\\core\\lib\\surface\\alarm.c " + |
||||
"src\\core\\lib\\surface\\api_trace.c " + |
||||
"src\\core\\lib\\surface\\byte_buffer.c " + |
||||
"src\\core\\lib\\surface\\byte_buffer_reader.c " + |
||||
"src\\core\\lib\\surface\\call.c " + |
||||
"src\\core\\lib\\surface\\call_details.c " + |
||||
"src\\core\\lib\\surface\\call_log_batch.c " + |
||||
"src\\core\\lib\\surface\\channel.c " + |
||||
"src\\core\\lib\\surface\\channel_init.c " + |
||||
"src\\core\\lib\\surface\\channel_ping.c " + |
||||
"src\\core\\lib\\surface\\channel_stack_type.c " + |
||||
"src\\core\\lib\\surface\\completion_queue.c " + |
||||
"src\\core\\lib\\surface\\completion_queue_factory.c " + |
||||
"src\\core\\lib\\surface\\event_string.c " + |
||||
"src\\core\\lib\\surface\\lame_client.cc " + |
||||
"src\\core\\lib\\surface\\metadata_array.c " + |
||||
"src\\core\\lib\\surface\\server.c " + |
||||
"src\\core\\lib\\surface\\validate_metadata.c " + |
||||
"src\\core\\lib\\surface\\version.c " + |
||||
"src\\core\\lib\\transport\\bdp_estimator.c " + |
||||
"src\\core\\lib\\transport\\byte_stream.c " + |
||||
"src\\core\\lib\\transport\\connectivity_state.c " + |
||||
"src\\core\\lib\\transport\\error_utils.c " + |
||||
"src\\core\\lib\\transport\\metadata.c " + |
||||
"src\\core\\lib\\transport\\metadata_batch.c " + |
||||
"src\\core\\lib\\transport\\pid_controller.c " + |
||||
"src\\core\\lib\\transport\\service_config.c " + |
||||
"src\\core\\lib\\transport\\static_metadata.c " + |
||||
"src\\core\\lib\\transport\\status_conversion.c " + |
||||
"src\\core\\lib\\transport\\timeout_encoding.c " + |
||||
"src\\core\\lib\\transport\\transport.c " + |
||||
"src\\core\\lib\\transport\\transport_op_string.c " + |
||||
"src\\core\\lib\\debug\\trace.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\server\\secure\\server_secure_chttp2.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\bin_decoder.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\bin_encoder.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\chttp2_plugin.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\chttp2_transport.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\frame_data.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\frame_goaway.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\frame_ping.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\frame_rst_stream.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\frame_settings.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\frame_window_update.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\hpack_encoder.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\hpack_parser.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\hpack_table.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\http2_settings.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\huffsyms.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\incoming_metadata.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\parsing.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\stream_lists.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\stream_map.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\varint.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\transport\\writing.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\alpn\\alpn.c " + |
||||
"src\\core\\ext\\filters\\http\\client\\http_client_filter.c " + |
||||
"src\\core\\ext\\filters\\http\\http_filters_plugin.c " + |
||||
"src\\core\\ext\\filters\\http\\message_compress\\message_compress_filter.c " + |
||||
"src\\core\\ext\\filters\\http\\server\\http_server_filter.c " + |
||||
"src\\core\\lib\\http\\httpcli_security_connector.c " + |
||||
"src\\core\\lib\\security\\context\\security_context.c " + |
||||
"src\\core\\lib\\security\\credentials\\composite\\composite_credentials.c " + |
||||
"src\\core\\lib\\security\\credentials\\credentials.c " + |
||||
"src\\core\\lib\\security\\credentials\\credentials_metadata.c " + |
||||
"src\\core\\lib\\security\\credentials\\fake\\fake_credentials.c " + |
||||
"src\\core\\lib\\security\\credentials\\google_default\\credentials_generic.c " + |
||||
"src\\core\\lib\\security\\credentials\\google_default\\google_default_credentials.c " + |
||||
"src\\core\\lib\\security\\credentials\\iam\\iam_credentials.c " + |
||||
"src\\core\\lib\\security\\credentials\\jwt\\json_token.c " + |
||||
"src\\core\\lib\\security\\credentials\\jwt\\jwt_credentials.c " + |
||||
"src\\core\\lib\\security\\credentials\\jwt\\jwt_verifier.c " + |
||||
"src\\core\\lib\\security\\credentials\\oauth2\\oauth2_credentials.c " + |
||||
"src\\core\\lib\\security\\credentials\\plugin\\plugin_credentials.c " + |
||||
"src\\core\\lib\\security\\credentials\\ssl\\ssl_credentials.c " + |
||||
"src\\core\\lib\\security\\transport\\client_auth_filter.c " + |
||||
"src\\core\\lib\\security\\transport\\lb_targets_info.c " + |
||||
"src\\core\\lib\\security\\transport\\secure_endpoint.c " + |
||||
"src\\core\\lib\\security\\transport\\security_connector.c " + |
||||
"src\\core\\lib\\security\\transport\\security_handshaker.c " + |
||||
"src\\core\\lib\\security\\transport\\server_auth_filter.c " + |
||||
"src\\core\\lib\\security\\transport\\tsi_error.c " + |
||||
"src\\core\\lib\\security\\util\\json_util.c " + |
||||
"src\\core\\lib\\surface\\init_secure.c " + |
||||
"src\\core\\tsi\\fake_transport_security.c " + |
||||
"src\\core\\tsi\\ssl_transport_security.c " + |
||||
"src\\core\\tsi\\transport_security.c " + |
||||
"src\\core\\tsi\\transport_security_adapter.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\server\\chttp2_server.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\client\\secure\\secure_channel_create.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\channel_connectivity.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\client_channel.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\client_channel_factory.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\client_channel_plugin.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\connector.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\http_connect_handshaker.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\http_proxy.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\lb_policy.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\lb_policy_factory.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\lb_policy_registry.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\parse_address.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\proxy_mapper.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\proxy_mapper_registry.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\resolver.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\resolver_factory.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\resolver_registry.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\retry_throttle.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\subchannel.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\subchannel_index.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\uri_parser.c " + |
||||
"src\\core\\ext\\filters\\deadline\\deadline_filter.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\client\\chttp2_connector.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\server\\insecure\\server_chttp2.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\server\\insecure\\server_chttp2_posix.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\client\\insecure\\channel_create.c " + |
||||
"src\\core\\ext\\transport\\chttp2\\client\\insecure\\channel_create_posix.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\client_load_reporting_filter.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\grpclb.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\grpclb_channel_secure.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\grpclb_client_stats.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\load_balancer_api.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\lb_policy\\grpclb\\proto\\grpc\\lb\\v1\\load_balancer.pb.c " + |
||||
"third_party\\nanopb\\pb_common.c " + |
||||
"third_party\\nanopb\\pb_decode.c " + |
||||
"third_party\\nanopb\\pb_encode.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\lb_policy\\pick_first\\pick_first.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\lb_policy\\round_robin\\round_robin.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\dns_resolver_ares.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\grpc_ares_ev_driver_posix.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\resolver\\dns\\c_ares\\grpc_ares_wrapper.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\resolver\\dns\\native\\dns_resolver.c " + |
||||
"src\\core\\ext\\filters\\client_channel\\resolver\\sockaddr\\sockaddr_resolver.c " + |
||||
"src\\core\\ext\\filters\\load_reporting\\load_reporting.c " + |
||||
"src\\core\\ext\\filters\\load_reporting\\load_reporting_filter.c " + |
||||
"src\\core\\ext\\census\\base_resources.c " + |
||||
"src\\core\\ext\\census\\context.c " + |
||||
"src\\core\\ext\\census\\gen\\census.pb.c " + |
||||
"src\\core\\ext\\census\\gen\\trace_context.pb.c " + |
||||
"src\\core\\ext\\census\\grpc_context.c " + |
||||
"src\\core\\ext\\census\\grpc_filter.c " + |
||||
"src\\core\\ext\\census\\grpc_plugin.c " + |
||||
"src\\core\\ext\\census\\initialize.c " + |
||||
"src\\core\\ext\\census\\intrusive_hash_map.c " + |
||||
"src\\core\\ext\\census\\mlog.c " + |
||||
"src\\core\\ext\\census\\operation.c " + |
||||
"src\\core\\ext\\census\\placeholders.c " + |
||||
"src\\core\\ext\\census\\resource.c " + |
||||
"src\\core\\ext\\census\\trace_context.c " + |
||||
"src\\core\\ext\\census\\tracing.c " + |
||||
"src\\core\\ext\\filters\\max_age\\max_age_filter.c " + |
||||
"src\\core\\ext\\filters\\message_size\\message_size_filter.c " + |
||||
"src\\core\\ext\\filters\\workarounds\\workaround_cronet_compression_filter.c " + |
||||
"src\\core\\ext\\filters\\workarounds\\workaround_utils.c " + |
||||
"src\\core\\plugin_registry\\grpc_plugin_registry.c " + |
||||
"src\\boringssl\\err_data.c " + |
||||
"third_party\\boringssl\\crypto\\aes\\aes.c " + |
||||
"third_party\\boringssl\\crypto\\aes\\mode_wrappers.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_bitstr.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_bool.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_d2i_fp.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_dup.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_enum.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_gentm.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_i2d_fp.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_int.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_mbstr.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_object.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_octet.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_print.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_strnid.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_time.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_type.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_utctm.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\a_utf8.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\asn1_lib.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\asn1_par.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\asn_pack.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\f_enum.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\f_int.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\f_string.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\t_bitst.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\tasn_dec.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\tasn_enc.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\tasn_fre.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\tasn_new.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\tasn_typ.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\tasn_utl.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\x_bignum.c " + |
||||
"third_party\\boringssl\\crypto\\asn1\\x_long.c " + |
||||
"third_party\\boringssl\\crypto\\base64\\base64.c " + |
||||
"third_party\\boringssl\\crypto\\bio\\bio.c " + |
||||
"third_party\\boringssl\\crypto\\bio\\bio_mem.c " + |
||||
"third_party\\boringssl\\crypto\\bio\\buffer.c " + |
||||
"third_party\\boringssl\\crypto\\bio\\connect.c " + |
||||
"third_party\\boringssl\\crypto\\bio\\fd.c " + |
||||
"third_party\\boringssl\\crypto\\bio\\file.c " + |
||||
"third_party\\boringssl\\crypto\\bio\\hexdump.c " + |
||||
"third_party\\boringssl\\crypto\\bio\\pair.c " + |
||||
"third_party\\boringssl\\crypto\\bio\\printf.c " + |
||||
"third_party\\boringssl\\crypto\\bio\\socket.c " + |
||||
"third_party\\boringssl\\crypto\\bio\\socket_helper.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\add.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\asm\\x86_64-gcc.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\bn.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\bn_asn1.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\cmp.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\convert.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\ctx.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\div.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\exponentiation.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\gcd.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\generic.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\kronecker.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\montgomery.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\montgomery_inv.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\mul.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\prime.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\random.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\rsaz_exp.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\shift.c " + |
||||
"third_party\\boringssl\\crypto\\bn\\sqrt.c " + |
||||
"third_party\\boringssl\\crypto\\buf\\buf.c " + |
||||
"third_party\\boringssl\\crypto\\bytestring\\asn1_compat.c " + |
||||
"third_party\\boringssl\\crypto\\bytestring\\ber.c " + |
||||
"third_party\\boringssl\\crypto\\bytestring\\cbb.c " + |
||||
"third_party\\boringssl\\crypto\\bytestring\\cbs.c " + |
||||
"third_party\\boringssl\\crypto\\chacha\\chacha.c " + |
||||
"third_party\\boringssl\\crypto\\cipher\\aead.c " + |
||||
"third_party\\boringssl\\crypto\\cipher\\cipher.c " + |
||||
"third_party\\boringssl\\crypto\\cipher\\derive_key.c " + |
||||
"third_party\\boringssl\\crypto\\cipher\\e_aes.c " + |
||||
"third_party\\boringssl\\crypto\\cipher\\e_chacha20poly1305.c " + |
||||
"third_party\\boringssl\\crypto\\cipher\\e_des.c " + |
||||
"third_party\\boringssl\\crypto\\cipher\\e_null.c " + |
||||
"third_party\\boringssl\\crypto\\cipher\\e_rc2.c " + |
||||
"third_party\\boringssl\\crypto\\cipher\\e_rc4.c " + |
||||
"third_party\\boringssl\\crypto\\cipher\\e_ssl3.c " + |
||||
"third_party\\boringssl\\crypto\\cipher\\e_tls.c " + |
||||
"third_party\\boringssl\\crypto\\cipher\\tls_cbc.c " + |
||||
"third_party\\boringssl\\crypto\\cmac\\cmac.c " + |
||||
"third_party\\boringssl\\crypto\\conf\\conf.c " + |
||||
"third_party\\boringssl\\crypto\\cpu-aarch64-linux.c " + |
||||
"third_party\\boringssl\\crypto\\cpu-arm-linux.c " + |
||||
"third_party\\boringssl\\crypto\\cpu-arm.c " + |
||||
"third_party\\boringssl\\crypto\\cpu-intel.c " + |
||||
"third_party\\boringssl\\crypto\\cpu-ppc64le.c " + |
||||
"third_party\\boringssl\\crypto\\crypto.c " + |
||||
"third_party\\boringssl\\crypto\\curve25519\\curve25519.c " + |
||||
"third_party\\boringssl\\crypto\\curve25519\\spake25519.c " + |
||||
"third_party\\boringssl\\crypto\\curve25519\\x25519-x86_64.c " + |
||||
"third_party\\boringssl\\crypto\\des\\des.c " + |
||||
"third_party\\boringssl\\crypto\\dh\\check.c " + |
||||
"third_party\\boringssl\\crypto\\dh\\dh.c " + |
||||
"third_party\\boringssl\\crypto\\dh\\dh_asn1.c " + |
||||
"third_party\\boringssl\\crypto\\dh\\params.c " + |
||||
"third_party\\boringssl\\crypto\\digest\\digest.c " + |
||||
"third_party\\boringssl\\crypto\\digest\\digests.c " + |
||||
"third_party\\boringssl\\crypto\\dsa\\dsa.c " + |
||||
"third_party\\boringssl\\crypto\\dsa\\dsa_asn1.c " + |
||||
"third_party\\boringssl\\crypto\\ec\\ec.c " + |
||||
"third_party\\boringssl\\crypto\\ec\\ec_asn1.c " + |
||||
"third_party\\boringssl\\crypto\\ec\\ec_key.c " + |
||||
"third_party\\boringssl\\crypto\\ec\\ec_montgomery.c " + |
||||
"third_party\\boringssl\\crypto\\ec\\oct.c " + |
||||
"third_party\\boringssl\\crypto\\ec\\p224-64.c " + |
||||
"third_party\\boringssl\\crypto\\ec\\p256-64.c " + |
||||
"third_party\\boringssl\\crypto\\ec\\p256-x86_64.c " + |
||||
"third_party\\boringssl\\crypto\\ec\\simple.c " + |
||||
"third_party\\boringssl\\crypto\\ec\\util-64.c " + |
||||
"third_party\\boringssl\\crypto\\ec\\wnaf.c " + |
||||
"third_party\\boringssl\\crypto\\ecdh\\ecdh.c " + |
||||
"third_party\\boringssl\\crypto\\ecdsa\\ecdsa.c " + |
||||
"third_party\\boringssl\\crypto\\ecdsa\\ecdsa_asn1.c " + |
||||
"third_party\\boringssl\\crypto\\engine\\engine.c " + |
||||
"third_party\\boringssl\\crypto\\err\\err.c " + |
||||
"third_party\\boringssl\\crypto\\evp\\digestsign.c " + |
||||
"third_party\\boringssl\\crypto\\evp\\evp.c " + |
||||
"third_party\\boringssl\\crypto\\evp\\evp_asn1.c " + |
||||
"third_party\\boringssl\\crypto\\evp\\evp_ctx.c " + |
||||
"third_party\\boringssl\\crypto\\evp\\p_dsa_asn1.c " + |
||||
"third_party\\boringssl\\crypto\\evp\\p_ec.c " + |
||||
"third_party\\boringssl\\crypto\\evp\\p_ec_asn1.c " + |
||||
"third_party\\boringssl\\crypto\\evp\\p_rsa.c " + |
||||
"third_party\\boringssl\\crypto\\evp\\p_rsa_asn1.c " + |
||||
"third_party\\boringssl\\crypto\\evp\\pbkdf.c " + |
||||
"third_party\\boringssl\\crypto\\evp\\print.c " + |
||||
"third_party\\boringssl\\crypto\\evp\\sign.c " + |
||||
"third_party\\boringssl\\crypto\\ex_data.c " + |
||||
"third_party\\boringssl\\crypto\\hkdf\\hkdf.c " + |
||||
"third_party\\boringssl\\crypto\\hmac\\hmac.c " + |
||||
"third_party\\boringssl\\crypto\\lhash\\lhash.c " + |
||||
"third_party\\boringssl\\crypto\\md4\\md4.c " + |
||||
"third_party\\boringssl\\crypto\\md5\\md5.c " + |
||||
"third_party\\boringssl\\crypto\\mem.c " + |
||||
"third_party\\boringssl\\crypto\\modes\\cbc.c " + |
||||
"third_party\\boringssl\\crypto\\modes\\cfb.c " + |
||||
"third_party\\boringssl\\crypto\\modes\\ctr.c " + |
||||
"third_party\\boringssl\\crypto\\modes\\gcm.c " + |
||||
"third_party\\boringssl\\crypto\\modes\\ofb.c " + |
||||
"third_party\\boringssl\\crypto\\newhope\\error_correction.c " + |
||||
"third_party\\boringssl\\crypto\\newhope\\newhope.c " + |
||||
"third_party\\boringssl\\crypto\\newhope\\ntt.c " + |
||||
"third_party\\boringssl\\crypto\\newhope\\poly.c " + |
||||
"third_party\\boringssl\\crypto\\newhope\\precomp.c " + |
||||
"third_party\\boringssl\\crypto\\newhope\\reduce.c " + |
||||
"third_party\\boringssl\\crypto\\obj\\obj.c " + |
||||
"third_party\\boringssl\\crypto\\obj\\obj_xref.c " + |
||||
"third_party\\boringssl\\crypto\\pem\\pem_all.c " + |
||||
"third_party\\boringssl\\crypto\\pem\\pem_info.c " + |
||||
"third_party\\boringssl\\crypto\\pem\\pem_lib.c " + |
||||
"third_party\\boringssl\\crypto\\pem\\pem_oth.c " + |
||||
"third_party\\boringssl\\crypto\\pem\\pem_pk8.c " + |
||||
"third_party\\boringssl\\crypto\\pem\\pem_pkey.c " + |
||||
"third_party\\boringssl\\crypto\\pem\\pem_x509.c " + |
||||
"third_party\\boringssl\\crypto\\pem\\pem_xaux.c " + |
||||
"third_party\\boringssl\\crypto\\pkcs8\\p5_pbe.c " + |
||||
"third_party\\boringssl\\crypto\\pkcs8\\p5_pbev2.c " + |
||||
"third_party\\boringssl\\crypto\\pkcs8\\p8_pkey.c " + |
||||
"third_party\\boringssl\\crypto\\pkcs8\\pkcs8.c " + |
||||
"third_party\\boringssl\\crypto\\poly1305\\poly1305.c " + |
||||
"third_party\\boringssl\\crypto\\poly1305\\poly1305_arm.c " + |
||||
"third_party\\boringssl\\crypto\\poly1305\\poly1305_vec.c " + |
||||
"third_party\\boringssl\\crypto\\rand\\deterministic.c " + |
||||
"third_party\\boringssl\\crypto\\rand\\rand.c " + |
||||
"third_party\\boringssl\\crypto\\rand\\urandom.c " + |
||||
"third_party\\boringssl\\crypto\\rand\\windows.c " + |
||||
"third_party\\boringssl\\crypto\\rc4\\rc4.c " + |
||||
"third_party\\boringssl\\crypto\\refcount_c11.c " + |
||||
"third_party\\boringssl\\crypto\\refcount_lock.c " + |
||||
"third_party\\boringssl\\crypto\\rsa\\blinding.c " + |
||||
"third_party\\boringssl\\crypto\\rsa\\padding.c " + |
||||
"third_party\\boringssl\\crypto\\rsa\\rsa.c " + |
||||
"third_party\\boringssl\\crypto\\rsa\\rsa_asn1.c " + |
||||
"third_party\\boringssl\\crypto\\rsa\\rsa_impl.c " + |
||||
"third_party\\boringssl\\crypto\\sha\\sha1.c " + |
||||
"third_party\\boringssl\\crypto\\sha\\sha256.c " + |
||||
"third_party\\boringssl\\crypto\\sha\\sha512.c " + |
||||
"third_party\\boringssl\\crypto\\stack\\stack.c " + |
||||
"third_party\\boringssl\\crypto\\thread.c " + |
||||
"third_party\\boringssl\\crypto\\thread_none.c " + |
||||
"third_party\\boringssl\\crypto\\thread_pthread.c " + |
||||
"third_party\\boringssl\\crypto\\thread_win.c " + |
||||
"third_party\\boringssl\\crypto\\time_support.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\a_digest.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\a_sign.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\a_strex.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\a_verify.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\algorithm.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\asn1_gen.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\by_dir.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\by_file.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\i2d_pr.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\pkcs7.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\rsa_pss.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\t_crl.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\t_req.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\t_x509.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\t_x509a.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_att.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_cmp.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_d2.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_def.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_ext.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_lu.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_obj.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_r2x.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_req.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_set.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_trs.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_txt.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_v3.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_vfy.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509_vpm.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509cset.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509name.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509rset.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509spki.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x509type.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_algor.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_all.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_attrib.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_crl.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_exten.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_info.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_name.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_pkey.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_pubkey.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_req.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_sig.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_spki.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_val.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_x509.c " + |
||||
"third_party\\boringssl\\crypto\\x509\\x_x509a.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\pcy_cache.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\pcy_data.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\pcy_lib.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\pcy_map.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\pcy_node.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\pcy_tree.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_akey.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_akeya.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_alt.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_bcons.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_bitst.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_conf.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_cpols.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_crld.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_enum.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_extku.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_genn.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_ia5.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_info.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_int.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_lib.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_ncons.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_pci.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_pcia.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_pcons.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_pku.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_pmaps.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_prn.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_purp.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_skey.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_sxnet.c " + |
||||
"third_party\\boringssl\\crypto\\x509v3\\v3_utl.c " + |
||||
"third_party\\boringssl\\ssl\\custom_extensions.c " + |
||||
"third_party\\boringssl\\ssl\\d1_both.c " + |
||||
"third_party\\boringssl\\ssl\\d1_lib.c " + |
||||
"third_party\\boringssl\\ssl\\d1_pkt.c " + |
||||
"third_party\\boringssl\\ssl\\d1_srtp.c " + |
||||
"third_party\\boringssl\\ssl\\dtls_method.c " + |
||||
"third_party\\boringssl\\ssl\\dtls_record.c " + |
||||
"third_party\\boringssl\\ssl\\handshake_client.c " + |
||||
"third_party\\boringssl\\ssl\\handshake_server.c " + |
||||
"third_party\\boringssl\\ssl\\s3_both.c " + |
||||
"third_party\\boringssl\\ssl\\s3_enc.c " + |
||||
"third_party\\boringssl\\ssl\\s3_lib.c " + |
||||
"third_party\\boringssl\\ssl\\s3_pkt.c " + |
||||
"third_party\\boringssl\\ssl\\ssl_aead_ctx.c " + |
||||
"third_party\\boringssl\\ssl\\ssl_asn1.c " + |
||||
"third_party\\boringssl\\ssl\\ssl_buffer.c " + |
||||
"third_party\\boringssl\\ssl\\ssl_cert.c " + |
||||
"third_party\\boringssl\\ssl\\ssl_cipher.c " + |
||||
"third_party\\boringssl\\ssl\\ssl_ecdh.c " + |
||||
"third_party\\boringssl\\ssl\\ssl_file.c " + |
||||
"third_party\\boringssl\\ssl\\ssl_lib.c " + |
||||
"third_party\\boringssl\\ssl\\ssl_rsa.c " + |
||||
"third_party\\boringssl\\ssl\\ssl_session.c " + |
||||
"third_party\\boringssl\\ssl\\ssl_stat.c " + |
||||
"third_party\\boringssl\\ssl\\t1_enc.c " + |
||||
"third_party\\boringssl\\ssl\\t1_lib.c " + |
||||
"third_party\\boringssl\\ssl\\tls13_both.c " + |
||||
"third_party\\boringssl\\ssl\\tls13_client.c " + |
||||
"third_party\\boringssl\\ssl\\tls13_enc.c " + |
||||
"third_party\\boringssl\\ssl\\tls13_server.c " + |
||||
"third_party\\boringssl\\ssl\\tls_method.c " + |
||||
"third_party\\boringssl\\ssl\\tls_record.c " + |
||||
"third_party\\zlib\\adler32.c " + |
||||
"third_party\\zlib\\compress.c " + |
||||
"third_party\\zlib\\crc32.c " + |
||||
"third_party\\zlib\\deflate.c " + |
||||
"third_party\\zlib\\gzclose.c " + |
||||
"third_party\\zlib\\gzlib.c " + |
||||
"third_party\\zlib\\gzread.c " + |
||||
"third_party\\zlib\\gzwrite.c " + |
||||
"third_party\\zlib\\infback.c " + |
||||
"third_party\\zlib\\inffast.c " + |
||||
"third_party\\zlib\\inflate.c " + |
||||
"third_party\\zlib\\inftrees.c " + |
||||
"third_party\\zlib\\trees.c " + |
||||
"third_party\\zlib\\uncompr.c " + |
||||
"third_party\\zlib\\zutil.c " + |
||||
""; |
||||
|
||||
EXTENSION("grpc", grpc_source, null, |
||||
"/DOPENSSL_NO_ASM /D_GNU_SOURCE /DWIN32_LEAN_AND_MEAN "+ |
||||
"/D_HAS_EXCEPTIONS=0 /DNOMINMAX /DGRPC_ARES=0 /D_WIN32_WINNT=0x600 "+ |
||||
"/I"+configure_module_dirname+" "+ |
||||
"/I"+configure_module_dirname+"\\include "+ |
||||
"/I"+configure_module_dirname+"\\src\\php\\ext\\grpc "+ |
||||
"/I"+configure_module_dirname+"\\third_party\\boringssl\\include "+ |
||||
"/I"+configure_module_dirname+"\\third_party\\zlib"); |
||||
} |
@ -0,0 +1,320 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2017, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include "src/core/ext/census/intrusive_hash_map.h" |
||||
#include <string.h> |
||||
|
||||
extern bool hm_index_compare(const hm_index *A, const hm_index *B); |
||||
|
||||
/* Simple hashing function that takes lower 32 bits. */ |
||||
static __inline uint32_t chunked_vector_hasher(uint64_t key) { |
||||
return (uint32_t)key; |
||||
} |
||||
|
||||
/* Vector chunks are 1MiB divided by pointer size. */ |
||||
static const size_t VECTOR_CHUNK_SIZE = (1 << 20) / sizeof(void *); |
||||
|
||||
/* Helper functions which return buckets from the chunked vector. */ |
||||
static __inline void **get_mutable_bucket(const chunked_vector *buckets, |
||||
uint32_t index) { |
||||
if (index < VECTOR_CHUNK_SIZE) { |
||||
return &buckets->first_[index]; |
||||
} |
||||
size_t rest_index = (index - VECTOR_CHUNK_SIZE) / VECTOR_CHUNK_SIZE; |
||||
return &buckets->rest_[rest_index][index % VECTOR_CHUNK_SIZE]; |
||||
} |
||||
|
||||
static __inline void *get_bucket(const chunked_vector *buckets, |
||||
uint32_t index) { |
||||
if (index < VECTOR_CHUNK_SIZE) { |
||||
return buckets->first_[index]; |
||||
} |
||||
size_t rest_index = (index - VECTOR_CHUNK_SIZE) / VECTOR_CHUNK_SIZE; |
||||
return buckets->rest_[rest_index][index % VECTOR_CHUNK_SIZE]; |
||||
} |
||||
|
||||
/* Helper function. */ |
||||
static __inline size_t RestSize(const chunked_vector *vec) { |
||||
return (vec->size_ <= VECTOR_CHUNK_SIZE) |
||||
? 0 |
||||
: (vec->size_ - VECTOR_CHUNK_SIZE - 1) / VECTOR_CHUNK_SIZE + 1; |
||||
} |
||||
|
||||
/* Initialize chunked vector to size of 0. */ |
||||
static void chunked_vector_init(chunked_vector *vec) { |
||||
vec->size_ = 0; |
||||
vec->first_ = NULL; |
||||
vec->rest_ = NULL; |
||||
} |
||||
|
||||
/* Clear chunked vector and free all memory that has been allocated then
|
||||
initialize chunked vector. */ |
||||
static void chunked_vector_clear(chunked_vector *vec) { |
||||
if (vec->first_ != NULL) { |
||||
gpr_free(vec->first_); |
||||
} |
||||
if (vec->rest_ != NULL) { |
||||
size_t rest_size = RestSize(vec); |
||||
for (size_t i = 0; i < rest_size; ++i) { |
||||
if (vec->rest_[i] != NULL) { |
||||
gpr_free(vec->rest_[i]); |
||||
} |
||||
} |
||||
gpr_free(vec->rest_); |
||||
} |
||||
chunked_vector_init(vec); |
||||
} |
||||
|
||||
/* Clear chunked vector and then resize it to n entries. Allow the first 1MB to
|
||||
be read w/o an extra cache miss. The rest of the elements are stored in an |
||||
array of arrays to avoid large mallocs. */ |
||||
static void chunked_vector_reset(chunked_vector *vec, size_t n) { |
||||
chunked_vector_clear(vec); |
||||
vec->size_ = n; |
||||
if (n <= VECTOR_CHUNK_SIZE) { |
||||
vec->first_ = (void **)gpr_malloc(sizeof(void *) * n); |
||||
memset(vec->first_, 0, sizeof(void *) * n); |
||||
} else { |
||||
vec->first_ = (void **)gpr_malloc(sizeof(void *) * VECTOR_CHUNK_SIZE); |
||||
memset(vec->first_, 0, sizeof(void *) * VECTOR_CHUNK_SIZE); |
||||
size_t rest_size = RestSize(vec); |
||||
vec->rest_ = (void ***)gpr_malloc(sizeof(void **) * rest_size); |
||||
memset(vec->rest_, 0, sizeof(void **) * rest_size); |
||||
int i = 0; |
||||
n -= VECTOR_CHUNK_SIZE; |
||||
while (n > 0) { |
||||
size_t this_size = GPR_MIN(n, VECTOR_CHUNK_SIZE); |
||||
vec->rest_[i] = (void **)gpr_malloc(sizeof(void *) * this_size); |
||||
memset(vec->rest_[i], 0, sizeof(void *) * this_size); |
||||
n -= this_size; |
||||
++i; |
||||
} |
||||
} |
||||
} |
||||
|
||||
void intrusive_hash_map_init(intrusive_hash_map *hash_map, |
||||
uint32_t initial_log2_table_size) { |
||||
hash_map->log2_num_buckets = initial_log2_table_size; |
||||
hash_map->num_items = 0; |
||||
uint32_t num_buckets = (uint32_t)1 << hash_map->log2_num_buckets; |
||||
hash_map->extend_threshold = num_buckets >> 1; |
||||
chunked_vector_init(&hash_map->buckets); |
||||
chunked_vector_reset(&hash_map->buckets, num_buckets); |
||||
hash_map->hash_mask = num_buckets - 1; |
||||
} |
||||
|
||||
bool intrusive_hash_map_empty(const intrusive_hash_map *hash_map) { |
||||
return hash_map->num_items == 0; |
||||
} |
||||
|
||||
size_t intrusive_hash_map_size(const intrusive_hash_map *hash_map) { |
||||
return hash_map->num_items; |
||||
} |
||||
|
||||
void intrusive_hash_map_end(const intrusive_hash_map *hash_map, hm_index *idx) { |
||||
idx->bucket_index = (uint32_t)hash_map->buckets.size_; |
||||
GPR_ASSERT(idx->bucket_index <= UINT32_MAX); |
||||
idx->item = NULL; |
||||
} |
||||
|
||||
void intrusive_hash_map_next(const intrusive_hash_map *hash_map, |
||||
hm_index *idx) { |
||||
idx->item = idx->item->hash_link; |
||||
while (idx->item == NULL) { |
||||
idx->bucket_index++; |
||||
if (idx->bucket_index >= hash_map->buckets.size_) { |
||||
/* Reached end of table. */ |
||||
idx->item = NULL; |
||||
return; |
||||
} |
||||
idx->item = (hm_item *)get_bucket(&hash_map->buckets, idx->bucket_index); |
||||
} |
||||
} |
||||
|
||||
void intrusive_hash_map_begin(const intrusive_hash_map *hash_map, |
||||
hm_index *idx) { |
||||
for (uint32_t i = 0; i < hash_map->buckets.size_; ++i) { |
||||
if (get_bucket(&hash_map->buckets, i) != NULL) { |
||||
idx->bucket_index = i; |
||||
idx->item = (hm_item *)get_bucket(&hash_map->buckets, i); |
||||
return; |
||||
} |
||||
} |
||||
intrusive_hash_map_end(hash_map, idx); |
||||
} |
||||
|
||||
hm_item *intrusive_hash_map_find(const intrusive_hash_map *hash_map, |
||||
uint64_t key) { |
||||
uint32_t index = chunked_vector_hasher(key) & hash_map->hash_mask; |
||||
|
||||
hm_item *p = (hm_item *)get_bucket(&hash_map->buckets, index); |
||||
while (p != NULL) { |
||||
if (key == p->key) { |
||||
return p; |
||||
} |
||||
p = p->hash_link; |
||||
} |
||||
return NULL; |
||||
} |
||||
|
||||
hm_item *intrusive_hash_map_erase(intrusive_hash_map *hash_map, uint64_t key) { |
||||
uint32_t index = chunked_vector_hasher(key) & hash_map->hash_mask; |
||||
|
||||
hm_item **slot = (hm_item **)get_mutable_bucket(&hash_map->buckets, index); |
||||
hm_item *p = *slot; |
||||
if (p == NULL) { |
||||
return NULL; |
||||
} |
||||
|
||||
if (key == p->key) { |
||||
*slot = p->hash_link; |
||||
p->hash_link = NULL; |
||||
hash_map->num_items--; |
||||
return p; |
||||
} |
||||
|
||||
hm_item *prev = p; |
||||
p = p->hash_link; |
||||
|
||||
while (p) { |
||||
if (key == p->key) { |
||||
prev->hash_link = p->hash_link; |
||||
p->hash_link = NULL; |
||||
hash_map->num_items--; |
||||
return p; |
||||
} |
||||
prev = p; |
||||
p = p->hash_link; |
||||
} |
||||
return NULL; |
||||
} |
||||
|
||||
/* Insert an hm_item* into the underlying chunked vector. hash_mask is
|
||||
* array_size-1. Returns true if it is a new hm_item and false if the hm_item |
||||
* already existed. |
||||
*/ |
||||
static __inline bool intrusive_hash_map_internal_insert(chunked_vector *buckets, |
||||
uint32_t hash_mask, |
||||
hm_item *item) { |
||||
const uint64_t key = item->key; |
||||
uint32_t index = chunked_vector_hasher(key) & hash_mask; |
||||
hm_item **slot = (hm_item **)get_mutable_bucket(buckets, index); |
||||
hm_item *p = *slot; |
||||
item->hash_link = p; |
||||
|
||||
/* Check to see if key already exists. */ |
||||
while (p) { |
||||
if (p->key == key) { |
||||
return false; |
||||
} |
||||
p = p->hash_link; |
||||
} |
||||
|
||||
/* Otherwise add new entry. */ |
||||
*slot = item; |
||||
return true; |
||||
} |
||||
|
||||
/* Extend the allocated number of elements in the hash map by a factor of 2. */ |
||||
void intrusive_hash_map_extend(intrusive_hash_map *hash_map) { |
||||
uint32_t new_log2_num_buckets = 1 + hash_map->log2_num_buckets; |
||||
uint32_t new_num_buckets = (uint32_t)1 << new_log2_num_buckets; |
||||
GPR_ASSERT(new_num_buckets <= UINT32_MAX && new_num_buckets > 0); |
||||
chunked_vector new_buckets; |
||||
chunked_vector_init(&new_buckets); |
||||
chunked_vector_reset(&new_buckets, new_num_buckets); |
||||
uint32_t new_hash_mask = new_num_buckets - 1; |
||||
|
||||
hm_index cur_idx; |
||||
hm_index end_idx; |
||||
intrusive_hash_map_end(hash_map, &end_idx); |
||||
intrusive_hash_map_begin(hash_map, &cur_idx); |
||||
while (!hm_index_compare(&cur_idx, &end_idx)) { |
||||
hm_item *new_item = cur_idx.item; |
||||
intrusive_hash_map_next(hash_map, &cur_idx); |
||||
intrusive_hash_map_internal_insert(&new_buckets, new_hash_mask, new_item); |
||||
} |
||||
|
||||
/* Set values for new chunked_vector. extend_threshold is set to half of
|
||||
* new_num_buckets. */ |
||||
hash_map->log2_num_buckets = new_log2_num_buckets; |
||||
chunked_vector_clear(&hash_map->buckets); |
||||
hash_map->buckets = new_buckets; |
||||
hash_map->hash_mask = new_hash_mask; |
||||
hash_map->extend_threshold = new_num_buckets >> 1; |
||||
} |
||||
|
||||
/* Insert a hm_item. The hm_item must remain live until it is removed from the
|
||||
table. This object does not take the ownership of hm_item. The caller must |
||||
remove this hm_item from the table and delete it before this table is |
||||
deleted. If hm_item exists already num_items is not changed. */ |
||||
bool intrusive_hash_map_insert(intrusive_hash_map *hash_map, hm_item *item) { |
||||
if (hash_map->num_items >= hash_map->extend_threshold) { |
||||
intrusive_hash_map_extend(hash_map); |
||||
} |
||||
if (intrusive_hash_map_internal_insert(&hash_map->buckets, |
||||
hash_map->hash_mask, item)) { |
||||
hash_map->num_items++; |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
void intrusive_hash_map_clear(intrusive_hash_map *hash_map, |
||||
void (*free_object)(void *)) { |
||||
hm_index cur; |
||||
hm_index end; |
||||
intrusive_hash_map_end(hash_map, &end); |
||||
intrusive_hash_map_begin(hash_map, &cur); |
||||
|
||||
while (!hm_index_compare(&cur, &end)) { |
||||
hm_index next = cur; |
||||
intrusive_hash_map_next(hash_map, &next); |
||||
if (cur.item != NULL) { |
||||
hm_item *item = intrusive_hash_map_erase(hash_map, cur.item->key); |
||||
(*free_object)((void *)item); |
||||
gpr_free(item); |
||||
} |
||||
cur = next; |
||||
} |
||||
} |
||||
|
||||
void intrusive_hash_map_free(intrusive_hash_map *hash_map, |
||||
void (*free_object)(void *)) { |
||||
intrusive_hash_map_clear(hash_map, (*free_object)); |
||||
hash_map->num_items = 0; |
||||
hash_map->extend_threshold = 0; |
||||
hash_map->log2_num_buckets = 0; |
||||
hash_map->hash_mask = 0; |
||||
chunked_vector_clear(&hash_map->buckets); |
||||
} |
@ -0,0 +1,167 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2017, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_H |
||||
#define GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_H |
||||
|
||||
#include "src/core/ext/census/intrusive_hash_map_internal.h" |
||||
|
||||
/* intrusive_hash_map is a fast chained hash table. This hash map is faster than
|
||||
* a dense hash map when the application calls insert and erase more often than |
||||
* find. When the workload is dominated by find() a dense hash map may be |
||||
* faster. |
||||
* |
||||
* intrusive_hash_map uses an intrusive header placed within a user defined |
||||
* struct. The header field IHM_key MUST be set to a valid value before |
||||
* insertion into the hash map or undefined behavior may occur. The header field |
||||
* IHM_hash_link MUST to be set to NULL initially. |
||||
* |
||||
* EXAMPLE USAGE: |
||||
* |
||||
* typedef struct string_item { |
||||
* INTRUSIVE_HASH_MAP_HEADER; |
||||
* // User data.
|
||||
* char *str_buf; |
||||
* uint16_t len; |
||||
* } string_item; |
||||
* |
||||
* static string_item *make_string_item(uint64_t key, const char *buf, |
||||
* uint16_t len) { |
||||
* string_item *item = (string_item *)gpr_malloc(sizeof(string_item)); |
||||
* item->IHM_key = key; |
||||
* item->IHM_hash_link = NULL; |
||||
* item->len = len; |
||||
* item->str_buf = (char *)malloc(len); |
||||
* memcpy(item->str_buf, buf, len); |
||||
* return item; |
||||
* } |
||||
* |
||||
* intrusive_hash_map hash_map; |
||||
* intrusive_hash_map_init(&hash_map, 4); |
||||
* string_item *new_item1 = make_string_item(10, "test1", 5); |
||||
* bool ok = intrusive_hash_map_insert(&hash_map, (hm_item *)new_item1); |
||||
* |
||||
* string_item *item1 = |
||||
* (string_item *)intrusive_hash_map_find(&hash_map, 10); |
||||
*/ |
||||
|
||||
/* Hash map item. Stores key and a pointer to the actual object. A user defined
|
||||
* version of this can be passed in provided the first 2 entries (key and |
||||
* hash_link) are the same. These entries must be first in the user defined |
||||
* struct. Pointer to struct will need to be cast as (hm_item *) when passed to |
||||
* hash map. This allows it to be intrusive. */ |
||||
typedef struct hm_item { |
||||
uint64_t key; |
||||
struct hm_item *hash_link; |
||||
/* Optional user defined data after this. */ |
||||
} hm_item; |
||||
|
||||
/* Macro provided for ease of use. This must be first in the user defined
|
||||
* struct (i.e. uint64_t key and hm_item * must be the first two elements in |
||||
* that order). */ |
||||
#define INTRUSIVE_HASH_MAP_HEADER \ |
||||
uint64_t IHM_key; \
|
||||
struct hm_item *IHM_hash_link |
||||
|
||||
/* Index struct which acts as a pseudo-iterator within the hash map. */ |
||||
typedef struct hm_index { |
||||
uint32_t bucket_index; // hash map bucket index.
|
||||
hm_item *item; // Pointer to hm_item within the hash map.
|
||||
} hm_index; |
||||
|
||||
/* Returns true if two hm_indices point to the same object within the hash map
|
||||
* and false otherwise. */ |
||||
__inline bool hm_index_compare(const hm_index *A, const hm_index *B) { |
||||
return (A->item == B->item && A->bucket_index == B->bucket_index); |
||||
} |
||||
|
||||
/*
|
||||
* Helper functions for iterating over the hash map. |
||||
*/ |
||||
|
||||
/* On return idx will contain an invalid index which is always equal to
|
||||
* hash_map->buckets.size_ */ |
||||
void intrusive_hash_map_end(const intrusive_hash_map *hash_map, hm_index *idx); |
||||
|
||||
/* Iterates index to the next valid entry in the hash map and stores the
|
||||
* index within idx. If end of table is reached, idx will contain the same |
||||
* values as if intrusive_hash_map_end() was called. */ |
||||
void intrusive_hash_map_next(const intrusive_hash_map *hash_map, hm_index *idx); |
||||
|
||||
/* On return, idx will contain the index of the first non-null entry in the hash
|
||||
* map. If the hash map is empty, idx will contain the same values as if |
||||
* intrusive_hash_map_end() was called. */ |
||||
void intrusive_hash_map_begin(const intrusive_hash_map *hash_map, |
||||
hm_index *idx); |
||||
|
||||
/* Initialize intrusive hash map data structure. This must be called before
|
||||
* the hash map can be used. The initial size of an intrusive hash map will be |
||||
* 2^initial_log2_map_size (valid range is [0, 31]). */ |
||||
void intrusive_hash_map_init(intrusive_hash_map *hash_map, |
||||
uint32_t initial_log2_map_size); |
||||
|
||||
/* Returns true if the hash map is empty and false otherwise. */ |
||||
bool intrusive_hash_map_empty(const intrusive_hash_map *hash_map); |
||||
|
||||
/* Returns the number of elements currently in the hash map. */ |
||||
size_t intrusive_hash_map_size(const intrusive_hash_map *hash_map); |
||||
|
||||
/* Find a hm_item within the hash map by key. Returns NULL if item was not
|
||||
* found. */ |
||||
hm_item *intrusive_hash_map_find(const intrusive_hash_map *hash_map, |
||||
uint64_t key); |
||||
|
||||
/* Erase the hm_item that corresponds with key. If the hm_item is found, return
|
||||
* the pointer to the hm_item. Else returns NULL. */ |
||||
hm_item *intrusive_hash_map_erase(intrusive_hash_map *hash_map, uint64_t key); |
||||
|
||||
/* Attempts to insert a new hm_item into the hash map. If an element with the
|
||||
* same key already exists, it will not insert the new item and return false. |
||||
* Otherwise, it will insert the new item and return true. */ |
||||
bool intrusive_hash_map_insert(intrusive_hash_map *hash_map, hm_item *item); |
||||
|
||||
/* Clears entire contents of the hash map, but leaves internal data structure
|
||||
* untouched. Second argument takes a function pointer to a function that will |
||||
* free the object designated by the user and pointed to by hash_map->value. */ |
||||
void intrusive_hash_map_clear(intrusive_hash_map *hash_map, |
||||
void (*free_object)(void *)); |
||||
|
||||
/* Erase all contents of hash map and free the memory. Hash map is invalid
|
||||
* after calling this function and cannot be used until it has been |
||||
* reinitialized (intrusive_hash_map_init()). This function takes a function |
||||
* pointer to a function that will free the object designated by the user and |
||||
* pointed to by hash_map->value. */ |
||||
void intrusive_hash_map_free(intrusive_hash_map *hash_map, |
||||
void (*free_object)(void *)); |
||||
|
||||
#endif /* GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_H */ |
@ -0,0 +1,63 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2017, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_INTERNAL_H |
||||
#define GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_INTERNAL_H |
||||
|
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/log.h> |
||||
#include <grpc/support/useful.h> |
||||
#include <stdbool.h> |
||||
|
||||
/* The chunked vector is a data structure that allocates buckets for use in the
|
||||
* hash map. ChunkedVector is logically equivalent to T*[N] (cast void* as |
||||
* T*). It's internally implemented as an array of 1MB arrays to avoid |
||||
* allocating large consecutive memory chunks. This is an internal data |
||||
* structure that should never be accessed directly. */ |
||||
typedef struct chunked_vector { |
||||
size_t size_; |
||||
void **first_; |
||||
void ***rest_; |
||||
} chunked_vector; |
||||
|
||||
/* Core intrusive hash map data structure. All internal elements are managed by
|
||||
* functions and should not be altered manually. */ |
||||
typedef struct intrusive_hash_map { |
||||
uint32_t num_items; |
||||
uint32_t extend_threshold; |
||||
uint32_t log2_num_buckets; |
||||
uint32_t hash_mask; |
||||
chunked_vector buckets; |
||||
} intrusive_hash_map; |
||||
|
||||
#endif /* GRPC_CORE_EXT_CENSUS_INTRUSIVE_HASH_MAP_INTERNAL_H */ |
@ -0,0 +1,7 @@ |
||||
root = true |
||||
[**] |
||||
end_of_line = LF |
||||
indent_style = space |
||||
indent_size = 4 |
||||
insert_final_newline = true |
||||
tab_width = 4 |
@ -1,7 +1,7 @@ |
||||
<!-- This file is generated --> |
||||
<Project> |
||||
<PropertyGroup> |
||||
<GrpcCsharpVersion>1.4.0-dev</GrpcCsharpVersion> |
||||
<GrpcCsharpVersion>1.5.0-dev</GrpcCsharpVersion> |
||||
<GoogleProtobufVersion>3.3.0</GoogleProtobufVersion> |
||||
</PropertyGroup> |
||||
</Project> |
||||
|
@ -0,0 +1,2 @@ |
||||
bin |
||||
obj |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue