couchbase 3.0.0-universal-darwin-19 → 3.0.1-universal-darwin-19
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/README.md +1 -1
- data/ext/CMakeLists.txt +86 -169
- data/ext/build_version.hxx.in +3 -2
- data/ext/cmake/Backtrace.cmake +35 -0
- data/ext/cmake/BuildTracing.cmake +6 -0
- data/ext/cmake/Cache.cmake +29 -0
- data/ext/cmake/CompilerWarnings.cmake +78 -0
- data/ext/cmake/PreventInSourceBuilds.cmake +18 -0
- data/ext/cmake/Sanitizers.cmake +66 -0
- data/ext/cmake/StandardProjectSettings.cmake +40 -0
- data/ext/cmake/StaticAnalyzers.cmake +37 -0
- data/ext/cmake/Testing.cmake +52 -0
- data/ext/cmake/ThirdPartyDependencies.cmake +20 -0
- data/ext/cmake/VersionInfo.cmake +37 -0
- data/ext/couchbase/bucket.hxx +37 -12
- data/ext/couchbase/capabilities.hxx +117 -0
- data/ext/couchbase/cbcrypto/cbcrypto.cc +15 -15
- data/ext/couchbase/cluster.hxx +34 -2
- data/ext/couchbase/cluster_options.hxx +1 -0
- data/ext/couchbase/configuration.hxx +228 -52
- data/ext/couchbase/couchbase.cxx +914 -35
- data/ext/couchbase/diagnostics.hxx +251 -0
- data/ext/couchbase/document_id.hxx +3 -1
- data/ext/couchbase/errors.hxx +10 -1
- data/ext/couchbase/io/http_command.hxx +11 -7
- data/ext/couchbase/io/http_context.hxx +37 -0
- data/ext/couchbase/io/http_message.hxx +9 -0
- data/ext/couchbase/io/http_parser.hxx +2 -0
- data/ext/couchbase/io/http_session.hxx +100 -14
- data/ext/couchbase/io/http_session_manager.hxx +65 -5
- data/ext/couchbase/io/mcbp_command.hxx +16 -7
- data/ext/couchbase/io/mcbp_session.hxx +193 -51
- data/ext/couchbase/io/query_cache.hxx +61 -0
- data/ext/couchbase/io/retry_context.hxx +1 -2
- data/ext/couchbase/io/retry_orchestrator.hxx +16 -0
- data/ext/couchbase/io/retry_strategy.hxx +1 -1
- data/ext/couchbase/io/streams.hxx +61 -10
- data/ext/couchbase/operations.hxx +13 -0
- data/ext/couchbase/operations/analytics_dataset_create.hxx +1 -1
- data/ext/couchbase/operations/analytics_dataset_drop.hxx +1 -1
- data/ext/couchbase/operations/analytics_dataset_get_all.hxx +1 -1
- data/ext/couchbase/operations/analytics_dataverse_create.hxx +1 -1
- data/ext/couchbase/operations/analytics_dataverse_drop.hxx +1 -1
- data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +1 -1
- data/ext/couchbase/operations/analytics_index_create.hxx +1 -1
- data/ext/couchbase/operations/analytics_index_drop.hxx +1 -1
- data/ext/couchbase/operations/analytics_index_get_all.hxx +1 -1
- data/ext/couchbase/operations/analytics_link_connect.hxx +1 -1
- data/ext/couchbase/operations/analytics_link_disconnect.hxx +1 -1
- data/ext/couchbase/operations/bucket_create.hxx +11 -5
- data/ext/couchbase/operations/bucket_drop.hxx +1 -1
- data/ext/couchbase/operations/bucket_flush.hxx +1 -1
- data/ext/couchbase/operations/bucket_get.hxx +1 -1
- data/ext/couchbase/operations/bucket_get_all.hxx +1 -1
- data/ext/couchbase/operations/bucket_settings.hxx +43 -4
- data/ext/couchbase/operations/bucket_update.hxx +11 -5
- data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +1 -1
- data/ext/couchbase/operations/collection_create.hxx +3 -1
- data/ext/couchbase/operations/collection_drop.hxx +1 -1
- data/ext/couchbase/operations/collections_manifest_get.hxx +70 -0
- data/ext/couchbase/operations/document_analytics.hxx +6 -1
- data/ext/couchbase/operations/document_get_projected.hxx +1 -1
- data/ext/couchbase/operations/document_query.hxx +85 -8
- data/ext/couchbase/operations/document_search.hxx +14 -4
- data/ext/couchbase/operations/document_view.hxx +1 -1
- data/ext/couchbase/operations/group_drop.hxx +71 -0
- data/ext/couchbase/operations/group_get.hxx +75 -0
- data/ext/couchbase/operations/group_get_all.hxx +70 -0
- data/ext/couchbase/operations/group_upsert.hxx +118 -0
- data/ext/couchbase/operations/query_index_build_deferred.hxx +1 -1
- data/ext/couchbase/operations/query_index_create.hxx +1 -1
- data/ext/couchbase/operations/query_index_drop.hxx +1 -1
- data/ext/couchbase/operations/query_index_get_all.hxx +3 -2
- data/ext/couchbase/operations/rbac.hxx +276 -0
- data/ext/couchbase/operations/role_get_all.hxx +70 -0
- data/ext/couchbase/operations/scope_create.hxx +6 -2
- data/ext/couchbase/operations/scope_drop.hxx +1 -1
- data/ext/couchbase/operations/scope_get_all.hxx +1 -1
- data/ext/couchbase/operations/search_get_stats.hxx +59 -0
- data/ext/couchbase/operations/search_index_analyze_document.hxx +1 -1
- data/ext/couchbase/operations/search_index_control_ingest.hxx +1 -1
- data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +1 -1
- data/ext/couchbase/operations/search_index_control_query.hxx +1 -1
- data/ext/couchbase/operations/search_index_drop.hxx +1 -1
- data/ext/couchbase/operations/search_index_get.hxx +1 -1
- data/ext/couchbase/operations/search_index_get_all.hxx +1 -1
- data/ext/couchbase/operations/search_index_get_documents_count.hxx +24 -16
- data/ext/couchbase/operations/search_index_get_stats.hxx +81 -0
- data/ext/couchbase/operations/search_index_upsert.hxx +1 -1
- data/ext/couchbase/operations/user_drop.hxx +72 -0
- data/ext/couchbase/operations/user_get.hxx +76 -0
- data/ext/couchbase/operations/user_get_all.hxx +71 -0
- data/ext/couchbase/operations/user_upsert.hxx +125 -0
- data/ext/couchbase/operations/view_index_drop.hxx +1 -1
- data/ext/couchbase/operations/view_index_get.hxx +1 -1
- data/ext/couchbase/operations/view_index_get_all.hxx +1 -1
- data/ext/couchbase/operations/view_index_upsert.hxx +1 -1
- data/ext/couchbase/origin.hxx +4 -4
- data/ext/couchbase/platform/terminate_handler.cc +5 -4
- data/ext/couchbase/protocol/client_opcode.hxx +38 -38
- data/ext/couchbase/protocol/client_response.hxx +2 -2
- data/ext/couchbase/protocol/cmd_cluster_map_change_notification.hxx +6 -3
- data/ext/couchbase/protocol/cmd_get_cluster_config.hxx +3 -1
- data/ext/couchbase/protocol/magic.hxx +6 -6
- data/ext/couchbase/protocol/server_opcode.hxx +2 -2
- data/ext/couchbase/protocol/status.hxx +57 -57
- data/ext/couchbase/service_type.hxx +1 -1
- data/ext/couchbase/utils/connection_string.hxx +12 -3
- data/ext/couchbase/version.hxx +1 -1
- data/ext/extconf.rb +21 -9
- data/ext/test/test_helper.hxx +141 -0
- data/ext/test/test_helper_native.hxx +59 -0
- data/ext/test/test_helper_ruby.hxx +72 -0
- data/ext/test/test_native_diagnostics.cxx +385 -0
- data/ext/test/test_native_trivial_crud.cxx +83 -0
- data/ext/test/test_ruby_trivial_crud.cxx +35 -0
- data/ext/test/test_ruby_trivial_query.cxx +34 -0
- data/ext/third_party/asio/asio/include/asio.hpp +35 -0
- data/ext/third_party/asio/asio/include/asio/any_io_executor.hpp +71 -0
- data/ext/third_party/asio/asio/include/asio/associated_allocator.hpp +1 -7
- data/ext/third_party/asio/asio/include/asio/associated_executor.hpp +36 -19
- data/ext/third_party/asio/asio/include/asio/async_result.hpp +1 -8
- data/ext/third_party/asio/asio/include/asio/awaitable.hpp +14 -4
- data/ext/third_party/asio/asio/include/asio/basic_datagram_socket.hpp +12 -7
- data/ext/third_party/asio/asio/include/asio/basic_deadline_timer.hpp +4 -4
- data/ext/third_party/asio/asio/include/asio/basic_raw_socket.hpp +11 -7
- data/ext/third_party/asio/asio/include/asio/basic_seq_packet_socket.hpp +9 -4
- data/ext/third_party/asio/asio/include/asio/basic_serial_port.hpp +6 -6
- data/ext/third_party/asio/asio/include/asio/basic_signal_set.hpp +4 -4
- data/ext/third_party/asio/asio/include/asio/basic_socket.hpp +5 -5
- data/ext/third_party/asio/asio/include/asio/basic_socket_acceptor.hpp +13 -7
- data/ext/third_party/asio/asio/include/asio/basic_stream_socket.hpp +7 -3
- data/ext/third_party/asio/asio/include/asio/basic_waitable_timer.hpp +52 -4
- data/ext/third_party/asio/asio/include/asio/bind_executor.hpp +10 -15
- data/ext/third_party/asio/asio/include/asio/buffer.hpp +6 -4
- data/ext/third_party/asio/asio/include/asio/co_spawn.hpp +380 -9
- data/ext/third_party/asio/asio/include/asio/defer.hpp +4 -1
- data/ext/third_party/asio/asio/include/asio/detached.hpp +50 -0
- data/ext/third_party/asio/asio/include/asio/detail/atomic_count.hpp +19 -0
- data/ext/third_party/asio/asio/include/asio/detail/bind_handler.hpp +144 -26
- data/ext/third_party/asio/asio/include/asio/detail/blocking_executor_op.hpp +107 -0
- data/ext/third_party/asio/asio/include/asio/detail/buffer_sequence_adapter.hpp +106 -0
- data/ext/third_party/asio/asio/include/asio/detail/bulk_executor_op.hpp +88 -0
- data/ext/third_party/asio/asio/include/asio/detail/completion_handler.hpp +10 -5
- data/ext/third_party/asio/asio/include/asio/detail/conditionally_enabled_event.hpp +8 -0
- data/ext/third_party/asio/asio/include/asio/detail/config.hpp +360 -37
- data/ext/third_party/asio/asio/include/asio/detail/deadline_timer_service.hpp +17 -2
- data/ext/third_party/asio/asio/include/asio/detail/descriptor_ops.hpp +24 -6
- data/ext/third_party/asio/asio/include/asio/detail/descriptor_read_op.hpp +32 -14
- data/ext/third_party/asio/asio/include/asio/detail/descriptor_write_op.hpp +32 -14
- data/ext/third_party/asio/asio/include/asio/detail/executor_function.hpp +133 -34
- data/ext/third_party/asio/asio/include/asio/detail/handler_alloc_helpers.hpp +42 -0
- data/ext/third_party/asio/asio/include/asio/detail/handler_invoke_helpers.hpp +23 -0
- data/ext/third_party/asio/asio/include/asio/detail/handler_tracking.hpp +26 -0
- data/ext/third_party/asio/asio/include/asio/detail/handler_work.hpp +370 -45
- data/ext/third_party/asio/asio/include/asio/detail/impl/descriptor_ops.ipp +208 -74
- data/ext/third_party/asio/asio/include/asio/detail/impl/handler_tracking.ipp +39 -1
- data/ext/third_party/asio/asio/include/asio/detail/impl/reactive_serial_port_service.ipp +12 -15
- data/ext/third_party/asio/asio/include/asio/detail/impl/scheduler.ipp +37 -0
- data/ext/third_party/asio/asio/include/asio/detail/impl/signal_set_service.ipp +2 -1
- data/ext/third_party/asio/asio/include/asio/detail/impl/socket_ops.ipp +661 -274
- data/ext/third_party/asio/asio/include/asio/detail/impl/strand_executor_service.hpp +210 -4
- data/ext/third_party/asio/asio/include/asio/detail/impl/strand_service.hpp +8 -9
- data/ext/third_party/asio/asio/include/asio/detail/impl/strand_service.ipp +5 -4
- data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_io_context.ipp +15 -6
- data/ext/third_party/asio/asio/include/asio/detail/io_object_impl.hpp +32 -50
- data/ext/third_party/asio/asio/include/asio/detail/memory.hpp +3 -0
- data/ext/third_party/asio/asio/include/asio/detail/null_event.hpp +6 -0
- data/ext/third_party/asio/asio/include/asio/detail/pop_options.hpp +1 -1
- data/ext/third_party/asio/asio/include/asio/detail/posix_event.hpp +13 -0
- data/ext/third_party/asio/asio/include/asio/detail/push_options.hpp +1 -1
- data/ext/third_party/asio/asio/include/asio/detail/reactive_descriptor_service.hpp +38 -13
- data/ext/third_party/asio/asio/include/asio/detail/reactive_null_buffers_op.hpp +12 -6
- data/ext/third_party/asio/asio/include/asio/detail/reactive_serial_port_service.hpp +2 -3
- data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_accept_op.hpp +36 -24
- data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_connect_op.hpp +17 -10
- data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recv_op.hpp +38 -16
- data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recvfrom_op.hpp +36 -14
- data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recvmsg_op.hpp +21 -11
- data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_send_op.hpp +43 -17
- data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_sendto_op.hpp +39 -17
- data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_service.hpp +44 -21
- data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_service_base.hpp +41 -18
- data/ext/third_party/asio/asio/include/asio/detail/reactive_wait_op.hpp +12 -6
- data/ext/third_party/asio/asio/include/asio/detail/reactor_op.hpp +3 -1
- data/ext/third_party/asio/asio/include/asio/detail/resolve_endpoint_op.hpp +10 -8
- data/ext/third_party/asio/asio/include/asio/detail/resolve_query_op.hpp +11 -9
- data/ext/third_party/asio/asio/include/asio/detail/scheduler.hpp +8 -0
- data/ext/third_party/asio/asio/include/asio/detail/signal_handler.hpp +7 -5
- data/ext/third_party/asio/asio/include/asio/detail/socket_ops.hpp +46 -0
- data/ext/third_party/asio/asio/include/asio/detail/source_location.hpp +45 -0
- data/ext/third_party/asio/asio/include/asio/detail/std_event.hpp +12 -0
- data/ext/third_party/asio/asio/include/asio/detail/strand_executor_service.hpp +25 -1
- data/ext/third_party/asio/asio/include/asio/detail/strand_service.hpp +4 -1
- data/ext/third_party/asio/asio/include/asio/detail/thread_info_base.hpp +58 -0
- data/ext/third_party/asio/asio/include/asio/detail/type_traits.hpp +59 -0
- data/ext/third_party/asio/asio/include/asio/detail/variadic_templates.hpp +144 -1
- data/ext/third_party/asio/asio/include/asio/detail/wait_handler.hpp +9 -6
- data/ext/third_party/asio/asio/include/asio/detail/win_event.hpp +13 -0
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_handle_read_op.hpp +9 -5
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_handle_write_op.hpp +9 -5
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_io_context.hpp +5 -1
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_null_buffers_op.hpp +10 -6
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_overlapped_op.hpp +9 -5
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_overlapped_ptr.hpp +18 -6
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_accept_op.hpp +15 -11
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_connect_op.hpp +10 -5
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recv_op.hpp +8 -4
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recvfrom_op.hpp +8 -4
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recvmsg_op.hpp +8 -4
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_send_op.hpp +8 -4
- data/ext/third_party/asio/asio/include/asio/detail/win_iocp_wait_op.hpp +10 -5
- data/ext/third_party/asio/asio/include/asio/detail/winrt_resolve_op.hpp +8 -4
- data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_connect_op.hpp +8 -4
- data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_recv_op.hpp +8 -4
- data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_send_op.hpp +8 -4
- data/ext/third_party/asio/asio/include/asio/detail/work_dispatcher.hpp +81 -6
- data/ext/third_party/asio/asio/include/asio/detail/wrapped_handler.hpp +45 -9
- data/ext/third_party/asio/asio/include/asio/dispatch.hpp +4 -1
- data/ext/third_party/asio/asio/include/asio/execution.hpp +48 -0
- data/ext/third_party/asio/asio/include/asio/execution/allocator.hpp +249 -0
- data/ext/third_party/asio/asio/include/asio/execution/any_executor.hpp +2264 -0
- data/ext/third_party/asio/asio/include/asio/execution/bad_executor.hpp +47 -0
- data/ext/third_party/asio/asio/include/asio/execution/blocking.hpp +1351 -0
- data/ext/third_party/asio/asio/include/asio/execution/blocking_adaptation.hpp +1064 -0
- data/ext/third_party/asio/asio/include/asio/execution/bulk_execute.hpp +390 -0
- data/ext/third_party/asio/asio/include/asio/execution/bulk_guarantee.hpp +1018 -0
- data/ext/third_party/asio/asio/include/asio/execution/connect.hpp +486 -0
- data/ext/third_party/asio/asio/include/asio/execution/context.hpp +185 -0
- data/ext/third_party/asio/asio/include/asio/execution/context_as.hpp +201 -0
- data/ext/third_party/asio/asio/include/asio/execution/detail/as_invocable.hpp +152 -0
- data/ext/third_party/asio/asio/include/asio/execution/detail/as_operation.hpp +105 -0
- data/ext/third_party/asio/asio/include/asio/execution/detail/as_receiver.hpp +128 -0
- data/ext/third_party/asio/asio/include/asio/execution/detail/bulk_sender.hpp +261 -0
- data/ext/third_party/asio/asio/include/asio/execution/detail/submit_receiver.hpp +233 -0
- data/ext/third_party/asio/asio/include/asio/execution/detail/void_receiver.hpp +90 -0
- data/ext/third_party/asio/asio/include/asio/execution/execute.hpp +264 -0
- data/ext/third_party/asio/asio/include/asio/execution/executor.hpp +238 -0
- data/ext/third_party/asio/asio/include/asio/execution/impl/bad_executor.ipp +40 -0
- data/ext/third_party/asio/asio/include/asio/execution/impl/receiver_invocation_error.ipp +36 -0
- data/ext/third_party/asio/asio/include/asio/execution/invocable_archetype.hpp +71 -0
- data/ext/third_party/asio/asio/include/asio/execution/mapping.hpp +917 -0
- data/ext/third_party/asio/asio/include/asio/execution/occupancy.hpp +178 -0
- data/ext/third_party/asio/asio/include/asio/execution/operation_state.hpp +94 -0
- data/ext/third_party/asio/asio/include/asio/execution/outstanding_work.hpp +721 -0
- data/ext/third_party/asio/asio/include/asio/execution/prefer_only.hpp +327 -0
- data/ext/third_party/asio/asio/include/asio/execution/receiver.hpp +280 -0
- data/ext/third_party/asio/asio/include/asio/execution/receiver_invocation_error.hpp +48 -0
- data/ext/third_party/asio/asio/include/asio/execution/relationship.hpp +720 -0
- data/ext/third_party/asio/asio/include/asio/execution/schedule.hpp +290 -0
- data/ext/third_party/asio/asio/include/asio/execution/scheduler.hpp +86 -0
- data/ext/third_party/asio/asio/include/asio/execution/sender.hpp +311 -0
- data/ext/third_party/asio/asio/include/asio/execution/set_done.hpp +253 -0
- data/ext/third_party/asio/asio/include/asio/execution/set_error.hpp +253 -0
- data/ext/third_party/asio/asio/include/asio/execution/set_value.hpp +486 -0
- data/ext/third_party/asio/asio/include/asio/execution/start.hpp +250 -0
- data/ext/third_party/asio/asio/include/asio/execution/submit.hpp +450 -0
- data/ext/third_party/asio/asio/include/asio/executor.hpp +7 -1
- data/ext/third_party/asio/asio/include/asio/executor_work_guard.hpp +126 -9
- data/ext/third_party/asio/asio/include/asio/handler_alloc_hook.hpp +28 -5
- data/ext/third_party/asio/asio/include/asio/handler_invoke_hook.hpp +29 -3
- data/ext/third_party/asio/asio/include/asio/impl/awaitable.hpp +14 -0
- data/ext/third_party/asio/asio/include/asio/impl/buffered_read_stream.hpp +44 -8
- data/ext/third_party/asio/asio/include/asio/impl/buffered_write_stream.hpp +44 -8
- data/ext/third_party/asio/asio/include/asio/impl/co_spawn.hpp +145 -7
- data/ext/third_party/asio/asio/include/asio/impl/compose.hpp +124 -22
- data/ext/third_party/asio/asio/include/asio/impl/connect.hpp +52 -8
- data/ext/third_party/asio/asio/include/asio/impl/defer.hpp +147 -12
- data/ext/third_party/asio/asio/include/asio/impl/dispatch.hpp +142 -12
- data/ext/third_party/asio/asio/include/asio/impl/executor.hpp +15 -101
- data/ext/third_party/asio/asio/include/asio/impl/executor.ipp +5 -0
- data/ext/third_party/asio/asio/include/asio/impl/handler_alloc_hook.ipp +13 -4
- data/ext/third_party/asio/asio/include/asio/impl/io_context.hpp +144 -57
- data/ext/third_party/asio/asio/include/asio/impl/multiple_exceptions.ipp +49 -0
- data/ext/third_party/asio/asio/include/asio/impl/post.hpp +147 -12
- data/ext/third_party/asio/asio/include/asio/impl/read.hpp +85 -18
- data/ext/third_party/asio/asio/include/asio/impl/read_at.hpp +59 -14
- data/ext/third_party/asio/asio/include/asio/impl/read_until.hpp +241 -56
- data/ext/third_party/asio/asio/include/asio/impl/redirect_error.hpp +22 -4
- data/ext/third_party/asio/asio/include/asio/impl/spawn.hpp +58 -22
- data/ext/third_party/asio/asio/include/asio/impl/src.hpp +3 -0
- data/ext/third_party/asio/asio/include/asio/impl/system_context.ipp +16 -4
- data/ext/third_party/asio/asio/include/asio/impl/system_executor.hpp +113 -12
- data/ext/third_party/asio/asio/include/asio/impl/thread_pool.hpp +260 -37
- data/ext/third_party/asio/asio/include/asio/impl/thread_pool.ipp +61 -7
- data/ext/third_party/asio/asio/include/asio/impl/use_awaitable.hpp +5 -2
- data/ext/third_party/asio/asio/include/asio/impl/use_future.hpp +147 -6
- data/ext/third_party/asio/asio/include/asio/impl/write.hpp +75 -14
- data/ext/third_party/asio/asio/include/asio/impl/write_at.hpp +53 -11
- data/ext/third_party/asio/asio/include/asio/io_context.hpp +706 -48
- data/ext/third_party/asio/asio/include/asio/io_context_strand.hpp +3 -1
- data/ext/third_party/asio/asio/include/asio/ip/basic_resolver.hpp +4 -4
- data/ext/third_party/asio/asio/include/asio/is_applicable_property.hpp +61 -0
- data/ext/third_party/asio/asio/include/asio/multiple_exceptions.hpp +58 -0
- data/ext/third_party/asio/asio/include/asio/posix/basic_descriptor.hpp +4 -4
- data/ext/third_party/asio/asio/include/asio/posix/basic_stream_descriptor.hpp +5 -5
- data/ext/third_party/asio/asio/include/asio/post.hpp +4 -1
- data/ext/third_party/asio/asio/include/asio/prefer.hpp +656 -0
- data/ext/third_party/asio/asio/include/asio/query.hpp +296 -0
- data/ext/third_party/asio/asio/include/asio/read_until.hpp +6 -6
- data/ext/third_party/asio/asio/include/asio/require.hpp +524 -0
- data/ext/third_party/asio/asio/include/asio/require_concept.hpp +310 -0
- data/ext/third_party/asio/asio/include/asio/spawn.hpp +12 -4
- data/ext/third_party/asio/asio/include/asio/ssl/detail/buffered_handshake_op.hpp +5 -0
- data/ext/third_party/asio/asio/include/asio/ssl/detail/engine.hpp +5 -0
- data/ext/third_party/asio/asio/include/asio/ssl/detail/handshake_op.hpp +5 -0
- data/ext/third_party/asio/asio/include/asio/ssl/detail/impl/engine.ipp +16 -3
- data/ext/third_party/asio/asio/include/asio/ssl/detail/io.hpp +38 -4
- data/ext/third_party/asio/asio/include/asio/ssl/detail/read_op.hpp +5 -0
- data/ext/third_party/asio/asio/include/asio/ssl/detail/shutdown_op.hpp +5 -0
- data/ext/third_party/asio/asio/include/asio/ssl/detail/stream_core.hpp +36 -2
- data/ext/third_party/asio/asio/include/asio/ssl/detail/write_op.hpp +10 -1
- data/ext/third_party/asio/asio/include/asio/ssl/stream.hpp +15 -0
- data/ext/third_party/asio/asio/include/asio/static_thread_pool.hpp +31 -0
- data/ext/third_party/asio/asio/include/asio/strand.hpp +232 -9
- data/ext/third_party/asio/asio/include/asio/system_context.hpp +12 -3
- data/ext/third_party/asio/asio/include/asio/system_executor.hpp +557 -24
- data/ext/third_party/asio/asio/include/asio/thread_pool.hpp +913 -37
- data/ext/third_party/asio/asio/include/asio/traits/bulk_execute_free.hpp +114 -0
- data/ext/third_party/asio/asio/include/asio/traits/bulk_execute_member.hpp +114 -0
- data/ext/third_party/asio/asio/include/asio/traits/connect_free.hpp +112 -0
- data/ext/third_party/asio/asio/include/asio/traits/connect_member.hpp +112 -0
- data/ext/third_party/asio/asio/include/asio/traits/equality_comparable.hpp +100 -0
- data/ext/third_party/asio/asio/include/asio/traits/execute_free.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/execute_member.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/prefer_free.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/prefer_member.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/query_free.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/query_member.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/query_static_constexpr_member.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/require_concept_free.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/require_concept_member.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/require_free.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/require_member.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/schedule_free.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/schedule_member.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/set_done_free.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/set_done_member.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/set_error_free.hpp +112 -0
- data/ext/third_party/asio/asio/include/asio/traits/set_error_member.hpp +112 -0
- data/ext/third_party/asio/asio/include/asio/traits/set_value_free.hpp +234 -0
- data/ext/third_party/asio/asio/include/asio/traits/set_value_member.hpp +234 -0
- data/ext/third_party/asio/asio/include/asio/traits/start_free.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/start_member.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/static_query.hpp +108 -0
- data/ext/third_party/asio/asio/include/asio/traits/static_require.hpp +123 -0
- data/ext/third_party/asio/asio/include/asio/traits/static_require_concept.hpp +123 -0
- data/ext/third_party/asio/asio/include/asio/traits/submit_free.hpp +112 -0
- data/ext/third_party/asio/asio/include/asio/traits/submit_member.hpp +112 -0
- data/ext/third_party/asio/asio/include/asio/ts/executor.hpp +1 -0
- data/ext/third_party/asio/asio/include/asio/ts/netfwd.hpp +67 -8
- data/ext/third_party/asio/asio/include/asio/use_awaitable.hpp +63 -4
- data/ext/third_party/asio/asio/include/asio/version.hpp +1 -1
- data/ext/third_party/asio/asio/include/asio/windows/basic_object_handle.hpp +4 -4
- data/ext/third_party/asio/asio/include/asio/windows/basic_overlapped_handle.hpp +2 -2
- data/ext/third_party/asio/asio/include/asio/windows/basic_random_access_handle.hpp +5 -5
- data/ext/third_party/asio/asio/include/asio/windows/basic_stream_handle.hpp +5 -5
- data/ext/third_party/asio/asio/include/asio/windows/overlapped_ptr.hpp +4 -2
- data/ext/third_party/gsl/CMakeLists.txt +13 -5
- data/ext/third_party/gsl/include/gsl/gsl_assert +1 -1
- data/ext/third_party/gsl/include/gsl/gsl_byte +3 -3
- data/ext/third_party/gsl/include/gsl/gsl_narrow +52 -0
- data/ext/third_party/gsl/include/gsl/gsl_util +8 -50
- data/ext/third_party/gsl/include/gsl/multi_span +0 -10
- data/ext/third_party/gsl/include/gsl/pointers +14 -28
- data/ext/third_party/gsl/include/gsl/span +98 -46
- data/ext/third_party/gsl/include/gsl/string_span +37 -47
- data/ext/third_party/http_parser/http_parser.c +17 -10
- data/ext/third_party/http_parser/http_parser.h +4 -2
- data/ext/third_party/json/include/tao/json/basic_value.hpp +3 -2
- data/ext/third_party/json/include/tao/json/binary.hpp +4 -4
- data/ext/third_party/json/include/tao/json/binary_view.hpp +2 -2
- data/ext/third_party/json/include/tao/json/binding.hpp +2 -2
- data/ext/third_party/json/include/tao/json/binding/factory.hpp +8 -7
- data/ext/third_party/json/include/tao/json/binding/internal/array.hpp +2 -1
- data/ext/third_party/json/include/tao/json/binding/internal/object.hpp +6 -5
- data/ext/third_party/json/include/tao/json/binding/versions.hpp +3 -1
- data/ext/third_party/json/include/tao/json/cbor.hpp +1 -0
- data/ext/third_party/json/include/tao/json/cbor/consume_file.hpp +7 -7
- data/ext/third_party/json/include/tao/json/cbor/events/from_binary.hpp +43 -0
- data/ext/third_party/json/include/tao/json/cbor/events/from_file.hpp +4 -4
- data/ext/third_party/json/include/tao/json/cbor/events/from_string.hpp +3 -3
- data/ext/third_party/json/include/tao/json/cbor/from_binary.hpp +32 -0
- data/ext/third_party/json/include/tao/json/cbor/from_file.hpp +5 -5
- data/ext/third_party/json/include/tao/json/cbor/internal/grammar.hpp +2 -1
- data/ext/third_party/json/include/tao/json/consume_file.hpp +7 -7
- data/ext/third_party/json/include/tao/json/contrib/internal/indirect_traits.hpp +13 -6
- data/ext/third_party/json/include/tao/json/contrib/position.hpp +15 -15
- data/ext/third_party/json/include/tao/json/contrib/reference.hpp +5 -7
- data/ext/third_party/json/include/tao/json/contrib/schema.hpp +58 -35
- data/ext/third_party/json/include/tao/json/contrib/shared_ptr_traits.hpp +12 -4
- data/ext/third_party/json/include/tao/json/contrib/unique_ptr_traits.hpp +12 -4
- data/ext/third_party/json/include/tao/json/contrib/unordered_map_traits.hpp +1 -1
- data/ext/third_party/json/include/tao/json/contrib/unordered_set_traits.hpp +2 -2
- data/ext/third_party/json/include/tao/json/events/compare.hpp +2 -12
- data/ext/third_party/json/include/tao/json/events/from_file.hpp +4 -4
- data/ext/third_party/json/include/tao/json/events/from_string.hpp +2 -2
- data/ext/third_party/json/include/tao/json/events/invalid_string_to_binary.hpp +1 -1
- data/ext/third_party/json/include/tao/json/events/key_camel_case_to_snake_case.hpp +3 -3
- data/ext/third_party/json/include/tao/json/events/key_snake_case_to_camel_case.hpp +1 -1
- data/ext/third_party/json/include/tao/json/events/tee.hpp +2 -2
- data/ext/third_party/json/include/tao/json/events/to_pretty_stream.hpp +1 -1
- data/ext/third_party/json/include/tao/json/events/to_stream.hpp +1 -1
- data/ext/third_party/json/include/tao/json/events/transformer.hpp +3 -3
- data/ext/third_party/json/include/tao/json/events/validate_event_order.hpp +3 -3
- data/ext/third_party/json/include/tao/json/events/virtual_ref.hpp +6 -0
- data/ext/third_party/json/include/tao/json/external/pegtl.hpp +4 -13
- data/ext/third_party/json/include/tao/json/external/pegtl/argv_input.hpp +3 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/ascii.hpp +5 -18
- data/ext/third_party/json/include/tao/json/external/pegtl/buffer_input.hpp +3 -3
- data/ext/third_party/json/include/tao/json/external/pegtl/change_action.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/change_action_and_state.hpp +6 -6
- data/ext/third_party/json/include/tao/json/external/pegtl/change_action_and_states.hpp +5 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/change_control.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/change_state.hpp +6 -6
- data/ext/third_party/json/include/tao/json/external/pegtl/change_states.hpp +5 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/alphabet.hpp +52 -52
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/analyze.hpp +176 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/analyze_traits.hpp +275 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/control_action.hpp +77 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/coverage.hpp +151 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/forward.hpp +16 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/http.hpp +37 -18
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/internal.hpp +20 -22
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf16.hpp +6 -10
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf32.hpp +6 -10
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf8.hpp +2 -4
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/if_then.hpp +11 -10
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/integer.hpp +116 -131
- data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/endian.hpp +4 -4
- data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/endian_gcc.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/endian_win.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_mask_uint.hpp +9 -9
- data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_mask_uint8.hpp +9 -10
- data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_uint.hpp +9 -9
- data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_uint8.hpp +9 -10
- data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_utf16.hpp +10 -10
- data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_utf32.hpp +9 -9
- data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/read_uint.hpp +3 -3
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/set_stack_guard.hpp +52 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/parse_tree.hpp +80 -201
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/parse_tree_to_dot.hpp +11 -10
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/print.hpp +75 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/print_coverage.hpp +53 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/raw_string.hpp +45 -36
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/remove_first_state.hpp +33 -50
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/remove_last_states.hpp +117 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/rep_one_min_max.hpp +43 -11
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/rep_string.hpp +1 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/shuffle_states.hpp +193 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/state_control.hpp +118 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/trace.hpp +227 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/{uint16.hpp → contrib/uint16.hpp} +5 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/{uint32.hpp → contrib/uint32.hpp} +5 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/{uint64.hpp → contrib/uint64.hpp} +5 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/{uint8.hpp → contrib/uint8.hpp} +5 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/unescape.hpp +14 -14
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/uri.hpp +1 -1
- data/ext/third_party/json/include/tao/json/external/pegtl/{utf16.hpp → contrib/utf16.hpp} +5 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/{utf32.hpp → contrib/utf32.hpp} +5 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/cstream_input.hpp +2 -3
- data/ext/third_party/json/include/tao/json/external/pegtl/{internal/demangle.hpp → demangle.hpp} +12 -14
- data/ext/third_party/json/include/tao/json/external/pegtl/disable_action.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/discard_input.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/discard_input_on_failure.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/discard_input_on_success.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/enable_action.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/file_input.hpp +1 -1
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/action.hpp +19 -9
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/action_input.hpp +7 -8
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/any.hpp +14 -14
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply.hpp +9 -9
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply0.hpp +8 -7
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply_single.hpp +4 -4
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/at.hpp +17 -15
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/bof.hpp +7 -6
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/bol.hpp +8 -8
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/bump.hpp +4 -4
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/bump_help.hpp +3 -3
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/bytes.hpp +17 -10
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/control.hpp +19 -9
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/cr_crlf_eol.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/cr_eol.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/crlf_eol.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/cstream_reader.hpp +1 -1
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/{always_false.hpp → dependent_false.hpp} +3 -8
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/disable.hpp +19 -9
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/discard.hpp +7 -6
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/enable.hpp +19 -9
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/{skip_control.hpp → enable_control.hpp} +5 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/eof.hpp +7 -6
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/eol.hpp +8 -7
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/eolf.hpp +8 -7
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/failure.hpp +32 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_mapper_posix.hpp +61 -10
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_mapper_win32.hpp +27 -33
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_reader.hpp +29 -26
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_apply.hpp +3 -7
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_apply0.hpp +3 -7
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_match.hpp +4 -20
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_unwind.hpp +21 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_apply.hpp +8 -7
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_must.hpp +8 -9
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_must_else.hpp +2 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_then_else.hpp +7 -7
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/istream_reader.hpp +1 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/istring.hpp +11 -11
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/iterator.hpp +7 -10
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/lf_crlf_eol.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/lf_eol.hpp +2 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/list_tail.hpp +4 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/list_tail_pad.hpp +1 -1
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/marker.hpp +3 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/minus.hpp +21 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/missing_apply.hpp +5 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/missing_apply0.hpp +5 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/must.hpp +16 -24
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/not_at.hpp +17 -15
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/one.hpp +23 -12
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/opt.hpp +16 -16
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/path_to_string.hpp +26 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_char.hpp +5 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_utf8.hpp +12 -13
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/plus.hpp +18 -11
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/raise.hpp +8 -17
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/range.hpp +22 -17
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/ranges.hpp +28 -18
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/rematch.hpp +12 -9
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep.hpp +26 -25
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep_min_max.hpp +23 -21
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep_opt.hpp +24 -9
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/require.hpp +10 -10
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/rules.hpp +4 -4
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/seq.hpp +18 -33
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/sor.hpp +24 -17
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/star.hpp +13 -8
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/state.hpp +21 -11
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/string.hpp +11 -11
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/success.hpp +32 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/try_catch_type.hpp +16 -16
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/until.hpp +18 -14
- data/ext/third_party/json/include/tao/json/external/pegtl/istream_input.hpp +2 -3
- data/ext/third_party/json/include/tao/json/external/pegtl/match.hpp +125 -29
- data/ext/third_party/json/include/tao/json/external/pegtl/memory_input.hpp +32 -48
- data/ext/third_party/json/include/tao/json/external/pegtl/mmap_input.hpp +16 -16
- data/ext/third_party/json/include/tao/json/external/pegtl/must_if.hpp +64 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/normal.hpp +25 -25
- data/ext/third_party/json/include/tao/json/external/pegtl/nothing.hpp +1 -2
- data/ext/third_party/json/include/tao/json/external/pegtl/parse.hpp +6 -8
- data/ext/third_party/json/include/tao/json/external/pegtl/parse_error.hpp +80 -35
- data/ext/third_party/json/include/tao/json/external/pegtl/position.hpp +18 -10
- data/ext/third_party/json/include/tao/json/external/pegtl/read_input.hpp +18 -38
- data/ext/third_party/json/include/tao/json/external/pegtl/rules.hpp +6 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/string_input.hpp +3 -5
- data/ext/third_party/json/include/tao/json/external/pegtl/type_list.hpp +46 -0
- data/ext/third_party/json/include/tao/json/external/pegtl/visit.hpp +66 -0
- data/ext/third_party/json/include/tao/json/from_file.hpp +5 -5
- data/ext/third_party/json/include/tao/json/internal/action.hpp +3 -3
- data/ext/third_party/json/include/tao/json/internal/dependent_false.hpp +14 -0
- data/ext/third_party/json/include/tao/json/internal/errors.hpp +17 -17
- data/ext/third_party/json/include/tao/json/internal/format.hpp +0 -2
- data/ext/third_party/json/include/tao/json/internal/grammar.hpp +17 -17
- data/ext/third_party/json/include/tao/json/internal/pair.hpp +1 -1
- data/ext/third_party/json/include/tao/json/internal/sha256.hpp +8 -8
- data/ext/third_party/json/include/tao/json/internal/single.hpp +1 -1
- data/ext/third_party/json/include/tao/json/internal/type_traits.hpp +12 -29
- data/ext/third_party/json/include/tao/json/jaxn/consume_file.hpp +7 -7
- data/ext/third_party/json/include/tao/json/jaxn/events/from_file.hpp +4 -4
- data/ext/third_party/json/include/tao/json/jaxn/events/from_string.hpp +2 -2
- data/ext/third_party/json/include/tao/json/jaxn/from_file.hpp +5 -5
- data/ext/third_party/json/include/tao/json/jaxn/internal/action.hpp +6 -6
- data/ext/third_party/json/include/tao/json/jaxn/internal/bunescape_action.hpp +2 -2
- data/ext/third_party/json/include/tao/json/jaxn/internal/errors.hpp +43 -43
- data/ext/third_party/json/include/tao/json/jaxn/internal/grammar.hpp +36 -36
- data/ext/third_party/json/include/tao/json/jaxn/internal/integer.hpp +10 -11
- data/ext/third_party/json/include/tao/json/jaxn/is_identifier.hpp +2 -2
- data/ext/third_party/json/include/tao/json/jaxn/parts_parser.hpp +1 -3
- data/ext/third_party/json/include/tao/json/message_extension.hpp +2 -2
- data/ext/third_party/json/include/tao/json/msgpack.hpp +1 -0
- data/ext/third_party/json/include/tao/json/msgpack/consume_file.hpp +7 -7
- data/ext/third_party/json/include/tao/json/msgpack/events/from_binary.hpp +43 -0
- data/ext/third_party/json/include/tao/json/msgpack/events/from_file.hpp +4 -4
- data/ext/third_party/json/include/tao/json/msgpack/events/from_string.hpp +4 -4
- data/ext/third_party/json/include/tao/json/msgpack/events/to_stream.hpp +4 -4
- data/ext/third_party/json/include/tao/json/msgpack/from_binary.hpp +32 -0
- data/ext/third_party/json/include/tao/json/msgpack/from_file.hpp +5 -5
- data/ext/third_party/json/include/tao/json/msgpack/internal/grammar.hpp +2 -1
- data/ext/third_party/json/include/tao/json/operators.hpp +0 -4
- data/ext/third_party/json/include/tao/json/parts_parser.hpp +3 -7
- data/ext/third_party/json/include/tao/json/self_contained.hpp +6 -18
- data/ext/third_party/json/include/tao/json/span.hpp +94 -166
- data/ext/third_party/json/include/tao/json/ubjson.hpp +1 -0
- data/ext/third_party/json/include/tao/json/ubjson/consume_file.hpp +7 -7
- data/ext/third_party/json/include/tao/json/ubjson/events/from_binary.hpp +43 -0
- data/ext/third_party/json/include/tao/json/ubjson/events/from_file.hpp +4 -4
- data/ext/third_party/json/include/tao/json/ubjson/events/from_string.hpp +3 -3
- data/ext/third_party/json/include/tao/json/ubjson/from_binary.hpp +32 -0
- data/ext/third_party/json/include/tao/json/ubjson/from_file.hpp +5 -5
- data/ext/third_party/json/include/tao/json/ubjson/internal/grammar.hpp +5 -3
- data/ext/third_party/json/include/tao/json/utf8.hpp +1 -1
- data/ext/third_party/snappy/snappy.cc +6 -2
- data/ext/third_party/spdlog/CMakeLists.txt +24 -57
- data/ext/third_party/spdlog/cmake/version.rc.in +1 -1
- data/ext/third_party/spdlog/include/spdlog/async.h +3 -3
- data/ext/third_party/spdlog/include/spdlog/cfg/argv.h +3 -4
- data/ext/third_party/spdlog/include/spdlog/cfg/env.h +6 -4
- data/ext/third_party/spdlog/include/spdlog/cfg/helpers-inl.h +22 -6
- data/ext/third_party/spdlog/include/spdlog/cfg/helpers.h +3 -2
- data/ext/third_party/spdlog/include/spdlog/common.h +1 -2
- data/ext/third_party/spdlog/include/spdlog/details/fmt_helper.h +9 -1
- data/ext/third_party/spdlog/include/spdlog/details/os.h +1 -1
- data/ext/third_party/spdlog/include/spdlog/details/registry-inl.h +21 -7
- data/ext/third_party/spdlog/include/spdlog/details/registry.h +6 -3
- data/ext/third_party/spdlog/include/spdlog/details/synchronous_factory.h +1 -1
- data/ext/third_party/spdlog/include/spdlog/details/tcp_client-windows.h +1 -1
- data/ext/third_party/spdlog/include/spdlog/details/tcp_client.h +8 -7
- data/ext/third_party/spdlog/include/spdlog/fmt/bin_to_hex.h +2 -2
- data/ext/third_party/spdlog/include/spdlog/fmt/bundled/chrono.h +66 -62
- data/ext/third_party/spdlog/include/spdlog/fmt/bundled/color.h +35 -37
- data/ext/third_party/spdlog/include/spdlog/fmt/bundled/compile.h +173 -103
- data/ext/third_party/spdlog/include/spdlog/fmt/bundled/core.h +538 -445
- data/ext/third_party/spdlog/include/spdlog/fmt/bundled/format-inl.h +114 -64
- data/ext/third_party/spdlog/include/spdlog/fmt/bundled/format.h +1152 -1071
- data/ext/third_party/spdlog/include/spdlog/fmt/bundled/locale.h +16 -16
- data/ext/third_party/spdlog/include/spdlog/fmt/bundled/os.h +450 -0
- data/ext/third_party/spdlog/include/spdlog/fmt/bundled/ostream.h +37 -13
- data/ext/third_party/spdlog/include/spdlog/fmt/bundled/posix.h +1 -1
- data/ext/third_party/spdlog/include/spdlog/fmt/bundled/printf.h +93 -63
- data/ext/third_party/spdlog/include/spdlog/fmt/bundled/ranges.h +35 -36
- data/ext/third_party/spdlog/include/spdlog/fmt/chrono.h +20 -0
- data/ext/third_party/spdlog/include/spdlog/fmt/fmt.h +2 -0
- data/ext/third_party/spdlog/include/spdlog/logger-inl.h +5 -1
- data/ext/third_party/spdlog/include/spdlog/logger.h +50 -76
- data/ext/third_party/spdlog/include/spdlog/pattern_formatter-inl.h +23 -8
- data/ext/third_party/spdlog/include/spdlog/pattern_formatter.h +3 -3
- data/ext/third_party/spdlog/include/spdlog/sinks/daily_file_sink.h +1 -1
- data/ext/third_party/spdlog/include/spdlog/sinks/msvc_sink.h +5 -5
- data/ext/third_party/spdlog/include/spdlog/sinks/ringbuffer_sink.h +6 -4
- data/ext/third_party/spdlog/include/spdlog/sinks/stdout_sinks-inl.h +32 -3
- data/ext/third_party/spdlog/include/spdlog/sinks/stdout_sinks.h +7 -0
- data/ext/third_party/spdlog/include/spdlog/sinks/wincolor_sink-inl.h +4 -14
- data/ext/third_party/spdlog/include/spdlog/spdlog-inl.h +11 -1
- data/ext/third_party/spdlog/include/spdlog/spdlog.h +23 -68
- data/ext/third_party/spdlog/include/spdlog/stopwatch.h +61 -0
- data/ext/third_party/spdlog/include/spdlog/version.h +2 -2
- data/ext/third_party/spdlog/src/fmt.cpp +21 -147
- data/lib/couchbase/cluster.rb +111 -1
- data/lib/couchbase/collection_options.rb +18 -1
- data/lib/couchbase/errors.rb +3 -0
- data/lib/couchbase/libcouchbase.bundle +0 -0
- data/lib/couchbase/management/bucket_manager.rb +36 -3
- data/lib/couchbase/management/search_index_manager.rb +42 -1
- data/lib/couchbase/management/user_manager.rb +155 -48
- data/lib/couchbase/query_options.rb +7 -0
- data/lib/couchbase/scope.rb +1 -0
- data/lib/couchbase/search_options.rb +69 -1
- data/lib/couchbase/version.rb +1 -1
- metadata +171 -267
- data/.rubocop.yml +0 -227
- data/.rubocop_todo.yml +0 -47
- data/.yardopts +0 -1
- data/CONTRIBUTING.md +0 -110
- data/Gemfile +0 -37
- data/Rakefile +0 -51
- data/couchbase.gemspec +0 -79
- data/examples/analytics.rb +0 -236
- data/examples/auth.rb +0 -33
- data/examples/crud.rb +0 -34
- data/examples/managing_analytics_indexes.rb +0 -86
- data/examples/managing_buckets.rb +0 -61
- data/examples/managing_collections.rb +0 -71
- data/examples/managing_query_indexes.rb +0 -83
- data/examples/managing_search_indexes.rb +0 -77
- data/examples/managing_view_indexes.rb +0 -68
- data/examples/query.rb +0 -32
- data/examples/query_with_consistency.rb +0 -86
- data/examples/search.rb +0 -202
- data/examples/search_with_consistency.rb +0 -97
- data/examples/subdocument.rb +0 -63
- data/examples/view.rb +0 -59
- data/ext/.clang-format +0 -15
- data/ext/.clang-tidy +0 -22
- data/ext/.cmake-format.yaml +0 -8
- data/ext/.gitignore +0 -2
- data/ext/.idea/.name +0 -1
- data/ext/.idea/dictionaries/couchbase_terms.xml +0 -14
- data/ext/.idea/ext.iml +0 -2
- data/ext/.idea/misc.xml +0 -16
- data/ext/.idea/modules.xml +0 -8
- data/ext/.idea/vcs.xml +0 -12
- data/ext/test/main.cxx +0 -184
- data/ext/third_party/asio/.appveyor.yml +0 -107
- data/ext/third_party/asio/.cirrus.yml +0 -16
- data/ext/third_party/asio/.gitignore +0 -3
- data/ext/third_party/asio/.travis.yml +0 -323
- data/ext/third_party/asio/asio/.gitignore +0 -23
- data/ext/third_party/asio/asio/COPYING +0 -4
- data/ext/third_party/asio/asio/INSTALL +0 -5
- data/ext/third_party/asio/asio/LICENSE_1_0.txt +0 -23
- data/ext/third_party/asio/asio/Makefile.am +0 -19
- data/ext/third_party/asio/asio/README +0 -4
- data/ext/third_party/asio/asio/asio.manifest +0 -4865
- data/ext/third_party/asio/asio/autogen.sh +0 -55
- data/ext/third_party/asio/asio/boost_asio.manifest +0 -5193
- data/ext/third_party/asio/asio/boostify.pl +0 -603
- data/ext/third_party/asio/asio/configure.ac +0 -182
- data/ext/third_party/asio/asio/include/.gitignore +0 -2
- data/ext/third_party/asio/asio/include/Makefile.am +0 -484
- data/ext/third_party/asio/asio/include/asio/detail/io_object_executor.hpp +0 -167
- data/ext/third_party/asio/asio/include/asio/impl/src.cpp +0 -25
- data/ext/third_party/asio/asio/release.pl +0 -440
- data/ext/third_party/asio/asio/src/.gitignore +0 -11
- data/ext/third_party/asio/asio/src/Makefile.am +0 -23
- data/ext/third_party/asio/asio/src/Makefile.mgw +0 -204
- data/ext/third_party/asio/asio/src/Makefile.msc +0 -497
- data/ext/third_party/asio/asio/src/asio.cpp +0 -11
- data/ext/third_party/asio/asio/src/asio_ssl.cpp +0 -11
- data/ext/third_party/asio/asio/src/doc/.gitignore +0 -5
- data/ext/third_party/asio/asio/src/doc/Jamfile.v2 +0 -62
- data/ext/third_party/asio/asio/src/doc/asio.png +0 -0
- data/ext/third_party/asio/asio/src/doc/asio.qbk +0 -127
- data/ext/third_party/asio/asio/src/doc/asioref.sty +0 -90
- data/ext/third_party/asio/asio/src/doc/asioref.xsl +0 -94
- data/ext/third_party/asio/asio/src/doc/boost_bind_dox.txt +0 -5
- data/ext/third_party/asio/asio/src/doc/doxy2qbk.pl +0 -22
- data/ext/third_party/asio/asio/src/doc/examples.qbk +0 -564
- data/ext/third_party/asio/asio/src/doc/history.qbk +0 -1794
- data/ext/third_party/asio/asio/src/doc/index.xml +0 -13
- data/ext/third_party/asio/asio/src/doc/makepdf.pl +0 -26
- data/ext/third_party/asio/asio/src/doc/net_ts.qbk +0 -479
- data/ext/third_party/asio/asio/src/doc/noncopyable_dox.txt +0 -3
- data/ext/third_party/asio/asio/src/doc/overview.qbk +0 -103
- data/ext/third_party/asio/asio/src/doc/overview/allocation.qbk +0 -89
- data/ext/third_party/asio/asio/src/doc/overview/async.qbk +0 -185
- data/ext/third_party/asio/asio/src/doc/overview/async_op1.dot +0 -78
- data/ext/third_party/asio/asio/src/doc/overview/async_op1.png +0 -0
- data/ext/third_party/asio/asio/src/doc/overview/async_op2.dot +0 -78
- data/ext/third_party/asio/asio/src/doc/overview/async_op2.png +0 -0
- data/ext/third_party/asio/asio/src/doc/overview/basics.qbk +0 -106
- data/ext/third_party/asio/asio/src/doc/overview/bsd_sockets.qbk +0 -270
- data/ext/third_party/asio/asio/src/doc/overview/buffers.qbk +0 -163
- data/ext/third_party/asio/asio/src/doc/overview/concurrency_hint.qbk +0 -88
- data/ext/third_party/asio/asio/src/doc/overview/coroutine.qbk +0 -51
- data/ext/third_party/asio/asio/src/doc/overview/coroutines_ts.qbk +0 -97
- data/ext/third_party/asio/asio/src/doc/overview/cpp2011.qbk +0 -271
- data/ext/third_party/asio/asio/src/doc/overview/handler_tracking.qbk +0 -220
- data/ext/third_party/asio/asio/src/doc/overview/implementation.qbk +0 -305
- data/ext/third_party/asio/asio/src/doc/overview/iostreams.qbk +0 -72
- data/ext/third_party/asio/asio/src/doc/overview/line_based.qbk +0 -118
- data/ext/third_party/asio/asio/src/doc/overview/other_protocols.qbk +0 -94
- data/ext/third_party/asio/asio/src/doc/overview/posix.qbk +0 -152
- data/ext/third_party/asio/asio/src/doc/overview/proactor.dot +0 -100
- data/ext/third_party/asio/asio/src/doc/overview/proactor.png +0 -0
- data/ext/third_party/asio/asio/src/doc/overview/protocols.qbk +0 -149
- data/ext/third_party/asio/asio/src/doc/overview/rationale.qbk +0 -54
- data/ext/third_party/asio/asio/src/doc/overview/reactor.qbk +0 -44
- data/ext/third_party/asio/asio/src/doc/overview/serial_ports.qbk +0 -45
- data/ext/third_party/asio/asio/src/doc/overview/signals.qbk +0 -44
- data/ext/third_party/asio/asio/src/doc/overview/spawn.qbk +0 -102
- data/ext/third_party/asio/asio/src/doc/overview/ssl.qbk +0 -124
- data/ext/third_party/asio/asio/src/doc/overview/strands.qbk +0 -114
- data/ext/third_party/asio/asio/src/doc/overview/streams.qbk +0 -62
- data/ext/third_party/asio/asio/src/doc/overview/sync_op.dot +0 -67
- data/ext/third_party/asio/asio/src/doc/overview/sync_op.png +0 -0
- data/ext/third_party/asio/asio/src/doc/overview/threads.qbk +0 -67
- data/ext/third_party/asio/asio/src/doc/overview/timers.qbk +0 -52
- data/ext/third_party/asio/asio/src/doc/overview/windows.qbk +0 -126
- data/ext/third_party/asio/asio/src/doc/project-root.jam +0 -1
- data/ext/third_party/asio/asio/src/doc/quickref.xml +0 -561
- data/ext/third_party/asio/asio/src/doc/reference.dox +0 -264
- data/ext/third_party/asio/asio/src/doc/reference.qbk +0 -125973
- data/ext/third_party/asio/asio/src/doc/reference.xsl +0 -1831
- data/ext/third_party/asio/asio/src/doc/release_checklist.htm +0 -68
- data/ext/third_party/asio/asio/src/doc/requirements/AcceptHandler.qbk +0 -72
- data/ext/third_party/asio/asio/src/doc/requirements/AcceptableProtocol.qbk +0 -25
- data/ext/third_party/asio/asio/src/doc/requirements/AsyncRandomAccessReadDevice.qbk +0 -56
- data/ext/third_party/asio/asio/src/doc/requirements/AsyncRandomAccessWriteDevice.qbk +0 -57
- data/ext/third_party/asio/asio/src/doc/requirements/AsyncReadStream.qbk +0 -50
- data/ext/third_party/asio/asio/src/doc/requirements/AsyncWriteStream.qbk +0 -48
- data/ext/third_party/asio/asio/src/doc/requirements/BufferedHandshakeHandler.qbk +0 -55
- data/ext/third_party/asio/asio/src/doc/requirements/CompletionCondition.qbk +0 -42
- data/ext/third_party/asio/asio/src/doc/requirements/CompletionHandler.qbk +0 -63
- data/ext/third_party/asio/asio/src/doc/requirements/ConnectCondition.qbk +0 -34
- data/ext/third_party/asio/asio/src/doc/requirements/ConnectHandler.qbk +0 -72
- data/ext/third_party/asio/asio/src/doc/requirements/ConstBufferSequence.qbk +0 -53
- data/ext/third_party/asio/asio/src/doc/requirements/DynamicBuffer.qbk +0 -16
- data/ext/third_party/asio/asio/src/doc/requirements/DynamicBuffer_v1.qbk +0 -93
- data/ext/third_party/asio/asio/src/doc/requirements/DynamicBuffer_v2.qbk +0 -94
- data/ext/third_party/asio/asio/src/doc/requirements/Endpoint.qbk +0 -97
- data/ext/third_party/asio/asio/src/doc/requirements/EndpointSequence.qbk +0 -30
- data/ext/third_party/asio/asio/src/doc/requirements/ExecutionContext.qbk +0 -36
- data/ext/third_party/asio/asio/src/doc/requirements/Executor.qbk +0 -141
- data/ext/third_party/asio/asio/src/doc/requirements/GettableSerialPortOption.qbk +0 -33
- data/ext/third_party/asio/asio/src/doc/requirements/GettableSocketOption.qbk +0 -67
- data/ext/third_party/asio/asio/src/doc/requirements/Handler.qbk +0 -64
- data/ext/third_party/asio/asio/src/doc/requirements/HandshakeHandler.qbk +0 -72
- data/ext/third_party/asio/asio/src/doc/requirements/InternetProtocol.qbk +0 -47
- data/ext/third_party/asio/asio/src/doc/requirements/IoControlCommand.qbk +0 -34
- data/ext/third_party/asio/asio/src/doc/requirements/IoObjectService.qbk +0 -62
- data/ext/third_party/asio/asio/src/doc/requirements/IteratorConnectHandler.qbk +0 -81
- data/ext/third_party/asio/asio/src/doc/requirements/LegacyCompletionHandler.qbk +0 -65
- data/ext/third_party/asio/asio/src/doc/requirements/MoveAcceptHandler.qbk +0 -61
- data/ext/third_party/asio/asio/src/doc/requirements/MutableBufferSequence.qbk +0 -54
- data/ext/third_party/asio/asio/src/doc/requirements/ProtoAllocator.qbk +0 -19
- data/ext/third_party/asio/asio/src/doc/requirements/Protocol.qbk +0 -56
- data/ext/third_party/asio/asio/src/doc/requirements/RangeConnectHandler.qbk +0 -82
- data/ext/third_party/asio/asio/src/doc/requirements/ReadHandler.qbk +0 -79
- data/ext/third_party/asio/asio/src/doc/requirements/ResolveHandler.qbk +0 -82
- data/ext/third_party/asio/asio/src/doc/requirements/Service.qbk +0 -40
- data/ext/third_party/asio/asio/src/doc/requirements/SettableSerialPortOption.qbk +0 -33
- data/ext/third_party/asio/asio/src/doc/requirements/SettableSocketOption.qbk +0 -54
- data/ext/third_party/asio/asio/src/doc/requirements/ShutdownHandler.qbk +0 -72
- data/ext/third_party/asio/asio/src/doc/requirements/SignalHandler.qbk +0 -79
- data/ext/third_party/asio/asio/src/doc/requirements/SyncRandomAccessReadDevice.qbk +0 -49
- data/ext/third_party/asio/asio/src/doc/requirements/SyncRandomAccessWriteDevice.qbk +0 -49
- data/ext/third_party/asio/asio/src/doc/requirements/SyncReadStream.qbk +0 -41
- data/ext/third_party/asio/asio/src/doc/requirements/SyncWriteStream.qbk +0 -39
- data/ext/third_party/asio/asio/src/doc/requirements/TimeTraits.qbk +0 -72
- data/ext/third_party/asio/asio/src/doc/requirements/WaitHandler.qbk +0 -72
- data/ext/third_party/asio/asio/src/doc/requirements/WaitTraits.qbk +0 -52
- data/ext/third_party/asio/asio/src/doc/requirements/WriteHandler.qbk +0 -79
- data/ext/third_party/asio/asio/src/doc/requirements/asynchronous_operations.qbk +0 -300
- data/ext/third_party/asio/asio/src/doc/requirements/asynchronous_socket_operations.qbk +0 -39
- data/ext/third_party/asio/asio/src/doc/requirements/read_write_operations.qbk +0 -34
- data/ext/third_party/asio/asio/src/doc/requirements/synchronous_socket_operations.qbk +0 -37
- data/ext/third_party/asio/asio/src/doc/std_exception_dox.txt +0 -7
- data/ext/third_party/asio/asio/src/doc/tutorial.dox +0 -226
- data/ext/third_party/asio/asio/src/doc/tutorial.qbk +0 -2387
- data/ext/third_party/asio/asio/src/doc/tutorial.xsl +0 -437
- data/ext/third_party/asio/asio/src/doc/using.qbk +0 -309
- data/ext/third_party/asio/asio/tsify.pl +0 -574
- data/ext/third_party/gsl/.clang-format +0 -34
- data/ext/third_party/gsl/.github/workflows/main.yml +0 -94
- data/ext/third_party/gsl/.gitignore +0 -16
- data/ext/third_party/gsl/.travis.yml +0 -551
- data/ext/third_party/gsl/CMakeSettings.json +0 -18
- data/ext/third_party/gsl/CONTRIBUTING.md +0 -29
- data/ext/third_party/gsl/GSL.natvis +0 -98
- data/ext/third_party/gsl/README.md +0 -124
- data/ext/third_party/gsl/appveyor.yml +0 -128
- data/ext/third_party/http_parser/.gitignore +0 -30
- data/ext/third_party/http_parser/.mailmap +0 -8
- data/ext/third_party/http_parser/.travis.yml +0 -13
- data/ext/third_party/http_parser/AUTHORS +0 -68
- data/ext/third_party/http_parser/Makefile +0 -160
- data/ext/third_party/http_parser/README.md +0 -246
- data/ext/third_party/http_parser/bench.c +0 -128
- data/ext/third_party/http_parser/http_parser.gyp +0 -111
- data/ext/third_party/http_parser/test.c +0 -4600
- data/ext/third_party/json/.appveyor.yml +0 -44
- data/ext/third_party/json/.clang-format +0 -84
- data/ext/third_party/json/.conan/build.py +0 -80
- data/ext/third_party/json/.conan/test_package/CMakeLists.txt +0 -12
- data/ext/third_party/json/.conan/test_package/conanfile.py +0 -24
- data/ext/third_party/json/.conan/test_package/test_package.cpp +0 -16
- data/ext/third_party/json/.gitignore +0 -3
- data/ext/third_party/json/.travis.yml +0 -173
- data/ext/third_party/json/Makefile +0 -77
- data/ext/third_party/json/README.md +0 -149
- data/ext/third_party/json/conanfile.py +0 -28
- data/ext/third_party/json/include/tao/json/external/pegtl/analysis/analyze_cycles.hpp +0 -127
- data/ext/third_party/json/include/tao/json/external/pegtl/analysis/counted.hpp +0 -23
- data/ext/third_party/json/include/tao/json/external/pegtl/analysis/generic.hpp +0 -31
- data/ext/third_party/json/include/tao/json/external/pegtl/analysis/grammar_info.hpp +0 -32
- data/ext/third_party/json/include/tao/json/external/pegtl/analysis/insert_guard.hpp +0 -51
- data/ext/third_party/json/include/tao/json/external/pegtl/analysis/insert_rules.hpp +0 -25
- data/ext/third_party/json/include/tao/json/external/pegtl/analysis/rule_info.hpp +0 -29
- data/ext/third_party/json/include/tao/json/external/pegtl/analysis/rule_type.hpp +0 -21
- data/ext/third_party/json/include/tao/json/external/pegtl/analyze.hpp +0 -21
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/counter.hpp +0 -54
- data/ext/third_party/json/include/tao/json/external/pegtl/contrib/tracer.hpp +0 -158
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/alnum.hpp +0 -18
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/alpha.hpp +0 -18
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/dusel_mode.hpp +0 -23
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/duseltronik.hpp +0 -187
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_opener.hpp +0 -72
- data/ext/third_party/json/include/tao/json/external/pegtl/internal/trivial.hpp +0 -32
- data/ext/third_party/snappy/.appveyor.yml +0 -36
- data/ext/third_party/snappy/.gitignore +0 -8
- data/ext/third_party/snappy/.travis.yml +0 -98
- data/ext/third_party/snappy/AUTHORS +0 -1
- data/ext/third_party/snappy/CONTRIBUTING.md +0 -26
- data/ext/third_party/snappy/NEWS +0 -188
- data/ext/third_party/snappy/README.md +0 -148
- data/ext/third_party/snappy/docs/README.md +0 -72
- data/ext/third_party/snappy/format_description.txt +0 -110
- data/ext/third_party/snappy/framing_format.txt +0 -135
- data/ext/third_party/snappy/snappy-test.cc +0 -613
- data/ext/third_party/snappy/snappy-test.h +0 -526
- data/ext/third_party/snappy/snappy_compress_fuzzer.cc +0 -60
- data/ext/third_party/snappy/snappy_uncompress_fuzzer.cc +0 -58
- data/ext/third_party/snappy/snappy_unittest.cc +0 -1512
- data/ext/third_party/spdlog/.clang-format +0 -108
- data/ext/third_party/spdlog/.clang-tidy +0 -54
- data/ext/third_party/spdlog/.gitattributes +0 -1
- data/ext/third_party/spdlog/.gitignore +0 -83
- data/ext/third_party/spdlog/.travis.yml +0 -112
- data/ext/third_party/spdlog/INSTALL +0 -24
- data/ext/third_party/spdlog/README.md +0 -423
- data/ext/third_party/spdlog/appveyor.yml +0 -51
- data/ext/third_party/spdlog/include/spdlog/cfg/log_levels.h +0 -47
@@ -0,0 +1,249 @@
|
|
1
|
+
//
|
2
|
+
// execution/allocator.hpp
|
3
|
+
// ~~~~~~~~~~~~~~~~~~~~~~~
|
4
|
+
//
|
5
|
+
// Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
|
6
|
+
//
|
7
|
+
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
8
|
+
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
9
|
+
//
|
10
|
+
|
11
|
+
#ifndef ASIO_EXECUTION_ALLOCATOR_HPP
|
12
|
+
#define ASIO_EXECUTION_ALLOCATOR_HPP
|
13
|
+
|
14
|
+
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
|
15
|
+
# pragma once
|
16
|
+
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
|
17
|
+
|
18
|
+
#include "asio/detail/config.hpp"
|
19
|
+
#include "asio/detail/type_traits.hpp"
|
20
|
+
#include "asio/execution/executor.hpp"
|
21
|
+
#include "asio/execution/scheduler.hpp"
|
22
|
+
#include "asio/execution/sender.hpp"
|
23
|
+
#include "asio/is_applicable_property.hpp"
|
24
|
+
#include "asio/traits/query_static_constexpr_member.hpp"
|
25
|
+
#include "asio/traits/static_query.hpp"
|
26
|
+
|
27
|
+
#include "asio/detail/push_options.hpp"
|
28
|
+
|
29
|
+
namespace asio {
|
30
|
+
|
31
|
+
#if defined(GENERATING_DOCUMENTATION)
|
32
|
+
|
33
|
+
namespace execution {
|
34
|
+
|
35
|
+
/// A property to describe which allocator an executor will use to allocate the
|
36
|
+
/// memory required to store a submitted function object.
|
37
|
+
template <typename ProtoAllocator>
|
38
|
+
struct allocator_t
|
39
|
+
{
|
40
|
+
/// The allocator_t property applies to executors, senders, and schedulers.
|
41
|
+
template <typename T>
|
42
|
+
static constexpr bool is_applicable_property_v =
|
43
|
+
is_executor_v<T> || is_sender_v<T> || is_scheduler_v<T>;
|
44
|
+
|
45
|
+
/// The allocator_t property can be required.
|
46
|
+
static constexpr bool is_requirable = true;
|
47
|
+
|
48
|
+
/// The allocator_t property can be preferred.
|
49
|
+
static constexpr bool is_preferable = true;
|
50
|
+
|
51
|
+
/// Default constructor.
|
52
|
+
constexpr allocator_t();
|
53
|
+
|
54
|
+
/// Obtain the allocator stored in the allocator_t property object.
|
55
|
+
/**
|
56
|
+
* Present only if @c ProtoAllocator is non-void.
|
57
|
+
*/
|
58
|
+
constexpr ProtoAllocator value() const;
|
59
|
+
|
60
|
+
/// Create an allocator_t object with a different allocator.
|
61
|
+
/**
|
62
|
+
* Present only if @c ProtoAllocator is void.
|
63
|
+
*/
|
64
|
+
template <typename OtherAllocator>
|
65
|
+
allocator_t<OtherAllocator operator()(const OtherAllocator& a);
|
66
|
+
};
|
67
|
+
|
68
|
+
/// A special value used for accessing the allocator_t property.
|
69
|
+
constexpr allocator_t<void> allocator;
|
70
|
+
|
71
|
+
} // namespace execution
|
72
|
+
|
73
|
+
#else // defined(GENERATING_DOCUMENTATION)
|
74
|
+
|
75
|
+
namespace execution {
|
76
|
+
|
77
|
+
template <typename ProtoAllocator>
|
78
|
+
struct allocator_t
|
79
|
+
{
|
80
|
+
#if defined(ASIO_HAS_VARIABLE_TEMPLATES)
|
81
|
+
template <typename T>
|
82
|
+
ASIO_STATIC_CONSTEXPR(bool,
|
83
|
+
is_applicable_property_v = is_executor<T>::value
|
84
|
+
|| is_sender<T>::value || is_scheduler<T>::value);
|
85
|
+
#endif // defined(ASIO_HAS_VARIABLE_TEMPLATES)
|
86
|
+
|
87
|
+
ASIO_STATIC_CONSTEXPR(bool, is_requirable = true);
|
88
|
+
ASIO_STATIC_CONSTEXPR(bool, is_preferable = true);
|
89
|
+
|
90
|
+
#if defined(ASIO_HAS_DEDUCED_STATIC_QUERY_TRAIT) \
|
91
|
+
&& defined(ASIO_HAS_SFINAE_VARIABLE_TEMPLATES)
|
92
|
+
template <typename T>
|
93
|
+
static ASIO_CONSTEXPR
|
94
|
+
typename traits::query_static_constexpr_member<T, allocator_t>::result_type
|
95
|
+
static_query()
|
96
|
+
ASIO_NOEXCEPT_IF((
|
97
|
+
traits::query_static_constexpr_member<T, allocator_t>::is_noexcept))
|
98
|
+
{
|
99
|
+
return traits::query_static_constexpr_member<T, allocator_t>::value();
|
100
|
+
}
|
101
|
+
|
102
|
+
template <typename E, typename T = decltype(allocator_t::static_query<E>())>
|
103
|
+
static ASIO_CONSTEXPR const T static_query_v
|
104
|
+
= allocator_t::static_query<E>();
|
105
|
+
#endif // defined(ASIO_HAS_DEDUCED_STATIC_QUERY_TRAIT)
|
106
|
+
// && defined(ASIO_HAS_SFINAE_VARIABLE_TEMPLATES)
|
107
|
+
|
108
|
+
ASIO_CONSTEXPR ProtoAllocator value() const
|
109
|
+
{
|
110
|
+
return a_;
|
111
|
+
}
|
112
|
+
|
113
|
+
private:
|
114
|
+
friend struct allocator_t<void>;
|
115
|
+
|
116
|
+
explicit ASIO_CONSTEXPR allocator_t(const ProtoAllocator& a)
|
117
|
+
: a_(a)
|
118
|
+
{
|
119
|
+
}
|
120
|
+
|
121
|
+
ProtoAllocator a_;
|
122
|
+
};
|
123
|
+
|
124
|
+
#if defined(ASIO_HAS_DEDUCED_STATIC_QUERY_TRAIT) \
|
125
|
+
&& defined(ASIO_HAS_SFINAE_VARIABLE_TEMPLATES)
|
126
|
+
template <typename ProtoAllocator> template <typename E, typename T>
|
127
|
+
const T allocator_t<ProtoAllocator>::static_query_v;
|
128
|
+
#endif // defined(ASIO_HAS_DEDUCED_STATIC_QUERY_TRAIT)
|
129
|
+
// && defined(ASIO_HAS_SFINAE_VARIABLE_TEMPLATES)
|
130
|
+
|
131
|
+
template <>
|
132
|
+
struct allocator_t<void>
|
133
|
+
{
|
134
|
+
#if defined(ASIO_HAS_VARIABLE_TEMPLATES)
|
135
|
+
template <typename T>
|
136
|
+
ASIO_STATIC_CONSTEXPR(bool,
|
137
|
+
is_applicable_property_v = is_executor<T>::value
|
138
|
+
|| is_sender<T>::value || is_scheduler<T>::value);
|
139
|
+
#endif // defined(ASIO_HAS_VARIABLE_TEMPLATES)
|
140
|
+
|
141
|
+
ASIO_STATIC_CONSTEXPR(bool, is_requirable = true);
|
142
|
+
ASIO_STATIC_CONSTEXPR(bool, is_preferable = true);
|
143
|
+
|
144
|
+
ASIO_CONSTEXPR allocator_t()
|
145
|
+
{
|
146
|
+
}
|
147
|
+
|
148
|
+
#if defined(ASIO_HAS_DEDUCED_STATIC_QUERY_TRAIT) \
|
149
|
+
&& defined(ASIO_HAS_SFINAE_VARIABLE_TEMPLATES)
|
150
|
+
template <typename T>
|
151
|
+
static ASIO_CONSTEXPR
|
152
|
+
typename traits::query_static_constexpr_member<T, allocator_t>::result_type
|
153
|
+
static_query()
|
154
|
+
ASIO_NOEXCEPT_IF((
|
155
|
+
traits::query_static_constexpr_member<T, allocator_t>::is_noexcept))
|
156
|
+
{
|
157
|
+
return traits::query_static_constexpr_member<T, allocator_t>::value();
|
158
|
+
}
|
159
|
+
|
160
|
+
template <typename E, typename T = decltype(allocator_t::static_query<E>())>
|
161
|
+
static ASIO_CONSTEXPR const T static_query_v
|
162
|
+
= allocator_t::static_query<E>();
|
163
|
+
#endif // defined(ASIO_HAS_DEDUCED_STATIC_QUERY_TRAIT)
|
164
|
+
// && defined(ASIO_HAS_SFINAE_VARIABLE_TEMPLATES)
|
165
|
+
|
166
|
+
template <typename OtherProtoAllocator>
|
167
|
+
ASIO_CONSTEXPR allocator_t<OtherProtoAllocator> operator()(
|
168
|
+
const OtherProtoAllocator& a) const
|
169
|
+
{
|
170
|
+
return allocator_t<OtherProtoAllocator>(a);
|
171
|
+
}
|
172
|
+
};
|
173
|
+
|
174
|
+
#if defined(ASIO_HAS_DEDUCED_STATIC_QUERY_TRAIT) \
|
175
|
+
&& defined(ASIO_HAS_SFINAE_VARIABLE_TEMPLATES)
|
176
|
+
template <typename E, typename T>
|
177
|
+
const T allocator_t<void>::static_query_v;
|
178
|
+
#endif // defined(ASIO_HAS_DEDUCED_STATIC_QUERY_TRAIT)
|
179
|
+
// && defined(ASIO_HAS_SFINAE_VARIABLE_TEMPLATES)
|
180
|
+
|
181
|
+
#if defined(ASIO_HAS_CONSTEXPR) || defined(GENERATING_DOCUMENTATION)
|
182
|
+
constexpr allocator_t<void> allocator;
|
183
|
+
#else // defined(ASIO_HAS_CONSTEXPR) || defined(GENERATING_DOCUMENTATION)
|
184
|
+
template <typename T>
|
185
|
+
struct allocator_instance
|
186
|
+
{
|
187
|
+
static allocator_t<T> instance;
|
188
|
+
};
|
189
|
+
|
190
|
+
template <typename T>
|
191
|
+
allocator_t<T> allocator_instance<T>::instance;
|
192
|
+
|
193
|
+
namespace {
|
194
|
+
static const allocator_t<void>& allocator = allocator_instance<void>::instance;
|
195
|
+
} // namespace
|
196
|
+
#endif
|
197
|
+
|
198
|
+
} // namespace execution
|
199
|
+
|
200
|
+
#if !defined(ASIO_HAS_VARIABLE_TEMPLATES)
|
201
|
+
|
202
|
+
template <typename T, typename ProtoAllocator>
|
203
|
+
struct is_applicable_property<T, execution::allocator_t<ProtoAllocator> >
|
204
|
+
: integral_constant<bool,
|
205
|
+
execution::is_executor<T>::value
|
206
|
+
|| execution::is_sender<T>::value
|
207
|
+
|| execution::is_scheduler<T>::value>
|
208
|
+
{
|
209
|
+
};
|
210
|
+
|
211
|
+
#endif // !defined(ASIO_HAS_VARIABLE_TEMPLATES)
|
212
|
+
|
213
|
+
namespace traits {
|
214
|
+
|
215
|
+
#if !defined(ASIO_HAS_DEDUCED_STATIC_QUERY_TRAIT) \
|
216
|
+
|| !defined(ASIO_HAS_SFINAE_VARIABLE_TEMPLATES)
|
217
|
+
|
218
|
+
template <typename T, typename ProtoAllocator>
|
219
|
+
struct static_query<T, execution::allocator_t<ProtoAllocator>,
|
220
|
+
typename enable_if<
|
221
|
+
traits::query_static_constexpr_member<T,
|
222
|
+
execution::allocator_t<ProtoAllocator> >::is_valid
|
223
|
+
>::type>
|
224
|
+
{
|
225
|
+
ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
|
226
|
+
ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
|
227
|
+
|
228
|
+
typedef typename traits::query_static_constexpr_member<T,
|
229
|
+
execution::allocator_t<ProtoAllocator> >::result_type result_type;
|
230
|
+
|
231
|
+
static ASIO_CONSTEXPR result_type value()
|
232
|
+
{
|
233
|
+
return traits::query_static_constexpr_member<T,
|
234
|
+
execution::allocator_t<ProtoAllocator> >::value();
|
235
|
+
}
|
236
|
+
};
|
237
|
+
|
238
|
+
#endif // !defined(ASIO_HAS_DEDUCED_STATIC_QUERY_TRAIT)
|
239
|
+
// || !defined(ASIO_HAS_SFINAE_VARIABLE_TEMPLATES)
|
240
|
+
|
241
|
+
} // namespace traits
|
242
|
+
|
243
|
+
#endif // defined(GENERATING_DOCUMENTATION)
|
244
|
+
|
245
|
+
} // namespace asio
|
246
|
+
|
247
|
+
#include "asio/detail/pop_options.hpp"
|
248
|
+
|
249
|
+
#endif // ASIO_EXECUTION_ALLOCATOR_HPP
|
@@ -0,0 +1,2264 @@
|
|
1
|
+
//
|
2
|
+
// execution/any_executor.hpp
|
3
|
+
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
|
4
|
+
//
|
5
|
+
// Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
|
6
|
+
//
|
7
|
+
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
8
|
+
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
9
|
+
//
|
10
|
+
|
11
|
+
#ifndef ASIO_EXECUTION_ANY_EXECUTOR_HPP
|
12
|
+
#define ASIO_EXECUTION_ANY_EXECUTOR_HPP
|
13
|
+
|
14
|
+
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
|
15
|
+
# pragma once
|
16
|
+
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
|
17
|
+
|
18
|
+
#include "asio/detail/config.hpp"
|
19
|
+
#include <new>
|
20
|
+
#include <typeinfo>
|
21
|
+
#include "asio/detail/assert.hpp"
|
22
|
+
#include "asio/detail/cstddef.hpp"
|
23
|
+
#include "asio/detail/executor_function.hpp"
|
24
|
+
#include "asio/detail/memory.hpp"
|
25
|
+
#include "asio/detail/non_const_lvalue.hpp"
|
26
|
+
#include "asio/detail/scoped_ptr.hpp"
|
27
|
+
#include "asio/detail/type_traits.hpp"
|
28
|
+
#include "asio/detail/throw_exception.hpp"
|
29
|
+
#include "asio/detail/variadic_templates.hpp"
|
30
|
+
#include "asio/execution/bad_executor.hpp"
|
31
|
+
#include "asio/execution/blocking.hpp"
|
32
|
+
#include "asio/execution/execute.hpp"
|
33
|
+
#include "asio/execution/executor.hpp"
|
34
|
+
#include "asio/prefer.hpp"
|
35
|
+
#include "asio/query.hpp"
|
36
|
+
#include "asio/require.hpp"
|
37
|
+
|
38
|
+
#include "asio/detail/push_options.hpp"
|
39
|
+
|
40
|
+
namespace asio {
|
41
|
+
|
42
|
+
#if defined(GENERATING_DOCUMENTATION)
|
43
|
+
|
44
|
+
namespace execution {
|
45
|
+
|
46
|
+
/// Polymorphic executor wrapper.
|
47
|
+
template <typename... SupportableProperties>
|
48
|
+
class any_executor
|
49
|
+
{
|
50
|
+
public:
|
51
|
+
/// Default constructor.
|
52
|
+
any_executor() noexcept;
|
53
|
+
|
54
|
+
/// Construct in an empty state. Equivalent effects to default constructor.
|
55
|
+
any_executor(nullptr_t) noexcept;
|
56
|
+
|
57
|
+
/// Copy constructor.
|
58
|
+
any_executor(const any_executor& e) noexcept;
|
59
|
+
|
60
|
+
/// Move constructor.
|
61
|
+
any_executor(any_executor&& e) noexcept;
|
62
|
+
|
63
|
+
/// Construct to point to the same target as another any_executor.
|
64
|
+
template <class... OtherSupportableProperties>
|
65
|
+
any_executor(any_executor<OtherSupportableProperties...> e);
|
66
|
+
|
67
|
+
/// Construct a polymorphic wrapper for the specified executor.
|
68
|
+
template <typename Executor>
|
69
|
+
any_executor(Executor e);
|
70
|
+
|
71
|
+
/// Assignment operator.
|
72
|
+
any_executor& operator=(const any_executor& e) noexcept;
|
73
|
+
|
74
|
+
/// Move assignment operator.
|
75
|
+
any_executor& operator=(any_executor&& e) noexcept;
|
76
|
+
|
77
|
+
/// Assignment operator that sets the polymorphic wrapper to the empty state.
|
78
|
+
any_executor& operator=(nullptr_t);
|
79
|
+
|
80
|
+
/// Assignment operator to create a polymorphic wrapper for the specified
|
81
|
+
/// executor.
|
82
|
+
template <typename Executor>
|
83
|
+
any_executor& operator=(Executor e);
|
84
|
+
|
85
|
+
/// Destructor.
|
86
|
+
~any_executor();
|
87
|
+
|
88
|
+
/// Swap targets with another polymorphic wrapper.
|
89
|
+
void swap(any_executor& other) noexcept;
|
90
|
+
|
91
|
+
/// Obtain a polymorphic wrapper with the specified property.
|
92
|
+
/**
|
93
|
+
* Do not call this function directly. It is intended for use with the
|
94
|
+
* asio::require and asio::prefer customisation points.
|
95
|
+
*
|
96
|
+
* For example:
|
97
|
+
* @code execution::any_executor<execution::blocking_t::possibly_t> ex = ...;
|
98
|
+
* auto ex2 = asio::requre(ex, execution::blocking.possibly); @endcode
|
99
|
+
*/
|
100
|
+
template <typename Property>
|
101
|
+
any_executor require(Property) const;
|
102
|
+
|
103
|
+
/// Obtain a polymorphic wrapper with the specified property.
|
104
|
+
/**
|
105
|
+
* Do not call this function directly. It is intended for use with the
|
106
|
+
* asio::prefer customisation point.
|
107
|
+
*
|
108
|
+
* For example:
|
109
|
+
* @code execution::any_executor<execution::blocking_t::possibly_t> ex = ...;
|
110
|
+
* auto ex2 = asio::prefer(ex, execution::blocking.possibly); @endcode
|
111
|
+
*/
|
112
|
+
template <typename Property>
|
113
|
+
any_executor prefer(Property) const;
|
114
|
+
|
115
|
+
/// Obtain the value associated with the specified property.
|
116
|
+
/**
|
117
|
+
* Do not call this function directly. It is intended for use with the
|
118
|
+
* asio::query customisation point.
|
119
|
+
*
|
120
|
+
* For example:
|
121
|
+
* @code execution::any_executor<execution::occupancy_t> ex = ...;
|
122
|
+
* size_t n = asio::query(ex, execution::occupancy); @endcode
|
123
|
+
*/
|
124
|
+
template <typename Property>
|
125
|
+
typename Property::polymorphic_query_result_type query(Property) const;
|
126
|
+
|
127
|
+
/// Execute the function on the target executor.
|
128
|
+
/**
|
129
|
+
* Do not call this function directly. It is intended for use with the
|
130
|
+
* execution::execute customisation point.
|
131
|
+
*
|
132
|
+
* For example:
|
133
|
+
* @code execution::any_executor<> ex = ...;
|
134
|
+
* execution::execute(ex, my_function_object); @endcode
|
135
|
+
*
|
136
|
+
* Throws asio::bad_executor if the polymorphic wrapper has no target.
|
137
|
+
*/
|
138
|
+
template <typename Function>
|
139
|
+
void execute(Function&& f) const;
|
140
|
+
|
141
|
+
/// Obtain the underlying execution context.
|
142
|
+
/**
|
143
|
+
* This function is provided for backward compatibility. It is automatically
|
144
|
+
* defined when the @c SupportableProperties... list includes a property of
|
145
|
+
* type <tt>execution::context_as<U></tt>, for some type <tt>U</tt>.
|
146
|
+
*/
|
147
|
+
automatically_determined context() const;
|
148
|
+
|
149
|
+
/// Determine whether the wrapper has a target executor.
|
150
|
+
/**
|
151
|
+
* @returns @c true if the polymorphic wrapper has a target executor,
|
152
|
+
* otherwise false.
|
153
|
+
*/
|
154
|
+
explicit operator bool() const noexcept;
|
155
|
+
|
156
|
+
/// Get the type of the target executor.
|
157
|
+
const type_info& target_type() const noexcept;
|
158
|
+
|
159
|
+
/// Get a pointer to the target executor.
|
160
|
+
template <typename Executor> Executor* target() noexcept;
|
161
|
+
|
162
|
+
/// Get a pointer to the target executor.
|
163
|
+
template <typename Executor> const Executor* target() const noexcept;
|
164
|
+
};
|
165
|
+
|
166
|
+
/// Equality operator.
|
167
|
+
/**
|
168
|
+
* @relates any_executor
|
169
|
+
*/
|
170
|
+
template <typename... SupportableProperties>
|
171
|
+
bool operator==(const any_executor<SupportableProperties...>& a,
|
172
|
+
const any_executor<SupportableProperties...>& b) noexcept;
|
173
|
+
|
174
|
+
/// Equality operator.
|
175
|
+
/**
|
176
|
+
* @relates any_executor
|
177
|
+
*/
|
178
|
+
template <typename... SupportableProperties>
|
179
|
+
bool operator==(const any_executor<SupportableProperties...>& a,
|
180
|
+
nullptr_t) noexcept;
|
181
|
+
|
182
|
+
/// Equality operator.
|
183
|
+
/**
|
184
|
+
* @relates any_executor
|
185
|
+
*/
|
186
|
+
template <typename... SupportableProperties>
|
187
|
+
bool operator==(nullptr_t,
|
188
|
+
const any_executor<SupportableProperties...>& b) noexcept;
|
189
|
+
|
190
|
+
/// Inequality operator.
|
191
|
+
/**
|
192
|
+
* @relates any_executor
|
193
|
+
*/
|
194
|
+
template <typename... SupportableProperties>
|
195
|
+
bool operator!=(const any_executor<SupportableProperties...>& a,
|
196
|
+
const any_executor<SupportableProperties...>& b) noexcept;
|
197
|
+
|
198
|
+
/// Inequality operator.
|
199
|
+
/**
|
200
|
+
* @relates any_executor
|
201
|
+
*/
|
202
|
+
template <typename... SupportableProperties>
|
203
|
+
bool operator!=(const any_executor<SupportableProperties...>& a,
|
204
|
+
nullptr_t) noexcept;
|
205
|
+
|
206
|
+
/// Inequality operator.
|
207
|
+
/**
|
208
|
+
* @relates any_executor
|
209
|
+
*/
|
210
|
+
template <typename... SupportableProperties>
|
211
|
+
bool operator!=(nullptr_t,
|
212
|
+
const any_executor<SupportableProperties...>& b) noexcept;
|
213
|
+
|
214
|
+
} // namespace execution
|
215
|
+
|
216
|
+
#else // defined(GENERATING_DOCUMENTATION)
|
217
|
+
|
218
|
+
namespace execution {
|
219
|
+
|
220
|
+
#if !defined(ASIO_EXECUTION_ANY_EXECUTOR_FWD_DECL)
|
221
|
+
#define ASIO_EXECUTION_ANY_EXECUTOR_FWD_DECL
|
222
|
+
|
223
|
+
#if defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
224
|
+
|
225
|
+
template <typename... SupportableProperties>
|
226
|
+
class any_executor;
|
227
|
+
|
228
|
+
#else // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
229
|
+
|
230
|
+
template <typename = void, typename = void, typename = void,
|
231
|
+
typename = void, typename = void, typename = void,
|
232
|
+
typename = void, typename = void, typename = void>
|
233
|
+
class any_executor;
|
234
|
+
|
235
|
+
#endif // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
236
|
+
|
237
|
+
#endif // !defined(ASIO_EXECUTION_ANY_EXECUTOR_FWD_DECL)
|
238
|
+
|
239
|
+
template <typename U>
|
240
|
+
struct context_as_t;
|
241
|
+
|
242
|
+
namespace detail {
|
243
|
+
|
244
|
+
// Traits used to detect whether a property is requirable or preferable, taking
|
245
|
+
// into account that T::is_requirable or T::is_preferable may not not be well
|
246
|
+
// formed.
|
247
|
+
|
248
|
+
template <typename T, typename = void>
|
249
|
+
struct is_requirable : false_type {};
|
250
|
+
|
251
|
+
template <typename T>
|
252
|
+
struct is_requirable<T, typename enable_if<T::is_requirable>::type> :
|
253
|
+
true_type {};
|
254
|
+
|
255
|
+
template <typename T, typename = void>
|
256
|
+
struct is_preferable : false_type {};
|
257
|
+
|
258
|
+
template <typename T>
|
259
|
+
struct is_preferable<T, typename enable_if<T::is_preferable>::type> :
|
260
|
+
true_type {};
|
261
|
+
|
262
|
+
// Trait used to detect context_as property, for backward compatibility.
|
263
|
+
|
264
|
+
template <typename T>
|
265
|
+
struct is_context_as : false_type {};
|
266
|
+
|
267
|
+
template <typename U>
|
268
|
+
struct is_context_as<context_as_t<U> > : true_type {};
|
269
|
+
|
270
|
+
// Helper template to:
|
271
|
+
// - Check if a target can supply the supportable properties.
|
272
|
+
// - Find the first convertible-from-T property in the list.
|
273
|
+
|
274
|
+
template <std::size_t I, typename Props>
|
275
|
+
struct supportable_properties;
|
276
|
+
|
277
|
+
template <std::size_t I, typename Prop>
|
278
|
+
struct supportable_properties<I, void(Prop)>
|
279
|
+
{
|
280
|
+
template <typename T>
|
281
|
+
struct is_valid_target : integral_constant<bool,
|
282
|
+
(
|
283
|
+
is_requirable<Prop>::value
|
284
|
+
? can_require<T, Prop>::value
|
285
|
+
: true
|
286
|
+
)
|
287
|
+
&&
|
288
|
+
(
|
289
|
+
is_preferable<Prop>::value
|
290
|
+
? can_prefer<T, Prop>::value
|
291
|
+
: true
|
292
|
+
)
|
293
|
+
&&
|
294
|
+
(
|
295
|
+
!is_requirable<Prop>::value && !is_preferable<Prop>::value
|
296
|
+
? can_query<T, Prop>::value
|
297
|
+
: true
|
298
|
+
)
|
299
|
+
>
|
300
|
+
{
|
301
|
+
};
|
302
|
+
|
303
|
+
struct found
|
304
|
+
{
|
305
|
+
ASIO_STATIC_CONSTEXPR(bool, value = true);
|
306
|
+
typedef Prop type;
|
307
|
+
typedef typename Prop::polymorphic_query_result_type query_result_type;
|
308
|
+
ASIO_STATIC_CONSTEXPR(std::size_t, index = I);
|
309
|
+
};
|
310
|
+
|
311
|
+
struct not_found
|
312
|
+
{
|
313
|
+
ASIO_STATIC_CONSTEXPR(bool, value = false);
|
314
|
+
};
|
315
|
+
|
316
|
+
template <typename T>
|
317
|
+
struct find_convertible_property :
|
318
|
+
conditional<
|
319
|
+
is_same<T, Prop>::value || is_convertible<T, Prop>::value,
|
320
|
+
found,
|
321
|
+
not_found
|
322
|
+
>::type {};
|
323
|
+
|
324
|
+
template <typename T>
|
325
|
+
struct find_convertible_requirable_property :
|
326
|
+
conditional<
|
327
|
+
is_requirable<Prop>::value
|
328
|
+
&& (is_same<T, Prop>::value || is_convertible<T, Prop>::value),
|
329
|
+
found,
|
330
|
+
not_found
|
331
|
+
>::type {};
|
332
|
+
|
333
|
+
template <typename T>
|
334
|
+
struct find_convertible_preferable_property :
|
335
|
+
conditional<
|
336
|
+
is_preferable<Prop>::value
|
337
|
+
&& (is_same<T, Prop>::value || is_convertible<T, Prop>::value),
|
338
|
+
found,
|
339
|
+
not_found
|
340
|
+
>::type {};
|
341
|
+
|
342
|
+
struct find_context_as_property :
|
343
|
+
conditional<
|
344
|
+
is_context_as<Prop>::value,
|
345
|
+
found,
|
346
|
+
not_found
|
347
|
+
>::type {};
|
348
|
+
};
|
349
|
+
|
350
|
+
#if defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
351
|
+
|
352
|
+
template <std::size_t I, typename Head, typename... Tail>
|
353
|
+
struct supportable_properties<I, void(Head, Tail...)>
|
354
|
+
{
|
355
|
+
template <typename T>
|
356
|
+
struct is_valid_target : integral_constant<bool,
|
357
|
+
(
|
358
|
+
supportable_properties<I,
|
359
|
+
void(Head)>::template is_valid_target<T>::value
|
360
|
+
&&
|
361
|
+
supportable_properties<I + 1,
|
362
|
+
void(Tail...)>::template is_valid_target<T>::value
|
363
|
+
)
|
364
|
+
>
|
365
|
+
{
|
366
|
+
};
|
367
|
+
|
368
|
+
template <typename T>
|
369
|
+
struct find_convertible_property :
|
370
|
+
conditional<
|
371
|
+
is_convertible<T, Head>::value,
|
372
|
+
typename supportable_properties<I, void(Head)>::found,
|
373
|
+
typename supportable_properties<I + 1,
|
374
|
+
void(Tail...)>::template find_convertible_property<T>
|
375
|
+
>::type {};
|
376
|
+
|
377
|
+
template <typename T>
|
378
|
+
struct find_convertible_requirable_property :
|
379
|
+
conditional<
|
380
|
+
is_requirable<Head>::value
|
381
|
+
&& is_convertible<T, Head>::value,
|
382
|
+
typename supportable_properties<I, void(Head)>::found,
|
383
|
+
typename supportable_properties<I + 1,
|
384
|
+
void(Tail...)>::template find_convertible_requirable_property<T>
|
385
|
+
>::type {};
|
386
|
+
|
387
|
+
template <typename T>
|
388
|
+
struct find_convertible_preferable_property :
|
389
|
+
conditional<
|
390
|
+
is_preferable<Head>::value
|
391
|
+
&& is_convertible<T, Head>::value,
|
392
|
+
typename supportable_properties<I, void(Head)>::found,
|
393
|
+
typename supportable_properties<I + 1,
|
394
|
+
void(Tail...)>::template find_convertible_preferable_property<T>
|
395
|
+
>::type {};
|
396
|
+
|
397
|
+
struct find_context_as_property :
|
398
|
+
conditional<
|
399
|
+
is_context_as<Head>::value,
|
400
|
+
typename supportable_properties<I, void(Head)>::found,
|
401
|
+
typename supportable_properties<I + 1,
|
402
|
+
void(Tail...)>::find_context_as_property
|
403
|
+
>::type {};
|
404
|
+
};
|
405
|
+
|
406
|
+
#else // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
407
|
+
|
408
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_PROPS_BASE_DEF(n) \
|
409
|
+
template <std::size_t I, \
|
410
|
+
typename Head, ASIO_VARIADIC_TPARAMS(n)> \
|
411
|
+
struct supportable_properties<I, \
|
412
|
+
void(Head, ASIO_VARIADIC_TARGS(n))> \
|
413
|
+
{ \
|
414
|
+
template <typename T> \
|
415
|
+
struct is_valid_target : integral_constant<bool, \
|
416
|
+
( \
|
417
|
+
supportable_properties<I, \
|
418
|
+
void(Head)>::template is_valid_target<T>::value \
|
419
|
+
&& \
|
420
|
+
supportable_properties<I + 1, \
|
421
|
+
void(ASIO_VARIADIC_TARGS(n))>::template \
|
422
|
+
is_valid_target<T>::value \
|
423
|
+
) \
|
424
|
+
> \
|
425
|
+
{ \
|
426
|
+
}; \
|
427
|
+
\
|
428
|
+
template <typename T> \
|
429
|
+
struct find_convertible_property : \
|
430
|
+
conditional< \
|
431
|
+
is_convertible<T, Head>::value, \
|
432
|
+
typename supportable_properties<I, void(Head)>::found, \
|
433
|
+
typename supportable_properties<I + 1, \
|
434
|
+
void(ASIO_VARIADIC_TARGS(n))>::template \
|
435
|
+
find_convertible_property<T> \
|
436
|
+
>::type {}; \
|
437
|
+
\
|
438
|
+
template <typename T> \
|
439
|
+
struct find_convertible_requirable_property : \
|
440
|
+
conditional< \
|
441
|
+
is_requirable<Head>::value \
|
442
|
+
&& is_convertible<T, Head>::value, \
|
443
|
+
typename supportable_properties<I, void(Head)>::found, \
|
444
|
+
typename supportable_properties<I + 1, \
|
445
|
+
void(ASIO_VARIADIC_TARGS(n))>::template \
|
446
|
+
find_convertible_requirable_property<T> \
|
447
|
+
>::type {}; \
|
448
|
+
\
|
449
|
+
template <typename T> \
|
450
|
+
struct find_convertible_preferable_property : \
|
451
|
+
conditional< \
|
452
|
+
is_preferable<Head>::value \
|
453
|
+
&& is_convertible<T, Head>::value, \
|
454
|
+
typename supportable_properties<I, void(Head)>::found, \
|
455
|
+
typename supportable_properties<I + 1, \
|
456
|
+
void(ASIO_VARIADIC_TARGS(n))>::template \
|
457
|
+
find_convertible_preferable_property<T> \
|
458
|
+
>::type {}; \
|
459
|
+
\
|
460
|
+
struct find_context_as_property : \
|
461
|
+
conditional< \
|
462
|
+
is_context_as<Head>::value, \
|
463
|
+
typename supportable_properties<I, void(Head)>::found, \
|
464
|
+
typename supportable_properties<I + 1, void( \
|
465
|
+
ASIO_VARIADIC_TARGS(n))>::find_context_as_property \
|
466
|
+
>::type {}; \
|
467
|
+
}; \
|
468
|
+
/**/
|
469
|
+
ASIO_VARIADIC_GENERATE(ASIO_PRIVATE_ANY_EXECUTOR_PROPS_BASE_DEF)
|
470
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_PROPS_BASE_DEF
|
471
|
+
|
472
|
+
#endif // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
473
|
+
|
474
|
+
template <typename T, typename Props>
|
475
|
+
struct is_valid_target_executor :
|
476
|
+
conditional<
|
477
|
+
is_executor<T>::value,
|
478
|
+
typename supportable_properties<0, Props>::template is_valid_target<T>,
|
479
|
+
false_type
|
480
|
+
>::type
|
481
|
+
{
|
482
|
+
};
|
483
|
+
|
484
|
+
class any_executor_base
|
485
|
+
{
|
486
|
+
public:
|
487
|
+
any_executor_base() ASIO_NOEXCEPT
|
488
|
+
: object_fns_(object_fns_table<void>()),
|
489
|
+
target_(0),
|
490
|
+
target_fns_(target_fns_table<void>())
|
491
|
+
{
|
492
|
+
}
|
493
|
+
|
494
|
+
template <ASIO_EXECUTION_EXECUTOR Executor>
|
495
|
+
any_executor_base(Executor ex, false_type)
|
496
|
+
: target_fns_(target_fns_table<Executor>(
|
497
|
+
any_executor_base::query_blocking(ex,
|
498
|
+
can_query<const Executor&, const execution::blocking_t&>())
|
499
|
+
== execution::blocking.always))
|
500
|
+
{
|
501
|
+
any_executor_base::construct_object(ex,
|
502
|
+
integral_constant<bool,
|
503
|
+
sizeof(Executor) <= sizeof(object_type)
|
504
|
+
&& alignment_of<Executor>::value <= alignment_of<object_type>::value
|
505
|
+
>());
|
506
|
+
}
|
507
|
+
|
508
|
+
template <ASIO_EXECUTION_EXECUTOR Executor>
|
509
|
+
any_executor_base(Executor other, true_type)
|
510
|
+
: object_fns_(object_fns_table<asio::detail::shared_ptr<void> >()),
|
511
|
+
target_fns_(other.target_fns_)
|
512
|
+
{
|
513
|
+
asio::detail::shared_ptr<Executor> p =
|
514
|
+
asio::detail::make_shared<Executor>(
|
515
|
+
ASIO_MOVE_CAST(Executor)(other));
|
516
|
+
target_ = p->template target<void>();
|
517
|
+
new (&object_) asio::detail::shared_ptr<void>(
|
518
|
+
ASIO_MOVE_CAST(asio::detail::shared_ptr<Executor>)(p));
|
519
|
+
}
|
520
|
+
|
521
|
+
any_executor_base(const any_executor_base& other) ASIO_NOEXCEPT
|
522
|
+
: object_fns_(other.object_fns_),
|
523
|
+
target_fns_(other.target_fns_)
|
524
|
+
{
|
525
|
+
object_fns_->copy(*this, other);
|
526
|
+
}
|
527
|
+
|
528
|
+
~any_executor_base() ASIO_NOEXCEPT
|
529
|
+
{
|
530
|
+
object_fns_->destroy(*this);
|
531
|
+
}
|
532
|
+
|
533
|
+
any_executor_base& operator=(
|
534
|
+
const any_executor_base& other) ASIO_NOEXCEPT
|
535
|
+
{
|
536
|
+
if (this != &other)
|
537
|
+
{
|
538
|
+
object_fns_->destroy(*this);
|
539
|
+
object_fns_ = other.object_fns_;
|
540
|
+
target_fns_ = other.target_fns_;
|
541
|
+
object_fns_->copy(*this, other);
|
542
|
+
}
|
543
|
+
return *this;
|
544
|
+
}
|
545
|
+
|
546
|
+
any_executor_base& operator=(nullptr_t) ASIO_NOEXCEPT
|
547
|
+
{
|
548
|
+
object_fns_->destroy(*this);
|
549
|
+
target_ = 0;
|
550
|
+
object_fns_ = object_fns_table<void>();
|
551
|
+
target_fns_ = target_fns_table<void>();
|
552
|
+
return *this;
|
553
|
+
}
|
554
|
+
|
555
|
+
#if defined(ASIO_HAS_MOVE)
|
556
|
+
|
557
|
+
any_executor_base(any_executor_base&& other) ASIO_NOEXCEPT
|
558
|
+
: object_fns_(other.object_fns_),
|
559
|
+
target_fns_(other.target_fns_)
|
560
|
+
{
|
561
|
+
other.object_fns_ = object_fns_table<void>();
|
562
|
+
other.target_fns_ = target_fns_table<void>();
|
563
|
+
object_fns_->move(*this, other);
|
564
|
+
other.target_ = 0;
|
565
|
+
}
|
566
|
+
|
567
|
+
any_executor_base& operator=(
|
568
|
+
any_executor_base&& other) ASIO_NOEXCEPT
|
569
|
+
{
|
570
|
+
if (this != &other)
|
571
|
+
{
|
572
|
+
object_fns_->destroy(*this);
|
573
|
+
object_fns_ = other.object_fns_;
|
574
|
+
other.object_fns_ = object_fns_table<void>();
|
575
|
+
target_fns_ = other.target_fns_;
|
576
|
+
other.target_fns_ = target_fns_table<void>();
|
577
|
+
object_fns_->move(*this, other);
|
578
|
+
other.target_ = 0;
|
579
|
+
}
|
580
|
+
return *this;
|
581
|
+
}
|
582
|
+
|
583
|
+
#endif // defined(ASIO_HAS_MOVE)
|
584
|
+
|
585
|
+
void swap(any_executor_base& other) ASIO_NOEXCEPT
|
586
|
+
{
|
587
|
+
if (this != &other)
|
588
|
+
{
|
589
|
+
any_executor_base tmp(ASIO_MOVE_CAST(any_executor_base)(other));
|
590
|
+
other = ASIO_MOVE_CAST(any_executor_base)(*this);
|
591
|
+
*this = ASIO_MOVE_CAST(any_executor_base)(tmp);
|
592
|
+
}
|
593
|
+
}
|
594
|
+
|
595
|
+
template <typename F>
|
596
|
+
void execute(ASIO_MOVE_ARG(F) f) const
|
597
|
+
{
|
598
|
+
if (target_fns_->blocking_execute != 0)
|
599
|
+
{
|
600
|
+
asio::detail::non_const_lvalue<F> f2(f);
|
601
|
+
target_fns_->blocking_execute(*this, function_view(f2.value));
|
602
|
+
}
|
603
|
+
else
|
604
|
+
{
|
605
|
+
target_fns_->execute(*this,
|
606
|
+
function(ASIO_MOVE_CAST(F)(f), std::allocator<void>()));
|
607
|
+
}
|
608
|
+
}
|
609
|
+
|
610
|
+
template <typename Executor>
|
611
|
+
Executor* target()
|
612
|
+
{
|
613
|
+
return static_cast<Executor*>(target_);
|
614
|
+
}
|
615
|
+
|
616
|
+
template <typename Executor>
|
617
|
+
const Executor* target() const
|
618
|
+
{
|
619
|
+
return static_cast<Executor*>(target_);
|
620
|
+
}
|
621
|
+
|
622
|
+
const std::type_info& target_type() const
|
623
|
+
{
|
624
|
+
return target_fns_->target_type();
|
625
|
+
}
|
626
|
+
|
627
|
+
struct unspecified_bool_type_t {};
|
628
|
+
typedef void (*unspecified_bool_type)(unspecified_bool_type_t);
|
629
|
+
static void unspecified_bool_true(unspecified_bool_type_t) {}
|
630
|
+
|
631
|
+
operator unspecified_bool_type() const ASIO_NOEXCEPT
|
632
|
+
{
|
633
|
+
return target_ ? &any_executor_base::unspecified_bool_true : 0;
|
634
|
+
}
|
635
|
+
|
636
|
+
bool operator!() const ASIO_NOEXCEPT
|
637
|
+
{
|
638
|
+
return target_ == 0;
|
639
|
+
}
|
640
|
+
|
641
|
+
protected:
|
642
|
+
bool equality_helper(const any_executor_base& other) const ASIO_NOEXCEPT
|
643
|
+
{
|
644
|
+
if (target_ == other.target_)
|
645
|
+
return true;
|
646
|
+
if (target_ && !other.target_)
|
647
|
+
return false;
|
648
|
+
if (!target_ && other.target_)
|
649
|
+
return false;
|
650
|
+
if (target_fns_ != other.target_fns_)
|
651
|
+
return false;
|
652
|
+
return target_fns_->equal(*this, other);
|
653
|
+
}
|
654
|
+
|
655
|
+
template <typename Ex>
|
656
|
+
Ex& object()
|
657
|
+
{
|
658
|
+
return *static_cast<Ex*>(static_cast<void*>(&object_));
|
659
|
+
}
|
660
|
+
|
661
|
+
template <typename Ex>
|
662
|
+
const Ex& object() const
|
663
|
+
{
|
664
|
+
return *static_cast<const Ex*>(static_cast<const void*>(&object_));
|
665
|
+
}
|
666
|
+
|
667
|
+
struct object_fns
|
668
|
+
{
|
669
|
+
void (*destroy)(any_executor_base&);
|
670
|
+
void (*copy)(any_executor_base&, const any_executor_base&);
|
671
|
+
void (*move)(any_executor_base&, any_executor_base&);
|
672
|
+
const void* (*target)(const any_executor_base&);
|
673
|
+
};
|
674
|
+
|
675
|
+
static void destroy_void(any_executor_base&)
|
676
|
+
{
|
677
|
+
}
|
678
|
+
|
679
|
+
static void copy_void(any_executor_base& ex1, const any_executor_base&)
|
680
|
+
{
|
681
|
+
ex1.target_ = 0;
|
682
|
+
}
|
683
|
+
|
684
|
+
static void move_void(any_executor_base& ex1, any_executor_base&)
|
685
|
+
{
|
686
|
+
ex1.target_ = 0;
|
687
|
+
}
|
688
|
+
|
689
|
+
static const void* target_void(const any_executor_base&)
|
690
|
+
{
|
691
|
+
return 0;
|
692
|
+
}
|
693
|
+
|
694
|
+
template <typename Obj>
|
695
|
+
static const object_fns* object_fns_table(
|
696
|
+
typename enable_if<
|
697
|
+
is_same<Obj, void>::value
|
698
|
+
>::type* = 0)
|
699
|
+
{
|
700
|
+
static const object_fns fns =
|
701
|
+
{
|
702
|
+
&any_executor_base::destroy_void,
|
703
|
+
&any_executor_base::copy_void,
|
704
|
+
&any_executor_base::move_void,
|
705
|
+
&any_executor_base::target_void
|
706
|
+
};
|
707
|
+
return &fns;
|
708
|
+
}
|
709
|
+
|
710
|
+
static void destroy_shared(any_executor_base& ex)
|
711
|
+
{
|
712
|
+
typedef asio::detail::shared_ptr<void> type;
|
713
|
+
ex.object<type>().~type();
|
714
|
+
}
|
715
|
+
|
716
|
+
static void copy_shared(any_executor_base& ex1, const any_executor_base& ex2)
|
717
|
+
{
|
718
|
+
typedef asio::detail::shared_ptr<void> type;
|
719
|
+
new (&ex1.object_) type(ex2.object<type>());
|
720
|
+
ex1.target_ = ex2.target_;
|
721
|
+
}
|
722
|
+
|
723
|
+
static void move_shared(any_executor_base& ex1, any_executor_base& ex2)
|
724
|
+
{
|
725
|
+
typedef asio::detail::shared_ptr<void> type;
|
726
|
+
new (&ex1.object_) type(ASIO_MOVE_CAST(type)(ex2.object<type>()));
|
727
|
+
ex1.target_ = ex2.target_;
|
728
|
+
ex2.object<type>().~type();
|
729
|
+
}
|
730
|
+
|
731
|
+
static const void* target_shared(const any_executor_base& ex)
|
732
|
+
{
|
733
|
+
typedef asio::detail::shared_ptr<void> type;
|
734
|
+
return ex.object<type>().get();
|
735
|
+
}
|
736
|
+
|
737
|
+
template <typename Obj>
|
738
|
+
static const object_fns* object_fns_table(
|
739
|
+
typename enable_if<
|
740
|
+
is_same<Obj, asio::detail::shared_ptr<void> >::value
|
741
|
+
>::type* = 0)
|
742
|
+
{
|
743
|
+
static const object_fns fns =
|
744
|
+
{
|
745
|
+
&any_executor_base::destroy_shared,
|
746
|
+
&any_executor_base::copy_shared,
|
747
|
+
&any_executor_base::move_shared,
|
748
|
+
&any_executor_base::target_shared
|
749
|
+
};
|
750
|
+
return &fns;
|
751
|
+
}
|
752
|
+
|
753
|
+
template <typename Obj>
|
754
|
+
static void destroy_object(any_executor_base& ex)
|
755
|
+
{
|
756
|
+
ex.object<Obj>().~Obj();
|
757
|
+
}
|
758
|
+
|
759
|
+
template <typename Obj>
|
760
|
+
static void copy_object(any_executor_base& ex1, const any_executor_base& ex2)
|
761
|
+
{
|
762
|
+
new (&ex1.object_) Obj(ex2.object<Obj>());
|
763
|
+
ex1.target_ = &ex1.object<Obj>();
|
764
|
+
}
|
765
|
+
|
766
|
+
template <typename Obj>
|
767
|
+
static void move_object(any_executor_base& ex1, any_executor_base& ex2)
|
768
|
+
{
|
769
|
+
new (&ex1.object_) Obj(ASIO_MOVE_CAST(Obj)(ex2.object<Obj>()));
|
770
|
+
ex1.target_ = &ex1.object<Obj>();
|
771
|
+
ex2.object<Obj>().~Obj();
|
772
|
+
}
|
773
|
+
|
774
|
+
template <typename Obj>
|
775
|
+
static const void* target_object(const any_executor_base& ex)
|
776
|
+
{
|
777
|
+
return &ex.object<Obj>();
|
778
|
+
}
|
779
|
+
|
780
|
+
template <typename Obj>
|
781
|
+
static const object_fns* object_fns_table(
|
782
|
+
typename enable_if<
|
783
|
+
!is_same<Obj, void>::value
|
784
|
+
&& !is_same<Obj, asio::detail::shared_ptr<void> >::value
|
785
|
+
>::type* = 0)
|
786
|
+
{
|
787
|
+
static const object_fns fns =
|
788
|
+
{
|
789
|
+
&any_executor_base::destroy_object<Obj>,
|
790
|
+
&any_executor_base::copy_object<Obj>,
|
791
|
+
&any_executor_base::move_object<Obj>,
|
792
|
+
&any_executor_base::target_object<Obj>
|
793
|
+
};
|
794
|
+
return &fns;
|
795
|
+
}
|
796
|
+
|
797
|
+
typedef asio::detail::executor_function function;
|
798
|
+
typedef asio::detail::executor_function_view function_view;
|
799
|
+
|
800
|
+
struct target_fns
|
801
|
+
{
|
802
|
+
const std::type_info& (*target_type)();
|
803
|
+
bool (*equal)(const any_executor_base&, const any_executor_base&);
|
804
|
+
void (*execute)(const any_executor_base&, ASIO_MOVE_ARG(function));
|
805
|
+
void (*blocking_execute)(const any_executor_base&, function_view);
|
806
|
+
};
|
807
|
+
|
808
|
+
static const std::type_info& target_type_void()
|
809
|
+
{
|
810
|
+
return typeid(void);
|
811
|
+
}
|
812
|
+
|
813
|
+
static bool equal_void(const any_executor_base&, const any_executor_base&)
|
814
|
+
{
|
815
|
+
return true;
|
816
|
+
}
|
817
|
+
|
818
|
+
static void execute_void(const any_executor_base&,
|
819
|
+
ASIO_MOVE_ARG(function))
|
820
|
+
{
|
821
|
+
bad_executor ex;
|
822
|
+
asio::detail::throw_exception(ex);
|
823
|
+
}
|
824
|
+
|
825
|
+
static void blocking_execute_void(const any_executor_base&, function_view)
|
826
|
+
{
|
827
|
+
bad_executor ex;
|
828
|
+
asio::detail::throw_exception(ex);
|
829
|
+
}
|
830
|
+
|
831
|
+
template <typename Ex>
|
832
|
+
static const target_fns* target_fns_table(
|
833
|
+
typename enable_if<
|
834
|
+
is_same<Ex, void>::value
|
835
|
+
>::type* = 0)
|
836
|
+
{
|
837
|
+
static const target_fns fns =
|
838
|
+
{
|
839
|
+
&any_executor_base::target_type_void,
|
840
|
+
&any_executor_base::equal_void,
|
841
|
+
&any_executor_base::execute_void,
|
842
|
+
&any_executor_base::blocking_execute_void
|
843
|
+
};
|
844
|
+
return &fns;
|
845
|
+
}
|
846
|
+
|
847
|
+
template <typename Ex>
|
848
|
+
static const std::type_info& target_type_ex()
|
849
|
+
{
|
850
|
+
return typeid(Ex);
|
851
|
+
}
|
852
|
+
|
853
|
+
template <typename Ex>
|
854
|
+
static bool equal_ex(const any_executor_base& ex1,
|
855
|
+
const any_executor_base& ex2)
|
856
|
+
{
|
857
|
+
return *ex1.target<Ex>() == *ex2.target<Ex>();
|
858
|
+
}
|
859
|
+
|
860
|
+
template <typename Ex>
|
861
|
+
static void execute_ex(const any_executor_base& ex,
|
862
|
+
ASIO_MOVE_ARG(function) f)
|
863
|
+
{
|
864
|
+
execution::execute(*ex.target<Ex>(), ASIO_MOVE_CAST(function)(f));
|
865
|
+
}
|
866
|
+
|
867
|
+
template <typename Ex>
|
868
|
+
static void blocking_execute_ex(const any_executor_base& ex, function_view f)
|
869
|
+
{
|
870
|
+
execution::execute(*ex.target<Ex>(), f);
|
871
|
+
}
|
872
|
+
|
873
|
+
template <typename Ex>
|
874
|
+
static const target_fns* target_fns_table(bool is_always_blocking,
|
875
|
+
typename enable_if<
|
876
|
+
!is_same<Ex, void>::value
|
877
|
+
>::type* = 0)
|
878
|
+
{
|
879
|
+
static const target_fns fns_with_execute =
|
880
|
+
{
|
881
|
+
&any_executor_base::target_type_ex<Ex>,
|
882
|
+
&any_executor_base::equal_ex<Ex>,
|
883
|
+
&any_executor_base::execute_ex<Ex>,
|
884
|
+
0
|
885
|
+
};
|
886
|
+
|
887
|
+
static const target_fns fns_with_blocking_execute =
|
888
|
+
{
|
889
|
+
&any_executor_base::target_type_ex<Ex>,
|
890
|
+
&any_executor_base::equal_ex<Ex>,
|
891
|
+
0,
|
892
|
+
&any_executor_base::blocking_execute_ex<Ex>
|
893
|
+
};
|
894
|
+
|
895
|
+
return is_always_blocking ? &fns_with_blocking_execute : &fns_with_execute;
|
896
|
+
}
|
897
|
+
|
898
|
+
#if defined(ASIO_MSVC)
|
899
|
+
# pragma warning (push)
|
900
|
+
# pragma warning (disable:4702)
|
901
|
+
#endif // defined(ASIO_MSVC)
|
902
|
+
|
903
|
+
static void query_fn_void(void*, const void*, const void*)
|
904
|
+
{
|
905
|
+
bad_executor ex;
|
906
|
+
asio::detail::throw_exception(ex);
|
907
|
+
}
|
908
|
+
|
909
|
+
template <typename Ex, class Prop>
|
910
|
+
static void query_fn_non_void(void*, const void* ex, const void* prop,
|
911
|
+
typename enable_if<
|
912
|
+
asio::can_query<const Ex&, const Prop&>::value
|
913
|
+
&& is_same<typename Prop::polymorphic_query_result_type, void>::value
|
914
|
+
>::type*)
|
915
|
+
{
|
916
|
+
asio::query(*static_cast<const Ex*>(ex),
|
917
|
+
*static_cast<const Prop*>(prop));
|
918
|
+
}
|
919
|
+
|
920
|
+
template <typename Ex, class Prop>
|
921
|
+
static void query_fn_non_void(void*, const void*, const void*,
|
922
|
+
typename enable_if<
|
923
|
+
!asio::can_query<const Ex&, const Prop&>::value
|
924
|
+
&& is_same<typename Prop::polymorphic_query_result_type, void>::value
|
925
|
+
>::type*)
|
926
|
+
{
|
927
|
+
}
|
928
|
+
|
929
|
+
template <typename Ex, class Prop>
|
930
|
+
static void query_fn_non_void(void* result, const void* ex, const void* prop,
|
931
|
+
typename enable_if<
|
932
|
+
asio::can_query<const Ex&, const Prop&>::value
|
933
|
+
&& !is_same<typename Prop::polymorphic_query_result_type, void>::value
|
934
|
+
&& is_reference<typename Prop::polymorphic_query_result_type>::value
|
935
|
+
>::type*)
|
936
|
+
{
|
937
|
+
*static_cast<typename remove_reference<
|
938
|
+
typename Prop::polymorphic_query_result_type>::type**>(result)
|
939
|
+
= &static_cast<typename Prop::polymorphic_query_result_type>(
|
940
|
+
asio::query(*static_cast<const Ex*>(ex),
|
941
|
+
*static_cast<const Prop*>(prop)));
|
942
|
+
}
|
943
|
+
|
944
|
+
template <typename Ex, class Prop>
|
945
|
+
static void query_fn_non_void(void*, const void*, const void*,
|
946
|
+
typename enable_if<
|
947
|
+
!asio::can_query<const Ex&, const Prop&>::value
|
948
|
+
&& !is_same<typename Prop::polymorphic_query_result_type, void>::value
|
949
|
+
&& is_reference<typename Prop::polymorphic_query_result_type>::value
|
950
|
+
>::type*)
|
951
|
+
{
|
952
|
+
std::terminate(); // Combination should not be possible.
|
953
|
+
}
|
954
|
+
|
955
|
+
template <typename Ex, class Prop>
|
956
|
+
static void query_fn_non_void(void* result, const void* ex, const void* prop,
|
957
|
+
typename enable_if<
|
958
|
+
asio::can_query<const Ex&, const Prop&>::value
|
959
|
+
&& !is_same<typename Prop::polymorphic_query_result_type, void>::value
|
960
|
+
&& is_scalar<typename Prop::polymorphic_query_result_type>::value
|
961
|
+
>::type*)
|
962
|
+
{
|
963
|
+
*static_cast<typename Prop::polymorphic_query_result_type*>(result)
|
964
|
+
= static_cast<typename Prop::polymorphic_query_result_type>(
|
965
|
+
asio::query(*static_cast<const Ex*>(ex),
|
966
|
+
*static_cast<const Prop*>(prop)));
|
967
|
+
}
|
968
|
+
|
969
|
+
template <typename Ex, class Prop>
|
970
|
+
static void query_fn_non_void(void* result, const void*, const void*,
|
971
|
+
typename enable_if<
|
972
|
+
!asio::can_query<const Ex&, const Prop&>::value
|
973
|
+
&& !is_same<typename Prop::polymorphic_query_result_type, void>::value
|
974
|
+
&& is_scalar<typename Prop::polymorphic_query_result_type>::value
|
975
|
+
>::type*)
|
976
|
+
{
|
977
|
+
*static_cast<typename Prop::polymorphic_query_result_type*>(result)
|
978
|
+
= typename Prop::polymorphic_query_result_type();
|
979
|
+
}
|
980
|
+
|
981
|
+
template <typename Ex, class Prop>
|
982
|
+
static void query_fn_non_void(void* result, const void* ex, const void* prop,
|
983
|
+
typename enable_if<
|
984
|
+
asio::can_query<const Ex&, const Prop&>::value
|
985
|
+
&& !is_same<typename Prop::polymorphic_query_result_type, void>::value
|
986
|
+
&& !is_reference<typename Prop::polymorphic_query_result_type>::value
|
987
|
+
&& !is_scalar<typename Prop::polymorphic_query_result_type>::value
|
988
|
+
>::type*)
|
989
|
+
{
|
990
|
+
*static_cast<typename Prop::polymorphic_query_result_type**>(result)
|
991
|
+
= new typename Prop::polymorphic_query_result_type(
|
992
|
+
asio::query(*static_cast<const Ex*>(ex),
|
993
|
+
*static_cast<const Prop*>(prop)));
|
994
|
+
}
|
995
|
+
|
996
|
+
template <typename Ex, class Prop>
|
997
|
+
static void query_fn_non_void(void* result, const void*, const void*, ...)
|
998
|
+
{
|
999
|
+
*static_cast<typename Prop::polymorphic_query_result_type**>(result)
|
1000
|
+
= new typename Prop::polymorphic_query_result_type();
|
1001
|
+
}
|
1002
|
+
|
1003
|
+
template <typename Ex, class Prop>
|
1004
|
+
static void query_fn_impl(void* result, const void* ex, const void* prop,
|
1005
|
+
typename enable_if<
|
1006
|
+
is_same<Ex, void>::value
|
1007
|
+
>::type*)
|
1008
|
+
{
|
1009
|
+
query_fn_void(result, ex, prop);
|
1010
|
+
}
|
1011
|
+
|
1012
|
+
template <typename Ex, class Prop>
|
1013
|
+
static void query_fn_impl(void* result, const void* ex, const void* prop,
|
1014
|
+
typename enable_if<
|
1015
|
+
!is_same<Ex, void>::value
|
1016
|
+
>::type*)
|
1017
|
+
{
|
1018
|
+
query_fn_non_void<Ex, Prop>(result, ex, prop, 0);
|
1019
|
+
}
|
1020
|
+
|
1021
|
+
template <typename Ex, class Prop>
|
1022
|
+
static void query_fn(void* result, const void* ex, const void* prop)
|
1023
|
+
{
|
1024
|
+
query_fn_impl<Ex, Prop>(result, ex, prop, 0);
|
1025
|
+
}
|
1026
|
+
|
1027
|
+
template <typename Poly, typename Ex, class Prop>
|
1028
|
+
static Poly require_fn_impl(const void*, const void*,
|
1029
|
+
typename enable_if<
|
1030
|
+
is_same<Ex, void>::value
|
1031
|
+
>::type*)
|
1032
|
+
{
|
1033
|
+
bad_executor ex;
|
1034
|
+
asio::detail::throw_exception(ex);
|
1035
|
+
return Poly();
|
1036
|
+
}
|
1037
|
+
|
1038
|
+
template <typename Poly, typename Ex, class Prop>
|
1039
|
+
static Poly require_fn_impl(const void* ex, const void* prop,
|
1040
|
+
typename enable_if<
|
1041
|
+
!is_same<Ex, void>::value && Prop::is_requirable
|
1042
|
+
>::type*)
|
1043
|
+
{
|
1044
|
+
return asio::require(*static_cast<const Ex*>(ex),
|
1045
|
+
*static_cast<const Prop*>(prop));
|
1046
|
+
}
|
1047
|
+
|
1048
|
+
template <typename Poly, typename Ex, class Prop>
|
1049
|
+
static Poly require_fn_impl(const void*, const void*, ...)
|
1050
|
+
{
|
1051
|
+
return Poly();
|
1052
|
+
}
|
1053
|
+
|
1054
|
+
template <typename Poly, typename Ex, class Prop>
|
1055
|
+
static Poly require_fn(const void* ex, const void* prop)
|
1056
|
+
{
|
1057
|
+
return require_fn_impl<Poly, Ex, Prop>(ex, prop, 0);
|
1058
|
+
}
|
1059
|
+
|
1060
|
+
template <typename Poly, typename Ex, class Prop>
|
1061
|
+
static Poly prefer_fn_impl(const void*, const void*,
|
1062
|
+
typename enable_if<
|
1063
|
+
is_same<Ex, void>::value
|
1064
|
+
>::type*)
|
1065
|
+
{
|
1066
|
+
bad_executor ex;
|
1067
|
+
asio::detail::throw_exception(ex);
|
1068
|
+
return Poly();
|
1069
|
+
}
|
1070
|
+
|
1071
|
+
template <typename Poly, typename Ex, class Prop>
|
1072
|
+
static Poly prefer_fn_impl(const void* ex, const void* prop,
|
1073
|
+
typename enable_if<
|
1074
|
+
!is_same<Ex, void>::value && Prop::is_preferable
|
1075
|
+
>::type*)
|
1076
|
+
{
|
1077
|
+
return asio::prefer(*static_cast<const Ex*>(ex),
|
1078
|
+
*static_cast<const Prop*>(prop));
|
1079
|
+
}
|
1080
|
+
|
1081
|
+
template <typename Poly, typename Ex, class Prop>
|
1082
|
+
static Poly prefer_fn_impl(const void*, const void*, ...)
|
1083
|
+
{
|
1084
|
+
return Poly();
|
1085
|
+
}
|
1086
|
+
|
1087
|
+
template <typename Poly, typename Ex, class Prop>
|
1088
|
+
static Poly prefer_fn(const void* ex, const void* prop)
|
1089
|
+
{
|
1090
|
+
return prefer_fn_impl<Poly, Ex, Prop>(ex, prop, 0);
|
1091
|
+
}
|
1092
|
+
|
1093
|
+
template <typename Poly>
|
1094
|
+
struct prop_fns
|
1095
|
+
{
|
1096
|
+
void (*query)(void*, const void*, const void*);
|
1097
|
+
Poly (*require)(const void*, const void*);
|
1098
|
+
Poly (*prefer)(const void*, const void*);
|
1099
|
+
};
|
1100
|
+
|
1101
|
+
#if defined(ASIO_MSVC)
|
1102
|
+
# pragma warning (pop)
|
1103
|
+
#endif // defined(ASIO_MSVC)
|
1104
|
+
|
1105
|
+
private:
|
1106
|
+
template <typename Executor>
|
1107
|
+
static execution::blocking_t query_blocking(const Executor& ex, true_type)
|
1108
|
+
{
|
1109
|
+
return asio::query(ex, execution::blocking);
|
1110
|
+
}
|
1111
|
+
|
1112
|
+
template <typename Executor>
|
1113
|
+
static execution::blocking_t query_blocking(const Executor&, false_type)
|
1114
|
+
{
|
1115
|
+
return execution::blocking_t();
|
1116
|
+
}
|
1117
|
+
|
1118
|
+
template <typename Executor>
|
1119
|
+
void construct_object(Executor& ex, true_type)
|
1120
|
+
{
|
1121
|
+
object_fns_ = object_fns_table<Executor>();
|
1122
|
+
target_ = new (&object_) Executor(ASIO_MOVE_CAST(Executor)(ex));
|
1123
|
+
}
|
1124
|
+
|
1125
|
+
template <typename Executor>
|
1126
|
+
void construct_object(Executor& ex, false_type)
|
1127
|
+
{
|
1128
|
+
object_fns_ = object_fns_table<asio::detail::shared_ptr<void> >();
|
1129
|
+
asio::detail::shared_ptr<Executor> p =
|
1130
|
+
asio::detail::make_shared<Executor>(
|
1131
|
+
ASIO_MOVE_CAST(Executor)(ex));
|
1132
|
+
target_ = p.get();
|
1133
|
+
new (&object_) asio::detail::shared_ptr<void>(
|
1134
|
+
ASIO_MOVE_CAST(asio::detail::shared_ptr<Executor>)(p));
|
1135
|
+
}
|
1136
|
+
|
1137
|
+
/*private:*/public:
|
1138
|
+
// template <typename...> friend class any_executor;
|
1139
|
+
|
1140
|
+
typedef aligned_storage<
|
1141
|
+
sizeof(asio::detail::shared_ptr<void>),
|
1142
|
+
alignment_of<asio::detail::shared_ptr<void> >::value
|
1143
|
+
>::type object_type;
|
1144
|
+
|
1145
|
+
object_type object_;
|
1146
|
+
const object_fns* object_fns_;
|
1147
|
+
void* target_;
|
1148
|
+
const target_fns* target_fns_;
|
1149
|
+
};
|
1150
|
+
|
1151
|
+
template <typename Derived, typename Property, typename = void>
|
1152
|
+
struct any_executor_context
|
1153
|
+
{
|
1154
|
+
};
|
1155
|
+
|
1156
|
+
#if !defined(ASIO_NO_TS_EXECUTORS)
|
1157
|
+
|
1158
|
+
template <typename Derived, typename Property>
|
1159
|
+
struct any_executor_context<Derived, Property,
|
1160
|
+
typename enable_if<Property::value>::type>
|
1161
|
+
{
|
1162
|
+
typename Property::query_result_type context() const
|
1163
|
+
{
|
1164
|
+
return static_cast<const Derived*>(this)->query(typename Property::type());
|
1165
|
+
}
|
1166
|
+
};
|
1167
|
+
|
1168
|
+
#endif // !defined(ASIO_NO_TS_EXECUTORS)
|
1169
|
+
|
1170
|
+
} // namespace detail
|
1171
|
+
|
1172
|
+
template <>
|
1173
|
+
class any_executor<> : public detail::any_executor_base
|
1174
|
+
{
|
1175
|
+
public:
|
1176
|
+
any_executor() ASIO_NOEXCEPT
|
1177
|
+
: detail::any_executor_base()
|
1178
|
+
{
|
1179
|
+
}
|
1180
|
+
|
1181
|
+
any_executor(nullptr_t) ASIO_NOEXCEPT
|
1182
|
+
: detail::any_executor_base()
|
1183
|
+
{
|
1184
|
+
}
|
1185
|
+
|
1186
|
+
template <typename Executor>
|
1187
|
+
any_executor(Executor ex,
|
1188
|
+
typename enable_if<
|
1189
|
+
conditional<
|
1190
|
+
!is_same<Executor, any_executor>::value
|
1191
|
+
&& !is_base_of<detail::any_executor_base, Executor>::value,
|
1192
|
+
is_executor<Executor>,
|
1193
|
+
false_type
|
1194
|
+
>::type::value
|
1195
|
+
>::type* = 0)
|
1196
|
+
: detail::any_executor_base(
|
1197
|
+
ASIO_MOVE_CAST(Executor)(ex), false_type())
|
1198
|
+
{
|
1199
|
+
}
|
1200
|
+
|
1201
|
+
#if defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
1202
|
+
|
1203
|
+
template <typename... OtherSupportableProperties>
|
1204
|
+
any_executor(any_executor<OtherSupportableProperties...> other)
|
1205
|
+
: detail::any_executor_base(
|
1206
|
+
static_cast<const detail::any_executor_base&>(other))
|
1207
|
+
{
|
1208
|
+
}
|
1209
|
+
|
1210
|
+
#else // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
1211
|
+
|
1212
|
+
template <typename U0, typename U1, typename U2, typename U3,
|
1213
|
+
typename U4, typename U5, typename U6, typename U7>
|
1214
|
+
any_executor(any_executor<U0, U1, U2, U3, U4, U5, U6, U7> other)
|
1215
|
+
: detail::any_executor_base(
|
1216
|
+
static_cast<const detail::any_executor_base&>(other))
|
1217
|
+
{
|
1218
|
+
}
|
1219
|
+
|
1220
|
+
#endif // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
1221
|
+
|
1222
|
+
any_executor(const any_executor& other) ASIO_NOEXCEPT
|
1223
|
+
: detail::any_executor_base(
|
1224
|
+
static_cast<const detail::any_executor_base&>(other))
|
1225
|
+
{
|
1226
|
+
}
|
1227
|
+
|
1228
|
+
any_executor& operator=(const any_executor& other) ASIO_NOEXCEPT
|
1229
|
+
{
|
1230
|
+
if (this != &other)
|
1231
|
+
{
|
1232
|
+
detail::any_executor_base::operator=(
|
1233
|
+
static_cast<const detail::any_executor_base&>(other));
|
1234
|
+
}
|
1235
|
+
return *this;
|
1236
|
+
}
|
1237
|
+
|
1238
|
+
any_executor& operator=(nullptr_t p) ASIO_NOEXCEPT
|
1239
|
+
{
|
1240
|
+
detail::any_executor_base::operator=(p);
|
1241
|
+
return *this;
|
1242
|
+
}
|
1243
|
+
|
1244
|
+
#if defined(ASIO_HAS_MOVE)
|
1245
|
+
|
1246
|
+
any_executor(any_executor&& other) ASIO_NOEXCEPT
|
1247
|
+
: detail::any_executor_base(
|
1248
|
+
static_cast<any_executor_base&&>(
|
1249
|
+
static_cast<any_executor_base&>(other)))
|
1250
|
+
{
|
1251
|
+
}
|
1252
|
+
|
1253
|
+
any_executor& operator=(any_executor&& other) ASIO_NOEXCEPT
|
1254
|
+
{
|
1255
|
+
if (this != &other)
|
1256
|
+
{
|
1257
|
+
detail::any_executor_base::operator=(
|
1258
|
+
static_cast<detail::any_executor_base&&>(
|
1259
|
+
static_cast<detail::any_executor_base&>(other)));
|
1260
|
+
}
|
1261
|
+
return *this;
|
1262
|
+
}
|
1263
|
+
|
1264
|
+
#endif // defined(ASIO_HAS_MOVE)
|
1265
|
+
|
1266
|
+
void swap(any_executor& other) ASIO_NOEXCEPT
|
1267
|
+
{
|
1268
|
+
detail::any_executor_base::swap(
|
1269
|
+
static_cast<detail::any_executor_base&>(other));
|
1270
|
+
}
|
1271
|
+
|
1272
|
+
using detail::any_executor_base::execute;
|
1273
|
+
using detail::any_executor_base::target;
|
1274
|
+
using detail::any_executor_base::target_type;
|
1275
|
+
using detail::any_executor_base::operator unspecified_bool_type;
|
1276
|
+
using detail::any_executor_base::operator!;
|
1277
|
+
|
1278
|
+
bool equality_helper(const any_executor& other) const ASIO_NOEXCEPT
|
1279
|
+
{
|
1280
|
+
return any_executor_base::equality_helper(other);
|
1281
|
+
}
|
1282
|
+
};
|
1283
|
+
|
1284
|
+
inline bool operator==(const any_executor<>& a,
|
1285
|
+
const any_executor<>& b) ASIO_NOEXCEPT
|
1286
|
+
{
|
1287
|
+
return a.equality_helper(b);
|
1288
|
+
}
|
1289
|
+
|
1290
|
+
inline bool operator==(const any_executor<>& a, nullptr_t) ASIO_NOEXCEPT
|
1291
|
+
{
|
1292
|
+
return !a;
|
1293
|
+
}
|
1294
|
+
|
1295
|
+
inline bool operator==(nullptr_t, const any_executor<>& b) ASIO_NOEXCEPT
|
1296
|
+
{
|
1297
|
+
return !b;
|
1298
|
+
}
|
1299
|
+
|
1300
|
+
inline bool operator!=(const any_executor<>& a,
|
1301
|
+
const any_executor<>& b) ASIO_NOEXCEPT
|
1302
|
+
{
|
1303
|
+
return !a.equality_helper(b);
|
1304
|
+
}
|
1305
|
+
|
1306
|
+
inline bool operator!=(const any_executor<>& a, nullptr_t) ASIO_NOEXCEPT
|
1307
|
+
{
|
1308
|
+
return !!a;
|
1309
|
+
}
|
1310
|
+
|
1311
|
+
inline bool operator!=(nullptr_t, const any_executor<>& b) ASIO_NOEXCEPT
|
1312
|
+
{
|
1313
|
+
return !!b;
|
1314
|
+
}
|
1315
|
+
|
1316
|
+
inline void swap(any_executor<>& a, any_executor<>& b) ASIO_NOEXCEPT
|
1317
|
+
{
|
1318
|
+
return a.swap(b);
|
1319
|
+
}
|
1320
|
+
|
1321
|
+
#if defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
1322
|
+
|
1323
|
+
template <typename... SupportableProperties>
|
1324
|
+
class any_executor :
|
1325
|
+
public detail::any_executor_base,
|
1326
|
+
public detail::any_executor_context<
|
1327
|
+
any_executor<SupportableProperties...>,
|
1328
|
+
typename detail::supportable_properties<
|
1329
|
+
0, void(SupportableProperties...)>::find_context_as_property>
|
1330
|
+
{
|
1331
|
+
public:
|
1332
|
+
any_executor() ASIO_NOEXCEPT
|
1333
|
+
: detail::any_executor_base(),
|
1334
|
+
prop_fns_(prop_fns_table<void>())
|
1335
|
+
{
|
1336
|
+
}
|
1337
|
+
|
1338
|
+
any_executor(nullptr_t) ASIO_NOEXCEPT
|
1339
|
+
: detail::any_executor_base(),
|
1340
|
+
prop_fns_(prop_fns_table<void>())
|
1341
|
+
{
|
1342
|
+
}
|
1343
|
+
|
1344
|
+
template <typename Executor>
|
1345
|
+
any_executor(Executor ex,
|
1346
|
+
typename enable_if<
|
1347
|
+
conditional<
|
1348
|
+
!is_same<Executor, any_executor>::value
|
1349
|
+
&& !is_base_of<detail::any_executor_base, Executor>::value,
|
1350
|
+
detail::is_valid_target_executor<
|
1351
|
+
Executor, void(SupportableProperties...)>,
|
1352
|
+
false_type
|
1353
|
+
>::type::value
|
1354
|
+
>::type* = 0)
|
1355
|
+
: detail::any_executor_base(
|
1356
|
+
ASIO_MOVE_CAST(Executor)(ex), false_type()),
|
1357
|
+
prop_fns_(prop_fns_table<Executor>())
|
1358
|
+
{
|
1359
|
+
}
|
1360
|
+
|
1361
|
+
template <typename... OtherSupportableProperties>
|
1362
|
+
any_executor(any_executor<OtherSupportableProperties...> other,
|
1363
|
+
typename enable_if<
|
1364
|
+
conditional<
|
1365
|
+
!is_same<
|
1366
|
+
any_executor<OtherSupportableProperties...>,
|
1367
|
+
any_executor
|
1368
|
+
>::value,
|
1369
|
+
typename detail::supportable_properties<
|
1370
|
+
0, void(SupportableProperties...)>::template is_valid_target<
|
1371
|
+
any_executor<OtherSupportableProperties...> >,
|
1372
|
+
false_type
|
1373
|
+
>::type::value
|
1374
|
+
>::type* = 0)
|
1375
|
+
: detail::any_executor_base(ASIO_MOVE_CAST(
|
1376
|
+
any_executor<OtherSupportableProperties...>)(other), true_type()),
|
1377
|
+
prop_fns_(prop_fns_table<any_executor<OtherSupportableProperties...> >())
|
1378
|
+
{
|
1379
|
+
}
|
1380
|
+
|
1381
|
+
any_executor(const any_executor& other) ASIO_NOEXCEPT
|
1382
|
+
: detail::any_executor_base(
|
1383
|
+
static_cast<const detail::any_executor_base&>(other)),
|
1384
|
+
prop_fns_(other.prop_fns_)
|
1385
|
+
{
|
1386
|
+
}
|
1387
|
+
|
1388
|
+
any_executor& operator=(const any_executor& other) ASIO_NOEXCEPT
|
1389
|
+
{
|
1390
|
+
if (this != &other)
|
1391
|
+
{
|
1392
|
+
prop_fns_ = other.prop_fns_;
|
1393
|
+
detail::any_executor_base::operator=(
|
1394
|
+
static_cast<const detail::any_executor_base&>(other));
|
1395
|
+
}
|
1396
|
+
return *this;
|
1397
|
+
}
|
1398
|
+
|
1399
|
+
any_executor& operator=(nullptr_t p) ASIO_NOEXCEPT
|
1400
|
+
{
|
1401
|
+
prop_fns_ = prop_fns_table<void>();
|
1402
|
+
detail::any_executor_base::operator=(p);
|
1403
|
+
return *this;
|
1404
|
+
}
|
1405
|
+
|
1406
|
+
#if defined(ASIO_HAS_MOVE)
|
1407
|
+
|
1408
|
+
any_executor(any_executor&& other) ASIO_NOEXCEPT
|
1409
|
+
: detail::any_executor_base(
|
1410
|
+
static_cast<any_executor_base&&>(
|
1411
|
+
static_cast<any_executor_base&>(other))),
|
1412
|
+
prop_fns_(other.prop_fns_)
|
1413
|
+
{
|
1414
|
+
other.prop_fns_ = prop_fns_table<void>();
|
1415
|
+
}
|
1416
|
+
|
1417
|
+
any_executor& operator=(any_executor&& other) ASIO_NOEXCEPT
|
1418
|
+
{
|
1419
|
+
if (this != &other)
|
1420
|
+
{
|
1421
|
+
prop_fns_ = other.prop_fns_;
|
1422
|
+
detail::any_executor_base::operator=(
|
1423
|
+
static_cast<detail::any_executor_base&&>(
|
1424
|
+
static_cast<detail::any_executor_base&>(other)));
|
1425
|
+
}
|
1426
|
+
return *this;
|
1427
|
+
}
|
1428
|
+
|
1429
|
+
#endif // defined(ASIO_HAS_MOVE)
|
1430
|
+
|
1431
|
+
void swap(any_executor& other) ASIO_NOEXCEPT
|
1432
|
+
{
|
1433
|
+
if (this != &other)
|
1434
|
+
{
|
1435
|
+
detail::any_executor_base::swap(
|
1436
|
+
static_cast<detail::any_executor_base&>(other));
|
1437
|
+
const prop_fns<any_executor>* tmp_prop_fns = other.prop_fns_;
|
1438
|
+
other.prop_fns_ = prop_fns_;
|
1439
|
+
prop_fns_ = tmp_prop_fns;
|
1440
|
+
}
|
1441
|
+
}
|
1442
|
+
|
1443
|
+
using detail::any_executor_base::execute;
|
1444
|
+
using detail::any_executor_base::target;
|
1445
|
+
using detail::any_executor_base::target_type;
|
1446
|
+
using detail::any_executor_base::operator unspecified_bool_type;
|
1447
|
+
using detail::any_executor_base::operator!;
|
1448
|
+
|
1449
|
+
bool equality_helper(const any_executor& other) const ASIO_NOEXCEPT
|
1450
|
+
{
|
1451
|
+
return any_executor_base::equality_helper(other);
|
1452
|
+
}
|
1453
|
+
|
1454
|
+
template <typename T>
|
1455
|
+
struct find_convertible_property :
|
1456
|
+
detail::supportable_properties<
|
1457
|
+
0, void(SupportableProperties...)>::template
|
1458
|
+
find_convertible_property<T> {};
|
1459
|
+
|
1460
|
+
template <typename Property>
|
1461
|
+
void query(const Property& p,
|
1462
|
+
typename enable_if<
|
1463
|
+
is_same<
|
1464
|
+
typename find_convertible_property<Property>::query_result_type,
|
1465
|
+
void
|
1466
|
+
>::value
|
1467
|
+
>::type* = 0) const
|
1468
|
+
{
|
1469
|
+
typedef find_convertible_property<Property> found;
|
1470
|
+
prop_fns_[found::index].query(0, object_fns_->target(*this),
|
1471
|
+
&static_cast<const typename found::type&>(p));
|
1472
|
+
}
|
1473
|
+
|
1474
|
+
template <typename Property>
|
1475
|
+
typename find_convertible_property<Property>::query_result_type
|
1476
|
+
query(const Property& p,
|
1477
|
+
typename enable_if<
|
1478
|
+
!is_same<
|
1479
|
+
typename find_convertible_property<Property>::query_result_type,
|
1480
|
+
void
|
1481
|
+
>::value
|
1482
|
+
&&
|
1483
|
+
is_reference<
|
1484
|
+
typename find_convertible_property<Property>::query_result_type
|
1485
|
+
>::value
|
1486
|
+
>::type* = 0) const
|
1487
|
+
{
|
1488
|
+
typedef find_convertible_property<Property> found;
|
1489
|
+
typename remove_reference<
|
1490
|
+
typename found::query_result_type>::type* result = 0;
|
1491
|
+
prop_fns_[found::index].query(&result, object_fns_->target(*this),
|
1492
|
+
&static_cast<const typename found::type&>(p));
|
1493
|
+
return *result;
|
1494
|
+
}
|
1495
|
+
|
1496
|
+
template <typename Property>
|
1497
|
+
typename find_convertible_property<Property>::query_result_type
|
1498
|
+
query(const Property& p,
|
1499
|
+
typename enable_if<
|
1500
|
+
!is_same<
|
1501
|
+
typename find_convertible_property<Property>::query_result_type,
|
1502
|
+
void
|
1503
|
+
>::value
|
1504
|
+
&&
|
1505
|
+
is_scalar<
|
1506
|
+
typename find_convertible_property<Property>::query_result_type
|
1507
|
+
>::value
|
1508
|
+
>::type* = 0) const
|
1509
|
+
{
|
1510
|
+
typedef find_convertible_property<Property> found;
|
1511
|
+
typename found::query_result_type result;
|
1512
|
+
prop_fns_[found::index].query(&result, object_fns_->target(*this),
|
1513
|
+
&static_cast<const typename found::type&>(p));
|
1514
|
+
return result;
|
1515
|
+
}
|
1516
|
+
|
1517
|
+
template <typename Property>
|
1518
|
+
typename find_convertible_property<Property>::query_result_type
|
1519
|
+
query(const Property& p,
|
1520
|
+
typename enable_if<
|
1521
|
+
!is_same<
|
1522
|
+
typename find_convertible_property<Property>::query_result_type,
|
1523
|
+
void
|
1524
|
+
>::value
|
1525
|
+
&&
|
1526
|
+
!is_reference<
|
1527
|
+
typename find_convertible_property<Property>::query_result_type
|
1528
|
+
>::value
|
1529
|
+
&&
|
1530
|
+
!is_scalar<
|
1531
|
+
typename find_convertible_property<Property>::query_result_type
|
1532
|
+
>::value
|
1533
|
+
>::type* = 0) const
|
1534
|
+
{
|
1535
|
+
typedef find_convertible_property<Property> found;
|
1536
|
+
typename found::query_result_type* result;
|
1537
|
+
prop_fns_[found::index].query(&result, object_fns_->target(*this),
|
1538
|
+
&static_cast<const typename found::type&>(p));
|
1539
|
+
return *asio::detail::scoped_ptr<
|
1540
|
+
typename found::query_result_type>(result);
|
1541
|
+
}
|
1542
|
+
|
1543
|
+
template <typename T>
|
1544
|
+
struct find_convertible_requirable_property :
|
1545
|
+
detail::supportable_properties<
|
1546
|
+
0, void(SupportableProperties...)>::template
|
1547
|
+
find_convertible_requirable_property<T> {};
|
1548
|
+
|
1549
|
+
template <typename Property>
|
1550
|
+
any_executor require(const Property& p,
|
1551
|
+
typename enable_if<
|
1552
|
+
find_convertible_requirable_property<Property>::value
|
1553
|
+
>::type* = 0) const
|
1554
|
+
{
|
1555
|
+
typedef find_convertible_requirable_property<Property> found;
|
1556
|
+
return prop_fns_[found::index].require(object_fns_->target(*this),
|
1557
|
+
&static_cast<const typename found::type&>(p));
|
1558
|
+
}
|
1559
|
+
|
1560
|
+
template <typename T>
|
1561
|
+
struct find_convertible_preferable_property :
|
1562
|
+
detail::supportable_properties<
|
1563
|
+
0, void(SupportableProperties...)>::template
|
1564
|
+
find_convertible_preferable_property<T> {};
|
1565
|
+
|
1566
|
+
template <typename Property>
|
1567
|
+
any_executor prefer(const Property& p,
|
1568
|
+
typename enable_if<
|
1569
|
+
find_convertible_preferable_property<Property>::value
|
1570
|
+
>::type* = 0) const
|
1571
|
+
{
|
1572
|
+
typedef find_convertible_preferable_property<Property> found;
|
1573
|
+
return prop_fns_[found::index].prefer(object_fns_->target(*this),
|
1574
|
+
&static_cast<const typename found::type&>(p));
|
1575
|
+
}
|
1576
|
+
|
1577
|
+
//private:
|
1578
|
+
template <typename Ex>
|
1579
|
+
static const prop_fns<any_executor>* prop_fns_table()
|
1580
|
+
{
|
1581
|
+
static const prop_fns<any_executor> fns[] =
|
1582
|
+
{
|
1583
|
+
{
|
1584
|
+
&detail::any_executor_base::query_fn<
|
1585
|
+
Ex, SupportableProperties>,
|
1586
|
+
&detail::any_executor_base::require_fn<
|
1587
|
+
any_executor, Ex, SupportableProperties>,
|
1588
|
+
&detail::any_executor_base::prefer_fn<
|
1589
|
+
any_executor, Ex, SupportableProperties>
|
1590
|
+
}...
|
1591
|
+
};
|
1592
|
+
return fns;
|
1593
|
+
}
|
1594
|
+
|
1595
|
+
const prop_fns<any_executor>* prop_fns_;
|
1596
|
+
};
|
1597
|
+
|
1598
|
+
template <typename... SupportableProperties>
|
1599
|
+
inline bool operator==(const any_executor<SupportableProperties...>& a,
|
1600
|
+
const any_executor<SupportableProperties...>& b) ASIO_NOEXCEPT
|
1601
|
+
{
|
1602
|
+
return a.equality_helper(b);
|
1603
|
+
}
|
1604
|
+
|
1605
|
+
template <typename... SupportableProperties>
|
1606
|
+
inline bool operator==(const any_executor<SupportableProperties...>& a,
|
1607
|
+
nullptr_t) ASIO_NOEXCEPT
|
1608
|
+
{
|
1609
|
+
return !a;
|
1610
|
+
}
|
1611
|
+
|
1612
|
+
template <typename... SupportableProperties>
|
1613
|
+
inline bool operator==(nullptr_t,
|
1614
|
+
const any_executor<SupportableProperties...>& b) ASIO_NOEXCEPT
|
1615
|
+
{
|
1616
|
+
return !b;
|
1617
|
+
}
|
1618
|
+
|
1619
|
+
template <typename... SupportableProperties>
|
1620
|
+
inline bool operator!=(const any_executor<SupportableProperties...>& a,
|
1621
|
+
const any_executor<SupportableProperties...>& b) ASIO_NOEXCEPT
|
1622
|
+
{
|
1623
|
+
return !a.equality_helper(b);
|
1624
|
+
}
|
1625
|
+
|
1626
|
+
template <typename... SupportableProperties>
|
1627
|
+
inline bool operator!=(const any_executor<SupportableProperties...>& a,
|
1628
|
+
nullptr_t) ASIO_NOEXCEPT
|
1629
|
+
{
|
1630
|
+
return !!a;
|
1631
|
+
}
|
1632
|
+
|
1633
|
+
template <typename... SupportableProperties>
|
1634
|
+
inline bool operator!=(nullptr_t,
|
1635
|
+
const any_executor<SupportableProperties...>& b) ASIO_NOEXCEPT
|
1636
|
+
{
|
1637
|
+
return !!b;
|
1638
|
+
}
|
1639
|
+
|
1640
|
+
template <typename... SupportableProperties>
|
1641
|
+
inline void swap(any_executor<SupportableProperties...>& a,
|
1642
|
+
any_executor<SupportableProperties...>& b) ASIO_NOEXCEPT
|
1643
|
+
{
|
1644
|
+
return a.swap(b);
|
1645
|
+
}
|
1646
|
+
|
1647
|
+
#else // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
1648
|
+
|
1649
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS(n) \
|
1650
|
+
ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_##n
|
1651
|
+
|
1652
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_1 \
|
1653
|
+
{ \
|
1654
|
+
&detail::any_executor_base::query_fn<Ex, T1>, \
|
1655
|
+
&detail::any_executor_base::require_fn<any_executor, Ex, T1>, \
|
1656
|
+
&detail::any_executor_base::prefer_fn<any_executor, Ex, T1> \
|
1657
|
+
}
|
1658
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_2 \
|
1659
|
+
ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_1, \
|
1660
|
+
{ \
|
1661
|
+
&detail::any_executor_base::query_fn<Ex, T2>, \
|
1662
|
+
&detail::any_executor_base::require_fn<any_executor, Ex, T2>, \
|
1663
|
+
&detail::any_executor_base::prefer_fn<any_executor, Ex, T2> \
|
1664
|
+
}
|
1665
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_3 \
|
1666
|
+
ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_2, \
|
1667
|
+
{ \
|
1668
|
+
&detail::any_executor_base::query_fn<Ex, T3>, \
|
1669
|
+
&detail::any_executor_base::require_fn<any_executor, Ex, T3>, \
|
1670
|
+
&detail::any_executor_base::prefer_fn<any_executor, Ex, T3> \
|
1671
|
+
}
|
1672
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_4 \
|
1673
|
+
ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_3, \
|
1674
|
+
{ \
|
1675
|
+
&detail::any_executor_base::query_fn<Ex, T4>, \
|
1676
|
+
&detail::any_executor_base::require_fn<any_executor, Ex, T4>, \
|
1677
|
+
&detail::any_executor_base::prefer_fn<any_executor, Ex, T4> \
|
1678
|
+
}
|
1679
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_5 \
|
1680
|
+
ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_4, \
|
1681
|
+
{ \
|
1682
|
+
&detail::any_executor_base::query_fn<Ex, T5>, \
|
1683
|
+
&detail::any_executor_base::require_fn<any_executor, Ex, T5>, \
|
1684
|
+
&detail::any_executor_base::prefer_fn<any_executor, Ex, T5> \
|
1685
|
+
}
|
1686
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_6 \
|
1687
|
+
ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_5, \
|
1688
|
+
{ \
|
1689
|
+
&detail::any_executor_base::query_fn<Ex, T6>, \
|
1690
|
+
&detail::any_executor_base::require_fn<any_executor, Ex, T6>, \
|
1691
|
+
&detail::any_executor_base::prefer_fn<any_executor, Ex, T6> \
|
1692
|
+
}
|
1693
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_7 \
|
1694
|
+
ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_6, \
|
1695
|
+
{ \
|
1696
|
+
&detail::any_executor_base::query_fn<Ex, T7>, \
|
1697
|
+
&detail::any_executor_base::require_fn<any_executor, Ex, T7>, \
|
1698
|
+
&detail::any_executor_base::prefer_fn<any_executor, Ex, T7> \
|
1699
|
+
}
|
1700
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_8 \
|
1701
|
+
ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_7, \
|
1702
|
+
{ \
|
1703
|
+
&detail::any_executor_base::query_fn<Ex, T8>, \
|
1704
|
+
&detail::any_executor_base::require_fn<any_executor, Ex, T8>, \
|
1705
|
+
&detail::any_executor_base::prefer_fn<any_executor, Ex, T8> \
|
1706
|
+
}
|
1707
|
+
|
1708
|
+
#if defined(ASIO_HAS_MOVE)
|
1709
|
+
|
1710
|
+
# define ASIO_PRIVATE_ANY_EXECUTOR_MOVE_OPS \
|
1711
|
+
any_executor(any_executor&& other) ASIO_NOEXCEPT \
|
1712
|
+
: detail::any_executor_base( \
|
1713
|
+
static_cast<any_executor_base&&>( \
|
1714
|
+
static_cast<any_executor_base&>(other))), \
|
1715
|
+
prop_fns_(other.prop_fns_) \
|
1716
|
+
{ \
|
1717
|
+
other.prop_fns_ = prop_fns_table<void>(); \
|
1718
|
+
} \
|
1719
|
+
\
|
1720
|
+
any_executor& operator=(any_executor&& other) ASIO_NOEXCEPT \
|
1721
|
+
{ \
|
1722
|
+
if (this != &other) \
|
1723
|
+
{ \
|
1724
|
+
prop_fns_ = other.prop_fns_; \
|
1725
|
+
detail::any_executor_base::operator=( \
|
1726
|
+
static_cast<detail::any_executor_base&&>( \
|
1727
|
+
static_cast<detail::any_executor_base&>(other))); \
|
1728
|
+
} \
|
1729
|
+
return *this; \
|
1730
|
+
} \
|
1731
|
+
/**/
|
1732
|
+
#else // defined(ASIO_HAS_MOVE)
|
1733
|
+
|
1734
|
+
# define ASIO_PRIVATE_ANY_EXECUTOR_MOVE_OPS
|
1735
|
+
|
1736
|
+
#endif // defined(ASIO_HAS_MOVE)
|
1737
|
+
|
1738
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_DEF(n) \
|
1739
|
+
template <ASIO_VARIADIC_TPARAMS(n)> \
|
1740
|
+
class any_executor<ASIO_VARIADIC_TARGS(n)> : \
|
1741
|
+
public detail::any_executor_base, \
|
1742
|
+
public detail::any_executor_context< \
|
1743
|
+
any_executor<ASIO_VARIADIC_TARGS(n)>, \
|
1744
|
+
typename detail::supportable_properties< \
|
1745
|
+
0, void(ASIO_VARIADIC_TARGS(n))>::find_context_as_property> \
|
1746
|
+
{ \
|
1747
|
+
public: \
|
1748
|
+
any_executor() ASIO_NOEXCEPT \
|
1749
|
+
: detail::any_executor_base(), \
|
1750
|
+
prop_fns_(prop_fns_table<void>()) \
|
1751
|
+
{ \
|
1752
|
+
} \
|
1753
|
+
\
|
1754
|
+
any_executor(nullptr_t) ASIO_NOEXCEPT \
|
1755
|
+
: detail::any_executor_base(), \
|
1756
|
+
prop_fns_(prop_fns_table<void>()) \
|
1757
|
+
{ \
|
1758
|
+
} \
|
1759
|
+
\
|
1760
|
+
template <ASIO_EXECUTION_EXECUTOR Executor> \
|
1761
|
+
any_executor(Executor ex, \
|
1762
|
+
typename enable_if< \
|
1763
|
+
conditional< \
|
1764
|
+
!is_same<Executor, any_executor>::value \
|
1765
|
+
&& !is_base_of<detail::any_executor_base, Executor>::value, \
|
1766
|
+
detail::is_valid_target_executor< \
|
1767
|
+
Executor, void(ASIO_VARIADIC_TARGS(n))>, \
|
1768
|
+
false_type \
|
1769
|
+
>::type::value \
|
1770
|
+
>::type* = 0) \
|
1771
|
+
: detail::any_executor_base(ASIO_MOVE_CAST( \
|
1772
|
+
Executor)(ex), false_type()), \
|
1773
|
+
prop_fns_(prop_fns_table<Executor>()) \
|
1774
|
+
{ \
|
1775
|
+
} \
|
1776
|
+
\
|
1777
|
+
any_executor(const any_executor& other) ASIO_NOEXCEPT \
|
1778
|
+
: detail::any_executor_base( \
|
1779
|
+
static_cast<const detail::any_executor_base&>(other)), \
|
1780
|
+
prop_fns_(other.prop_fns_) \
|
1781
|
+
{ \
|
1782
|
+
} \
|
1783
|
+
\
|
1784
|
+
any_executor(any_executor<> other) \
|
1785
|
+
: detail::any_executor_base(ASIO_MOVE_CAST( \
|
1786
|
+
any_executor<>)(other), true_type()), \
|
1787
|
+
prop_fns_(prop_fns_table<any_executor<> >()) \
|
1788
|
+
{ \
|
1789
|
+
} \
|
1790
|
+
\
|
1791
|
+
template <typename OtherAnyExecutor> \
|
1792
|
+
any_executor(OtherAnyExecutor other, \
|
1793
|
+
typename enable_if< \
|
1794
|
+
conditional< \
|
1795
|
+
!is_same<OtherAnyExecutor, any_executor>::value \
|
1796
|
+
&& is_base_of<detail::any_executor_base, \
|
1797
|
+
OtherAnyExecutor>::value, \
|
1798
|
+
typename detail::supportable_properties< \
|
1799
|
+
0, void(ASIO_VARIADIC_TARGS(n))>::template \
|
1800
|
+
is_valid_target<OtherAnyExecutor>, \
|
1801
|
+
false_type \
|
1802
|
+
>::type::value \
|
1803
|
+
>::type* = 0) \
|
1804
|
+
: detail::any_executor_base(ASIO_MOVE_CAST( \
|
1805
|
+
OtherAnyExecutor)(other), true_type()), \
|
1806
|
+
prop_fns_(prop_fns_table<OtherAnyExecutor>()) \
|
1807
|
+
{ \
|
1808
|
+
} \
|
1809
|
+
\
|
1810
|
+
any_executor& operator=(const any_executor& other) ASIO_NOEXCEPT \
|
1811
|
+
{ \
|
1812
|
+
if (this != &other) \
|
1813
|
+
{ \
|
1814
|
+
prop_fns_ = other.prop_fns_; \
|
1815
|
+
detail::any_executor_base::operator=( \
|
1816
|
+
static_cast<const detail::any_executor_base&>(other)); \
|
1817
|
+
} \
|
1818
|
+
return *this; \
|
1819
|
+
} \
|
1820
|
+
\
|
1821
|
+
any_executor& operator=(nullptr_t p) ASIO_NOEXCEPT \
|
1822
|
+
{ \
|
1823
|
+
prop_fns_ = prop_fns_table<void>(); \
|
1824
|
+
detail::any_executor_base::operator=(p); \
|
1825
|
+
return *this; \
|
1826
|
+
} \
|
1827
|
+
\
|
1828
|
+
ASIO_PRIVATE_ANY_EXECUTOR_MOVE_OPS \
|
1829
|
+
\
|
1830
|
+
void swap(any_executor& other) ASIO_NOEXCEPT \
|
1831
|
+
{ \
|
1832
|
+
if (this != &other) \
|
1833
|
+
{ \
|
1834
|
+
detail::any_executor_base::swap( \
|
1835
|
+
static_cast<detail::any_executor_base&>(other)); \
|
1836
|
+
const prop_fns<any_executor>* tmp_prop_fns = other.prop_fns_; \
|
1837
|
+
other.prop_fns_ = prop_fns_; \
|
1838
|
+
prop_fns_ = tmp_prop_fns; \
|
1839
|
+
} \
|
1840
|
+
} \
|
1841
|
+
\
|
1842
|
+
using detail::any_executor_base::execute; \
|
1843
|
+
using detail::any_executor_base::target; \
|
1844
|
+
using detail::any_executor_base::target_type; \
|
1845
|
+
using detail::any_executor_base::operator unspecified_bool_type; \
|
1846
|
+
using detail::any_executor_base::operator!; \
|
1847
|
+
\
|
1848
|
+
bool equality_helper(const any_executor& other) const ASIO_NOEXCEPT \
|
1849
|
+
{ \
|
1850
|
+
return any_executor_base::equality_helper(other); \
|
1851
|
+
} \
|
1852
|
+
\
|
1853
|
+
template <typename T> \
|
1854
|
+
struct find_convertible_property : \
|
1855
|
+
detail::supportable_properties< \
|
1856
|
+
0, void(ASIO_VARIADIC_TARGS(n))>::template \
|
1857
|
+
find_convertible_property<T> {}; \
|
1858
|
+
\
|
1859
|
+
template <typename Property> \
|
1860
|
+
void query(const Property& p, \
|
1861
|
+
typename enable_if< \
|
1862
|
+
is_same< \
|
1863
|
+
typename find_convertible_property<Property>::query_result_type, \
|
1864
|
+
void \
|
1865
|
+
>::value \
|
1866
|
+
>::type* = 0) const \
|
1867
|
+
{ \
|
1868
|
+
typedef find_convertible_property<Property> found; \
|
1869
|
+
prop_fns_[found::index].query(0, object_fns_->target(*this), \
|
1870
|
+
&static_cast<const typename found::type&>(p)); \
|
1871
|
+
} \
|
1872
|
+
\
|
1873
|
+
template <typename Property> \
|
1874
|
+
typename find_convertible_property<Property>::query_result_type \
|
1875
|
+
query(const Property& p, \
|
1876
|
+
typename enable_if< \
|
1877
|
+
!is_same< \
|
1878
|
+
typename find_convertible_property<Property>::query_result_type, \
|
1879
|
+
void \
|
1880
|
+
>::value \
|
1881
|
+
&& \
|
1882
|
+
is_reference< \
|
1883
|
+
typename find_convertible_property<Property>::query_result_type \
|
1884
|
+
>::value \
|
1885
|
+
>::type* = 0) const \
|
1886
|
+
{ \
|
1887
|
+
typedef find_convertible_property<Property> found; \
|
1888
|
+
typename remove_reference< \
|
1889
|
+
typename found::query_result_type>::type* result; \
|
1890
|
+
prop_fns_[found::index].query(&result, object_fns_->target(*this), \
|
1891
|
+
&static_cast<const typename found::type&>(p)); \
|
1892
|
+
return *result; \
|
1893
|
+
} \
|
1894
|
+
\
|
1895
|
+
template <typename Property> \
|
1896
|
+
typename find_convertible_property<Property>::query_result_type \
|
1897
|
+
query(const Property& p, \
|
1898
|
+
typename enable_if< \
|
1899
|
+
!is_same< \
|
1900
|
+
typename find_convertible_property<Property>::query_result_type, \
|
1901
|
+
void \
|
1902
|
+
>::value \
|
1903
|
+
&& \
|
1904
|
+
is_scalar< \
|
1905
|
+
typename find_convertible_property<Property>::query_result_type \
|
1906
|
+
>::value \
|
1907
|
+
>::type* = 0) const \
|
1908
|
+
{ \
|
1909
|
+
typedef find_convertible_property<Property> found; \
|
1910
|
+
typename found::query_result_type result; \
|
1911
|
+
prop_fns_[found::index].query(&result, object_fns_->target(*this), \
|
1912
|
+
&static_cast<const typename found::type&>(p)); \
|
1913
|
+
return result; \
|
1914
|
+
} \
|
1915
|
+
\
|
1916
|
+
template <typename Property> \
|
1917
|
+
typename find_convertible_property<Property>::query_result_type \
|
1918
|
+
query(const Property& p, \
|
1919
|
+
typename enable_if< \
|
1920
|
+
!is_same< \
|
1921
|
+
typename find_convertible_property<Property>::query_result_type, \
|
1922
|
+
void \
|
1923
|
+
>::value \
|
1924
|
+
&& \
|
1925
|
+
!is_reference< \
|
1926
|
+
typename find_convertible_property<Property>::query_result_type \
|
1927
|
+
>::value \
|
1928
|
+
&& \
|
1929
|
+
!is_scalar< \
|
1930
|
+
typename find_convertible_property<Property>::query_result_type \
|
1931
|
+
>::value \
|
1932
|
+
>::type* = 0) const \
|
1933
|
+
{ \
|
1934
|
+
typedef find_convertible_property<Property> found; \
|
1935
|
+
typename found::query_result_type* result; \
|
1936
|
+
prop_fns_[found::index].query(&result, object_fns_->target(*this), \
|
1937
|
+
&static_cast<const typename found::type&>(p)); \
|
1938
|
+
return *asio::detail::scoped_ptr< \
|
1939
|
+
typename found::query_result_type>(result); \
|
1940
|
+
} \
|
1941
|
+
\
|
1942
|
+
template <typename T> \
|
1943
|
+
struct find_convertible_requirable_property : \
|
1944
|
+
detail::supportable_properties< \
|
1945
|
+
0, void(ASIO_VARIADIC_TARGS(n))>::template \
|
1946
|
+
find_convertible_requirable_property<T> {}; \
|
1947
|
+
\
|
1948
|
+
template <typename Property> \
|
1949
|
+
any_executor require(const Property& p, \
|
1950
|
+
typename enable_if< \
|
1951
|
+
find_convertible_requirable_property<Property>::value \
|
1952
|
+
>::type* = 0) const \
|
1953
|
+
{ \
|
1954
|
+
typedef find_convertible_requirable_property<Property> found; \
|
1955
|
+
return prop_fns_[found::index].require(object_fns_->target(*this), \
|
1956
|
+
&static_cast<const typename found::type&>(p)); \
|
1957
|
+
} \
|
1958
|
+
\
|
1959
|
+
template <typename T> \
|
1960
|
+
struct find_convertible_preferable_property : \
|
1961
|
+
detail::supportable_properties< \
|
1962
|
+
0, void(ASIO_VARIADIC_TARGS(n))>::template \
|
1963
|
+
find_convertible_preferable_property<T> {}; \
|
1964
|
+
\
|
1965
|
+
template <typename Property> \
|
1966
|
+
any_executor prefer(const Property& p, \
|
1967
|
+
typename enable_if< \
|
1968
|
+
find_convertible_preferable_property<Property>::value \
|
1969
|
+
>::type* = 0) const \
|
1970
|
+
{ \
|
1971
|
+
typedef find_convertible_preferable_property<Property> found; \
|
1972
|
+
return prop_fns_[found::index].prefer(object_fns_->target(*this), \
|
1973
|
+
&static_cast<const typename found::type&>(p)); \
|
1974
|
+
} \
|
1975
|
+
\
|
1976
|
+
template <typename Ex> \
|
1977
|
+
static const prop_fns<any_executor>* prop_fns_table() \
|
1978
|
+
{ \
|
1979
|
+
static const prop_fns<any_executor> fns[] = \
|
1980
|
+
{ \
|
1981
|
+
ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS(n) \
|
1982
|
+
}; \
|
1983
|
+
return fns; \
|
1984
|
+
} \
|
1985
|
+
\
|
1986
|
+
const prop_fns<any_executor>* prop_fns_; \
|
1987
|
+
typedef detail::supportable_properties<0, \
|
1988
|
+
void(ASIO_VARIADIC_TARGS(n))> supportable_properties_type; \
|
1989
|
+
}; \
|
1990
|
+
\
|
1991
|
+
template <ASIO_VARIADIC_TPARAMS(n)> \
|
1992
|
+
inline bool operator==(const any_executor<ASIO_VARIADIC_TARGS(n)>& a, \
|
1993
|
+
const any_executor<ASIO_VARIADIC_TARGS(n)>& b) ASIO_NOEXCEPT \
|
1994
|
+
{ \
|
1995
|
+
return a.equality_helper(b); \
|
1996
|
+
} \
|
1997
|
+
\
|
1998
|
+
template <ASIO_VARIADIC_TPARAMS(n)> \
|
1999
|
+
inline bool operator==(const any_executor<ASIO_VARIADIC_TARGS(n)>& a, \
|
2000
|
+
nullptr_t) ASIO_NOEXCEPT \
|
2001
|
+
{ \
|
2002
|
+
return !a; \
|
2003
|
+
} \
|
2004
|
+
\
|
2005
|
+
template <ASIO_VARIADIC_TPARAMS(n)> \
|
2006
|
+
inline bool operator==(nullptr_t, \
|
2007
|
+
const any_executor<ASIO_VARIADIC_TARGS(n)>& b) ASIO_NOEXCEPT \
|
2008
|
+
{ \
|
2009
|
+
return !b; \
|
2010
|
+
} \
|
2011
|
+
\
|
2012
|
+
template <ASIO_VARIADIC_TPARAMS(n)> \
|
2013
|
+
inline bool operator!=(const any_executor<ASIO_VARIADIC_TARGS(n)>& a, \
|
2014
|
+
const any_executor<ASIO_VARIADIC_TARGS(n)>& b) ASIO_NOEXCEPT \
|
2015
|
+
{ \
|
2016
|
+
return !a.equality_helper(b); \
|
2017
|
+
} \
|
2018
|
+
\
|
2019
|
+
template <ASIO_VARIADIC_TPARAMS(n)> \
|
2020
|
+
inline bool operator!=(const any_executor<ASIO_VARIADIC_TARGS(n)>& a, \
|
2021
|
+
nullptr_t) ASIO_NOEXCEPT \
|
2022
|
+
{ \
|
2023
|
+
return !!a; \
|
2024
|
+
} \
|
2025
|
+
\
|
2026
|
+
template <ASIO_VARIADIC_TPARAMS(n)> \
|
2027
|
+
inline bool operator!=(nullptr_t, \
|
2028
|
+
const any_executor<ASIO_VARIADIC_TARGS(n)>& b) ASIO_NOEXCEPT \
|
2029
|
+
{ \
|
2030
|
+
return !!b; \
|
2031
|
+
} \
|
2032
|
+
\
|
2033
|
+
template <ASIO_VARIADIC_TPARAMS(n)> \
|
2034
|
+
inline void swap(any_executor<ASIO_VARIADIC_TARGS(n)>& a, \
|
2035
|
+
any_executor<ASIO_VARIADIC_TARGS(n)>& b) ASIO_NOEXCEPT \
|
2036
|
+
{ \
|
2037
|
+
return a.swap(b); \
|
2038
|
+
} \
|
2039
|
+
/**/
|
2040
|
+
ASIO_VARIADIC_GENERATE(ASIO_PRIVATE_ANY_EXECUTOR_DEF)
|
2041
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_DEF
|
2042
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_MOVE_OPS
|
2043
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS
|
2044
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_1
|
2045
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_2
|
2046
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_3
|
2047
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_4
|
2048
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_5
|
2049
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_6
|
2050
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_7
|
2051
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_PROP_FNS_8
|
2052
|
+
|
2053
|
+
#endif // if defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2054
|
+
|
2055
|
+
} // namespace execution
|
2056
|
+
namespace traits {
|
2057
|
+
|
2058
|
+
#if !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
|
2059
|
+
#if defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2060
|
+
|
2061
|
+
template <typename... SupportableProperties>
|
2062
|
+
struct equality_comparable<execution::any_executor<SupportableProperties...> >
|
2063
|
+
{
|
2064
|
+
static const bool is_valid = true;
|
2065
|
+
static const bool is_noexcept = true;
|
2066
|
+
};
|
2067
|
+
|
2068
|
+
#else // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2069
|
+
|
2070
|
+
template <>
|
2071
|
+
struct equality_comparable<execution::any_executor<> >
|
2072
|
+
{
|
2073
|
+
static const bool is_valid = true;
|
2074
|
+
static const bool is_noexcept = true;
|
2075
|
+
};
|
2076
|
+
|
2077
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_EQUALITY_COMPARABLE_DEF(n) \
|
2078
|
+
template <ASIO_VARIADIC_TPARAMS(n)> \
|
2079
|
+
struct equality_comparable< \
|
2080
|
+
execution::any_executor<ASIO_VARIADIC_TARGS(n)> > \
|
2081
|
+
{ \
|
2082
|
+
static const bool is_valid = true; \
|
2083
|
+
static const bool is_noexcept = true; \
|
2084
|
+
}; \
|
2085
|
+
/**/
|
2086
|
+
ASIO_VARIADIC_GENERATE(
|
2087
|
+
ASIO_PRIVATE_ANY_EXECUTOR_EQUALITY_COMPARABLE_DEF)
|
2088
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_EQUALITY_COMPARABLE_DEF
|
2089
|
+
|
2090
|
+
#endif // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2091
|
+
#endif // !defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
|
2092
|
+
|
2093
|
+
#if !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
|
2094
|
+
#if defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2095
|
+
|
2096
|
+
template <typename F, typename... SupportableProperties>
|
2097
|
+
struct execute_member<execution::any_executor<SupportableProperties...>, F>
|
2098
|
+
{
|
2099
|
+
static const bool is_valid = true;
|
2100
|
+
static const bool is_noexcept = false;
|
2101
|
+
typedef void result_type;
|
2102
|
+
};
|
2103
|
+
|
2104
|
+
#else // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2105
|
+
|
2106
|
+
template <typename F>
|
2107
|
+
struct execute_member<execution::any_executor<>, F>
|
2108
|
+
{
|
2109
|
+
static const bool is_valid = true;
|
2110
|
+
static const bool is_noexcept = false;
|
2111
|
+
typedef void result_type;
|
2112
|
+
};
|
2113
|
+
|
2114
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_EXECUTE_MEMBER_DEF(n) \
|
2115
|
+
template <typename F, ASIO_VARIADIC_TPARAMS(n)> \
|
2116
|
+
struct execute_member< \
|
2117
|
+
execution::any_executor<ASIO_VARIADIC_TARGS(n)>, F> \
|
2118
|
+
{ \
|
2119
|
+
static const bool is_valid = true; \
|
2120
|
+
static const bool is_noexcept = false; \
|
2121
|
+
typedef void result_type; \
|
2122
|
+
}; \
|
2123
|
+
/**/
|
2124
|
+
ASIO_VARIADIC_GENERATE(
|
2125
|
+
ASIO_PRIVATE_ANY_EXECUTOR_EXECUTE_MEMBER_DEF)
|
2126
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_EXECUTE_MEMBER_DEF
|
2127
|
+
|
2128
|
+
#endif // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2129
|
+
#endif // !defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
|
2130
|
+
|
2131
|
+
#if !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
|
2132
|
+
#if defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2133
|
+
|
2134
|
+
template <typename Prop, typename... SupportableProperties>
|
2135
|
+
struct query_member<
|
2136
|
+
execution::any_executor<SupportableProperties...>, Prop,
|
2137
|
+
typename enable_if<
|
2138
|
+
execution::detail::supportable_properties<
|
2139
|
+
0, void(SupportableProperties...)>::template
|
2140
|
+
find_convertible_property<Prop>::value
|
2141
|
+
>::type>
|
2142
|
+
{
|
2143
|
+
static const bool is_valid = true;
|
2144
|
+
static const bool is_noexcept = false;
|
2145
|
+
typedef typename execution::detail::supportable_properties<
|
2146
|
+
0, void(SupportableProperties...)>::template
|
2147
|
+
find_convertible_property<Prop>::query_result_type result_type;
|
2148
|
+
};
|
2149
|
+
|
2150
|
+
#else // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2151
|
+
|
2152
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_QUERY_MEMBER_DEF(n) \
|
2153
|
+
template <typename Prop, ASIO_VARIADIC_TPARAMS(n)> \
|
2154
|
+
struct query_member< \
|
2155
|
+
execution::any_executor<ASIO_VARIADIC_TARGS(n)>, Prop, \
|
2156
|
+
typename enable_if< \
|
2157
|
+
execution::detail::supportable_properties< \
|
2158
|
+
0, void(ASIO_VARIADIC_TARGS(n))>::template \
|
2159
|
+
find_convertible_property<Prop>::value \
|
2160
|
+
>::type> \
|
2161
|
+
{ \
|
2162
|
+
static const bool is_valid = true; \
|
2163
|
+
static const bool is_noexcept = false; \
|
2164
|
+
typedef typename execution::detail::supportable_properties< \
|
2165
|
+
0, void(ASIO_VARIADIC_TARGS(n))>::template \
|
2166
|
+
find_convertible_property<Prop>::query_result_type result_type; \
|
2167
|
+
}; \
|
2168
|
+
/**/
|
2169
|
+
ASIO_VARIADIC_GENERATE(ASIO_PRIVATE_ANY_EXECUTOR_QUERY_MEMBER_DEF)
|
2170
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_QUERY_MEMBER_DEF
|
2171
|
+
|
2172
|
+
#endif // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2173
|
+
#endif // !defined(ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
|
2174
|
+
|
2175
|
+
#if !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
|
2176
|
+
#if defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2177
|
+
|
2178
|
+
template <typename Prop, typename... SupportableProperties>
|
2179
|
+
struct require_member<
|
2180
|
+
execution::any_executor<SupportableProperties...>, Prop,
|
2181
|
+
typename enable_if<
|
2182
|
+
execution::detail::supportable_properties<
|
2183
|
+
0, void(SupportableProperties...)>::template
|
2184
|
+
find_convertible_requirable_property<Prop>::value
|
2185
|
+
>::type>
|
2186
|
+
{
|
2187
|
+
static const bool is_valid = true;
|
2188
|
+
static const bool is_noexcept = false;
|
2189
|
+
typedef execution::any_executor<SupportableProperties...> result_type;
|
2190
|
+
};
|
2191
|
+
|
2192
|
+
#else // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2193
|
+
|
2194
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_REQUIRE_MEMBER_DEF(n) \
|
2195
|
+
template <typename Prop, ASIO_VARIADIC_TPARAMS(n)> \
|
2196
|
+
struct require_member< \
|
2197
|
+
execution::any_executor<ASIO_VARIADIC_TARGS(n)>, Prop, \
|
2198
|
+
typename enable_if< \
|
2199
|
+
execution::detail::supportable_properties< \
|
2200
|
+
0, void(ASIO_VARIADIC_TARGS(n))>::template \
|
2201
|
+
find_convertible_requirable_property<Prop>::value \
|
2202
|
+
>::type> \
|
2203
|
+
{ \
|
2204
|
+
static const bool is_valid = true; \
|
2205
|
+
static const bool is_noexcept = false; \
|
2206
|
+
typedef execution::any_executor<ASIO_VARIADIC_TARGS(n)> result_type; \
|
2207
|
+
}; \
|
2208
|
+
/**/
|
2209
|
+
ASIO_VARIADIC_GENERATE(
|
2210
|
+
ASIO_PRIVATE_ANY_EXECUTOR_REQUIRE_MEMBER_DEF)
|
2211
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_REQUIRE_MEMBER_DEF
|
2212
|
+
|
2213
|
+
#endif // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2214
|
+
#endif // !defined(ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
|
2215
|
+
|
2216
|
+
#if !defined(ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
|
2217
|
+
#if defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2218
|
+
|
2219
|
+
template <typename Prop, typename... SupportableProperties>
|
2220
|
+
struct prefer_member<
|
2221
|
+
execution::any_executor<SupportableProperties...>, Prop,
|
2222
|
+
typename enable_if<
|
2223
|
+
execution::detail::supportable_properties<
|
2224
|
+
0, void(SupportableProperties...)>::template
|
2225
|
+
find_convertible_preferable_property<Prop>::value
|
2226
|
+
>::type>
|
2227
|
+
{
|
2228
|
+
static const bool is_valid = true;
|
2229
|
+
static const bool is_noexcept = false;
|
2230
|
+
typedef execution::any_executor<SupportableProperties...> result_type;
|
2231
|
+
};
|
2232
|
+
|
2233
|
+
#else // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2234
|
+
|
2235
|
+
#define ASIO_PRIVATE_ANY_EXECUTOR_PREFER_FREE_DEF(n) \
|
2236
|
+
template <typename Prop, ASIO_VARIADIC_TPARAMS(n)> \
|
2237
|
+
struct prefer_member< \
|
2238
|
+
execution::any_executor<ASIO_VARIADIC_TARGS(n)>, Prop, \
|
2239
|
+
typename enable_if< \
|
2240
|
+
execution::detail::supportable_properties< \
|
2241
|
+
0, void(ASIO_VARIADIC_TARGS(n))>::template \
|
2242
|
+
find_convertible_preferable_property<Prop>::value \
|
2243
|
+
>::type> \
|
2244
|
+
{ \
|
2245
|
+
static const bool is_valid = true; \
|
2246
|
+
static const bool is_noexcept = false; \
|
2247
|
+
typedef execution::any_executor<ASIO_VARIADIC_TARGS(n)> result_type; \
|
2248
|
+
}; \
|
2249
|
+
/**/
|
2250
|
+
ASIO_VARIADIC_GENERATE(ASIO_PRIVATE_ANY_EXECUTOR_PREFER_FREE_DEF)
|
2251
|
+
#undef ASIO_PRIVATE_ANY_EXECUTOR_PREFER_FREE_DEF
|
2252
|
+
|
2253
|
+
#endif // defined(ASIO_HAS_VARIADIC_TEMPLATES)
|
2254
|
+
#endif // !defined(ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
|
2255
|
+
|
2256
|
+
} // namespace traits
|
2257
|
+
|
2258
|
+
#endif // defined(GENERATING_DOCUMENTATION)
|
2259
|
+
|
2260
|
+
} // namespace asio
|
2261
|
+
|
2262
|
+
#include "asio/detail/pop_options.hpp"
|
2263
|
+
|
2264
|
+
#endif // ASIO_EXECUTION_ANY_EXECUTOR_HPP
|