couchbase 3.0.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (901) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/ext/CMakeLists.txt +86 -169
  4. data/ext/build_version.hxx.in +3 -2
  5. data/ext/cmake/Backtrace.cmake +35 -0
  6. data/ext/cmake/BuildTracing.cmake +6 -0
  7. data/ext/cmake/Cache.cmake +29 -0
  8. data/ext/cmake/CompilerWarnings.cmake +78 -0
  9. data/ext/cmake/PreventInSourceBuilds.cmake +18 -0
  10. data/ext/cmake/Sanitizers.cmake +66 -0
  11. data/ext/cmake/StandardProjectSettings.cmake +40 -0
  12. data/ext/cmake/StaticAnalyzers.cmake +37 -0
  13. data/ext/cmake/Testing.cmake +52 -0
  14. data/ext/cmake/ThirdPartyDependencies.cmake +20 -0
  15. data/ext/cmake/VersionInfo.cmake +37 -0
  16. data/ext/couchbase/bucket.hxx +37 -12
  17. data/ext/couchbase/capabilities.hxx +117 -0
  18. data/ext/couchbase/cbcrypto/cbcrypto.cc +15 -15
  19. data/ext/couchbase/cluster.hxx +34 -2
  20. data/ext/couchbase/cluster_options.hxx +1 -0
  21. data/ext/couchbase/configuration.hxx +228 -52
  22. data/ext/couchbase/couchbase.cxx +914 -35
  23. data/ext/couchbase/diagnostics.hxx +251 -0
  24. data/ext/couchbase/document_id.hxx +3 -1
  25. data/ext/couchbase/errors.hxx +10 -1
  26. data/ext/couchbase/io/http_command.hxx +11 -7
  27. data/ext/couchbase/io/http_context.hxx +37 -0
  28. data/ext/couchbase/io/http_message.hxx +9 -0
  29. data/ext/couchbase/io/http_parser.hxx +2 -0
  30. data/ext/couchbase/io/http_session.hxx +100 -14
  31. data/ext/couchbase/io/http_session_manager.hxx +65 -5
  32. data/ext/couchbase/io/mcbp_command.hxx +16 -7
  33. data/ext/couchbase/io/mcbp_session.hxx +193 -51
  34. data/ext/couchbase/io/query_cache.hxx +61 -0
  35. data/ext/couchbase/io/retry_context.hxx +1 -2
  36. data/ext/couchbase/io/retry_orchestrator.hxx +16 -0
  37. data/ext/couchbase/io/retry_strategy.hxx +1 -1
  38. data/ext/couchbase/io/streams.hxx +61 -10
  39. data/ext/couchbase/operations.hxx +13 -0
  40. data/ext/couchbase/operations/analytics_dataset_create.hxx +1 -1
  41. data/ext/couchbase/operations/analytics_dataset_drop.hxx +1 -1
  42. data/ext/couchbase/operations/analytics_dataset_get_all.hxx +1 -1
  43. data/ext/couchbase/operations/analytics_dataverse_create.hxx +1 -1
  44. data/ext/couchbase/operations/analytics_dataverse_drop.hxx +1 -1
  45. data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +1 -1
  46. data/ext/couchbase/operations/analytics_index_create.hxx +1 -1
  47. data/ext/couchbase/operations/analytics_index_drop.hxx +1 -1
  48. data/ext/couchbase/operations/analytics_index_get_all.hxx +1 -1
  49. data/ext/couchbase/operations/analytics_link_connect.hxx +1 -1
  50. data/ext/couchbase/operations/analytics_link_disconnect.hxx +1 -1
  51. data/ext/couchbase/operations/bucket_create.hxx +11 -5
  52. data/ext/couchbase/operations/bucket_drop.hxx +1 -1
  53. data/ext/couchbase/operations/bucket_flush.hxx +1 -1
  54. data/ext/couchbase/operations/bucket_get.hxx +1 -1
  55. data/ext/couchbase/operations/bucket_get_all.hxx +1 -1
  56. data/ext/couchbase/operations/bucket_settings.hxx +43 -4
  57. data/ext/couchbase/operations/bucket_update.hxx +11 -5
  58. data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +1 -1
  59. data/ext/couchbase/operations/collection_create.hxx +3 -1
  60. data/ext/couchbase/operations/collection_drop.hxx +1 -1
  61. data/ext/couchbase/operations/collections_manifest_get.hxx +70 -0
  62. data/ext/couchbase/operations/document_analytics.hxx +6 -1
  63. data/ext/couchbase/operations/document_get_projected.hxx +1 -1
  64. data/ext/couchbase/operations/document_query.hxx +85 -8
  65. data/ext/couchbase/operations/document_search.hxx +14 -4
  66. data/ext/couchbase/operations/document_view.hxx +1 -1
  67. data/ext/couchbase/operations/group_drop.hxx +71 -0
  68. data/ext/couchbase/operations/group_get.hxx +75 -0
  69. data/ext/couchbase/operations/group_get_all.hxx +70 -0
  70. data/ext/couchbase/operations/group_upsert.hxx +118 -0
  71. data/ext/couchbase/operations/query_index_build_deferred.hxx +1 -1
  72. data/ext/couchbase/operations/query_index_create.hxx +1 -1
  73. data/ext/couchbase/operations/query_index_drop.hxx +1 -1
  74. data/ext/couchbase/operations/query_index_get_all.hxx +3 -2
  75. data/ext/couchbase/operations/rbac.hxx +276 -0
  76. data/ext/couchbase/operations/role_get_all.hxx +70 -0
  77. data/ext/couchbase/operations/scope_create.hxx +6 -2
  78. data/ext/couchbase/operations/scope_drop.hxx +1 -1
  79. data/ext/couchbase/operations/scope_get_all.hxx +1 -1
  80. data/ext/couchbase/operations/search_get_stats.hxx +59 -0
  81. data/ext/couchbase/operations/search_index_analyze_document.hxx +1 -1
  82. data/ext/couchbase/operations/search_index_control_ingest.hxx +1 -1
  83. data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +1 -1
  84. data/ext/couchbase/operations/search_index_control_query.hxx +1 -1
  85. data/ext/couchbase/operations/search_index_drop.hxx +1 -1
  86. data/ext/couchbase/operations/search_index_get.hxx +1 -1
  87. data/ext/couchbase/operations/search_index_get_all.hxx +1 -1
  88. data/ext/couchbase/operations/search_index_get_documents_count.hxx +24 -16
  89. data/ext/couchbase/operations/search_index_get_stats.hxx +81 -0
  90. data/ext/couchbase/operations/search_index_upsert.hxx +1 -1
  91. data/ext/couchbase/operations/user_drop.hxx +72 -0
  92. data/ext/couchbase/operations/user_get.hxx +76 -0
  93. data/ext/couchbase/operations/user_get_all.hxx +71 -0
  94. data/ext/couchbase/operations/user_upsert.hxx +125 -0
  95. data/ext/couchbase/operations/view_index_drop.hxx +1 -1
  96. data/ext/couchbase/operations/view_index_get.hxx +1 -1
  97. data/ext/couchbase/operations/view_index_get_all.hxx +1 -1
  98. data/ext/couchbase/operations/view_index_upsert.hxx +1 -1
  99. data/ext/couchbase/origin.hxx +4 -4
  100. data/ext/couchbase/platform/terminate_handler.cc +5 -4
  101. data/ext/couchbase/protocol/client_opcode.hxx +38 -38
  102. data/ext/couchbase/protocol/client_response.hxx +2 -2
  103. data/ext/couchbase/protocol/cmd_cluster_map_change_notification.hxx +6 -3
  104. data/ext/couchbase/protocol/cmd_get_cluster_config.hxx +3 -1
  105. data/ext/couchbase/protocol/magic.hxx +6 -6
  106. data/ext/couchbase/protocol/server_opcode.hxx +2 -2
  107. data/ext/couchbase/protocol/status.hxx +57 -57
  108. data/ext/couchbase/service_type.hxx +1 -1
  109. data/ext/couchbase/utils/connection_string.hxx +12 -3
  110. data/ext/couchbase/version.hxx +1 -1
  111. data/ext/extconf.rb +21 -9
  112. data/ext/test/test_helper.hxx +141 -0
  113. data/ext/test/test_helper_native.hxx +59 -0
  114. data/ext/test/test_helper_ruby.hxx +72 -0
  115. data/ext/test/test_native_diagnostics.cxx +385 -0
  116. data/ext/test/test_native_trivial_crud.cxx +83 -0
  117. data/ext/test/test_ruby_trivial_crud.cxx +35 -0
  118. data/ext/test/test_ruby_trivial_query.cxx +34 -0
  119. data/ext/third_party/asio/asio/include/asio.hpp +35 -0
  120. data/ext/third_party/asio/asio/include/asio/any_io_executor.hpp +71 -0
  121. data/ext/third_party/asio/asio/include/asio/associated_allocator.hpp +1 -7
  122. data/ext/third_party/asio/asio/include/asio/associated_executor.hpp +36 -19
  123. data/ext/third_party/asio/asio/include/asio/async_result.hpp +1 -8
  124. data/ext/third_party/asio/asio/include/asio/awaitable.hpp +14 -4
  125. data/ext/third_party/asio/asio/include/asio/basic_datagram_socket.hpp +12 -7
  126. data/ext/third_party/asio/asio/include/asio/basic_deadline_timer.hpp +4 -4
  127. data/ext/third_party/asio/asio/include/asio/basic_raw_socket.hpp +11 -7
  128. data/ext/third_party/asio/asio/include/asio/basic_seq_packet_socket.hpp +9 -4
  129. data/ext/third_party/asio/asio/include/asio/basic_serial_port.hpp +6 -6
  130. data/ext/third_party/asio/asio/include/asio/basic_signal_set.hpp +4 -4
  131. data/ext/third_party/asio/asio/include/asio/basic_socket.hpp +5 -5
  132. data/ext/third_party/asio/asio/include/asio/basic_socket_acceptor.hpp +13 -7
  133. data/ext/third_party/asio/asio/include/asio/basic_stream_socket.hpp +7 -3
  134. data/ext/third_party/asio/asio/include/asio/basic_waitable_timer.hpp +52 -4
  135. data/ext/third_party/asio/asio/include/asio/bind_executor.hpp +10 -15
  136. data/ext/third_party/asio/asio/include/asio/buffer.hpp +6 -4
  137. data/ext/third_party/asio/asio/include/asio/co_spawn.hpp +380 -9
  138. data/ext/third_party/asio/asio/include/asio/defer.hpp +4 -1
  139. data/ext/third_party/asio/asio/include/asio/detached.hpp +50 -0
  140. data/ext/third_party/asio/asio/include/asio/detail/atomic_count.hpp +19 -0
  141. data/ext/third_party/asio/asio/include/asio/detail/bind_handler.hpp +144 -26
  142. data/ext/third_party/asio/asio/include/asio/detail/blocking_executor_op.hpp +107 -0
  143. data/ext/third_party/asio/asio/include/asio/detail/buffer_sequence_adapter.hpp +106 -0
  144. data/ext/third_party/asio/asio/include/asio/detail/bulk_executor_op.hpp +88 -0
  145. data/ext/third_party/asio/asio/include/asio/detail/completion_handler.hpp +10 -5
  146. data/ext/third_party/asio/asio/include/asio/detail/conditionally_enabled_event.hpp +8 -0
  147. data/ext/third_party/asio/asio/include/asio/detail/config.hpp +360 -37
  148. data/ext/third_party/asio/asio/include/asio/detail/deadline_timer_service.hpp +17 -2
  149. data/ext/third_party/asio/asio/include/asio/detail/descriptor_ops.hpp +24 -6
  150. data/ext/third_party/asio/asio/include/asio/detail/descriptor_read_op.hpp +32 -14
  151. data/ext/third_party/asio/asio/include/asio/detail/descriptor_write_op.hpp +32 -14
  152. data/ext/third_party/asio/asio/include/asio/detail/executor_function.hpp +133 -34
  153. data/ext/third_party/asio/asio/include/asio/detail/handler_alloc_helpers.hpp +42 -0
  154. data/ext/third_party/asio/asio/include/asio/detail/handler_invoke_helpers.hpp +23 -0
  155. data/ext/third_party/asio/asio/include/asio/detail/handler_tracking.hpp +26 -0
  156. data/ext/third_party/asio/asio/include/asio/detail/handler_work.hpp +370 -45
  157. data/ext/third_party/asio/asio/include/asio/detail/impl/descriptor_ops.ipp +208 -74
  158. data/ext/third_party/asio/asio/include/asio/detail/impl/handler_tracking.ipp +39 -1
  159. data/ext/third_party/asio/asio/include/asio/detail/impl/reactive_serial_port_service.ipp +12 -15
  160. data/ext/third_party/asio/asio/include/asio/detail/impl/scheduler.ipp +37 -0
  161. data/ext/third_party/asio/asio/include/asio/detail/impl/signal_set_service.ipp +2 -1
  162. data/ext/third_party/asio/asio/include/asio/detail/impl/socket_ops.ipp +661 -274
  163. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_executor_service.hpp +210 -4
  164. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_service.hpp +8 -9
  165. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_service.ipp +5 -4
  166. data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_io_context.ipp +15 -6
  167. data/ext/third_party/asio/asio/include/asio/detail/io_object_impl.hpp +32 -50
  168. data/ext/third_party/asio/asio/include/asio/detail/memory.hpp +3 -0
  169. data/ext/third_party/asio/asio/include/asio/detail/null_event.hpp +6 -0
  170. data/ext/third_party/asio/asio/include/asio/detail/pop_options.hpp +1 -1
  171. data/ext/third_party/asio/asio/include/asio/detail/posix_event.hpp +13 -0
  172. data/ext/third_party/asio/asio/include/asio/detail/push_options.hpp +1 -1
  173. data/ext/third_party/asio/asio/include/asio/detail/reactive_descriptor_service.hpp +38 -13
  174. data/ext/third_party/asio/asio/include/asio/detail/reactive_null_buffers_op.hpp +12 -6
  175. data/ext/third_party/asio/asio/include/asio/detail/reactive_serial_port_service.hpp +2 -3
  176. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_accept_op.hpp +36 -24
  177. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_connect_op.hpp +17 -10
  178. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recv_op.hpp +38 -16
  179. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recvfrom_op.hpp +36 -14
  180. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recvmsg_op.hpp +21 -11
  181. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_send_op.hpp +43 -17
  182. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_sendto_op.hpp +39 -17
  183. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_service.hpp +44 -21
  184. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_service_base.hpp +41 -18
  185. data/ext/third_party/asio/asio/include/asio/detail/reactive_wait_op.hpp +12 -6
  186. data/ext/third_party/asio/asio/include/asio/detail/reactor_op.hpp +3 -1
  187. data/ext/third_party/asio/asio/include/asio/detail/resolve_endpoint_op.hpp +10 -8
  188. data/ext/third_party/asio/asio/include/asio/detail/resolve_query_op.hpp +11 -9
  189. data/ext/third_party/asio/asio/include/asio/detail/scheduler.hpp +8 -0
  190. data/ext/third_party/asio/asio/include/asio/detail/signal_handler.hpp +7 -5
  191. data/ext/third_party/asio/asio/include/asio/detail/socket_ops.hpp +46 -0
  192. data/ext/third_party/asio/asio/include/asio/detail/source_location.hpp +45 -0
  193. data/ext/third_party/asio/asio/include/asio/detail/std_event.hpp +12 -0
  194. data/ext/third_party/asio/asio/include/asio/detail/strand_executor_service.hpp +25 -1
  195. data/ext/third_party/asio/asio/include/asio/detail/strand_service.hpp +4 -1
  196. data/ext/third_party/asio/asio/include/asio/detail/thread_info_base.hpp +58 -0
  197. data/ext/third_party/asio/asio/include/asio/detail/type_traits.hpp +59 -0
  198. data/ext/third_party/asio/asio/include/asio/detail/variadic_templates.hpp +144 -1
  199. data/ext/third_party/asio/asio/include/asio/detail/wait_handler.hpp +9 -6
  200. data/ext/third_party/asio/asio/include/asio/detail/win_event.hpp +13 -0
  201. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_handle_read_op.hpp +9 -5
  202. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_handle_write_op.hpp +9 -5
  203. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_io_context.hpp +5 -1
  204. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_null_buffers_op.hpp +10 -6
  205. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_overlapped_op.hpp +9 -5
  206. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_overlapped_ptr.hpp +18 -6
  207. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_accept_op.hpp +15 -11
  208. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_connect_op.hpp +10 -5
  209. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recv_op.hpp +8 -4
  210. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recvfrom_op.hpp +8 -4
  211. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recvmsg_op.hpp +8 -4
  212. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_send_op.hpp +8 -4
  213. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_wait_op.hpp +10 -5
  214. data/ext/third_party/asio/asio/include/asio/detail/winrt_resolve_op.hpp +8 -4
  215. data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_connect_op.hpp +8 -4
  216. data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_recv_op.hpp +8 -4
  217. data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_send_op.hpp +8 -4
  218. data/ext/third_party/asio/asio/include/asio/detail/work_dispatcher.hpp +81 -6
  219. data/ext/third_party/asio/asio/include/asio/detail/wrapped_handler.hpp +45 -9
  220. data/ext/third_party/asio/asio/include/asio/dispatch.hpp +4 -1
  221. data/ext/third_party/asio/asio/include/asio/execution.hpp +48 -0
  222. data/ext/third_party/asio/asio/include/asio/execution/allocator.hpp +249 -0
  223. data/ext/third_party/asio/asio/include/asio/execution/any_executor.hpp +2264 -0
  224. data/ext/third_party/asio/asio/include/asio/execution/bad_executor.hpp +47 -0
  225. data/ext/third_party/asio/asio/include/asio/execution/blocking.hpp +1351 -0
  226. data/ext/third_party/asio/asio/include/asio/execution/blocking_adaptation.hpp +1064 -0
  227. data/ext/third_party/asio/asio/include/asio/execution/bulk_execute.hpp +390 -0
  228. data/ext/third_party/asio/asio/include/asio/execution/bulk_guarantee.hpp +1018 -0
  229. data/ext/third_party/asio/asio/include/asio/execution/connect.hpp +486 -0
  230. data/ext/third_party/asio/asio/include/asio/execution/context.hpp +185 -0
  231. data/ext/third_party/asio/asio/include/asio/execution/context_as.hpp +201 -0
  232. data/ext/third_party/asio/asio/include/asio/execution/detail/as_invocable.hpp +152 -0
  233. data/ext/third_party/asio/asio/include/asio/execution/detail/as_operation.hpp +105 -0
  234. data/ext/third_party/asio/asio/include/asio/execution/detail/as_receiver.hpp +128 -0
  235. data/ext/third_party/asio/asio/include/asio/execution/detail/bulk_sender.hpp +261 -0
  236. data/ext/third_party/asio/asio/include/asio/execution/detail/submit_receiver.hpp +233 -0
  237. data/ext/third_party/asio/asio/include/asio/execution/detail/void_receiver.hpp +90 -0
  238. data/ext/third_party/asio/asio/include/asio/execution/execute.hpp +264 -0
  239. data/ext/third_party/asio/asio/include/asio/execution/executor.hpp +238 -0
  240. data/ext/third_party/asio/asio/include/asio/execution/impl/bad_executor.ipp +40 -0
  241. data/ext/third_party/asio/asio/include/asio/execution/impl/receiver_invocation_error.ipp +36 -0
  242. data/ext/third_party/asio/asio/include/asio/execution/invocable_archetype.hpp +71 -0
  243. data/ext/third_party/asio/asio/include/asio/execution/mapping.hpp +917 -0
  244. data/ext/third_party/asio/asio/include/asio/execution/occupancy.hpp +178 -0
  245. data/ext/third_party/asio/asio/include/asio/execution/operation_state.hpp +94 -0
  246. data/ext/third_party/asio/asio/include/asio/execution/outstanding_work.hpp +721 -0
  247. data/ext/third_party/asio/asio/include/asio/execution/prefer_only.hpp +327 -0
  248. data/ext/third_party/asio/asio/include/asio/execution/receiver.hpp +280 -0
  249. data/ext/third_party/asio/asio/include/asio/execution/receiver_invocation_error.hpp +48 -0
  250. data/ext/third_party/asio/asio/include/asio/execution/relationship.hpp +720 -0
  251. data/ext/third_party/asio/asio/include/asio/execution/schedule.hpp +290 -0
  252. data/ext/third_party/asio/asio/include/asio/execution/scheduler.hpp +86 -0
  253. data/ext/third_party/asio/asio/include/asio/execution/sender.hpp +311 -0
  254. data/ext/third_party/asio/asio/include/asio/execution/set_done.hpp +253 -0
  255. data/ext/third_party/asio/asio/include/asio/execution/set_error.hpp +253 -0
  256. data/ext/third_party/asio/asio/include/asio/execution/set_value.hpp +486 -0
  257. data/ext/third_party/asio/asio/include/asio/execution/start.hpp +250 -0
  258. data/ext/third_party/asio/asio/include/asio/execution/submit.hpp +450 -0
  259. data/ext/third_party/asio/asio/include/asio/executor.hpp +7 -1
  260. data/ext/third_party/asio/asio/include/asio/executor_work_guard.hpp +126 -9
  261. data/ext/third_party/asio/asio/include/asio/handler_alloc_hook.hpp +28 -5
  262. data/ext/third_party/asio/asio/include/asio/handler_invoke_hook.hpp +29 -3
  263. data/ext/third_party/asio/asio/include/asio/impl/awaitable.hpp +14 -0
  264. data/ext/third_party/asio/asio/include/asio/impl/buffered_read_stream.hpp +44 -8
  265. data/ext/third_party/asio/asio/include/asio/impl/buffered_write_stream.hpp +44 -8
  266. data/ext/third_party/asio/asio/include/asio/impl/co_spawn.hpp +145 -7
  267. data/ext/third_party/asio/asio/include/asio/impl/compose.hpp +124 -22
  268. data/ext/third_party/asio/asio/include/asio/impl/connect.hpp +52 -8
  269. data/ext/third_party/asio/asio/include/asio/impl/defer.hpp +147 -12
  270. data/ext/third_party/asio/asio/include/asio/impl/dispatch.hpp +142 -12
  271. data/ext/third_party/asio/asio/include/asio/impl/executor.hpp +15 -101
  272. data/ext/third_party/asio/asio/include/asio/impl/executor.ipp +5 -0
  273. data/ext/third_party/asio/asio/include/asio/impl/handler_alloc_hook.ipp +13 -4
  274. data/ext/third_party/asio/asio/include/asio/impl/io_context.hpp +144 -57
  275. data/ext/third_party/asio/asio/include/asio/impl/multiple_exceptions.ipp +49 -0
  276. data/ext/third_party/asio/asio/include/asio/impl/post.hpp +147 -12
  277. data/ext/third_party/asio/asio/include/asio/impl/read.hpp +85 -18
  278. data/ext/third_party/asio/asio/include/asio/impl/read_at.hpp +59 -14
  279. data/ext/third_party/asio/asio/include/asio/impl/read_until.hpp +241 -56
  280. data/ext/third_party/asio/asio/include/asio/impl/redirect_error.hpp +22 -4
  281. data/ext/third_party/asio/asio/include/asio/impl/spawn.hpp +58 -22
  282. data/ext/third_party/asio/asio/include/asio/impl/src.hpp +3 -0
  283. data/ext/third_party/asio/asio/include/asio/impl/system_context.ipp +16 -4
  284. data/ext/third_party/asio/asio/include/asio/impl/system_executor.hpp +113 -12
  285. data/ext/third_party/asio/asio/include/asio/impl/thread_pool.hpp +260 -37
  286. data/ext/third_party/asio/asio/include/asio/impl/thread_pool.ipp +61 -7
  287. data/ext/third_party/asio/asio/include/asio/impl/use_awaitable.hpp +5 -2
  288. data/ext/third_party/asio/asio/include/asio/impl/use_future.hpp +147 -6
  289. data/ext/third_party/asio/asio/include/asio/impl/write.hpp +75 -14
  290. data/ext/third_party/asio/asio/include/asio/impl/write_at.hpp +53 -11
  291. data/ext/third_party/asio/asio/include/asio/io_context.hpp +706 -48
  292. data/ext/third_party/asio/asio/include/asio/io_context_strand.hpp +3 -1
  293. data/ext/third_party/asio/asio/include/asio/ip/basic_resolver.hpp +4 -4
  294. data/ext/third_party/asio/asio/include/asio/is_applicable_property.hpp +61 -0
  295. data/ext/third_party/asio/asio/include/asio/multiple_exceptions.hpp +58 -0
  296. data/ext/third_party/asio/asio/include/asio/posix/basic_descriptor.hpp +4 -4
  297. data/ext/third_party/asio/asio/include/asio/posix/basic_stream_descriptor.hpp +5 -5
  298. data/ext/third_party/asio/asio/include/asio/post.hpp +4 -1
  299. data/ext/third_party/asio/asio/include/asio/prefer.hpp +656 -0
  300. data/ext/third_party/asio/asio/include/asio/query.hpp +296 -0
  301. data/ext/third_party/asio/asio/include/asio/read_until.hpp +6 -6
  302. data/ext/third_party/asio/asio/include/asio/require.hpp +524 -0
  303. data/ext/third_party/asio/asio/include/asio/require_concept.hpp +310 -0
  304. data/ext/third_party/asio/asio/include/asio/spawn.hpp +12 -4
  305. data/ext/third_party/asio/asio/include/asio/ssl/detail/buffered_handshake_op.hpp +5 -0
  306. data/ext/third_party/asio/asio/include/asio/ssl/detail/engine.hpp +5 -0
  307. data/ext/third_party/asio/asio/include/asio/ssl/detail/handshake_op.hpp +5 -0
  308. data/ext/third_party/asio/asio/include/asio/ssl/detail/impl/engine.ipp +16 -3
  309. data/ext/third_party/asio/asio/include/asio/ssl/detail/io.hpp +38 -4
  310. data/ext/third_party/asio/asio/include/asio/ssl/detail/read_op.hpp +5 -0
  311. data/ext/third_party/asio/asio/include/asio/ssl/detail/shutdown_op.hpp +5 -0
  312. data/ext/third_party/asio/asio/include/asio/ssl/detail/stream_core.hpp +36 -2
  313. data/ext/third_party/asio/asio/include/asio/ssl/detail/write_op.hpp +10 -1
  314. data/ext/third_party/asio/asio/include/asio/ssl/stream.hpp +15 -0
  315. data/ext/third_party/asio/asio/include/asio/static_thread_pool.hpp +31 -0
  316. data/ext/third_party/asio/asio/include/asio/strand.hpp +232 -9
  317. data/ext/third_party/asio/asio/include/asio/system_context.hpp +12 -3
  318. data/ext/third_party/asio/asio/include/asio/system_executor.hpp +557 -24
  319. data/ext/third_party/asio/asio/include/asio/thread_pool.hpp +913 -37
  320. data/ext/third_party/asio/asio/include/asio/traits/bulk_execute_free.hpp +114 -0
  321. data/ext/third_party/asio/asio/include/asio/traits/bulk_execute_member.hpp +114 -0
  322. data/ext/third_party/asio/asio/include/asio/traits/connect_free.hpp +112 -0
  323. data/ext/third_party/asio/asio/include/asio/traits/connect_member.hpp +112 -0
  324. data/ext/third_party/asio/asio/include/asio/traits/equality_comparable.hpp +100 -0
  325. data/ext/third_party/asio/asio/include/asio/traits/execute_free.hpp +108 -0
  326. data/ext/third_party/asio/asio/include/asio/traits/execute_member.hpp +108 -0
  327. data/ext/third_party/asio/asio/include/asio/traits/prefer_free.hpp +108 -0
  328. data/ext/third_party/asio/asio/include/asio/traits/prefer_member.hpp +108 -0
  329. data/ext/third_party/asio/asio/include/asio/traits/query_free.hpp +108 -0
  330. data/ext/third_party/asio/asio/include/asio/traits/query_member.hpp +108 -0
  331. data/ext/third_party/asio/asio/include/asio/traits/query_static_constexpr_member.hpp +108 -0
  332. data/ext/third_party/asio/asio/include/asio/traits/require_concept_free.hpp +108 -0
  333. data/ext/third_party/asio/asio/include/asio/traits/require_concept_member.hpp +108 -0
  334. data/ext/third_party/asio/asio/include/asio/traits/require_free.hpp +108 -0
  335. data/ext/third_party/asio/asio/include/asio/traits/require_member.hpp +108 -0
  336. data/ext/third_party/asio/asio/include/asio/traits/schedule_free.hpp +108 -0
  337. data/ext/third_party/asio/asio/include/asio/traits/schedule_member.hpp +108 -0
  338. data/ext/third_party/asio/asio/include/asio/traits/set_done_free.hpp +108 -0
  339. data/ext/third_party/asio/asio/include/asio/traits/set_done_member.hpp +108 -0
  340. data/ext/third_party/asio/asio/include/asio/traits/set_error_free.hpp +112 -0
  341. data/ext/third_party/asio/asio/include/asio/traits/set_error_member.hpp +112 -0
  342. data/ext/third_party/asio/asio/include/asio/traits/set_value_free.hpp +234 -0
  343. data/ext/third_party/asio/asio/include/asio/traits/set_value_member.hpp +234 -0
  344. data/ext/third_party/asio/asio/include/asio/traits/start_free.hpp +108 -0
  345. data/ext/third_party/asio/asio/include/asio/traits/start_member.hpp +108 -0
  346. data/ext/third_party/asio/asio/include/asio/traits/static_query.hpp +108 -0
  347. data/ext/third_party/asio/asio/include/asio/traits/static_require.hpp +123 -0
  348. data/ext/third_party/asio/asio/include/asio/traits/static_require_concept.hpp +123 -0
  349. data/ext/third_party/asio/asio/include/asio/traits/submit_free.hpp +112 -0
  350. data/ext/third_party/asio/asio/include/asio/traits/submit_member.hpp +112 -0
  351. data/ext/third_party/asio/asio/include/asio/ts/executor.hpp +1 -0
  352. data/ext/third_party/asio/asio/include/asio/ts/netfwd.hpp +67 -8
  353. data/ext/third_party/asio/asio/include/asio/use_awaitable.hpp +63 -4
  354. data/ext/third_party/asio/asio/include/asio/version.hpp +1 -1
  355. data/ext/third_party/asio/asio/include/asio/windows/basic_object_handle.hpp +4 -4
  356. data/ext/third_party/asio/asio/include/asio/windows/basic_overlapped_handle.hpp +2 -2
  357. data/ext/third_party/asio/asio/include/asio/windows/basic_random_access_handle.hpp +5 -5
  358. data/ext/third_party/asio/asio/include/asio/windows/basic_stream_handle.hpp +5 -5
  359. data/ext/third_party/asio/asio/include/asio/windows/overlapped_ptr.hpp +4 -2
  360. data/ext/third_party/gsl/CMakeLists.txt +13 -5
  361. data/ext/third_party/gsl/include/gsl/gsl_assert +1 -1
  362. data/ext/third_party/gsl/include/gsl/gsl_byte +3 -3
  363. data/ext/third_party/gsl/include/gsl/gsl_narrow +52 -0
  364. data/ext/third_party/gsl/include/gsl/gsl_util +8 -50
  365. data/ext/third_party/gsl/include/gsl/multi_span +0 -10
  366. data/ext/third_party/gsl/include/gsl/pointers +14 -28
  367. data/ext/third_party/gsl/include/gsl/span +98 -46
  368. data/ext/third_party/gsl/include/gsl/string_span +37 -47
  369. data/ext/third_party/http_parser/http_parser.c +17 -10
  370. data/ext/third_party/http_parser/http_parser.h +4 -2
  371. data/ext/third_party/json/include/tao/json/basic_value.hpp +3 -2
  372. data/ext/third_party/json/include/tao/json/binary.hpp +4 -4
  373. data/ext/third_party/json/include/tao/json/binary_view.hpp +2 -2
  374. data/ext/third_party/json/include/tao/json/binding.hpp +2 -2
  375. data/ext/third_party/json/include/tao/json/binding/factory.hpp +8 -7
  376. data/ext/third_party/json/include/tao/json/binding/internal/array.hpp +2 -1
  377. data/ext/third_party/json/include/tao/json/binding/internal/object.hpp +6 -5
  378. data/ext/third_party/json/include/tao/json/binding/versions.hpp +3 -1
  379. data/ext/third_party/json/include/tao/json/cbor.hpp +1 -0
  380. data/ext/third_party/json/include/tao/json/cbor/consume_file.hpp +7 -7
  381. data/ext/third_party/json/include/tao/json/cbor/events/from_binary.hpp +43 -0
  382. data/ext/third_party/json/include/tao/json/cbor/events/from_file.hpp +4 -4
  383. data/ext/third_party/json/include/tao/json/cbor/events/from_string.hpp +3 -3
  384. data/ext/third_party/json/include/tao/json/cbor/from_binary.hpp +32 -0
  385. data/ext/third_party/json/include/tao/json/cbor/from_file.hpp +5 -5
  386. data/ext/third_party/json/include/tao/json/cbor/internal/grammar.hpp +2 -1
  387. data/ext/third_party/json/include/tao/json/consume_file.hpp +7 -7
  388. data/ext/third_party/json/include/tao/json/contrib/internal/indirect_traits.hpp +13 -6
  389. data/ext/third_party/json/include/tao/json/contrib/position.hpp +15 -15
  390. data/ext/third_party/json/include/tao/json/contrib/reference.hpp +5 -7
  391. data/ext/third_party/json/include/tao/json/contrib/schema.hpp +58 -35
  392. data/ext/third_party/json/include/tao/json/contrib/shared_ptr_traits.hpp +12 -4
  393. data/ext/third_party/json/include/tao/json/contrib/unique_ptr_traits.hpp +12 -4
  394. data/ext/third_party/json/include/tao/json/contrib/unordered_map_traits.hpp +1 -1
  395. data/ext/third_party/json/include/tao/json/contrib/unordered_set_traits.hpp +2 -2
  396. data/ext/third_party/json/include/tao/json/events/compare.hpp +2 -12
  397. data/ext/third_party/json/include/tao/json/events/from_file.hpp +4 -4
  398. data/ext/third_party/json/include/tao/json/events/from_string.hpp +2 -2
  399. data/ext/third_party/json/include/tao/json/events/invalid_string_to_binary.hpp +1 -1
  400. data/ext/third_party/json/include/tao/json/events/key_camel_case_to_snake_case.hpp +3 -3
  401. data/ext/third_party/json/include/tao/json/events/key_snake_case_to_camel_case.hpp +1 -1
  402. data/ext/third_party/json/include/tao/json/events/tee.hpp +2 -2
  403. data/ext/third_party/json/include/tao/json/events/to_pretty_stream.hpp +1 -1
  404. data/ext/third_party/json/include/tao/json/events/to_stream.hpp +1 -1
  405. data/ext/third_party/json/include/tao/json/events/transformer.hpp +3 -3
  406. data/ext/third_party/json/include/tao/json/events/validate_event_order.hpp +3 -3
  407. data/ext/third_party/json/include/tao/json/events/virtual_ref.hpp +6 -0
  408. data/ext/third_party/json/include/tao/json/external/pegtl.hpp +4 -13
  409. data/ext/third_party/json/include/tao/json/external/pegtl/argv_input.hpp +3 -5
  410. data/ext/third_party/json/include/tao/json/external/pegtl/ascii.hpp +5 -18
  411. data/ext/third_party/json/include/tao/json/external/pegtl/buffer_input.hpp +3 -3
  412. data/ext/third_party/json/include/tao/json/external/pegtl/change_action.hpp +2 -2
  413. data/ext/third_party/json/include/tao/json/external/pegtl/change_action_and_state.hpp +6 -6
  414. data/ext/third_party/json/include/tao/json/external/pegtl/change_action_and_states.hpp +5 -5
  415. data/ext/third_party/json/include/tao/json/external/pegtl/change_control.hpp +2 -2
  416. data/ext/third_party/json/include/tao/json/external/pegtl/change_state.hpp +6 -6
  417. data/ext/third_party/json/include/tao/json/external/pegtl/change_states.hpp +5 -5
  418. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/alphabet.hpp +52 -52
  419. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/analyze.hpp +176 -0
  420. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/analyze_traits.hpp +275 -0
  421. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/control_action.hpp +77 -0
  422. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/coverage.hpp +151 -0
  423. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/forward.hpp +16 -0
  424. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/http.hpp +37 -18
  425. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/internal.hpp +20 -22
  426. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf16.hpp +6 -10
  427. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf32.hpp +6 -10
  428. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf8.hpp +2 -4
  429. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/if_then.hpp +11 -10
  430. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/integer.hpp +116 -131
  431. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/endian.hpp +4 -4
  432. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/endian_gcc.hpp +2 -2
  433. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/endian_win.hpp +2 -2
  434. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_mask_uint.hpp +9 -9
  435. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_mask_uint8.hpp +9 -10
  436. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_uint.hpp +9 -9
  437. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_uint8.hpp +9 -10
  438. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_utf16.hpp +10 -10
  439. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_utf32.hpp +9 -9
  440. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/read_uint.hpp +3 -3
  441. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/set_stack_guard.hpp +52 -0
  442. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/parse_tree.hpp +80 -201
  443. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/parse_tree_to_dot.hpp +11 -10
  444. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/print.hpp +75 -0
  445. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/print_coverage.hpp +53 -0
  446. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/raw_string.hpp +45 -36
  447. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/remove_first_state.hpp +33 -50
  448. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/remove_last_states.hpp +117 -0
  449. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/rep_one_min_max.hpp +43 -11
  450. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/rep_string.hpp +1 -2
  451. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/shuffle_states.hpp +193 -0
  452. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/state_control.hpp +118 -0
  453. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/trace.hpp +227 -0
  454. data/ext/third_party/json/include/tao/json/external/pegtl/{uint16.hpp → contrib/uint16.hpp} +5 -5
  455. data/ext/third_party/json/include/tao/json/external/pegtl/{uint32.hpp → contrib/uint32.hpp} +5 -5
  456. data/ext/third_party/json/include/tao/json/external/pegtl/{uint64.hpp → contrib/uint64.hpp} +5 -5
  457. data/ext/third_party/json/include/tao/json/external/pegtl/{uint8.hpp → contrib/uint8.hpp} +5 -5
  458. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/unescape.hpp +14 -14
  459. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/uri.hpp +1 -1
  460. data/ext/third_party/json/include/tao/json/external/pegtl/{utf16.hpp → contrib/utf16.hpp} +5 -5
  461. data/ext/third_party/json/include/tao/json/external/pegtl/{utf32.hpp → contrib/utf32.hpp} +5 -5
  462. data/ext/third_party/json/include/tao/json/external/pegtl/cstream_input.hpp +2 -3
  463. data/ext/third_party/json/include/tao/json/external/pegtl/{internal/demangle.hpp → demangle.hpp} +12 -14
  464. data/ext/third_party/json/include/tao/json/external/pegtl/disable_action.hpp +2 -2
  465. data/ext/third_party/json/include/tao/json/external/pegtl/discard_input.hpp +2 -2
  466. data/ext/third_party/json/include/tao/json/external/pegtl/discard_input_on_failure.hpp +2 -2
  467. data/ext/third_party/json/include/tao/json/external/pegtl/discard_input_on_success.hpp +2 -2
  468. data/ext/third_party/json/include/tao/json/external/pegtl/enable_action.hpp +2 -2
  469. data/ext/third_party/json/include/tao/json/external/pegtl/file_input.hpp +1 -1
  470. data/ext/third_party/json/include/tao/json/external/pegtl/internal/action.hpp +19 -9
  471. data/ext/third_party/json/include/tao/json/external/pegtl/internal/action_input.hpp +7 -8
  472. data/ext/third_party/json/include/tao/json/external/pegtl/internal/any.hpp +14 -14
  473. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply.hpp +9 -9
  474. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply0.hpp +8 -7
  475. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply_single.hpp +4 -4
  476. data/ext/third_party/json/include/tao/json/external/pegtl/internal/at.hpp +17 -15
  477. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bof.hpp +7 -6
  478. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bol.hpp +8 -8
  479. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bump.hpp +4 -4
  480. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bump_help.hpp +3 -3
  481. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bytes.hpp +17 -10
  482. data/ext/third_party/json/include/tao/json/external/pegtl/internal/control.hpp +19 -9
  483. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cr_crlf_eol.hpp +2 -2
  484. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cr_eol.hpp +2 -2
  485. data/ext/third_party/json/include/tao/json/external/pegtl/internal/crlf_eol.hpp +2 -2
  486. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cstream_reader.hpp +1 -1
  487. data/ext/third_party/json/include/tao/json/external/pegtl/internal/{always_false.hpp → dependent_false.hpp} +3 -8
  488. data/ext/third_party/json/include/tao/json/external/pegtl/internal/disable.hpp +19 -9
  489. data/ext/third_party/json/include/tao/json/external/pegtl/internal/discard.hpp +7 -6
  490. data/ext/third_party/json/include/tao/json/external/pegtl/internal/enable.hpp +19 -9
  491. data/ext/third_party/json/include/tao/json/external/pegtl/internal/{skip_control.hpp → enable_control.hpp} +5 -5
  492. data/ext/third_party/json/include/tao/json/external/pegtl/internal/eof.hpp +7 -6
  493. data/ext/third_party/json/include/tao/json/external/pegtl/internal/eol.hpp +8 -7
  494. data/ext/third_party/json/include/tao/json/external/pegtl/internal/eolf.hpp +8 -7
  495. data/ext/third_party/json/include/tao/json/external/pegtl/internal/failure.hpp +32 -0
  496. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_mapper_posix.hpp +61 -10
  497. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_mapper_win32.hpp +27 -33
  498. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_reader.hpp +29 -26
  499. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_apply.hpp +3 -7
  500. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_apply0.hpp +3 -7
  501. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_match.hpp +4 -20
  502. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_unwind.hpp +21 -0
  503. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_apply.hpp +8 -7
  504. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_must.hpp +8 -9
  505. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_must_else.hpp +2 -0
  506. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_then_else.hpp +7 -7
  507. data/ext/third_party/json/include/tao/json/external/pegtl/internal/istream_reader.hpp +1 -2
  508. data/ext/third_party/json/include/tao/json/external/pegtl/internal/istring.hpp +11 -11
  509. data/ext/third_party/json/include/tao/json/external/pegtl/internal/iterator.hpp +7 -10
  510. data/ext/third_party/json/include/tao/json/external/pegtl/internal/lf_crlf_eol.hpp +2 -2
  511. data/ext/third_party/json/include/tao/json/external/pegtl/internal/lf_eol.hpp +2 -2
  512. data/ext/third_party/json/include/tao/json/external/pegtl/internal/list_tail.hpp +4 -2
  513. data/ext/third_party/json/include/tao/json/external/pegtl/internal/list_tail_pad.hpp +1 -1
  514. data/ext/third_party/json/include/tao/json/external/pegtl/internal/marker.hpp +3 -5
  515. data/ext/third_party/json/include/tao/json/external/pegtl/internal/minus.hpp +21 -0
  516. data/ext/third_party/json/include/tao/json/external/pegtl/internal/missing_apply.hpp +5 -2
  517. data/ext/third_party/json/include/tao/json/external/pegtl/internal/missing_apply0.hpp +5 -2
  518. data/ext/third_party/json/include/tao/json/external/pegtl/internal/must.hpp +16 -24
  519. data/ext/third_party/json/include/tao/json/external/pegtl/internal/not_at.hpp +17 -15
  520. data/ext/third_party/json/include/tao/json/external/pegtl/internal/one.hpp +23 -12
  521. data/ext/third_party/json/include/tao/json/external/pegtl/internal/opt.hpp +16 -16
  522. data/ext/third_party/json/include/tao/json/external/pegtl/internal/path_to_string.hpp +26 -0
  523. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_char.hpp +5 -5
  524. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_utf8.hpp +12 -13
  525. data/ext/third_party/json/include/tao/json/external/pegtl/internal/plus.hpp +18 -11
  526. data/ext/third_party/json/include/tao/json/external/pegtl/internal/raise.hpp +8 -17
  527. data/ext/third_party/json/include/tao/json/external/pegtl/internal/range.hpp +22 -17
  528. data/ext/third_party/json/include/tao/json/external/pegtl/internal/ranges.hpp +28 -18
  529. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rematch.hpp +12 -9
  530. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep.hpp +26 -25
  531. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep_min_max.hpp +23 -21
  532. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep_opt.hpp +24 -9
  533. data/ext/third_party/json/include/tao/json/external/pegtl/internal/require.hpp +10 -10
  534. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rules.hpp +4 -4
  535. data/ext/third_party/json/include/tao/json/external/pegtl/internal/seq.hpp +18 -33
  536. data/ext/third_party/json/include/tao/json/external/pegtl/internal/sor.hpp +24 -17
  537. data/ext/third_party/json/include/tao/json/external/pegtl/internal/star.hpp +13 -8
  538. data/ext/third_party/json/include/tao/json/external/pegtl/internal/state.hpp +21 -11
  539. data/ext/third_party/json/include/tao/json/external/pegtl/internal/string.hpp +11 -11
  540. data/ext/third_party/json/include/tao/json/external/pegtl/internal/success.hpp +32 -0
  541. data/ext/third_party/json/include/tao/json/external/pegtl/internal/try_catch_type.hpp +16 -16
  542. data/ext/third_party/json/include/tao/json/external/pegtl/internal/until.hpp +18 -14
  543. data/ext/third_party/json/include/tao/json/external/pegtl/istream_input.hpp +2 -3
  544. data/ext/third_party/json/include/tao/json/external/pegtl/match.hpp +125 -29
  545. data/ext/third_party/json/include/tao/json/external/pegtl/memory_input.hpp +32 -48
  546. data/ext/third_party/json/include/tao/json/external/pegtl/mmap_input.hpp +16 -16
  547. data/ext/third_party/json/include/tao/json/external/pegtl/must_if.hpp +64 -0
  548. data/ext/third_party/json/include/tao/json/external/pegtl/normal.hpp +25 -25
  549. data/ext/third_party/json/include/tao/json/external/pegtl/nothing.hpp +1 -2
  550. data/ext/third_party/json/include/tao/json/external/pegtl/parse.hpp +6 -8
  551. data/ext/third_party/json/include/tao/json/external/pegtl/parse_error.hpp +80 -35
  552. data/ext/third_party/json/include/tao/json/external/pegtl/position.hpp +18 -10
  553. data/ext/third_party/json/include/tao/json/external/pegtl/read_input.hpp +18 -38
  554. data/ext/third_party/json/include/tao/json/external/pegtl/rules.hpp +6 -5
  555. data/ext/third_party/json/include/tao/json/external/pegtl/string_input.hpp +3 -5
  556. data/ext/third_party/json/include/tao/json/external/pegtl/type_list.hpp +46 -0
  557. data/ext/third_party/json/include/tao/json/external/pegtl/visit.hpp +66 -0
  558. data/ext/third_party/json/include/tao/json/from_file.hpp +5 -5
  559. data/ext/third_party/json/include/tao/json/internal/action.hpp +3 -3
  560. data/ext/third_party/json/include/tao/json/internal/dependent_false.hpp +14 -0
  561. data/ext/third_party/json/include/tao/json/internal/errors.hpp +17 -17
  562. data/ext/third_party/json/include/tao/json/internal/format.hpp +0 -2
  563. data/ext/third_party/json/include/tao/json/internal/grammar.hpp +17 -17
  564. data/ext/third_party/json/include/tao/json/internal/pair.hpp +1 -1
  565. data/ext/third_party/json/include/tao/json/internal/sha256.hpp +8 -8
  566. data/ext/third_party/json/include/tao/json/internal/single.hpp +1 -1
  567. data/ext/third_party/json/include/tao/json/internal/type_traits.hpp +12 -29
  568. data/ext/third_party/json/include/tao/json/jaxn/consume_file.hpp +7 -7
  569. data/ext/third_party/json/include/tao/json/jaxn/events/from_file.hpp +4 -4
  570. data/ext/third_party/json/include/tao/json/jaxn/events/from_string.hpp +2 -2
  571. data/ext/third_party/json/include/tao/json/jaxn/from_file.hpp +5 -5
  572. data/ext/third_party/json/include/tao/json/jaxn/internal/action.hpp +6 -6
  573. data/ext/third_party/json/include/tao/json/jaxn/internal/bunescape_action.hpp +2 -2
  574. data/ext/third_party/json/include/tao/json/jaxn/internal/errors.hpp +43 -43
  575. data/ext/third_party/json/include/tao/json/jaxn/internal/grammar.hpp +36 -36
  576. data/ext/third_party/json/include/tao/json/jaxn/internal/integer.hpp +10 -11
  577. data/ext/third_party/json/include/tao/json/jaxn/is_identifier.hpp +2 -2
  578. data/ext/third_party/json/include/tao/json/jaxn/parts_parser.hpp +1 -3
  579. data/ext/third_party/json/include/tao/json/message_extension.hpp +2 -2
  580. data/ext/third_party/json/include/tao/json/msgpack.hpp +1 -0
  581. data/ext/third_party/json/include/tao/json/msgpack/consume_file.hpp +7 -7
  582. data/ext/third_party/json/include/tao/json/msgpack/events/from_binary.hpp +43 -0
  583. data/ext/third_party/json/include/tao/json/msgpack/events/from_file.hpp +4 -4
  584. data/ext/third_party/json/include/tao/json/msgpack/events/from_string.hpp +4 -4
  585. data/ext/third_party/json/include/tao/json/msgpack/events/to_stream.hpp +4 -4
  586. data/ext/third_party/json/include/tao/json/msgpack/from_binary.hpp +32 -0
  587. data/ext/third_party/json/include/tao/json/msgpack/from_file.hpp +5 -5
  588. data/ext/third_party/json/include/tao/json/msgpack/internal/grammar.hpp +2 -1
  589. data/ext/third_party/json/include/tao/json/operators.hpp +0 -4
  590. data/ext/third_party/json/include/tao/json/parts_parser.hpp +3 -7
  591. data/ext/third_party/json/include/tao/json/self_contained.hpp +6 -18
  592. data/ext/third_party/json/include/tao/json/span.hpp +94 -166
  593. data/ext/third_party/json/include/tao/json/ubjson.hpp +1 -0
  594. data/ext/third_party/json/include/tao/json/ubjson/consume_file.hpp +7 -7
  595. data/ext/third_party/json/include/tao/json/ubjson/events/from_binary.hpp +43 -0
  596. data/ext/third_party/json/include/tao/json/ubjson/events/from_file.hpp +4 -4
  597. data/ext/third_party/json/include/tao/json/ubjson/events/from_string.hpp +3 -3
  598. data/ext/third_party/json/include/tao/json/ubjson/from_binary.hpp +32 -0
  599. data/ext/third_party/json/include/tao/json/ubjson/from_file.hpp +5 -5
  600. data/ext/third_party/json/include/tao/json/ubjson/internal/grammar.hpp +5 -3
  601. data/ext/third_party/json/include/tao/json/utf8.hpp +1 -1
  602. data/ext/third_party/snappy/snappy.cc +6 -2
  603. data/ext/third_party/spdlog/CMakeLists.txt +24 -57
  604. data/ext/third_party/spdlog/cmake/version.rc.in +1 -1
  605. data/ext/third_party/spdlog/include/spdlog/async.h +3 -3
  606. data/ext/third_party/spdlog/include/spdlog/cfg/argv.h +3 -4
  607. data/ext/third_party/spdlog/include/spdlog/cfg/env.h +6 -4
  608. data/ext/third_party/spdlog/include/spdlog/cfg/helpers-inl.h +22 -6
  609. data/ext/third_party/spdlog/include/spdlog/cfg/helpers.h +3 -2
  610. data/ext/third_party/spdlog/include/spdlog/common.h +1 -2
  611. data/ext/third_party/spdlog/include/spdlog/details/fmt_helper.h +9 -1
  612. data/ext/third_party/spdlog/include/spdlog/details/os.h +1 -1
  613. data/ext/third_party/spdlog/include/spdlog/details/registry-inl.h +21 -7
  614. data/ext/third_party/spdlog/include/spdlog/details/registry.h +6 -3
  615. data/ext/third_party/spdlog/include/spdlog/details/synchronous_factory.h +1 -1
  616. data/ext/third_party/spdlog/include/spdlog/details/tcp_client-windows.h +1 -1
  617. data/ext/third_party/spdlog/include/spdlog/details/tcp_client.h +8 -7
  618. data/ext/third_party/spdlog/include/spdlog/fmt/bin_to_hex.h +2 -2
  619. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/chrono.h +66 -62
  620. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/color.h +35 -37
  621. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/compile.h +173 -103
  622. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/core.h +538 -445
  623. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/format-inl.h +114 -64
  624. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/format.h +1152 -1071
  625. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/locale.h +16 -16
  626. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/os.h +450 -0
  627. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/ostream.h +37 -13
  628. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/posix.h +1 -1
  629. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/printf.h +93 -63
  630. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/ranges.h +35 -36
  631. data/ext/third_party/spdlog/include/spdlog/fmt/chrono.h +20 -0
  632. data/ext/third_party/spdlog/include/spdlog/fmt/fmt.h +2 -0
  633. data/ext/third_party/spdlog/include/spdlog/logger-inl.h +5 -1
  634. data/ext/third_party/spdlog/include/spdlog/logger.h +50 -76
  635. data/ext/third_party/spdlog/include/spdlog/pattern_formatter-inl.h +23 -8
  636. data/ext/third_party/spdlog/include/spdlog/pattern_formatter.h +3 -3
  637. data/ext/third_party/spdlog/include/spdlog/sinks/daily_file_sink.h +1 -1
  638. data/ext/third_party/spdlog/include/spdlog/sinks/msvc_sink.h +5 -5
  639. data/ext/third_party/spdlog/include/spdlog/sinks/ringbuffer_sink.h +6 -4
  640. data/ext/third_party/spdlog/include/spdlog/sinks/stdout_sinks-inl.h +32 -3
  641. data/ext/third_party/spdlog/include/spdlog/sinks/stdout_sinks.h +7 -0
  642. data/ext/third_party/spdlog/include/spdlog/sinks/wincolor_sink-inl.h +4 -14
  643. data/ext/third_party/spdlog/include/spdlog/spdlog-inl.h +11 -1
  644. data/ext/third_party/spdlog/include/spdlog/spdlog.h +23 -68
  645. data/ext/third_party/spdlog/include/spdlog/stopwatch.h +61 -0
  646. data/ext/third_party/spdlog/include/spdlog/version.h +2 -2
  647. data/ext/third_party/spdlog/src/fmt.cpp +21 -147
  648. data/lib/couchbase/cluster.rb +111 -1
  649. data/lib/couchbase/collection_options.rb +18 -1
  650. data/lib/couchbase/errors.rb +3 -0
  651. data/lib/couchbase/management/bucket_manager.rb +36 -3
  652. data/lib/couchbase/management/search_index_manager.rb +42 -1
  653. data/lib/couchbase/management/user_manager.rb +155 -48
  654. data/lib/couchbase/query_options.rb +7 -0
  655. data/lib/couchbase/scope.rb +1 -0
  656. data/lib/couchbase/search_options.rb +69 -1
  657. data/lib/couchbase/version.rb +1 -1
  658. metadata +172 -268
  659. data/.rubocop.yml +0 -227
  660. data/.rubocop_todo.yml +0 -47
  661. data/.yardopts +0 -1
  662. data/CONTRIBUTING.md +0 -110
  663. data/Gemfile +0 -37
  664. data/Rakefile +0 -51
  665. data/couchbase.gemspec +0 -79
  666. data/examples/analytics.rb +0 -236
  667. data/examples/auth.rb +0 -33
  668. data/examples/crud.rb +0 -34
  669. data/examples/managing_analytics_indexes.rb +0 -86
  670. data/examples/managing_buckets.rb +0 -61
  671. data/examples/managing_collections.rb +0 -71
  672. data/examples/managing_query_indexes.rb +0 -83
  673. data/examples/managing_search_indexes.rb +0 -77
  674. data/examples/managing_view_indexes.rb +0 -68
  675. data/examples/query.rb +0 -32
  676. data/examples/query_with_consistency.rb +0 -86
  677. data/examples/search.rb +0 -202
  678. data/examples/search_with_consistency.rb +0 -97
  679. data/examples/subdocument.rb +0 -63
  680. data/examples/view.rb +0 -59
  681. data/ext/.clang-format +0 -15
  682. data/ext/.clang-tidy +0 -22
  683. data/ext/.cmake-format.yaml +0 -8
  684. data/ext/.gitignore +0 -2
  685. data/ext/.idea/.name +0 -1
  686. data/ext/.idea/dictionaries/couchbase_terms.xml +0 -14
  687. data/ext/.idea/ext.iml +0 -2
  688. data/ext/.idea/misc.xml +0 -16
  689. data/ext/.idea/modules.xml +0 -8
  690. data/ext/.idea/vcs.xml +0 -12
  691. data/ext/test/main.cxx +0 -184
  692. data/ext/third_party/asio/.appveyor.yml +0 -107
  693. data/ext/third_party/asio/.cirrus.yml +0 -16
  694. data/ext/third_party/asio/.gitignore +0 -3
  695. data/ext/third_party/asio/.travis.yml +0 -323
  696. data/ext/third_party/asio/asio/.gitignore +0 -23
  697. data/ext/third_party/asio/asio/COPYING +0 -4
  698. data/ext/third_party/asio/asio/INSTALL +0 -5
  699. data/ext/third_party/asio/asio/LICENSE_1_0.txt +0 -23
  700. data/ext/third_party/asio/asio/Makefile.am +0 -19
  701. data/ext/third_party/asio/asio/README +0 -4
  702. data/ext/third_party/asio/asio/asio.manifest +0 -4865
  703. data/ext/third_party/asio/asio/autogen.sh +0 -55
  704. data/ext/third_party/asio/asio/boost_asio.manifest +0 -5193
  705. data/ext/third_party/asio/asio/boostify.pl +0 -603
  706. data/ext/third_party/asio/asio/configure.ac +0 -182
  707. data/ext/third_party/asio/asio/include/.gitignore +0 -2
  708. data/ext/third_party/asio/asio/include/Makefile.am +0 -484
  709. data/ext/third_party/asio/asio/include/asio/detail/io_object_executor.hpp +0 -167
  710. data/ext/third_party/asio/asio/include/asio/impl/src.cpp +0 -25
  711. data/ext/third_party/asio/asio/release.pl +0 -440
  712. data/ext/third_party/asio/asio/src/.gitignore +0 -11
  713. data/ext/third_party/asio/asio/src/Makefile.am +0 -23
  714. data/ext/third_party/asio/asio/src/Makefile.mgw +0 -204
  715. data/ext/third_party/asio/asio/src/Makefile.msc +0 -497
  716. data/ext/third_party/asio/asio/src/asio.cpp +0 -11
  717. data/ext/third_party/asio/asio/src/asio_ssl.cpp +0 -11
  718. data/ext/third_party/asio/asio/src/doc/.gitignore +0 -5
  719. data/ext/third_party/asio/asio/src/doc/Jamfile.v2 +0 -62
  720. data/ext/third_party/asio/asio/src/doc/asio.png +0 -0
  721. data/ext/third_party/asio/asio/src/doc/asio.qbk +0 -127
  722. data/ext/third_party/asio/asio/src/doc/asioref.sty +0 -90
  723. data/ext/third_party/asio/asio/src/doc/asioref.xsl +0 -94
  724. data/ext/third_party/asio/asio/src/doc/boost_bind_dox.txt +0 -5
  725. data/ext/third_party/asio/asio/src/doc/doxy2qbk.pl +0 -22
  726. data/ext/third_party/asio/asio/src/doc/examples.qbk +0 -564
  727. data/ext/third_party/asio/asio/src/doc/history.qbk +0 -1794
  728. data/ext/third_party/asio/asio/src/doc/index.xml +0 -13
  729. data/ext/third_party/asio/asio/src/doc/makepdf.pl +0 -26
  730. data/ext/third_party/asio/asio/src/doc/net_ts.qbk +0 -479
  731. data/ext/third_party/asio/asio/src/doc/noncopyable_dox.txt +0 -3
  732. data/ext/third_party/asio/asio/src/doc/overview.qbk +0 -103
  733. data/ext/third_party/asio/asio/src/doc/overview/allocation.qbk +0 -89
  734. data/ext/third_party/asio/asio/src/doc/overview/async.qbk +0 -185
  735. data/ext/third_party/asio/asio/src/doc/overview/async_op1.dot +0 -78
  736. data/ext/third_party/asio/asio/src/doc/overview/async_op1.png +0 -0
  737. data/ext/third_party/asio/asio/src/doc/overview/async_op2.dot +0 -78
  738. data/ext/third_party/asio/asio/src/doc/overview/async_op2.png +0 -0
  739. data/ext/third_party/asio/asio/src/doc/overview/basics.qbk +0 -106
  740. data/ext/third_party/asio/asio/src/doc/overview/bsd_sockets.qbk +0 -270
  741. data/ext/third_party/asio/asio/src/doc/overview/buffers.qbk +0 -163
  742. data/ext/third_party/asio/asio/src/doc/overview/concurrency_hint.qbk +0 -88
  743. data/ext/third_party/asio/asio/src/doc/overview/coroutine.qbk +0 -51
  744. data/ext/third_party/asio/asio/src/doc/overview/coroutines_ts.qbk +0 -97
  745. data/ext/third_party/asio/asio/src/doc/overview/cpp2011.qbk +0 -271
  746. data/ext/third_party/asio/asio/src/doc/overview/handler_tracking.qbk +0 -220
  747. data/ext/third_party/asio/asio/src/doc/overview/implementation.qbk +0 -305
  748. data/ext/third_party/asio/asio/src/doc/overview/iostreams.qbk +0 -72
  749. data/ext/third_party/asio/asio/src/doc/overview/line_based.qbk +0 -118
  750. data/ext/third_party/asio/asio/src/doc/overview/other_protocols.qbk +0 -94
  751. data/ext/third_party/asio/asio/src/doc/overview/posix.qbk +0 -152
  752. data/ext/third_party/asio/asio/src/doc/overview/proactor.dot +0 -100
  753. data/ext/third_party/asio/asio/src/doc/overview/proactor.png +0 -0
  754. data/ext/third_party/asio/asio/src/doc/overview/protocols.qbk +0 -149
  755. data/ext/third_party/asio/asio/src/doc/overview/rationale.qbk +0 -54
  756. data/ext/third_party/asio/asio/src/doc/overview/reactor.qbk +0 -44
  757. data/ext/third_party/asio/asio/src/doc/overview/serial_ports.qbk +0 -45
  758. data/ext/third_party/asio/asio/src/doc/overview/signals.qbk +0 -44
  759. data/ext/third_party/asio/asio/src/doc/overview/spawn.qbk +0 -102
  760. data/ext/third_party/asio/asio/src/doc/overview/ssl.qbk +0 -124
  761. data/ext/third_party/asio/asio/src/doc/overview/strands.qbk +0 -114
  762. data/ext/third_party/asio/asio/src/doc/overview/streams.qbk +0 -62
  763. data/ext/third_party/asio/asio/src/doc/overview/sync_op.dot +0 -67
  764. data/ext/third_party/asio/asio/src/doc/overview/sync_op.png +0 -0
  765. data/ext/third_party/asio/asio/src/doc/overview/threads.qbk +0 -67
  766. data/ext/third_party/asio/asio/src/doc/overview/timers.qbk +0 -52
  767. data/ext/third_party/asio/asio/src/doc/overview/windows.qbk +0 -126
  768. data/ext/third_party/asio/asio/src/doc/project-root.jam +0 -1
  769. data/ext/third_party/asio/asio/src/doc/quickref.xml +0 -561
  770. data/ext/third_party/asio/asio/src/doc/reference.dox +0 -264
  771. data/ext/third_party/asio/asio/src/doc/reference.qbk +0 -125973
  772. data/ext/third_party/asio/asio/src/doc/reference.xsl +0 -1831
  773. data/ext/third_party/asio/asio/src/doc/release_checklist.htm +0 -68
  774. data/ext/third_party/asio/asio/src/doc/requirements/AcceptHandler.qbk +0 -72
  775. data/ext/third_party/asio/asio/src/doc/requirements/AcceptableProtocol.qbk +0 -25
  776. data/ext/third_party/asio/asio/src/doc/requirements/AsyncRandomAccessReadDevice.qbk +0 -56
  777. data/ext/third_party/asio/asio/src/doc/requirements/AsyncRandomAccessWriteDevice.qbk +0 -57
  778. data/ext/third_party/asio/asio/src/doc/requirements/AsyncReadStream.qbk +0 -50
  779. data/ext/third_party/asio/asio/src/doc/requirements/AsyncWriteStream.qbk +0 -48
  780. data/ext/third_party/asio/asio/src/doc/requirements/BufferedHandshakeHandler.qbk +0 -55
  781. data/ext/third_party/asio/asio/src/doc/requirements/CompletionCondition.qbk +0 -42
  782. data/ext/third_party/asio/asio/src/doc/requirements/CompletionHandler.qbk +0 -63
  783. data/ext/third_party/asio/asio/src/doc/requirements/ConnectCondition.qbk +0 -34
  784. data/ext/third_party/asio/asio/src/doc/requirements/ConnectHandler.qbk +0 -72
  785. data/ext/third_party/asio/asio/src/doc/requirements/ConstBufferSequence.qbk +0 -53
  786. data/ext/third_party/asio/asio/src/doc/requirements/DynamicBuffer.qbk +0 -16
  787. data/ext/third_party/asio/asio/src/doc/requirements/DynamicBuffer_v1.qbk +0 -93
  788. data/ext/third_party/asio/asio/src/doc/requirements/DynamicBuffer_v2.qbk +0 -94
  789. data/ext/third_party/asio/asio/src/doc/requirements/Endpoint.qbk +0 -97
  790. data/ext/third_party/asio/asio/src/doc/requirements/EndpointSequence.qbk +0 -30
  791. data/ext/third_party/asio/asio/src/doc/requirements/ExecutionContext.qbk +0 -36
  792. data/ext/third_party/asio/asio/src/doc/requirements/Executor.qbk +0 -141
  793. data/ext/third_party/asio/asio/src/doc/requirements/GettableSerialPortOption.qbk +0 -33
  794. data/ext/third_party/asio/asio/src/doc/requirements/GettableSocketOption.qbk +0 -67
  795. data/ext/third_party/asio/asio/src/doc/requirements/Handler.qbk +0 -64
  796. data/ext/third_party/asio/asio/src/doc/requirements/HandshakeHandler.qbk +0 -72
  797. data/ext/third_party/asio/asio/src/doc/requirements/InternetProtocol.qbk +0 -47
  798. data/ext/third_party/asio/asio/src/doc/requirements/IoControlCommand.qbk +0 -34
  799. data/ext/third_party/asio/asio/src/doc/requirements/IoObjectService.qbk +0 -62
  800. data/ext/third_party/asio/asio/src/doc/requirements/IteratorConnectHandler.qbk +0 -81
  801. data/ext/third_party/asio/asio/src/doc/requirements/LegacyCompletionHandler.qbk +0 -65
  802. data/ext/third_party/asio/asio/src/doc/requirements/MoveAcceptHandler.qbk +0 -61
  803. data/ext/third_party/asio/asio/src/doc/requirements/MutableBufferSequence.qbk +0 -54
  804. data/ext/third_party/asio/asio/src/doc/requirements/ProtoAllocator.qbk +0 -19
  805. data/ext/third_party/asio/asio/src/doc/requirements/Protocol.qbk +0 -56
  806. data/ext/third_party/asio/asio/src/doc/requirements/RangeConnectHandler.qbk +0 -82
  807. data/ext/third_party/asio/asio/src/doc/requirements/ReadHandler.qbk +0 -79
  808. data/ext/third_party/asio/asio/src/doc/requirements/ResolveHandler.qbk +0 -82
  809. data/ext/third_party/asio/asio/src/doc/requirements/Service.qbk +0 -40
  810. data/ext/third_party/asio/asio/src/doc/requirements/SettableSerialPortOption.qbk +0 -33
  811. data/ext/third_party/asio/asio/src/doc/requirements/SettableSocketOption.qbk +0 -54
  812. data/ext/third_party/asio/asio/src/doc/requirements/ShutdownHandler.qbk +0 -72
  813. data/ext/third_party/asio/asio/src/doc/requirements/SignalHandler.qbk +0 -79
  814. data/ext/third_party/asio/asio/src/doc/requirements/SyncRandomAccessReadDevice.qbk +0 -49
  815. data/ext/third_party/asio/asio/src/doc/requirements/SyncRandomAccessWriteDevice.qbk +0 -49
  816. data/ext/third_party/asio/asio/src/doc/requirements/SyncReadStream.qbk +0 -41
  817. data/ext/third_party/asio/asio/src/doc/requirements/SyncWriteStream.qbk +0 -39
  818. data/ext/third_party/asio/asio/src/doc/requirements/TimeTraits.qbk +0 -72
  819. data/ext/third_party/asio/asio/src/doc/requirements/WaitHandler.qbk +0 -72
  820. data/ext/third_party/asio/asio/src/doc/requirements/WaitTraits.qbk +0 -52
  821. data/ext/third_party/asio/asio/src/doc/requirements/WriteHandler.qbk +0 -79
  822. data/ext/third_party/asio/asio/src/doc/requirements/asynchronous_operations.qbk +0 -300
  823. data/ext/third_party/asio/asio/src/doc/requirements/asynchronous_socket_operations.qbk +0 -39
  824. data/ext/third_party/asio/asio/src/doc/requirements/read_write_operations.qbk +0 -34
  825. data/ext/third_party/asio/asio/src/doc/requirements/synchronous_socket_operations.qbk +0 -37
  826. data/ext/third_party/asio/asio/src/doc/std_exception_dox.txt +0 -7
  827. data/ext/third_party/asio/asio/src/doc/tutorial.dox +0 -226
  828. data/ext/third_party/asio/asio/src/doc/tutorial.qbk +0 -2387
  829. data/ext/third_party/asio/asio/src/doc/tutorial.xsl +0 -437
  830. data/ext/third_party/asio/asio/src/doc/using.qbk +0 -309
  831. data/ext/third_party/asio/asio/tsify.pl +0 -574
  832. data/ext/third_party/gsl/.clang-format +0 -34
  833. data/ext/third_party/gsl/.github/workflows/main.yml +0 -94
  834. data/ext/third_party/gsl/.gitignore +0 -16
  835. data/ext/third_party/gsl/.travis.yml +0 -551
  836. data/ext/third_party/gsl/CMakeSettings.json +0 -18
  837. data/ext/third_party/gsl/CONTRIBUTING.md +0 -29
  838. data/ext/third_party/gsl/GSL.natvis +0 -98
  839. data/ext/third_party/gsl/README.md +0 -124
  840. data/ext/third_party/gsl/appveyor.yml +0 -128
  841. data/ext/third_party/http_parser/.gitignore +0 -30
  842. data/ext/third_party/http_parser/.mailmap +0 -8
  843. data/ext/third_party/http_parser/.travis.yml +0 -13
  844. data/ext/third_party/http_parser/AUTHORS +0 -68
  845. data/ext/third_party/http_parser/Makefile +0 -160
  846. data/ext/third_party/http_parser/README.md +0 -246
  847. data/ext/third_party/http_parser/bench.c +0 -128
  848. data/ext/third_party/http_parser/http_parser.gyp +0 -111
  849. data/ext/third_party/http_parser/test.c +0 -4600
  850. data/ext/third_party/json/.appveyor.yml +0 -44
  851. data/ext/third_party/json/.clang-format +0 -84
  852. data/ext/third_party/json/.conan/build.py +0 -80
  853. data/ext/third_party/json/.conan/test_package/CMakeLists.txt +0 -12
  854. data/ext/third_party/json/.conan/test_package/conanfile.py +0 -24
  855. data/ext/third_party/json/.conan/test_package/test_package.cpp +0 -16
  856. data/ext/third_party/json/.gitignore +0 -3
  857. data/ext/third_party/json/.travis.yml +0 -173
  858. data/ext/third_party/json/Makefile +0 -77
  859. data/ext/third_party/json/README.md +0 -149
  860. data/ext/third_party/json/conanfile.py +0 -28
  861. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/analyze_cycles.hpp +0 -127
  862. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/counted.hpp +0 -23
  863. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/generic.hpp +0 -31
  864. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/grammar_info.hpp +0 -32
  865. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/insert_guard.hpp +0 -51
  866. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/insert_rules.hpp +0 -25
  867. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/rule_info.hpp +0 -29
  868. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/rule_type.hpp +0 -21
  869. data/ext/third_party/json/include/tao/json/external/pegtl/analyze.hpp +0 -21
  870. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/counter.hpp +0 -54
  871. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/tracer.hpp +0 -158
  872. data/ext/third_party/json/include/tao/json/external/pegtl/internal/alnum.hpp +0 -18
  873. data/ext/third_party/json/include/tao/json/external/pegtl/internal/alpha.hpp +0 -18
  874. data/ext/third_party/json/include/tao/json/external/pegtl/internal/dusel_mode.hpp +0 -23
  875. data/ext/third_party/json/include/tao/json/external/pegtl/internal/duseltronik.hpp +0 -187
  876. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_opener.hpp +0 -72
  877. data/ext/third_party/json/include/tao/json/external/pegtl/internal/trivial.hpp +0 -32
  878. data/ext/third_party/snappy/.appveyor.yml +0 -36
  879. data/ext/third_party/snappy/.gitignore +0 -8
  880. data/ext/third_party/snappy/.travis.yml +0 -98
  881. data/ext/third_party/snappy/AUTHORS +0 -1
  882. data/ext/third_party/snappy/CONTRIBUTING.md +0 -26
  883. data/ext/third_party/snappy/NEWS +0 -188
  884. data/ext/third_party/snappy/README.md +0 -148
  885. data/ext/third_party/snappy/docs/README.md +0 -72
  886. data/ext/third_party/snappy/format_description.txt +0 -110
  887. data/ext/third_party/snappy/framing_format.txt +0 -135
  888. data/ext/third_party/snappy/snappy-test.cc +0 -613
  889. data/ext/third_party/snappy/snappy-test.h +0 -526
  890. data/ext/third_party/snappy/snappy_compress_fuzzer.cc +0 -60
  891. data/ext/third_party/snappy/snappy_uncompress_fuzzer.cc +0 -58
  892. data/ext/third_party/snappy/snappy_unittest.cc +0 -1512
  893. data/ext/third_party/spdlog/.clang-format +0 -108
  894. data/ext/third_party/spdlog/.clang-tidy +0 -54
  895. data/ext/third_party/spdlog/.gitattributes +0 -1
  896. data/ext/third_party/spdlog/.gitignore +0 -83
  897. data/ext/third_party/spdlog/.travis.yml +0 -112
  898. data/ext/third_party/spdlog/INSTALL +0 -24
  899. data/ext/third_party/spdlog/README.md +0 -423
  900. data/ext/third_party/spdlog/appveyor.yml +0 -51
  901. 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