passenger 6.0.14 → 6.0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (963) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +28 -1
  3. data/CONTRIBUTORS +2 -0
  4. data/build/common_library.rb +1 -0
  5. data/src/agent/Core/Config.h +1 -1
  6. data/src/agent/Core/Controller/Config.h +1 -1
  7. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +24 -2
  8. data/src/agent/Watchdog/Config.h +1 -1
  9. data/src/agent/Watchdog/WatchdogMain.cpp +4 -0
  10. data/src/cxx_supportlib/BackgroundEventLoop.cpp +4 -0
  11. data/src/cxx_supportlib/Constants.h +1 -1
  12. data/src/cxx_supportlib/LoggingKit/Context.h +1 -1
  13. data/src/cxx_supportlib/SafeLibev.h +2 -0
  14. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_iterator.hpp +11 -3
  15. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/find_iterator.hpp +27 -1
  16. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_sunos.hpp +34 -0
  17. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +42 -39
  18. data/src/cxx_supportlib/vendor-modified/boost/asio/append.hpp +80 -0
  19. data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +141 -0
  20. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +4 -4
  21. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +4 -3
  22. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +4 -4
  23. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
  24. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +363 -1
  25. data/src/cxx_supportlib/vendor-modified/boost/asio/awaitable.hpp +10 -1
  26. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +208 -115
  27. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +28 -16
  28. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_file.hpp +831 -0
  29. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +1 -1
  30. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +703 -0
  31. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +210 -117
  32. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +637 -0
  33. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +84 -47
  34. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +123 -30
  35. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +36 -14
  36. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +58 -26
  37. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +303 -150
  38. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +1 -1
  39. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +1 -1
  40. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +756 -0
  41. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +153 -84
  42. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +1 -1
  43. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +1 -1
  44. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +28 -16
  45. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +633 -0
  46. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +724 -0
  47. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +11 -8
  48. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +36 -20
  49. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +222 -42
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +330 -0
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +38 -6
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +1 -1
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +34 -5
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +1 -1
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +38 -6
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +1 -1
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +1 -1
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_signal.hpp +10 -64
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_state.hpp +1 -1
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_type.hpp +1 -1
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/co_spawn.hpp +33 -9
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +1 -1
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +682 -12
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +132 -61
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/connect_pipe.hpp +85 -0
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +1 -1
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +1 -1
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +128 -42
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +677 -0
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +6 -5
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +1 -1
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +1 -1
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +1 -1
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +4 -1
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_cancellation_state.hpp +1 -1
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +1 -1
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +1 -1
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/blocking_executor_op.hpp +1 -1
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +1 -1
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +192 -1
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bulk_executor_op.hpp +1 -1
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +1 -1
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +1 -1
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +1 -1
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +1 -1
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +1 -1
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +1 -1
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +1 -1
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +233 -10
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +38 -1
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +1 -1
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +3 -1
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +1 -1
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +1 -1
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +1 -1
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +42 -2
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +3 -1
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +3 -1
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +10 -2
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +4 -2
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +1 -1
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +1 -1
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/exception.hpp +42 -0
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_function.hpp +1 -1
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +1 -1
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +1 -1
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +1 -1
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/functional.hpp +1 -1
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +1 -1
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +1 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +1 -1
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +2 -2
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +1 -1
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +1 -1
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +1 -1
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +1 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +1 -1
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +1 -1
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +1 -1
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +1 -1
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +330 -5
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +13 -1
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +1 -1
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +1 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +1 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +1 -1
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_descriptor_service.ipp +207 -0
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_file_service.ipp +142 -0
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.hpp +114 -0
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.ipp +882 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_socket_service_base.ipp +251 -0
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +1 -1
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +1 -1
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +1 -1
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +1 -1
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +1 -1
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +1 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/{reactive_serial_port_service.ipp → posix_serial_port_service.ipp} +38 -19
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +1 -1
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +1 -1
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +9 -2
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +1 -1
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/scheduler.ipp +19 -4
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +1 -1
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +36 -1
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +1 -1
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +1 -1
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +108 -3
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +126 -121
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +4 -4
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +1 -1
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +1 -1
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +1 -1
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +1 -1
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/thread_context.ipp +1 -1
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +10 -6
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +1 -1
  163. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +1 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +1 -1
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_object_impl.hpp +11 -2
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_at_op.hpp +194 -0
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_op.hpp +189 -0
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_service.hpp +681 -0
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_at_op.hpp +188 -0
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_op.hpp +184 -0
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_file_service.hpp +264 -0
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_null_buffers_op.hpp +115 -0
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_operation.hpp +86 -0
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_service.hpp +320 -0
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_accept_op.hpp +283 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_connect_op.hpp +141 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recv_op.hpp +204 -0
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvfrom_op.hpp +205 -0
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvmsg_op.hpp +191 -0
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_send_op.hpp +190 -0
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_sendto_op.hpp +193 -0
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service.hpp +633 -0
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service_base.hpp +665 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_wait_op.hpp +113 -0
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +27 -1
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +1 -1
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +1 -1
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +4 -2
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +1 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +1 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +17 -1
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +1 -1
  193. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/non_const_lvalue.hpp +1 -1
  194. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +1 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +1 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +1 -1
  198. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +1 -5
  199. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +19 -4
  200. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +1 -1
  201. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +1 -1
  202. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +1 -1
  204. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +1 -1
  205. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +1 -1
  206. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +1 -1
  207. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +1 -1
  208. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +1 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +1 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +9 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +1 -1
  212. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +1 -1
  213. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +1 -1
  214. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +1 -1
  215. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{reactive_serial_port_service.hpp → posix_serial_port_service.hpp} +30 -18
  216. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +1 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +1 -1
  218. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +1 -1
  219. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +1 -1
  220. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +12 -2
  221. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +29 -8
  222. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +1 -1
  223. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +5 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +3 -1
  225. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +3 -1
  226. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +3 -1
  227. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +3 -1
  228. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +3 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +3 -1
  230. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +41 -13
  231. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +5 -4
  232. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +1 -1
  233. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +29 -5
  234. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +1 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +1 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +1 -1
  237. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +1 -1
  238. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
  241. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +3 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +1 -1
  243. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler.hpp +16 -4
  244. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_operation.hpp +1 -1
  245. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_task.hpp +51 -0
  246. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_thread_info.hpp +1 -1
  247. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +1 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +1 -1
  249. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +1 -1
  250. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +27 -1
  251. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +1 -1
  252. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +1 -1
  253. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +1 -1
  254. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +1 -1
  255. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +5 -1
  256. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +57 -3
  257. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +1 -1
  258. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +37 -45
  259. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +1 -1
  260. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +1 -1
  261. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +1 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +1 -1
  263. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/source_location.hpp +1 -1
  264. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +1 -1
  265. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +1 -1
  266. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +1 -1
  267. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +1 -1
  268. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +1 -1
  269. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +1 -1
  270. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +1 -1
  271. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +1 -1
  273. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +1 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +1 -1
  275. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +1 -1
  276. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +1 -1
  277. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +5 -1
  278. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +18 -9
  279. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +7 -3
  280. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +1 -1
  281. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +1 -1
  282. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +1 -1
  283. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +1 -1
  284. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +3 -1
  285. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +3 -1
  286. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +1 -1
  287. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +9 -1
  288. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/utility.hpp +86 -0
  289. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +1 -1
  290. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +1 -1
  291. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +1 -1
  292. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +1 -1
  293. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +4 -2
  294. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +1 -1
  295. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +126 -42
  296. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +30 -1
  297. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
  298. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +7 -2
  299. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bad_executor.hpp +1 -1
  300. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
  301. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
  302. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +1 -1
  303. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +1 -1
  304. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +1 -1
  305. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
  306. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +1 -1
  307. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_invocable.hpp +1 -1
  308. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +1 -1
  309. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_receiver.hpp +1 -1
  310. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/bulk_sender.hpp +1 -1
  311. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/submit_receiver.hpp +1 -1
  312. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/void_receiver.hpp +1 -1
  313. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +1 -1
  314. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +1 -1
  315. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/bad_executor.ipp +1 -1
  316. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/receiver_invocation_error.ipp +1 -1
  317. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/invocable_archetype.hpp +1 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
  319. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
  320. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +1 -1
  321. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
  322. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/prefer_only.hpp +1 -1
  323. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +1 -1
  324. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver_invocation_error.hpp +1 -1
  325. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
  326. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +1 -1
  327. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +1 -1
  328. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +1 -1
  329. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +1 -1
  330. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +1 -1
  331. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +1 -1
  332. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +1 -1
  333. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +1 -1
  334. data/src/cxx_supportlib/vendor-modified/boost/asio/execution.hpp +1 -1
  335. data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +1 -1
  336. data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +1 -1
  337. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +100 -32
  338. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/append.hpp +6 -41
  339. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_single.hpp +6 -5
  340. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_tuple.hpp +6 -101
  341. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/awaitable_operators.hpp +14 -14
  342. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +493 -0
  343. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +493 -0
  344. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/cancellation_condition.hpp +1 -1
  345. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel.hpp +72 -0
  346. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_error.hpp +88 -0
  347. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_traits.hpp +233 -0
  348. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_spawn.hpp +189 -0
  349. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/concurrent_channel.hpp +72 -0
  350. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +95 -887
  351. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/{detail/coro_traits.hpp → coro_traits.hpp} +65 -20
  352. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/deferred.hpp +6 -575
  353. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_handler.hpp +72 -0
  354. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_message.hpp +124 -0
  355. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_operation.hpp +201 -0
  356. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_payload.hpp +95 -0
  357. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +114 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +134 -0
  359. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +142 -0
  360. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +499 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/completion_handler_erasure.hpp +82 -46
  362. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +3 -3
  363. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/has_signature.hpp +56 -0
  364. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +611 -0
  365. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +11 -12
  366. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +1 -1
  367. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/channel_error.ipp +63 -0
  368. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1197 -0
  369. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +14 -28
  370. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +6 -2
  371. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_coro.hpp +270 -0
  372. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +27 -37
  373. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/prepend.hpp +6 -41
  374. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +27 -405
  375. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +116 -229
  376. data/src/cxx_supportlib/vendor-modified/boost/asio/file_base.hpp +168 -0
  377. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +1 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +1 -1
  379. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +1 -1
  380. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +1 -1
  381. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +1 -1
  382. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +1 -1
  383. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +1 -1
  384. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +1 -1
  385. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +1 -1
  386. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +1 -1
  387. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +1 -1
  388. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_io_executor.ipp +131 -0
  389. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl → impl}/append.hpp +18 -19
  390. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl → impl}/as_tuple.hpp +13 -15
  391. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +400 -5
  392. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +13 -3
  393. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +13 -3
  394. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancellation_signal.ipp +98 -0
  395. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +71 -7
  396. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/compose.hpp +21 -1
  397. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +67 -34
  398. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.hpp +75 -0
  399. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.ipp +151 -0
  400. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +23 -13
  401. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl → impl}/deferred.hpp +31 -40
  402. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +1 -1
  403. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +23 -13
  404. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +1 -1
  405. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +1 -1
  406. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +1 -1
  407. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +1 -1
  408. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +1 -1
  409. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +1 -1
  410. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +53 -47
  411. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +1 -1
  412. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/multiple_exceptions.ipp +1 -1
  413. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +23 -13
  414. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl → impl}/prepend.hpp +16 -17
  415. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +97 -51
  416. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +51 -31
  417. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +119 -59
  418. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +1 -1
  419. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +1 -1
  420. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +1 -1
  421. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1321 -277
  422. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +11 -2
  423. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +1 -1
  424. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +1 -1
  425. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +1 -1
  426. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +1 -1
  427. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +1 -1
  428. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_awaitable.hpp +18 -8
  429. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +1 -1
  430. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +95 -50
  431. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +53 -31
  432. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +111 -114
  433. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +15 -3
  434. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +1 -1
  435. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +1 -1
  436. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +1 -1
  437. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +75 -1
  438. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +1 -1
  439. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +1 -1
  440. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +35 -1
  441. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +1 -1
  442. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +1 -1
  443. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +1 -1
  444. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +1 -1
  445. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +130 -64
  446. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +1 -1
  447. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +1 -1
  448. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +1 -1
  449. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +1 -1
  450. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +1 -1
  451. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +1 -1
  452. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
  453. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +1 -1
  454. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +1 -1
  455. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +1 -1
  456. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +1 -1
  457. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +1 -1
  458. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +1 -1
  459. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +1 -1
  460. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
  461. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +1 -1
  462. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +1 -1
  463. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +1 -1
  464. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +1 -1
  465. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +1 -1
  466. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +1 -1
  467. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +1 -1
  468. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +2 -2
  469. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +1 -1
  470. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +1 -1
  471. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +1 -1
  472. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +1 -1
  473. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +1 -1
  474. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +1 -1
  475. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +2 -2
  476. data/src/cxx_supportlib/vendor-modified/boost/asio/is_applicable_property.hpp +1 -1
  477. data/src/cxx_supportlib/vendor-modified/boost/asio/is_contiguous_iterator.hpp +47 -0
  478. data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +1 -1
  479. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +1 -1
  480. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +1 -1
  481. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +1 -1
  482. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +1 -1
  483. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +1 -1
  484. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +1 -1
  485. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +1 -1
  486. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +1 -1
  487. data/src/cxx_supportlib/vendor-modified/boost/asio/multiple_exceptions.hpp +1 -1
  488. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +1 -1
  489. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +1 -1
  490. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +89 -16
  491. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +95 -27
  492. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +1 -1
  493. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +1 -1
  494. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +1 -1
  495. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +128 -42
  496. data/src/cxx_supportlib/vendor-modified/boost/asio/prefer.hpp +1 -1
  497. data/src/cxx_supportlib/vendor-modified/boost/asio/prepend.hpp +80 -0
  498. data/src/cxx_supportlib/vendor-modified/boost/asio/query.hpp +1 -1
  499. data/src/cxx_supportlib/vendor-modified/boost/asio/random_access_file.hpp +37 -0
  500. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +245 -153
  501. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +110 -53
  502. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +301 -166
  503. data/src/cxx_supportlib/vendor-modified/boost/asio/readable_pipe.hpp +37 -0
  504. data/src/cxx_supportlib/vendor-modified/boost/asio/recycling_allocator.hpp +140 -0
  505. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +3 -3
  506. data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +358 -0
  507. data/src/cxx_supportlib/vendor-modified/boost/asio/require.hpp +1 -1
  508. data/src/cxx_supportlib/vendor-modified/boost/asio/require_concept.hpp +1 -1
  509. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +1 -1
  510. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +1 -1
  511. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +1 -1
  512. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +1 -1
  513. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +647 -87
  514. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +4 -1
  515. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +1 -1
  516. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +1 -1
  517. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +4 -1
  518. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +1 -1
  519. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +19 -1
  520. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +7 -3
  521. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +1 -1
  522. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +1 -1
  523. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +1 -1
  524. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +1 -1
  525. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +1 -1
  526. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +1 -1
  527. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +16 -1
  528. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +1 -1
  529. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +1 -1
  530. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +1 -1
  531. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/host_name_verification.hpp +1 -1
  532. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +1 -1
  533. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +140 -64
  534. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +25 -3
  535. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/host_name_verification.ipp +1 -1
  536. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +1 -1
  537. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +1 -1
  538. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +1 -1
  539. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +154 -53
  540. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +1 -1
  541. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +1 -1
  542. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +1 -1
  543. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +1 -1
  544. data/src/cxx_supportlib/vendor-modified/boost/asio/static_thread_pool.hpp +1 -1
  545. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +1 -1
  546. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +12 -1
  547. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_file.hpp +37 -0
  548. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +1 -1
  549. data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +1 -1
  550. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +1 -1
  551. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +1 -1
  552. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +11 -11
  553. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +10 -1
  554. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +1 -1
  555. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_free.hpp +1 -1
  556. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_member.hpp +1 -1
  557. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_free.hpp +1 -1
  558. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_member.hpp +1 -1
  559. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/equality_comparable.hpp +1 -1
  560. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_free.hpp +1 -1
  561. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_member.hpp +1 -1
  562. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_free.hpp +1 -1
  563. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_member.hpp +1 -1
  564. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_free.hpp +1 -1
  565. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_member.hpp +1 -1
  566. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_static_constexpr_member.hpp +1 -1
  567. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_free.hpp +1 -1
  568. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_member.hpp +1 -1
  569. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_free.hpp +1 -1
  570. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_member.hpp +1 -1
  571. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_free.hpp +1 -1
  572. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_member.hpp +1 -1
  573. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_free.hpp +1 -1
  574. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_member.hpp +1 -1
  575. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_free.hpp +1 -1
  576. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_member.hpp +1 -1
  577. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_free.hpp +1 -1
  578. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_member.hpp +1 -1
  579. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_free.hpp +1 -1
  580. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_member.hpp +1 -1
  581. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_query.hpp +1 -1
  582. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require.hpp +1 -1
  583. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require_concept.hpp +1 -1
  584. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_free.hpp +1 -1
  585. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_member.hpp +1 -1
  586. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +1 -1
  587. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +1 -1
  588. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +1 -1
  589. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +1 -1
  590. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +1 -1
  591. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +1 -1
  592. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +1 -1
  593. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +1 -1
  594. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +1 -1
  595. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +4 -3
  596. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +10 -7
  597. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
  598. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +2 -2
  599. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +1 -1
  600. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +70 -12
  601. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +100 -1
  602. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +98 -29
  603. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +95 -28
  604. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +1 -1
  605. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +1 -1
  606. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +1 -1
  607. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +1 -1
  608. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +1 -1
  609. data/src/cxx_supportlib/vendor-modified/boost/asio/writable_pipe.hpp +37 -0
  610. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +242 -150
  611. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +112 -53
  612. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +1 -1
  613. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +21 -1
  614. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +115 -25
  615. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +8 -2
  616. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +2 -2
  617. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +5 -1
  618. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_impl.hpp +183 -64
  619. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +166 -66
  620. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +80 -11
  621. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +40 -11
  622. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_aarch32.hpp +8 -1
  623. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_aarch64.hpp +8 -1
  624. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_arm.hpp +8 -1
  625. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/classify.hpp +19 -10
  626. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +19 -5
  627. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_ppc.hpp +105 -100
  628. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +1 -1
  629. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +73 -72
  630. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +8 -1
  631. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_arm_asm_common.hpp +4 -0
  632. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_ppc_asm_common.hpp +33 -0
  633. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +15 -6
  634. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/alignment_of.hpp +3 -3
  635. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/has_unique_object_representations.hpp +143 -0
  636. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_enum.hpp +42 -0
  637. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp +46 -0
  638. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_darwin_ulock.hpp +58 -0
  639. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_windows.hpp +3 -1
  640. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +65 -0
  641. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_darwin_ulock.hpp +158 -0
  642. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_windows.hpp +55 -26
  643. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +8 -2
  644. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +2 -2
  645. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +1 -1
  646. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/result_traits.hpp +12 -2
  647. data/src/cxx_supportlib/vendor-modified/boost/bind/protect.hpp +1 -1
  648. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +6 -3
  649. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +1 -1
  650. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_style.hpp +1 -1
  651. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +1 -1
  652. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/timezone.hpp +2 -1
  653. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +1 -1
  654. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +1 -4
  655. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +1 -1
  656. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +4 -1
  657. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +4 -1
  658. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +6 -1
  659. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +2 -0
  660. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +77 -0
  661. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +3 -2
  662. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +3 -0
  663. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +2 -0
  664. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +1 -0
  665. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +4 -3
  666. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +51 -35
  667. data/src/cxx_supportlib/vendor-modified/boost/config/platform/wasm.hpp +6 -0
  668. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +14 -19
  669. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +2 -45
  670. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +23 -1
  671. data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +11 -0
  672. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +12 -6
  673. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +8 -3
  674. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +1 -3
  675. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +70 -59
  676. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +6 -5
  677. data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -10
  678. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +31 -40
  679. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +13 -10
  680. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +17 -15
  681. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +87 -84
  682. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +59 -32
  683. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +3 -1
  684. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +46 -35
  685. data/src/cxx_supportlib/vendor-modified/boost/container/detail/hash_table.hpp +1278 -0
  686. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +91 -0
  687. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +6 -0
  688. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +88 -69
  689. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +2 -2
  690. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +2 -2
  691. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +240 -105
  692. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +2 -1
  693. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +19 -91
  694. data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +2 -0
  695. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +3 -7
  696. data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +28 -28
  697. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +118 -244
  698. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +1 -0
  699. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +5 -10
  700. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +66 -38
  701. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +28 -9
  702. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +27 -8
  703. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +14 -71
  704. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +11 -8
  705. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +9 -2
  706. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +1 -1
  707. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +3 -3
  708. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +23 -6
  709. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +6 -1
  710. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +3 -3
  711. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
  712. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/synchronized_pool_resource.hpp +3 -3
  713. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/unsynchronized_pool_resource.hpp +3 -3
  714. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +11 -8
  715. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +32 -87
  716. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +100 -147
  717. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +41 -35
  718. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +74 -46
  719. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +207 -187
  720. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +2 -2
  721. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +86 -71
  722. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +40 -35
  723. data/src/cxx_supportlib/vendor-modified/boost/core/alloc_construct.hpp +7 -81
  724. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_access.hpp +426 -207
  725. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_traits.hpp +112 -0
  726. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +28 -14
  727. data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +100 -1
  728. data/src/cxx_supportlib/vendor-modified/boost/core/default_allocator.hpp +19 -9
  729. data/src/cxx_supportlib/vendor-modified/boost/core/detail/splitmix64.hpp +3 -3
  730. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +1256 -0
  731. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +9 -0
  732. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +7 -1
  733. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +5 -51
  734. data/src/cxx_supportlib/vendor-modified/boost/core/noinit_adaptor.hpp +3 -0
  735. data/src/cxx_supportlib/vendor-modified/boost/core/noncopyable.hpp +1 -1
  736. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_traits.hpp +111 -60
  737. data/src/cxx_supportlib/vendor-modified/boost/core/quick_exit.hpp +1 -1
  738. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +399 -0
  739. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +1157 -0
  740. data/src/cxx_supportlib/vendor-modified/boost/core/verbose_terminate_handler.hpp +88 -0
  741. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.ipp +1 -1
  742. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/conversion.hpp +1 -1
  743. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_io.hpp +1 -1
  744. data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +3 -3
  745. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +38 -22
  746. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +84 -2
  747. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +1 -1
  748. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +9 -0
  749. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +16 -0
  750. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_log2.hpp +85 -80
  751. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +39 -39
  752. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +27 -27
  753. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +37 -40
  754. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +24 -15
  755. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +75 -6
  756. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +2 -2
  757. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +25 -25
  758. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/array_initializer.hpp +3 -2
  759. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +14 -14
  760. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +4 -4
  761. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +76 -7
  762. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +1 -1
  763. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/empty_node_checker.hpp +1 -1
  764. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +0 -31
  765. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +182 -102
  766. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -8
  767. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +106 -76
  768. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +3 -3
  769. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +4 -4
  770. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/math.hpp +3 -3
  771. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +1 -1
  772. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +3 -3
  773. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_to_value.hpp +1 -1
  774. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +18 -18
  775. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/reverse_iterator.hpp +3 -140
  776. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +1 -1
  777. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +11 -4
  778. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +2 -2
  779. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +2 -2
  780. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +6 -6
  781. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/value_functors.hpp +10 -0
  782. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +3 -3
  783. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +1525 -882
  784. data/src/cxx_supportlib/vendor-modified/boost/intrusive/intrusive_fwd.hpp +2 -0
  785. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +81 -8
  786. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +9 -8
  787. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +2 -2
  788. data/src/cxx_supportlib/vendor-modified/boost/intrusive/options.hpp +17 -3
  789. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +10 -8
  790. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +12 -4
  791. data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +9 -2
  792. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +36 -36
  793. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +16 -16
  794. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +32 -35
  795. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +27 -27
  796. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +14 -14
  797. data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +2 -2
  798. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +27 -20
  799. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +6 -6
  800. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +11 -0
  801. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +6 -6
  802. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +1 -1
  803. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +5 -5
  804. data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +8 -4
  805. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +1 -1
  806. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +1 -1
  807. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +1 -1
  808. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +1 -1
  809. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +1 -1
  810. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +1 -1
  811. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
  812. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +1 -1
  813. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +1 -1
  814. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +1 -1
  815. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
  816. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +43 -30
  817. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +72 -56
  818. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +172 -128
  819. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/heap_sort.hpp +19 -9
  820. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +9 -0
  821. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +108 -146
  822. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +24 -15
  823. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +14 -4
  824. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/search.hpp +79 -0
  825. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/set_difference.hpp +8 -2
  826. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +4 -0
  827. data/src/cxx_supportlib/vendor-modified/boost/move/algo/predicate.hpp +10 -10
  828. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +21 -0
  829. data/src/cxx_supportlib/vendor-modified/boost/move/detail/addressof.hpp +61 -0
  830. data/src/cxx_supportlib/vendor-modified/boost/move/detail/force_ptr.hpp +36 -0
  831. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +108 -9
  832. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +8 -32
  833. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +6 -3
  834. data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +40 -33
  835. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +5 -1
  836. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_end.hpp +2 -0
  837. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +1 -2
  838. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +5 -3
  839. data/src/cxx_supportlib/vendor-modified/boost/move/make_unique.hpp +10 -0
  840. data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +31 -28
  841. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +1306 -0
  842. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/config.hpp +138 -0
  843. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_append.hpp +185 -0
  844. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_copy_if.hpp +48 -0
  845. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_count.hpp +147 -0
  846. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_fold.hpp +62 -0
  847. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_front.hpp +38 -0
  848. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_list.hpp +39 -0
  849. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list.hpp +24 -0
  850. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +87 -0
  851. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_min_element.hpp +51 -0
  852. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_plus.hpp +81 -0
  853. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_remove_if.hpp +48 -0
  854. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_rename.hpp +41 -0
  855. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_void.hpp +32 -0
  856. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_with_index.hpp +385 -0
  857. data/src/cxx_supportlib/vendor-modified/boost/mp11/function.hpp +222 -0
  858. data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +112 -0
  859. data/src/cxx_supportlib/vendor-modified/boost/mp11/integral.hpp +41 -0
  860. data/src/cxx_supportlib/vendor-modified/boost/mp11/list.hpp +304 -0
  861. data/src/cxx_supportlib/vendor-modified/boost/mp11/set.hpp +188 -0
  862. data/src/cxx_supportlib/vendor-modified/boost/mp11/utility.hpp +263 -0
  863. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +16 -0
  864. data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +1 -1
  865. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +3 -3
  866. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +1 -1
  867. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/template_arity.hpp +1 -1
  868. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/yes_no.hpp +2 -1
  869. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +1 -1
  870. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +1 -1
  871. data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +1 -1
  872. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +1 -1
  873. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_hash.hpp +49 -0
  874. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +34 -23
  875. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +85 -24
  876. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +3 -2
  877. data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +22 -9
  878. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/loongarch.h +41 -0
  879. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sparc.h +2 -2
  880. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +1 -0
  881. data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdc.h +1 -1
  882. data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdcpp.h +2 -2
  883. data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +1 -0
  884. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  885. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +8 -1
  886. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +1 -1
  887. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +3 -2
  888. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +1 -0
  889. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +4 -3
  890. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +23 -13
  891. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +1 -1
  892. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +2 -0
  893. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +3 -2
  894. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +6 -0
  895. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +3 -1
  896. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +235 -104
  897. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +1 -1
  898. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +4 -2
  899. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +1 -1
  900. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +1 -1
  901. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +1 -1
  902. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +1 -1
  903. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +3 -6
  904. data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +2 -1
  905. data/src/cxx_supportlib/vendor-modified/boost/system/detail/append_int.hpp +32 -0
  906. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +18 -2
  907. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +31 -7
  908. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +78 -21
  909. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +211 -42
  910. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +77 -19
  911. data/src/cxx_supportlib/vendor-modified/boost/system/detail/snprintf.hpp +3 -0
  912. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category.hpp +9 -67
  913. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category_impl.hpp +97 -0
  914. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_impl.hpp +5 -17
  915. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_message.hpp +71 -0
  916. data/src/cxx_supportlib/vendor-modified/boost/system/errc.hpp +7 -0
  917. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +30 -59
  918. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +1 -1
  919. data/src/cxx_supportlib/vendor-modified/boost/thread/scoped_thread.hpp +9 -0
  920. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_guard.hpp +5 -0
  921. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +103 -5
  922. data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +2 -2
  923. data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +22 -21
  924. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +1 -1
  925. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +1 -1
  926. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +1 -1
  927. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +4 -1
  928. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +1 -1
  929. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +2 -1
  930. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_function.hpp +1 -1
  931. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_function_pointer.hpp +1 -1
  932. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +819 -0
  933. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +2 -1
  934. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +1647 -2909
  935. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +8 -14
  936. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +262 -0
  937. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +8 -13
  938. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +301 -142
  939. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +10 -1
  940. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +199 -76
  941. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +10 -1
  942. data/src/cxx_supportlib/vendor-modified/boost/utility/base_from_member.hpp +2 -1
  943. data/src/cxx_supportlib/vendor-modified/boost/utility/binary.hpp +3 -2
  944. data/src/cxx_supportlib/vendor-modified/boost/utility/in_place_factory.hpp +6 -0
  945. data/src/cxx_supportlib/vendor-modified/boost/utility/result_of.hpp +13 -2
  946. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +6 -2
  947. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +24 -3
  948. data/src/cxx_supportlib/vendor-modified/boost/utility/typed_in_place_factory.hpp +6 -1
  949. data/src/cxx_supportlib/vendor-modified/boost/utility/value_init.hpp +5 -1
  950. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  951. data/src/cxx_supportlib/vendor-modified/jsoncpp/json-forwards.h +261 -143
  952. data/src/cxx_supportlib/vendor-modified/jsoncpp/json.h +947 -763
  953. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +1487 -1477
  954. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +1 -1
  955. data/src/ruby_supportlib/phusion_passenger/platform_info/ruby.rb +2 -2
  956. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +9 -0
  957. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  958. metadata +129 -14
  959. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_fwd.hpp +0 -42
  960. data/src/cxx_supportlib/vendor-modified/boost/checked_delete.hpp +0 -17
  961. data/src/cxx_supportlib/vendor-modified/boost/pointer_to_other.hpp +0 -55
  962. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/indexed_bit_flag.hpp +0 -54
  963. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_obsolete.hpp +0 -32
@@ -2,7 +2,7 @@
2
2
  // impl/spawn.hpp
3
3
  // ~~~~~~~~~~~~~~
4
4
  //
5
- // Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
5
+ // Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6
6
  //
7
7
  // Distributed under the Boost Software License, Version 1.0. (See accompanying
8
8
  // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -17,6 +17,7 @@
17
17
 
18
18
  #include <boost/asio/detail/config.hpp>
19
19
  #include <boost/asio/associated_allocator.hpp>
20
+ #include <boost/asio/associated_cancellation_slot.hpp>
20
21
  #include <boost/asio/associated_executor.hpp>
21
22
  #include <boost/asio/async_result.hpp>
22
23
  #include <boost/asio/bind_executor.hpp>
@@ -27,385 +28,1429 @@
27
28
  #include <boost/asio/detail/memory.hpp>
28
29
  #include <boost/asio/detail/noncopyable.hpp>
29
30
  #include <boost/asio/detail/type_traits.hpp>
31
+ #include <boost/asio/detail/utility.hpp>
32
+ #include <boost/asio/detail/variadic_templates.hpp>
30
33
  #include <boost/system/system_error.hpp>
31
34
 
35
+ #if defined(BOOST_ASIO_HAS_STD_TUPLE)
36
+ # include <tuple>
37
+ #endif // defined(BOOST_ASIO_HAS_STD_TUPLE)
38
+
39
+ #if defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
40
+ # include <boost/context/fiber.hpp>
41
+ #endif // defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
42
+
32
43
  #include <boost/asio/detail/push_options.hpp>
33
44
 
34
45
  namespace boost {
35
46
  namespace asio {
36
47
  namespace detail {
37
48
 
38
- template <typename Handler, typename T>
39
- class coro_handler
49
+ #if defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
50
+
51
+ // Spawned thread implementation using Boost.Coroutine.
52
+ class spawned_coroutine_thread : public spawned_thread_base
53
+ {
54
+ public:
55
+ #if defined(BOOST_COROUTINES_UNIDIRECT) || defined(BOOST_COROUTINES_V2)
56
+ typedef boost::coroutines::pull_coroutine<void> callee_type;
57
+ typedef boost::coroutines::push_coroutine<void> caller_type;
58
+ #else
59
+ typedef boost::coroutines::coroutine<void()> callee_type;
60
+ typedef boost::coroutines::coroutine<void()> caller_type;
61
+ #endif
62
+
63
+ spawned_coroutine_thread(caller_type& caller)
64
+ : caller_(caller),
65
+ on_suspend_fn_(0),
66
+ on_suspend_arg_(0)
40
67
  {
41
- public:
42
- coro_handler(basic_yield_context<Handler> ctx)
43
- : coro_(ctx.coro_.lock()),
44
- ca_(ctx.ca_),
45
- handler_(ctx.handler_),
46
- ready_(0),
47
- ec_(ctx.ec_),
48
- value_(0)
68
+ }
69
+
70
+ template <typename F>
71
+ static spawned_thread_base* spawn(BOOST_ASIO_MOVE_ARG(F) f,
72
+ const boost::coroutines::attributes& attributes,
73
+ cancellation_slot parent_cancel_slot = cancellation_slot(),
74
+ cancellation_state cancel_state = cancellation_state())
75
+ {
76
+ spawned_coroutine_thread* spawned_thread = 0;
77
+ callee_type callee(entry_point<typename decay<F>::type>(
78
+ BOOST_ASIO_MOVE_CAST(F)(f), &spawned_thread), attributes);
79
+ spawned_thread->callee_.swap(callee);
80
+ spawned_thread->parent_cancellation_slot_ = parent_cancel_slot;
81
+ spawned_thread->cancellation_state_ = cancel_state;
82
+ return spawned_thread;
83
+ }
84
+
85
+ template <typename F>
86
+ static spawned_thread_base* spawn(BOOST_ASIO_MOVE_ARG(F) f,
87
+ cancellation_slot parent_cancel_slot = cancellation_slot(),
88
+ cancellation_state cancel_state = cancellation_state())
89
+ {
90
+ return spawn(BOOST_ASIO_MOVE_CAST(F)(f), boost::coroutines::attributes(),
91
+ parent_cancel_slot, cancel_state);
92
+ }
93
+
94
+ void resume()
95
+ {
96
+ callee_();
97
+ if (on_suspend_fn_)
49
98
  {
99
+ void (*fn)(void*) = on_suspend_fn_;
100
+ void* arg = on_suspend_arg_;
101
+ on_suspend_fn_ = 0;
102
+ fn(arg);
50
103
  }
104
+ }
51
105
 
52
- void operator()(T value)
106
+ void suspend_with(void (*fn)(void*), void* arg)
107
+ {
108
+ if (throw_if_cancelled_)
109
+ if (!!cancellation_state_.cancelled())
110
+ throw_error(boost::asio::error::operation_aborted, "yield");
111
+ has_context_switched_ = true;
112
+ on_suspend_fn_ = fn;
113
+ on_suspend_arg_ = arg;
114
+ caller_();
115
+ }
116
+
117
+ void destroy()
118
+ {
119
+ callee_type callee;
120
+ callee.swap(callee_);
121
+ }
122
+
123
+ private:
124
+ template <typename Function>
125
+ class entry_point
126
+ {
127
+ public:
128
+ template <typename F>
129
+ entry_point(BOOST_ASIO_MOVE_ARG(F) f,
130
+ spawned_coroutine_thread** spawned_thread_out)
131
+ : function_(BOOST_ASIO_MOVE_CAST(F)(f)),
132
+ spawned_thread_out_(spawned_thread_out)
53
133
  {
54
- *ec_ = boost::system::error_code();
55
- *value_ = BOOST_ASIO_MOVE_CAST(T)(value);
56
- if (--*ready_ == 0)
57
- (*coro_)();
58
134
  }
59
135
 
60
- void operator()(boost::system::error_code ec, T value)
136
+ void operator()(caller_type& caller)
61
137
  {
62
- *ec_ = ec;
63
- *value_ = BOOST_ASIO_MOVE_CAST(T)(value);
64
- if (--*ready_ == 0)
65
- (*coro_)();
138
+ Function function(BOOST_ASIO_MOVE_CAST(Function)(function_));
139
+ spawned_coroutine_thread spawned_thread(caller);
140
+ *spawned_thread_out_ = &spawned_thread;
141
+ spawned_thread_out_ = 0;
142
+ spawned_thread.suspend();
143
+ function(&spawned_thread);
144
+ spawned_thread.suspend();
66
145
  }
67
146
 
68
- //private:
69
- shared_ptr<typename basic_yield_context<Handler>::callee_type> coro_;
70
- typename basic_yield_context<Handler>::caller_type& ca_;
71
- Handler handler_;
72
- atomic_count* ready_;
73
- boost::system::error_code* ec_;
74
- T* value_;
147
+ private:
148
+ Function function_;
149
+ spawned_coroutine_thread** spawned_thread_out_;
75
150
  };
76
151
 
77
- template <typename Handler>
78
- class coro_handler<Handler, void>
152
+ caller_type& caller_;
153
+ callee_type callee_;
154
+ void (*on_suspend_fn_)(void*);
155
+ void* on_suspend_arg_;
156
+ };
157
+
158
+ #endif // defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
159
+
160
+ #if defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
161
+
162
+ // Spawned thread implementation using Boost.Context's fiber.
163
+ class spawned_fiber_thread : public spawned_thread_base
164
+ {
165
+ public:
166
+ typedef boost::context::fiber fiber_type;
167
+
168
+ spawned_fiber_thread(BOOST_ASIO_MOVE_ARG(fiber_type) caller)
169
+ : caller_(BOOST_ASIO_MOVE_CAST(fiber_type)(caller)),
170
+ on_suspend_fn_(0),
171
+ on_suspend_arg_(0)
79
172
  {
80
- public:
81
- coro_handler(basic_yield_context<Handler> ctx)
82
- : coro_(ctx.coro_.lock()),
83
- ca_(ctx.ca_),
84
- handler_(ctx.handler_),
85
- ready_(0),
86
- ec_(ctx.ec_)
173
+ }
174
+
175
+ template <typename StackAllocator, typename F>
176
+ static spawned_thread_base* spawn(allocator_arg_t,
177
+ BOOST_ASIO_MOVE_ARG(StackAllocator) stack_allocator,
178
+ BOOST_ASIO_MOVE_ARG(F) f,
179
+ cancellation_slot parent_cancel_slot = cancellation_slot(),
180
+ cancellation_state cancel_state = cancellation_state())
181
+ {
182
+ spawned_fiber_thread* spawned_thread = 0;
183
+ fiber_type callee(allocator_arg_t(),
184
+ BOOST_ASIO_MOVE_CAST(StackAllocator)(stack_allocator),
185
+ entry_point<typename decay<F>::type>(
186
+ BOOST_ASIO_MOVE_CAST(F)(f), &spawned_thread));
187
+ callee = fiber_type(BOOST_ASIO_MOVE_CAST(fiber_type)(callee)).resume();
188
+ spawned_thread->callee_ = BOOST_ASIO_MOVE_CAST(fiber_type)(callee);
189
+ spawned_thread->parent_cancellation_slot_ = parent_cancel_slot;
190
+ spawned_thread->cancellation_state_ = cancel_state;
191
+ return spawned_thread;
192
+ }
193
+
194
+ template <typename F>
195
+ static spawned_thread_base* spawn(BOOST_ASIO_MOVE_ARG(F) f,
196
+ cancellation_slot parent_cancel_slot = cancellation_slot(),
197
+ cancellation_state cancel_state = cancellation_state())
198
+ {
199
+ return spawn(allocator_arg_t(), boost::context::fixedsize_stack(),
200
+ BOOST_ASIO_MOVE_CAST(F)(f), parent_cancel_slot, cancel_state);
201
+ }
202
+
203
+ void resume()
204
+ {
205
+ callee_ = fiber_type(BOOST_ASIO_MOVE_CAST(fiber_type)(callee_)).resume();
206
+ if (on_suspend_fn_)
87
207
  {
208
+ void (*fn)(void*) = on_suspend_fn_;
209
+ void* arg = on_suspend_arg_;
210
+ on_suspend_fn_ = 0;
211
+ fn(arg);
88
212
  }
213
+ }
89
214
 
90
- void operator()()
215
+ void suspend_with(void (*fn)(void*), void* arg)
216
+ {
217
+ if (throw_if_cancelled_)
218
+ if (!!cancellation_state_.cancelled())
219
+ throw_error(boost::asio::error::operation_aborted, "yield");
220
+ has_context_switched_ = true;
221
+ on_suspend_fn_ = fn;
222
+ on_suspend_arg_ = arg;
223
+ caller_ = fiber_type(BOOST_ASIO_MOVE_CAST(fiber_type)(caller_)).resume();
224
+ }
225
+
226
+ void destroy()
227
+ {
228
+ fiber_type callee = BOOST_ASIO_MOVE_CAST(fiber_type)(callee_);
229
+ (void)callee;
230
+ }
231
+
232
+ private:
233
+ template <typename Function>
234
+ class entry_point
235
+ {
236
+ public:
237
+ template <typename F>
238
+ entry_point(BOOST_ASIO_MOVE_ARG(F) f,
239
+ spawned_fiber_thread** spawned_thread_out)
240
+ : function_(BOOST_ASIO_MOVE_CAST(F)(f)),
241
+ spawned_thread_out_(spawned_thread_out)
91
242
  {
92
- *ec_ = boost::system::error_code();
93
- if (--*ready_ == 0)
94
- (*coro_)();
95
243
  }
96
244
 
97
- void operator()(boost::system::error_code ec)
245
+ fiber_type operator()(BOOST_ASIO_MOVE_ARG(fiber_type) caller)
98
246
  {
99
- *ec_ = ec;
100
- if (--*ready_ == 0)
101
- (*coro_)();
247
+ Function function(BOOST_ASIO_MOVE_CAST(Function)(function_));
248
+ spawned_fiber_thread spawned_thread(
249
+ BOOST_ASIO_MOVE_CAST(fiber_type)(caller));
250
+ *spawned_thread_out_ = &spawned_thread;
251
+ spawned_thread_out_ = 0;
252
+ spawned_thread.suspend();
253
+ function(&spawned_thread);
254
+ spawned_thread.suspend();
255
+ return {};
102
256
  }
103
257
 
104
- //private:
105
- shared_ptr<typename basic_yield_context<Handler>::callee_type> coro_;
106
- typename basic_yield_context<Handler>::caller_type& ca_;
107
- Handler handler_;
108
- atomic_count* ready_;
109
- boost::system::error_code* ec_;
258
+ private:
259
+ Function function_;
260
+ spawned_fiber_thread** spawned_thread_out_;
110
261
  };
111
262
 
112
- template <typename Handler, typename T>
113
- inline asio_handler_allocate_is_deprecated
114
- asio_handler_allocate(std::size_t size,
115
- coro_handler<Handler, T>* this_handler)
263
+ fiber_type caller_;
264
+ fiber_type callee_;
265
+ void (*on_suspend_fn_)(void*);
266
+ void* on_suspend_arg_;
267
+ };
268
+
269
+ #endif // defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
270
+
271
+ #if defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
272
+ typedef spawned_fiber_thread default_spawned_thread_type;
273
+ #elif defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
274
+ typedef spawned_coroutine_thread default_spawned_thread_type;
275
+ #else
276
+ # error No spawn() implementation available
277
+ #endif
278
+
279
+ // Helper class to perform the initial resume on the correct executor.
280
+ class spawned_thread_resumer
281
+ {
282
+ public:
283
+ explicit spawned_thread_resumer(spawned_thread_base* spawned_thread)
284
+ : spawned_thread_(spawned_thread)
116
285
  {
117
- #if defined(BOOST_ASIO_NO_DEPRECATED)
118
- boost_asio_handler_alloc_helpers::allocate(size, this_handler->handler_);
119
- return asio_handler_allocate_is_no_longer_used();
120
- #else // defined(BOOST_ASIO_NO_DEPRECATED)
121
- return boost_asio_handler_alloc_helpers::allocate(
122
- size, this_handler->handler_);
123
- #endif // defined(BOOST_ASIO_NO_DEPRECATED)
286
+ #if !defined(BOOST_ASIO_HAS_MOVE)
287
+ spawned_thread->detach();
288
+ spawned_thread->attach(&spawned_thread_);
289
+ #endif // !defined(BOOST_ASIO_HAS_MOVE)
124
290
  }
125
291
 
126
- template <typename Handler, typename T>
127
- inline asio_handler_deallocate_is_deprecated
128
- asio_handler_deallocate(void* pointer, std::size_t size,
129
- coro_handler<Handler, T>* this_handler)
292
+ #if defined(BOOST_ASIO_HAS_MOVE)
293
+
294
+ spawned_thread_resumer(spawned_thread_resumer&& other) BOOST_ASIO_NOEXCEPT
295
+ : spawned_thread_(other.spawned_thread_)
130
296
  {
131
- boost_asio_handler_alloc_helpers::deallocate(
132
- pointer, size, this_handler->handler_);
133
- #if defined(BOOST_ASIO_NO_DEPRECATED)
134
- return asio_handler_deallocate_is_no_longer_used();
135
- #endif // defined(BOOST_ASIO_NO_DEPRECATED)
297
+ other.spawned_thread_ = 0;
136
298
  }
137
299
 
138
- template <typename Handler, typename T>
139
- inline bool asio_handler_is_continuation(coro_handler<Handler, T>*)
300
+ #else // defined(BOOST_ASIO_HAS_MOVE)
301
+
302
+ spawned_thread_resumer(
303
+ const spawned_thread_resumer& other) BOOST_ASIO_NOEXCEPT
304
+ : spawned_thread_(other.spawned_thread_)
140
305
  {
141
- return true;
306
+ spawned_thread_->detach();
307
+ spawned_thread_->attach(&spawned_thread_);
142
308
  }
143
309
 
144
- template <typename Function, typename Handler, typename T>
145
- inline asio_handler_invoke_is_deprecated
146
- asio_handler_invoke(Function& function,
147
- coro_handler<Handler, T>* this_handler)
310
+ #endif // defined(BOOST_ASIO_HAS_MOVE)
311
+
312
+ ~spawned_thread_resumer()
148
313
  {
149
- boost_asio_handler_invoke_helpers::invoke(
150
- function, this_handler->handler_);
151
- #if defined(BOOST_ASIO_NO_DEPRECATED)
152
- return asio_handler_invoke_is_no_longer_used();
153
- #endif // defined(BOOST_ASIO_NO_DEPRECATED)
314
+ if (spawned_thread_)
315
+ spawned_thread_->destroy();
154
316
  }
155
317
 
156
- template <typename Function, typename Handler, typename T>
157
- inline asio_handler_invoke_is_deprecated
158
- asio_handler_invoke(const Function& function,
159
- coro_handler<Handler, T>* this_handler)
318
+ void operator()()
160
319
  {
161
- boost_asio_handler_invoke_helpers::invoke(
162
- function, this_handler->handler_);
163
- #if defined(BOOST_ASIO_NO_DEPRECATED)
164
- return asio_handler_invoke_is_no_longer_used();
165
- #endif // defined(BOOST_ASIO_NO_DEPRECATED)
320
+ #if defined(BOOST_ASIO_HAS_MOVE)
321
+ spawned_thread_->attach(&spawned_thread_);
322
+ #endif // defined(BOOST_ASIO_HAS_MOVE)
323
+ spawned_thread_->resume();
166
324
  }
167
325
 
168
- template <typename Handler, typename T>
169
- class coro_async_result
326
+ private:
327
+ spawned_thread_base* spawned_thread_;
328
+ };
329
+
330
+ // Helper class to ensure spawned threads are destroyed on the correct executor.
331
+ class spawned_thread_destroyer
332
+ {
333
+ public:
334
+ explicit spawned_thread_destroyer(spawned_thread_base* spawned_thread)
335
+ : spawned_thread_(spawned_thread)
170
336
  {
171
- public:
172
- typedef coro_handler<Handler, T> completion_handler_type;
173
- typedef T return_type;
337
+ spawned_thread->detach();
338
+ #if !defined(BOOST_ASIO_HAS_MOVE)
339
+ spawned_thread->attach(&spawned_thread_);
340
+ #endif // !defined(BOOST_ASIO_HAS_MOVE)
341
+ }
174
342
 
175
- explicit coro_async_result(completion_handler_type& h)
176
- : handler_(h),
177
- ca_(h.ca_),
178
- ready_(2)
179
- {
180
- h.ready_ = &ready_;
181
- out_ec_ = h.ec_;
182
- if (!out_ec_) h.ec_ = &ec_;
183
- h.value_ = &value_;
184
- }
343
+ #if defined(BOOST_ASIO_HAS_MOVE)
185
344
 
186
- return_type get()
187
- {
188
- // Must not hold shared_ptr to coro while suspended.
189
- handler_.coro_.reset();
345
+ spawned_thread_destroyer(spawned_thread_destroyer&& other) BOOST_ASIO_NOEXCEPT
346
+ : spawned_thread_(other.spawned_thread_)
347
+ {
348
+ other.spawned_thread_ = 0;
349
+ }
190
350
 
191
- if (--ready_ != 0)
192
- ca_();
193
- if (!out_ec_ && ec_) throw boost::system::system_error(ec_);
194
- return BOOST_ASIO_MOVE_CAST(return_type)(value_);
195
- }
351
+ #else // defined(BOOST_ASIO_HAS_MOVE)
196
352
 
197
- private:
198
- completion_handler_type& handler_;
199
- typename basic_yield_context<Handler>::caller_type& ca_;
200
- atomic_count ready_;
201
- boost::system::error_code* out_ec_;
202
- boost::system::error_code ec_;
203
- return_type value_;
204
- };
353
+ spawned_thread_destroyer(
354
+ const spawned_thread_destroyer& other) BOOST_ASIO_NOEXCEPT
355
+ : spawned_thread_(other.spawned_thread_)
356
+ {
357
+ spawned_thread_->detach();
358
+ spawned_thread_->attach(&spawned_thread_);
359
+ }
360
+
361
+ #endif // defined(BOOST_ASIO_HAS_MOVE)
205
362
 
206
- template <typename Handler>
207
- class coro_async_result<Handler, void>
363
+ ~spawned_thread_destroyer()
208
364
  {
209
- public:
210
- typedef coro_handler<Handler, void> completion_handler_type;
211
- typedef void return_type;
365
+ if (spawned_thread_)
366
+ spawned_thread_->destroy();
367
+ }
212
368
 
213
- explicit coro_async_result(completion_handler_type& h)
214
- : handler_(h),
215
- ca_(h.ca_),
216
- ready_(2)
369
+ void operator()()
370
+ {
371
+ if (spawned_thread_)
217
372
  {
218
- h.ready_ = &ready_;
219
- out_ec_ = h.ec_;
220
- if (!out_ec_) h.ec_ = &ec_;
373
+ spawned_thread_->destroy();
374
+ spawned_thread_ = 0;
221
375
  }
376
+ }
222
377
 
223
- void get()
224
- {
225
- // Must not hold shared_ptr to coro while suspended.
226
- handler_.coro_.reset();
378
+ private:
379
+ spawned_thread_base* spawned_thread_;
380
+ };
227
381
 
228
- if (--ready_ != 0)
229
- ca_();
230
- if (!out_ec_ && ec_) throw boost::system::system_error(ec_);
231
- }
382
+ // Base class for all completion handlers associated with a spawned thread.
383
+ template <typename Executor>
384
+ class spawn_handler_base
385
+ {
386
+ public:
387
+ typedef Executor executor_type;
388
+ typedef cancellation_slot cancellation_slot_type;
232
389
 
233
- private:
234
- completion_handler_type& handler_;
235
- typename basic_yield_context<Handler>::caller_type& ca_;
236
- atomic_count ready_;
237
- boost::system::error_code* out_ec_;
238
- boost::system::error_code ec_;
239
- };
390
+ spawn_handler_base(const basic_yield_context<Executor>& yield)
391
+ : yield_(yield),
392
+ spawned_thread_(yield.spawned_thread_)
393
+ {
394
+ spawned_thread_->detach();
395
+ #if !defined(BOOST_ASIO_HAS_MOVE)
396
+ spawned_thread_->attach(&spawned_thread_);
397
+ #endif // !defined(BOOST_ASIO_HAS_MOVE)
398
+ }
240
399
 
241
- } // namespace detail
400
+ #if defined(BOOST_ASIO_HAS_MOVE)
401
+
402
+ spawn_handler_base(spawn_handler_base&& other) BOOST_ASIO_NOEXCEPT
403
+ : yield_(other.yield_),
404
+ spawned_thread_(other.spawned_thread_)
405
+
406
+ {
407
+ other.spawned_thread_ = 0;
408
+ }
242
409
 
243
- #if !defined(GENERATING_DOCUMENTATION)
410
+ #else // defined(BOOST_ASIO_HAS_MOVE)
244
411
 
245
- template <typename Handler, typename ReturnType>
246
- class async_result<basic_yield_context<Handler>, ReturnType()>
247
- : public detail::coro_async_result<Handler, void>
412
+ spawn_handler_base(const spawn_handler_base& other) BOOST_ASIO_NOEXCEPT
413
+ : yield_(other.yield_),
414
+ spawned_thread_(other.spawned_thread_)
415
+ {
416
+ spawned_thread_->detach();
417
+ spawned_thread_->attach(&spawned_thread_);
418
+ }
419
+
420
+ #endif // defined(BOOST_ASIO_HAS_MOVE)
421
+
422
+ ~spawn_handler_base()
423
+ {
424
+ if (spawned_thread_)
425
+ (post)(yield_.executor_, spawned_thread_destroyer(spawned_thread_));
426
+ }
427
+
428
+ executor_type get_executor() const BOOST_ASIO_NOEXCEPT
429
+ {
430
+ return yield_.executor_;
431
+ }
432
+
433
+ cancellation_slot_type get_cancellation_slot() const BOOST_ASIO_NOEXCEPT
434
+ {
435
+ return spawned_thread_->get_cancellation_slot();
436
+ }
437
+
438
+ void resume()
439
+ {
440
+ spawned_thread_resumer resumer(spawned_thread_);
441
+ spawned_thread_ = 0;
442
+ resumer();
443
+ }
444
+
445
+ protected:
446
+ const basic_yield_context<Executor>& yield_;
447
+ spawned_thread_base* spawned_thread_;
448
+ };
449
+
450
+ // Completion handlers for when basic_yield_context is used as a token.
451
+ template <typename Executor, typename Signature>
452
+ class spawn_handler;
453
+
454
+ template <typename Executor, typename R>
455
+ class spawn_handler<Executor, R()>
456
+ : public spawn_handler_base<Executor>
457
+ {
458
+ public:
459
+ typedef void return_type;
460
+
461
+ struct result_type {};
462
+
463
+ spawn_handler(const basic_yield_context<Executor>& yield, result_type&)
464
+ : spawn_handler_base<Executor>(yield)
465
+ {
466
+ }
467
+
468
+ void operator()()
469
+ {
470
+ this->resume();
471
+ }
472
+
473
+ static return_type on_resume(result_type&)
474
+ {
475
+ }
476
+ };
477
+
478
+ template <typename Executor, typename R>
479
+ class spawn_handler<Executor, R(boost::system::error_code)>
480
+ : public spawn_handler_base<Executor>
248
481
  {
249
482
  public:
250
- explicit async_result(
251
- typename detail::coro_async_result<Handler,
252
- void>::completion_handler_type& h)
253
- : detail::coro_async_result<Handler, void>(h)
483
+ typedef void return_type;
484
+ typedef boost::system::error_code* result_type;
485
+
486
+ spawn_handler(const basic_yield_context<Executor>& yield, result_type& result)
487
+ : spawn_handler_base<Executor>(yield),
488
+ result_(result)
254
489
  {
255
490
  }
491
+
492
+ void operator()(boost::system::error_code ec)
493
+ {
494
+ if (this->yield_.ec_)
495
+ {
496
+ *this->yield_.ec_ = ec;
497
+ result_ = 0;
498
+ }
499
+ else
500
+ result_ = &ec;
501
+ this->resume();
502
+ }
503
+
504
+ static return_type on_resume(result_type& result)
505
+ {
506
+ if (result)
507
+ throw_error(*result);
508
+ }
509
+
510
+ private:
511
+ result_type& result_;
256
512
  };
257
513
 
258
- template <typename Handler, typename ReturnType, typename Arg1>
259
- class async_result<basic_yield_context<Handler>, ReturnType(Arg1)>
260
- : public detail::coro_async_result<Handler, typename decay<Arg1>::type>
514
+ template <typename Executor, typename R>
515
+ class spawn_handler<Executor, R(exception_ptr)>
516
+ : public spawn_handler_base<Executor>
261
517
  {
262
518
  public:
263
- explicit async_result(
264
- typename detail::coro_async_result<Handler,
265
- typename decay<Arg1>::type>::completion_handler_type& h)
266
- : detail::coro_async_result<Handler, typename decay<Arg1>::type>(h)
519
+ typedef void return_type;
520
+ typedef exception_ptr* result_type;
521
+
522
+ spawn_handler(const basic_yield_context<Executor>& yield, result_type& result)
523
+ : spawn_handler_base<Executor>(yield),
524
+ result_(result)
525
+ {
526
+ }
527
+
528
+ void operator()(exception_ptr ex)
529
+ {
530
+ result_ = &ex;
531
+ this->resume();
532
+ }
533
+
534
+ static return_type on_resume(result_type& result)
267
535
  {
536
+ if (result)
537
+ rethrow_exception(*result);
268
538
  }
539
+
540
+ private:
541
+ result_type& result_;
269
542
  };
270
543
 
271
- template <typename Handler, typename ReturnType>
272
- class async_result<basic_yield_context<Handler>,
273
- ReturnType(boost::system::error_code)>
274
- : public detail::coro_async_result<Handler, void>
544
+ template <typename Executor, typename R, typename T>
545
+ class spawn_handler<Executor, R(T)>
546
+ : public spawn_handler_base<Executor>
275
547
  {
276
548
  public:
277
- explicit async_result(
278
- typename detail::coro_async_result<Handler,
279
- void>::completion_handler_type& h)
280
- : detail::coro_async_result<Handler, void>(h)
549
+ typedef T return_type;
550
+ typedef return_type* result_type;
551
+
552
+ spawn_handler(const basic_yield_context<Executor>& yield, result_type& result)
553
+ : spawn_handler_base<Executor>(yield),
554
+ result_(result)
281
555
  {
282
556
  }
557
+
558
+ void operator()(T value)
559
+ {
560
+ result_ = &value;
561
+ this->resume();
562
+ }
563
+
564
+ static return_type on_resume(result_type& result)
565
+ {
566
+ return BOOST_ASIO_MOVE_CAST(return_type)(*result);
567
+ }
568
+
569
+ private:
570
+ result_type& result_;
283
571
  };
284
572
 
285
- template <typename Handler, typename ReturnType, typename Arg2>
286
- class async_result<basic_yield_context<Handler>,
287
- ReturnType(boost::system::error_code, Arg2)>
288
- : public detail::coro_async_result<Handler, typename decay<Arg2>::type>
573
+ template <typename Executor, typename R, typename T>
574
+ class spawn_handler<Executor, R(boost::system::error_code, T)>
575
+ : public spawn_handler_base<Executor>
289
576
  {
290
577
  public:
291
- explicit async_result(
292
- typename detail::coro_async_result<Handler,
293
- typename decay<Arg2>::type>::completion_handler_type& h)
294
- : detail::coro_async_result<Handler, typename decay<Arg2>::type>(h)
578
+ typedef T return_type;
579
+
580
+ struct result_type
295
581
  {
582
+ boost::system::error_code* ec_;
583
+ return_type* value_;
584
+ };
585
+
586
+ spawn_handler(const basic_yield_context<Executor>& yield, result_type& result)
587
+ : spawn_handler_base<Executor>(yield),
588
+ result_(result)
589
+ {
590
+ }
591
+
592
+ void operator()(boost::system::error_code ec, T value)
593
+ {
594
+ if (this->yield_.ec_)
595
+ {
596
+ *this->yield_.ec_ = ec;
597
+ result_.ec_ = 0;
598
+ }
599
+ else
600
+ result_.ec_ = &ec;
601
+ result_.value_ = &value;
602
+ this->resume();
296
603
  }
604
+
605
+ static return_type on_resume(result_type& result)
606
+ {
607
+ if (result.ec_)
608
+ throw_error(*result.ec_);
609
+ return BOOST_ASIO_MOVE_CAST(return_type)(*result.value_);
610
+ }
611
+
612
+ private:
613
+ result_type& result_;
297
614
  };
298
615
 
299
- template <template <typename, typename> class Associator,
300
- typename Handler, typename T, typename DefaultCandidate>
301
- struct associator<Associator,
302
- detail::coro_handler<Handler, T>,
303
- DefaultCandidate>
304
- : Associator<Handler, DefaultCandidate>
616
+ template <typename Executor, typename R, typename T>
617
+ class spawn_handler<Executor, R(exception_ptr, T)>
618
+ : public spawn_handler_base<Executor>
305
619
  {
306
- static typename Associator<Handler, DefaultCandidate>::type get(
307
- const detail::coro_handler<Handler, T>& h,
308
- const DefaultCandidate& c = DefaultCandidate()) BOOST_ASIO_NOEXCEPT
620
+ public:
621
+ typedef T return_type;
622
+
623
+ struct result_type
624
+ {
625
+ exception_ptr ex_;
626
+ return_type* value_;
627
+ };
628
+
629
+ spawn_handler(const basic_yield_context<Executor>& yield, result_type& result)
630
+ : spawn_handler_base<Executor>(yield),
631
+ result_(result)
309
632
  {
310
- return Associator<Handler, DefaultCandidate>::get(h.handler_, c);
311
633
  }
634
+
635
+ void operator()(exception_ptr ex, T value)
636
+ {
637
+ result_.ex_ = &ex;
638
+ result_.value_ = &value;
639
+ this->resume();
640
+ }
641
+
642
+ static return_type on_resume(result_type& result)
643
+ {
644
+ if (result.ex_)
645
+ rethrow_exception(*result.ex_);
646
+ return BOOST_ASIO_MOVE_CAST(return_type)(*result.value_);
647
+ }
648
+
649
+ private:
650
+ result_type& result_;
312
651
  };
313
652
 
314
- namespace detail {
653
+ #if defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES) \
654
+ && defined(BOOST_ASIO_HAS_STD_TUPLE)
655
+
656
+ template <typename Executor, typename R, typename... Ts>
657
+ class spawn_handler<Executor, R(Ts...)>
658
+ : public spawn_handler_base<Executor>
659
+ {
660
+ public:
661
+ typedef std::tuple<Ts...> return_type;
662
+
663
+ typedef return_type* result_type;
664
+
665
+ spawn_handler(const basic_yield_context<Executor>& yield, result_type& result)
666
+ : spawn_handler_base<Executor>(yield),
667
+ result_(result)
668
+ {
669
+ }
670
+
671
+ template <typename... Args>
672
+ void operator()(BOOST_ASIO_MOVE_ARG(Args)... args)
673
+ {
674
+ return_type value(BOOST_ASIO_MOVE_CAST(Args)(args)...);
675
+ result_ = &value;
676
+ this->resume();
677
+ }
678
+
679
+ static return_type on_resume(result_type& result)
680
+ {
681
+ return BOOST_ASIO_MOVE_CAST(return_type)(*result);
682
+ }
683
+
684
+ private:
685
+ result_type& result_;
686
+ };
687
+
688
+ template <typename Executor, typename R, typename... Ts>
689
+ class spawn_handler<Executor, R(boost::system::error_code, Ts...)>
690
+ : public spawn_handler_base<Executor>
691
+ {
692
+ public:
693
+ typedef std::tuple<Ts...> return_type;
315
694
 
316
- template <typename Handler, typename Function>
317
- struct spawn_data : private noncopyable
695
+ struct result_type
318
696
  {
319
- template <typename Hand, typename Func>
320
- spawn_data(BOOST_ASIO_MOVE_ARG(Hand) handler,
321
- bool call_handler, BOOST_ASIO_MOVE_ARG(Func) function)
322
- : handler_(BOOST_ASIO_MOVE_CAST(Hand)(handler)),
323
- call_handler_(call_handler),
324
- function_(BOOST_ASIO_MOVE_CAST(Func)(function))
697
+ boost::system::error_code* ec_;
698
+ return_type* value_;
699
+ };
700
+
701
+ spawn_handler(const basic_yield_context<Executor>& yield, result_type& result)
702
+ : spawn_handler_base<Executor>(yield),
703
+ result_(result)
704
+ {
705
+ }
706
+
707
+ template <typename... Args>
708
+ void operator()(boost::system::error_code ec,
709
+ BOOST_ASIO_MOVE_ARG(Args)... args)
710
+ {
711
+ return_type value(BOOST_ASIO_MOVE_CAST(Args)(args)...);
712
+ if (this->yield_.ec_)
325
713
  {
714
+ *this->yield_.ec_ = ec;
715
+ result_.ec_ = 0;
326
716
  }
717
+ else
718
+ result_.ec_ = &ec;
719
+ result_.value_ = &value;
720
+ this->resume();
721
+ }
327
722
 
328
- weak_ptr<typename basic_yield_context<Handler>::callee_type> coro_;
329
- Handler handler_;
330
- bool call_handler_;
331
- Function function_;
723
+ static return_type on_resume(result_type& result)
724
+ {
725
+ if (result.ec_)
726
+ throw_error(*result.ec_);
727
+ return BOOST_ASIO_MOVE_CAST(return_type)(*result.value_);
728
+ }
729
+
730
+ private:
731
+ result_type& result_;
732
+ };
733
+
734
+ template <typename Executor, typename R, typename... Ts>
735
+ class spawn_handler<Executor, R(exception_ptr, Ts...)>
736
+ : public spawn_handler_base<Executor>
737
+ {
738
+ public:
739
+ typedef std::tuple<Ts...> return_type;
740
+
741
+ struct result_type
742
+ {
743
+ exception_ptr ex_;
744
+ return_type* value_;
332
745
  };
333
746
 
334
- template <typename Handler, typename Function>
335
- struct coro_entry_point
747
+ spawn_handler(const basic_yield_context<Executor>& yield, result_type& result)
748
+ : spawn_handler_base<Executor>(yield),
749
+ result_(result)
750
+ {
751
+ }
752
+
753
+ template <typename... Args>
754
+ void operator()(exception_ptr ex, BOOST_ASIO_MOVE_ARG(Args)... args)
336
755
  {
337
- void operator()(typename basic_yield_context<Handler>::caller_type& ca)
756
+ return_type value(BOOST_ASIO_MOVE_CAST(Args)(args)...);
757
+ result_.ex_ = &ex;
758
+ result_.value_ = &value;
759
+ this->resume();
760
+ }
761
+
762
+ static return_type on_resume(result_type& result)
763
+ {
764
+ if (result.ex_)
765
+ rethrow_exception(*result.ex_);
766
+ return BOOST_ASIO_MOVE_CAST(return_type)(*result.value_);
767
+ }
768
+
769
+ private:
770
+ result_type& result_;
771
+ };
772
+
773
+ #endif // defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
774
+ // && defined(BOOST_ASIO_HAS_STD_TUPLE)
775
+
776
+ template <typename Executor, typename Signature>
777
+ inline bool asio_handler_is_continuation(spawn_handler<Executor, Signature>*)
778
+ {
779
+ return true;
780
+ }
781
+
782
+ } // namespace detail
783
+
784
+ template <typename Executor, typename Signature>
785
+ class async_result<basic_yield_context<Executor>, Signature>
786
+ {
787
+ public:
788
+ typedef typename detail::spawn_handler<Executor, Signature> handler_type;
789
+ typedef typename handler_type::return_type return_type;
790
+
791
+ #if defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
792
+ # if defined(BOOST_ASIO_HAS_VARIADIC_LAMBDA_CAPTURES)
793
+
794
+ template <typename Initiation, typename... InitArgs>
795
+ static return_type initiate(BOOST_ASIO_MOVE_ARG(Initiation) init,
796
+ const basic_yield_context<Executor>& yield,
797
+ BOOST_ASIO_MOVE_ARG(InitArgs)... init_args)
798
+ {
799
+ typename handler_type::result_type result
800
+ = typename handler_type::result_type();
801
+
802
+ yield.spawned_thread_->suspend_with(
803
+ [&]()
804
+ {
805
+ BOOST_ASIO_MOVE_CAST(Initiation)(init)(
806
+ handler_type(yield, result),
807
+ BOOST_ASIO_MOVE_CAST(InitArgs)(init_args)...);
808
+ });
809
+
810
+ return handler_type::on_resume(result);
811
+ }
812
+
813
+ # else // defined(BOOST_ASIO_HAS_VARIADIC_LAMBDA_CAPTURES)
814
+
815
+ template <typename Initiation, typename... InitArgs>
816
+ struct suspend_with_helper
817
+ {
818
+ typename handler_type::result_type& result_;
819
+ BOOST_ASIO_MOVE_ARG(Initiation) init_;
820
+ const basic_yield_context<Executor>& yield_;
821
+ std::tuple<BOOST_ASIO_MOVE_ARG(InitArgs)...> init_args_;
822
+
823
+ template <std::size_t... I>
824
+ void do_invoke(detail::index_sequence<I...>)
338
825
  {
339
- shared_ptr<spawn_data<Handler, Function> > data(data_);
340
- #if !defined(BOOST_COROUTINES_UNIDIRECT) && !defined(BOOST_COROUTINES_V2)
341
- ca(); // Yield until coroutine pointer has been initialised.
342
- #endif // !defined(BOOST_COROUTINES_UNIDIRECT) && !defined(BOOST_COROUTINES_V2)
343
- const basic_yield_context<Handler> yield(
344
- data->coro_, ca, data->handler_);
345
-
346
- (data->function_)(yield);
347
- if (data->call_handler_)
348
- BOOST_ASIO_MOVE_OR_LVALUE(Handler)(data->handler_)();
826
+ BOOST_ASIO_MOVE_CAST(Initiation)(init_)(
827
+ handler_type(yield_, result_),
828
+ BOOST_ASIO_MOVE_CAST(InitArgs)(std::get<I>(init_args_))...);
349
829
  }
350
830
 
351
- shared_ptr<spawn_data<Handler, Function> > data_;
831
+ void operator()()
832
+ {
833
+ this->do_invoke(detail::make_index_sequence<sizeof...(InitArgs)>());
834
+ }
352
835
  };
353
836
 
354
- template <typename Handler, typename Function>
355
- struct spawn_helper
837
+ template <typename Initiation, typename... InitArgs>
838
+ static return_type initiate(BOOST_ASIO_MOVE_ARG(Initiation) init,
839
+ const basic_yield_context<Executor>& yield,
840
+ BOOST_ASIO_MOVE_ARG(InitArgs)... init_args)
356
841
  {
357
- typedef typename associated_allocator<Handler>::type allocator_type;
842
+ typename handler_type::result_type result
843
+ = typename handler_type::result_type();
358
844
 
359
- allocator_type get_allocator() const BOOST_ASIO_NOEXCEPT
845
+ yield.spawned_thread_->suspend_with(
846
+ suspend_with_helper<Initiation, InitArgs...>{
847
+ result, BOOST_ASIO_MOVE_CAST(Initiation)(init), yield,
848
+ std::tuple<BOOST_ASIO_MOVE_ARG(InitArgs)...>(
849
+ BOOST_ASIO_MOVE_CAST(InitArgs)(init_args)...)});
850
+
851
+ return handler_type::on_resume(result);
852
+ }
853
+
854
+ # endif // defined(BOOST_ASIO_HAS_VARIADIC_LAMBDA_CAPTURES)
855
+ #else // defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
856
+
857
+ template <typename Initiation>
858
+ static return_type initiate(Initiation init,
859
+ const basic_yield_context<Executor>& yield)
860
+ {
861
+ typename handler_type::result_type result
862
+ = typename handler_type::result_type();
863
+
864
+ struct on_suspend
360
865
  {
361
- return (get_associated_allocator)(data_->handler_);
362
- }
866
+ Initiation& init_;
867
+ const basic_yield_context<Executor>& yield_;
868
+ typename handler_type::result_type& result_;
363
869
 
364
- typedef typename associated_executor<Handler>::type executor_type;
870
+ void do_call()
871
+ {
872
+ BOOST_ASIO_MOVE_CAST(Initiation)(init_)(
873
+ handler_type(yield_, result_));
874
+ }
875
+
876
+ static void call(void* arg)
877
+ {
878
+ static_cast<on_suspend*>(arg)->do_call();
879
+ }
880
+ } o = { init, yield, result };
881
+
882
+ yield.spawned_thread_->suspend_with(&on_suspend::call, &o);
883
+
884
+ return handler_type::on_resume(result);
885
+ }
886
+
887
+ #define BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS(n) \
888
+ BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_##n
889
+ #define BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_1 \
890
+ T1& x1;
891
+ #define BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_2 \
892
+ T1& x1; T2& x2;
893
+ #define BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_3 \
894
+ T1& x1; T2& x2; T3& x3;
895
+ #define BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_4 \
896
+ T1& x1; T2& x2; T3& x3; T4& x4;
897
+ #define BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_5 \
898
+ T1& x1; T2& x2; T3& x3; T4& x4; T5& x5;
899
+ #define BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_6 \
900
+ T1& x1; T2& x2; T3& x3; T4& x4; T5& x5; T6& x6;
901
+ #define BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_7 \
902
+ T1& x1; T2& x2; T3& x3; T4& x4; T5& x5; T6& x6; T7& x7;
903
+ #define BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_8 \
904
+ T1& x1; T2& x2; T3& x3; T4& x4; T5& x5; T6& x6; T7& x7; T8& x8;
905
+
906
+ #define BOOST_ASIO_PRIVATE_INITIATE_DEF(n) \
907
+ template <typename Initiation, BOOST_ASIO_VARIADIC_TPARAMS(n)> \
908
+ static return_type initiate(Initiation init, \
909
+ const basic_yield_context<Executor>& yield, \
910
+ BOOST_ASIO_VARIADIC_BYVAL_PARAMS(n)) \
911
+ { \
912
+ typename handler_type::result_type result \
913
+ = typename handler_type::result_type(); \
914
+ \
915
+ struct on_suspend \
916
+ { \
917
+ Initiation& init; \
918
+ const basic_yield_context<Executor>& yield; \
919
+ typename handler_type::result_type& result; \
920
+ BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS(n) \
921
+ \
922
+ void do_call() \
923
+ { \
924
+ BOOST_ASIO_MOVE_CAST(Initiation)(init)( \
925
+ handler_type(yield, result), \
926
+ BOOST_ASIO_VARIADIC_MOVE_ARGS(n)); \
927
+ } \
928
+ \
929
+ static void call(void* arg) \
930
+ { \
931
+ static_cast<on_suspend*>(arg)->do_call(); \
932
+ } \
933
+ } o = { init, yield, result, BOOST_ASIO_VARIADIC_BYVAL_ARGS(n) }; \
934
+ \
935
+ yield.spawned_thread_->suspend_with(&on_suspend::call, &o); \
936
+ \
937
+ return handler_type::on_resume(result); \
938
+ } \
939
+ /**/
940
+ BOOST_ASIO_VARIADIC_GENERATE(BOOST_ASIO_PRIVATE_INITIATE_DEF)
941
+ #undef BOOST_ASIO_PRIVATE_INITIATE_DEF
942
+ #undef BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS
943
+ #undef BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_1
944
+ #undef BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_2
945
+ #undef BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_3
946
+ #undef BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_4
947
+ #undef BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_5
948
+ #undef BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_6
949
+ #undef BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_7
950
+ #undef BOOST_ASIO_PRIVATE_ON_SUSPEND_MEMBERS_8
951
+
952
+ #endif // defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
953
+ };
365
954
 
366
- executor_type get_executor() const BOOST_ASIO_NOEXCEPT
955
+ namespace detail {
956
+
957
+ template <typename Executor, typename Function, typename Handler>
958
+ class spawn_entry_point
959
+ {
960
+ public:
961
+ template <typename F, typename H>
962
+ spawn_entry_point(const Executor& ex,
963
+ BOOST_ASIO_MOVE_ARG(F) f, BOOST_ASIO_MOVE_ARG(H) h)
964
+ : executor_(ex),
965
+ function_(BOOST_ASIO_MOVE_CAST(F)(f)),
966
+ handler_(BOOST_ASIO_MOVE_CAST(H)(h))
967
+ {
968
+ }
969
+
970
+ void operator()(spawned_thread_base* spawned_thread)
971
+ {
972
+ const basic_yield_context<Executor> yield(spawned_thread, executor_);
973
+ this->call(yield,
974
+ void_type<typename result_of<Function(
975
+ basic_yield_context<Executor>)>::type>());
976
+ }
977
+
978
+ private:
979
+ void call(const basic_yield_context<Executor>& yield, void_type<void>)
980
+ {
981
+ #if !defined(BOOST_ASIO_NO_EXCEPTIONS)
982
+ try
983
+ #endif // !defined(BOOST_ASIO_NO_EXCEPTIONS)
984
+ {
985
+ function_(yield);
986
+ if (!yield.spawned_thread_->has_context_switched())
987
+ (post)(yield);
988
+ BOOST_ASIO_MOVE_OR_LVALUE(Handler)(handler_)(exception_ptr());
989
+ }
990
+ #if !defined(BOOST_ASIO_NO_EXCEPTIONS)
991
+ # if defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
992
+ catch (const boost::context::detail::forced_unwind&)
993
+ {
994
+ throw;
995
+ }
996
+ # endif // defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
997
+ # if defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
998
+ catch (const boost::coroutines::detail::forced_unwind&)
367
999
  {
368
- return (get_associated_executor)(data_->handler_);
1000
+ throw;
369
1001
  }
1002
+ # endif // defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
1003
+ catch (...)
1004
+ {
1005
+ exception_ptr ex = current_exception();
1006
+ if (!yield.spawned_thread_->has_context_switched())
1007
+ (post)(yield);
1008
+ BOOST_ASIO_MOVE_OR_LVALUE(Handler)(handler_)(ex);
1009
+ }
1010
+ #endif // !defined(BOOST_ASIO_NO_EXCEPTIONS)
1011
+ }
370
1012
 
371
- void operator()()
1013
+ template <typename T>
1014
+ void call(const basic_yield_context<Executor>& yield, void_type<T>)
1015
+ {
1016
+ #if !defined(BOOST_ASIO_NO_EXCEPTIONS)
1017
+ try
1018
+ #endif // !defined(BOOST_ASIO_NO_EXCEPTIONS)
1019
+ {
1020
+ T result(function_(yield));
1021
+ if (!yield.spawned_thread_->has_context_switched())
1022
+ (post)(yield);
1023
+ BOOST_ASIO_MOVE_OR_LVALUE(Handler)(handler_)(
1024
+ exception_ptr(), BOOST_ASIO_MOVE_CAST(T)(result));
1025
+ }
1026
+ #if !defined(BOOST_ASIO_NO_EXCEPTIONS)
1027
+ # if defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
1028
+ catch (const boost::context::detail::forced_unwind&)
372
1029
  {
373
- typedef typename basic_yield_context<Handler>::callee_type callee_type;
374
- coro_entry_point<Handler, Function> entry_point = { data_ };
375
- shared_ptr<callee_type> coro(new callee_type(entry_point, attributes_));
376
- data_->coro_ = coro;
377
- (*coro)();
1030
+ throw;
378
1031
  }
1032
+ # endif // defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
1033
+ # if defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
1034
+ catch (const boost::coroutines::detail::forced_unwind&)
1035
+ {
1036
+ throw;
1037
+ }
1038
+ # endif // defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
1039
+ catch (...)
1040
+ {
1041
+ exception_ptr ex = current_exception();
1042
+ if (!yield.spawned_thread_->has_context_switched())
1043
+ (post)(yield);
1044
+ BOOST_ASIO_MOVE_OR_LVALUE(Handler)(handler_)(ex, T());
1045
+ }
1046
+ #endif // !defined(BOOST_ASIO_NO_EXCEPTIONS)
1047
+ }
379
1048
 
380
- shared_ptr<spawn_data<Handler, Function> > data_;
381
- boost::coroutines::attributes attributes_;
382
- };
1049
+ Executor executor_;
1050
+ Function function_;
1051
+ Handler handler_;
1052
+ };
1053
+
1054
+ struct spawn_cancellation_signal_emitter
1055
+ {
1056
+ cancellation_signal* signal_;
1057
+ cancellation_type_t type_;
383
1058
 
384
- template <typename Function, typename Handler, typename Function1>
385
- inline asio_handler_invoke_is_deprecated
386
- asio_handler_invoke(Function& function,
387
- spawn_helper<Handler, Function1>* this_handler)
1059
+ void operator()()
388
1060
  {
389
- boost_asio_handler_invoke_helpers::invoke(
390
- function, this_handler->data_->handler_);
391
- #if defined(BOOST_ASIO_NO_DEPRECATED)
392
- return asio_handler_invoke_is_no_longer_used();
393
- #endif // defined(BOOST_ASIO_NO_DEPRECATED)
1061
+ signal_->emit(type_);
394
1062
  }
1063
+ };
395
1064
 
396
- template <typename Function, typename Handler, typename Function1>
397
- inline asio_handler_invoke_is_deprecated
398
- asio_handler_invoke(const Function& function,
399
- spawn_helper<Handler, Function1>* this_handler)
1065
+ template <typename Handler, typename Executor, typename = void>
1066
+ class spawn_cancellation_handler
1067
+ {
1068
+ public:
1069
+ spawn_cancellation_handler(const Handler& handler, const Executor& ex)
1070
+ : ex_(boost::asio::get_associated_executor(handler, ex))
400
1071
  {
401
- boost_asio_handler_invoke_helpers::invoke(
402
- function, this_handler->data_->handler_);
403
- #if defined(BOOST_ASIO_NO_DEPRECATED)
404
- return asio_handler_invoke_is_no_longer_used();
405
- #endif // defined(BOOST_ASIO_NO_DEPRECATED)
406
1072
  }
407
1073
 
408
- inline void default_spawn_handler() {}
1074
+ cancellation_slot slot()
1075
+ {
1076
+ return signal_.slot();
1077
+ }
1078
+
1079
+ void operator()(cancellation_type_t type)
1080
+ {
1081
+ spawn_cancellation_signal_emitter emitter = { &signal_, type };
1082
+ (dispatch)(ex_, emitter);
1083
+ }
1084
+
1085
+ private:
1086
+ cancellation_signal signal_;
1087
+ typename associated_executor<Handler, Executor>::type ex_;
1088
+ };
1089
+
1090
+
1091
+ template <typename Handler, typename Executor>
1092
+ class spawn_cancellation_handler<Handler, Executor,
1093
+ typename enable_if<
1094
+ is_same<
1095
+ typename associated_executor<Handler,
1096
+ Executor>::asio_associated_executor_is_unspecialised,
1097
+ void
1098
+ >::value
1099
+ >::type>
1100
+ {
1101
+ public:
1102
+ spawn_cancellation_handler(const Handler&, const Executor&)
1103
+ {
1104
+ }
1105
+
1106
+ cancellation_slot slot()
1107
+ {
1108
+ return signal_.slot();
1109
+ }
1110
+
1111
+ void operator()(cancellation_type_t type)
1112
+ {
1113
+ signal_.emit(type);
1114
+ }
1115
+
1116
+ private:
1117
+ cancellation_signal signal_;
1118
+ };
1119
+
1120
+ template <typename Executor>
1121
+ class initiate_spawn
1122
+ {
1123
+ public:
1124
+ typedef Executor executor_type;
1125
+
1126
+ explicit initiate_spawn(const executor_type& ex)
1127
+ : executor_(ex)
1128
+ {
1129
+ }
1130
+
1131
+ executor_type get_executor() const BOOST_ASIO_NOEXCEPT
1132
+ {
1133
+ return executor_;
1134
+ }
1135
+
1136
+ template <typename Handler, typename F>
1137
+ void operator()(BOOST_ASIO_MOVE_ARG(Handler) handler,
1138
+ BOOST_ASIO_MOVE_ARG(F) f) const
1139
+ {
1140
+ typedef typename decay<Handler>::type handler_type;
1141
+ typedef typename decay<F>::type function_type;
1142
+ typedef spawn_cancellation_handler<
1143
+ handler_type, Executor> cancel_handler_type;
1144
+
1145
+ typename associated_cancellation_slot<handler_type>::type slot
1146
+ = boost::asio::get_associated_cancellation_slot(handler);
1147
+
1148
+ cancel_handler_type* cancel_handler = slot.is_connected()
1149
+ ? &slot.template emplace<cancel_handler_type>(handler, executor_)
1150
+ : 0;
1151
+
1152
+ cancellation_slot proxy_slot(
1153
+ cancel_handler
1154
+ ? cancel_handler->slot()
1155
+ : cancellation_slot());
1156
+
1157
+ cancellation_state cancel_state(proxy_slot);
1158
+
1159
+ (dispatch)(executor_,
1160
+ spawned_thread_resumer(
1161
+ default_spawned_thread_type::spawn(
1162
+ spawn_entry_point<Executor, function_type, handler_type>(
1163
+ executor_, BOOST_ASIO_MOVE_CAST(F)(f),
1164
+ BOOST_ASIO_MOVE_CAST(Handler)(handler)),
1165
+ proxy_slot, cancel_state)));
1166
+ }
1167
+
1168
+ #if defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
1169
+
1170
+ template <typename Handler, typename StackAllocator, typename F>
1171
+ void operator()(BOOST_ASIO_MOVE_ARG(Handler) handler, allocator_arg_t,
1172
+ BOOST_ASIO_MOVE_ARG(StackAllocator) stack_allocator,
1173
+ BOOST_ASIO_MOVE_ARG(F) f) const
1174
+ {
1175
+ typedef typename decay<Handler>::type handler_type;
1176
+ typedef typename decay<F>::type function_type;
1177
+ typedef spawn_cancellation_handler<
1178
+ handler_type, Executor> cancel_handler_type;
1179
+
1180
+ typename associated_cancellation_slot<handler_type>::type slot
1181
+ = boost::asio::get_associated_cancellation_slot(handler);
1182
+
1183
+ cancel_handler_type* cancel_handler = slot.is_connected()
1184
+ ? &slot.template emplace<cancel_handler_type>(handler, executor_)
1185
+ : 0;
1186
+
1187
+ cancellation_slot proxy_slot(
1188
+ cancel_handler
1189
+ ? cancel_handler->slot()
1190
+ : cancellation_slot());
1191
+
1192
+ cancellation_state cancel_state(proxy_slot);
1193
+
1194
+ (dispatch)(executor_,
1195
+ spawned_thread_resumer(
1196
+ spawned_fiber_thread::spawn(allocator_arg_t(),
1197
+ BOOST_ASIO_MOVE_CAST(StackAllocator)(stack_allocator),
1198
+ spawn_entry_point<Executor, function_type, handler_type>(
1199
+ executor_, BOOST_ASIO_MOVE_CAST(F)(f),
1200
+ BOOST_ASIO_MOVE_CAST(Handler)(handler)),
1201
+ proxy_slot, cancel_state)));
1202
+ }
1203
+
1204
+ #endif // defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
1205
+
1206
+ private:
1207
+ executor_type executor_;
1208
+ };
1209
+
1210
+ } // namespace detail
1211
+
1212
+ template <typename Executor, typename F,
1213
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(typename detail::spawn_signature<
1214
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type)
1215
+ CompletionToken>
1216
+ inline BOOST_ASIO_INITFN_AUTO_RESULT_TYPE_PREFIX(CompletionToken,
1217
+ typename detail::spawn_signature<
1218
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type)
1219
+ spawn(const Executor& ex, BOOST_ASIO_MOVE_ARG(F) function,
1220
+ BOOST_ASIO_MOVE_ARG(CompletionToken) token,
1221
+ #if defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
1222
+ typename constraint<
1223
+ !is_same<
1224
+ typename decay<CompletionToken>::type,
1225
+ boost::coroutines::attributes
1226
+ >::value
1227
+ >::type,
1228
+ #endif // defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
1229
+ typename constraint<
1230
+ is_executor<Executor>::value || execution::is_executor<Executor>::value
1231
+ >::type)
1232
+ BOOST_ASIO_INITFN_AUTO_RESULT_TYPE_SUFFIX((
1233
+ async_initiate<CompletionToken,
1234
+ typename detail::spawn_signature<
1235
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type>(
1236
+ declval<detail::initiate_spawn<Executor> >(),
1237
+ token, BOOST_ASIO_MOVE_CAST(F)(function))))
1238
+ {
1239
+ return async_initiate<CompletionToken,
1240
+ typename detail::spawn_signature<
1241
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type>(
1242
+ detail::initiate_spawn<Executor>(ex),
1243
+ token, BOOST_ASIO_MOVE_CAST(F)(function));
1244
+ }
1245
+
1246
+ template <typename ExecutionContext, typename F,
1247
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(typename detail::spawn_signature<
1248
+ typename result_of<F(basic_yield_context<
1249
+ typename ExecutionContext::executor_type>)>::type>::type)
1250
+ CompletionToken>
1251
+ inline BOOST_ASIO_INITFN_AUTO_RESULT_TYPE_PREFIX(CompletionToken,
1252
+ typename detail::spawn_signature<
1253
+ typename result_of<F(basic_yield_context<
1254
+ typename ExecutionContext::executor_type>)>::type>::type)
1255
+ spawn(ExecutionContext& ctx, BOOST_ASIO_MOVE_ARG(F) function,
1256
+ BOOST_ASIO_MOVE_ARG(CompletionToken) token,
1257
+ #if defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
1258
+ typename constraint<
1259
+ !is_same<
1260
+ typename decay<CompletionToken>::type,
1261
+ boost::coroutines::attributes
1262
+ >::value
1263
+ >::type,
1264
+ #endif // defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
1265
+ typename constraint<
1266
+ is_convertible<ExecutionContext&, execution_context&>::value
1267
+ >::type)
1268
+ BOOST_ASIO_INITFN_AUTO_RESULT_TYPE_SUFFIX((
1269
+ async_initiate<CompletionToken,
1270
+ typename detail::spawn_signature<
1271
+ typename result_of<F(basic_yield_context<
1272
+ typename ExecutionContext::executor_type>)>::type>::type>(
1273
+ declval<detail::initiate_spawn<
1274
+ typename ExecutionContext::executor_type> >(),
1275
+ token, BOOST_ASIO_MOVE_CAST(F)(function))))
1276
+ {
1277
+ return (spawn)(ctx.get_executor(), BOOST_ASIO_MOVE_CAST(F)(function),
1278
+ BOOST_ASIO_MOVE_CAST(CompletionToken)(token));
1279
+ }
1280
+
1281
+ template <typename Executor, typename F,
1282
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(typename detail::spawn_signature<
1283
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type)
1284
+ CompletionToken>
1285
+ inline BOOST_ASIO_INITFN_AUTO_RESULT_TYPE_PREFIX(CompletionToken,
1286
+ typename detail::spawn_signature<
1287
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type)
1288
+ spawn(const basic_yield_context<Executor>& ctx,
1289
+ BOOST_ASIO_MOVE_ARG(F) function,
1290
+ BOOST_ASIO_MOVE_ARG(CompletionToken) token,
1291
+ #if defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
1292
+ typename constraint<
1293
+ !is_same<
1294
+ typename decay<CompletionToken>::type,
1295
+ boost::coroutines::attributes
1296
+ >::value
1297
+ >::type,
1298
+ #endif // defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
1299
+ typename constraint<
1300
+ is_executor<Executor>::value || execution::is_executor<Executor>::value
1301
+ >::type)
1302
+ BOOST_ASIO_INITFN_AUTO_RESULT_TYPE_SUFFIX((
1303
+ async_initiate<CompletionToken,
1304
+ typename detail::spawn_signature<
1305
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type>(
1306
+ declval<detail::initiate_spawn<Executor> >(),
1307
+ token, BOOST_ASIO_MOVE_CAST(F)(function))))
1308
+ {
1309
+ return (spawn)(ctx.get_executor(), BOOST_ASIO_MOVE_CAST(F)(function),
1310
+ BOOST_ASIO_MOVE_CAST(CompletionToken)(token));
1311
+ }
1312
+
1313
+ #if defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
1314
+
1315
+ template <typename Executor, typename StackAllocator, typename F,
1316
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(typename detail::spawn_signature<
1317
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type)
1318
+ CompletionToken>
1319
+ inline BOOST_ASIO_INITFN_AUTO_RESULT_TYPE_PREFIX(CompletionToken,
1320
+ typename detail::spawn_signature<
1321
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type)
1322
+ spawn(const Executor& ex, allocator_arg_t,
1323
+ BOOST_ASIO_MOVE_ARG(StackAllocator) stack_allocator,
1324
+ BOOST_ASIO_MOVE_ARG(F) function,
1325
+ BOOST_ASIO_MOVE_ARG(CompletionToken) token,
1326
+ typename constraint<
1327
+ is_executor<Executor>::value || execution::is_executor<Executor>::value
1328
+ >::type)
1329
+ BOOST_ASIO_INITFN_AUTO_RESULT_TYPE_SUFFIX((
1330
+ async_initiate<CompletionToken,
1331
+ typename detail::spawn_signature<
1332
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type>(
1333
+ declval<detail::initiate_spawn<Executor> >(),
1334
+ token, allocator_arg_t(),
1335
+ BOOST_ASIO_MOVE_CAST(StackAllocator)(stack_allocator),
1336
+ BOOST_ASIO_MOVE_CAST(F)(function))))
1337
+ {
1338
+ return async_initiate<CompletionToken,
1339
+ typename detail::spawn_signature<
1340
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type>(
1341
+ detail::initiate_spawn<Executor>(ex), token, allocator_arg_t(),
1342
+ BOOST_ASIO_MOVE_CAST(StackAllocator)(stack_allocator),
1343
+ BOOST_ASIO_MOVE_CAST(F)(function));
1344
+ }
1345
+
1346
+ template <typename ExecutionContext, typename StackAllocator, typename F,
1347
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(typename detail::spawn_signature<
1348
+ typename result_of<F(basic_yield_context<
1349
+ typename ExecutionContext::executor_type>)>::type>::type)
1350
+ CompletionToken>
1351
+ inline BOOST_ASIO_INITFN_AUTO_RESULT_TYPE_PREFIX(CompletionToken,
1352
+ typename detail::spawn_signature<
1353
+ typename result_of<F(basic_yield_context<
1354
+ typename ExecutionContext::executor_type>)>::type>::type)
1355
+ spawn(ExecutionContext& ctx, allocator_arg_t,
1356
+ BOOST_ASIO_MOVE_ARG(StackAllocator) stack_allocator,
1357
+ BOOST_ASIO_MOVE_ARG(F) function,
1358
+ BOOST_ASIO_MOVE_ARG(CompletionToken) token,
1359
+ typename constraint<
1360
+ is_convertible<ExecutionContext&, execution_context&>::value
1361
+ >::type)
1362
+ BOOST_ASIO_INITFN_AUTO_RESULT_TYPE_SUFFIX((
1363
+ async_initiate<CompletionToken,
1364
+ typename detail::spawn_signature<
1365
+ typename result_of<F(basic_yield_context<
1366
+ typename ExecutionContext::executor_type>)>::type>::type>(
1367
+ declval<detail::initiate_spawn<
1368
+ typename ExecutionContext::executor_type> >(),
1369
+ token, allocator_arg_t(),
1370
+ BOOST_ASIO_MOVE_CAST(StackAllocator)(stack_allocator),
1371
+ BOOST_ASIO_MOVE_CAST(F)(function))))
1372
+ {
1373
+ return (spawn)(ctx.get_executor(), allocator_arg_t(),
1374
+ BOOST_ASIO_MOVE_CAST(StackAllocator)(stack_allocator),
1375
+ BOOST_ASIO_MOVE_CAST(F)(function),
1376
+ BOOST_ASIO_MOVE_CAST(CompletionToken)(token));
1377
+ }
1378
+
1379
+ template <typename Executor, typename StackAllocator, typename F,
1380
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(typename detail::spawn_signature<
1381
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type)
1382
+ CompletionToken>
1383
+ inline BOOST_ASIO_INITFN_AUTO_RESULT_TYPE_PREFIX(CompletionToken,
1384
+ typename detail::spawn_signature<
1385
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type)
1386
+ spawn(const basic_yield_context<Executor>& ctx, allocator_arg_t,
1387
+ BOOST_ASIO_MOVE_ARG(StackAllocator) stack_allocator,
1388
+ BOOST_ASIO_MOVE_ARG(F) function,
1389
+ BOOST_ASIO_MOVE_ARG(CompletionToken) token,
1390
+ typename constraint<
1391
+ is_executor<Executor>::value || execution::is_executor<Executor>::value
1392
+ >::type)
1393
+ BOOST_ASIO_INITFN_AUTO_RESULT_TYPE_SUFFIX((
1394
+ async_initiate<CompletionToken,
1395
+ typename detail::spawn_signature<
1396
+ typename result_of<F(basic_yield_context<Executor>)>::type>::type>(
1397
+ declval<detail::initiate_spawn<Executor> >(),
1398
+ token, allocator_arg_t(),
1399
+ BOOST_ASIO_MOVE_CAST(StackAllocator)(stack_allocator),
1400
+ BOOST_ASIO_MOVE_CAST(F)(function))))
1401
+ {
1402
+ return (spawn)(ctx.get_executor(), allocator_arg_t(),
1403
+ BOOST_ASIO_MOVE_CAST(StackAllocator)(stack_allocator),
1404
+ BOOST_ASIO_MOVE_CAST(F)(function),
1405
+ BOOST_ASIO_MOVE_CAST(CompletionToken)(token));
1406
+ }
1407
+
1408
+ #endif // defined(BOOST_ASIO_HAS_BOOST_CONTEXT_FIBER)
1409
+
1410
+ #if defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
1411
+
1412
+ namespace detail {
1413
+
1414
+ template <typename Executor, typename Function, typename Handler>
1415
+ class old_spawn_entry_point
1416
+ {
1417
+ public:
1418
+ template <typename F, typename H>
1419
+ old_spawn_entry_point(const Executor& ex,
1420
+ BOOST_ASIO_MOVE_ARG(F) f, BOOST_ASIO_MOVE_ARG(H) h)
1421
+ : executor_(ex),
1422
+ function_(BOOST_ASIO_MOVE_CAST(F)(f)),
1423
+ handler_(BOOST_ASIO_MOVE_CAST(H)(h))
1424
+ {
1425
+ }
1426
+
1427
+ void operator()(spawned_thread_base* spawned_thread)
1428
+ {
1429
+ const basic_yield_context<Executor> yield(spawned_thread, executor_);
1430
+ this->call(yield,
1431
+ void_type<typename result_of<Function(
1432
+ basic_yield_context<Executor>)>::type>());
1433
+ }
1434
+
1435
+ private:
1436
+ void call(const basic_yield_context<Executor>& yield, void_type<void>)
1437
+ {
1438
+ function_(yield);
1439
+ BOOST_ASIO_MOVE_OR_LVALUE(Handler)(handler_)();
1440
+ }
1441
+
1442
+ template <typename T>
1443
+ void call(const basic_yield_context<Executor>& yield, void_type<T>)
1444
+ {
1445
+ BOOST_ASIO_MOVE_OR_LVALUE(Handler)(handler_)(function_(yield));
1446
+ }
1447
+
1448
+ Executor executor_;
1449
+ Function function_;
1450
+ Handler handler_;
1451
+ };
1452
+
1453
+ inline void default_spawn_handler() {}
409
1454
 
410
1455
  } // namespace detail
411
1456
 
@@ -432,34 +1477,33 @@ void spawn(BOOST_ASIO_MOVE_ARG(Handler) handler,
432
1477
  {
433
1478
  typedef typename decay<Handler>::type handler_type;
434
1479
  typedef typename decay<Function>::type function_type;
1480
+ typedef typename associated_executor<handler_type>::type executor_type;
435
1481
 
436
- detail::spawn_helper<handler_type, function_type> helper;
437
- helper.data_.reset(
438
- new detail::spawn_data<handler_type, function_type>(
439
- BOOST_ASIO_MOVE_CAST(Handler)(handler), true,
440
- BOOST_ASIO_MOVE_CAST(Function)(function)));
441
- helper.attributes_ = attributes;
1482
+ executor_type ex((get_associated_executor)(handler));
442
1483
 
443
- boost::asio::dispatch(helper);
1484
+ (dispatch)(ex,
1485
+ detail::spawned_thread_resumer(
1486
+ detail::spawned_coroutine_thread::spawn(
1487
+ detail::old_spawn_entry_point<executor_type,
1488
+ function_type, void (*)()>(
1489
+ ex, BOOST_ASIO_MOVE_CAST(Function)(function),
1490
+ &detail::default_spawn_handler), attributes)));
444
1491
  }
445
1492
 
446
- template <typename Handler, typename Function>
447
- void spawn(basic_yield_context<Handler> ctx,
1493
+ template <typename Executor, typename Function>
1494
+ void spawn(basic_yield_context<Executor> ctx,
448
1495
  BOOST_ASIO_MOVE_ARG(Function) function,
449
1496
  const boost::coroutines::attributes& attributes)
450
1497
  {
451
1498
  typedef typename decay<Function>::type function_type;
452
1499
 
453
- Handler handler(ctx.handler_); // Explicit copy that might be moved from.
454
-
455
- detail::spawn_helper<Handler, function_type> helper;
456
- helper.data_.reset(
457
- new detail::spawn_data<Handler, function_type>(
458
- BOOST_ASIO_MOVE_CAST(Handler)(handler), false,
459
- BOOST_ASIO_MOVE_CAST(Function)(function)));
460
- helper.attributes_ = attributes;
461
-
462
- boost::asio::dispatch(helper);
1500
+ (dispatch)(ctx.get_executor(),
1501
+ detail::spawned_thread_resumer(
1502
+ detail::spawned_coroutine_thread::spawn(
1503
+ detail::old_spawn_entry_point<Executor,
1504
+ function_type, void (*)()>(ctx.get_executor(),
1505
+ BOOST_ASIO_MOVE_CAST(Function)(function),
1506
+ &detail::default_spawn_handler), attributes)));
463
1507
  }
464
1508
 
465
1509
  template <typename Function, typename Executor>
@@ -509,7 +1553,7 @@ inline void spawn(ExecutionContext& ctx,
509
1553
  BOOST_ASIO_MOVE_CAST(Function)(function), attributes);
510
1554
  }
511
1555
 
512
- #endif // !defined(GENERATING_DOCUMENTATION)
1556
+ #endif // defined(BOOST_ASIO_HAS_BOOST_COROUTINE)
513
1557
 
514
1558
  } // namespace asio
515
1559
  } // namespace boost