passenger 5.3.3 → 5.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1070) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +8 -0
  3. data/build/support/cxx_dependency_map.rb +151 -83
  4. data/dev/configkit-schemas/index.json +3 -3
  5. data/src/agent/Core/AdminPanelConnector.h +5 -3
  6. data/src/agent/Core/ApplicationPool/Common.h +1 -2
  7. data/src/agent/Core/ApplicationPool/Context.h +1 -2
  8. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +2 -2
  9. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +2 -2
  10. data/src/agent/Core/Config.h +1 -1
  11. data/src/agent/Core/Controller.h +2 -1
  12. data/src/agent/Core/Controller/Config.h +6 -5
  13. data/src/agent/Core/Controller/Hooks.cpp +11 -0
  14. data/src/agent/Core/Controller/SendRequest.cpp +7 -7
  15. data/src/agent/Core/CoreMain.cpp +0 -2
  16. data/src/agent/Core/SpawningKit/Context.h +1 -3
  17. data/src/agent/Core/SpawningKit/Handshake/BackgroundIOCapturer.h +2 -2
  18. data/src/agent/Core/SpawningKit/Handshake/Perform.h +2 -2
  19. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +17 -38
  20. data/src/agent/Core/SpawningKit/PipeWatcher.h +5 -3
  21. data/src/agent/Core/SpawningKit/UserSwitchingRules.h +13 -5
  22. data/src/agent/Shared/ApiServerUtils.h +2 -2
  23. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +33 -18
  24. data/src/agent/Watchdog/Config.h +1 -1
  25. data/src/agent/Watchdog/WatchdogMain.cpp +20 -20
  26. data/src/apache2_module/Config.cpp +7 -6
  27. data/src/cxx_supportlib/ConfigKit/Store.h +2 -2
  28. data/src/cxx_supportlib/Constants.h +1 -1
  29. data/src/cxx_supportlib/Exceptions.h +0 -1
  30. data/src/cxx_supportlib/FileTools/PathSecurityCheck.cpp +3 -2
  31. data/src/cxx_supportlib/ResourceLocator.h +3 -21
  32. data/src/cxx_supportlib/SafeLibev.h +6 -6
  33. data/src/cxx_supportlib/ServerKit/Channel.h +2 -2
  34. data/src/cxx_supportlib/ServerKit/FileBufferedChannel.h +3 -3
  35. data/src/cxx_supportlib/ServerKit/FileBufferedFdSinkChannel.h +2 -2
  36. data/src/cxx_supportlib/ServerKit/HttpServer.h +27 -15
  37. data/src/cxx_supportlib/ServerKit/Server.h +2 -2
  38. data/src/cxx_supportlib/SystemTools/README.md +1 -0
  39. data/src/cxx_supportlib/SystemTools/UserDatabase.cpp +222 -0
  40. data/src/cxx_supportlib/SystemTools/UserDatabase.h +151 -0
  41. data/src/cxx_supportlib/Utils.cpp +1 -113
  42. data/src/cxx_supportlib/Utils.h +1 -29
  43. data/src/cxx_supportlib/Utils/MessagePassing.h +3 -3
  44. data/src/cxx_supportlib/WatchdogLauncher.h +1 -2
  45. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/case_conv.hpp +6 -2
  46. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_iterator.hpp +1 -1
  47. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/util.hpp +3 -2
  48. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +31 -1
  49. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +133 -0
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +151 -0
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +149 -22
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +140 -49
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +145 -35
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +75 -41
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +139 -49
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +98 -45
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +42 -49
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +45 -38
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +349 -109
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +959 -108
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +198 -54
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +424 -284
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +116 -47
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +99 -16
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +4 -1
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +235 -49
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +613 -0
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +1139 -1216
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +27 -14
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +1 -1
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +26 -6
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +1 -1
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +27 -14
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +1 -1
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +61 -21
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +1 -1
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +462 -226
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +7 -7
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/datagram_socket_service.hpp +94 -64
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +1 -1
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer_service.hpp +20 -18
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +109 -0
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +1 -1
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +1 -1
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +1 -1
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +1 -1
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +1 -1
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +404 -77
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +1 -1
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +212 -51
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +2 -2
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +68 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +1 -1
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +8 -6
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +94 -0
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +114 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +151 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +398 -13
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +287 -165
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +33 -0
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +15 -1
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +1 -1
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +65 -14
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +1 -1
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +5 -1
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +17 -8
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +17 -8
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +27 -15
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +41 -17
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +1 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +86 -0
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +1 -1
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{function.hpp → functional.hpp} +10 -10
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +3 -1
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +3 -1
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +3 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +3 -1
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +54 -0
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +158 -3
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +2 -2
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +2 -2
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +90 -9
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +117 -39
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +97 -0
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +1 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +6 -6
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +24 -1
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +17 -4
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +34 -18
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +17 -4
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +152 -51
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +1 -1
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +80 -27
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +19 -6
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +93 -23
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +76 -0
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +1 -1
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +13 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +1 -1
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +11 -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 +27 -13
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_serial_port_service.ipp +7 -6
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +43 -10
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +54 -30
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/{task_io_service.ipp → scheduler.ipp} +167 -70
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +17 -4
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +46 -26
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +36 -30
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +39 -30
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +43 -21
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +129 -26
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +181 -0
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +136 -0
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +13 -13
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +15 -14
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +1 -1
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +12 -5
  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 -51
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +241 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +128 -0
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +1 -1
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +36 -14
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +1 -1
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +2 -1
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +42 -1
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +1 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +1 -1
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +17 -5
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +3 -1
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +61 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +1 -1
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +10 -9
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +1 -1
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +29 -19
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +1 -1
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +7 -1
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +1 -1
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +26 -1
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +1 -1
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +7 -1
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +3 -3
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +1 -1
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +5 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +37 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +1 -1
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +82 -0
  193. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +1 -1
  194. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +1 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +1 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +5 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +1 -1
  198. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +10 -1
  199. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +86 -20
  200. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +9 -7
  201. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_serial_port_service.hpp +10 -8
  202. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +101 -20
  203. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +14 -7
  204. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +20 -8
  205. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +13 -8
  206. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +15 -8
  207. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +25 -11
  208. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +15 -8
  209. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +99 -31
  210. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +96 -35
  211. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +92 -0
  212. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +2 -2
  213. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_fwd.hpp +2 -2
  214. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +7 -3
  215. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +1 -1
  216. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +106 -0
  217. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +1 -1
  218. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +25 -24
  219. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +6 -92
  220. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +136 -0
  221. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +38 -22
  222. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +30 -19
  223. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{task_io_service.hpp → scheduler.hpp} +57 -45
  224. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{task_io_service_operation.hpp → scheduler_operation.hpp} +19 -17
  225. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{task_io_service_thread_info.hpp → scheduler_thread_info.hpp} +10 -10
  226. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +1 -1
  227. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +9 -1
  228. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +37 -18
  230. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +54 -34
  231. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +1 -1
  232. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +9 -5
  233. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +1 -1
  234. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +1 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +14 -13
  236. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +1 -1
  237. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +9 -6
  238. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +1 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +10 -2
  241. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +2 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +1 -1
  243. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +1 -1
  244. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +1 -1
  245. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +72 -0
  246. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +1 -1
  247. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +1 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +7 -1
  249. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +144 -0
  250. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +10 -10
  251. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +49 -0
  252. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +9 -5
  253. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +44 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +91 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +45 -15
  256. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +1 -1
  257. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +1 -1
  258. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +29 -2
  259. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +1 -1
  260. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +11 -5
  261. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +1 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +2 -2
  263. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +2 -2
  264. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +1 -1
  265. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +29 -1
  266. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +74 -18
  267. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +8 -6
  268. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +1 -1
  269. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +1 -1
  270. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +74 -0
  271. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +110 -0
  273. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +17 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +413 -0
  275. data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +343 -0
  276. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +172 -0
  277. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental.hpp +22 -0
  278. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_spawn.hpp +228 -0
  279. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detached.hpp +67 -0
  280. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_spawn.hpp +878 -0
  281. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/detached.hpp +93 -0
  282. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/redirect_error.hpp +296 -0
  283. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/redirect_error.hpp +69 -0
  284. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +1 -1
  285. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +1 -1
  286. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +1 -1
  287. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +3 -2
  288. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +1 -1
  289. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +1 -1
  290. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +1 -1
  291. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +1 -1
  292. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +1 -1
  293. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +4 -4
  294. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_type.hpp +11 -73
  295. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +4 -23
  296. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +86 -15
  297. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +92 -19
  298. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +549 -119
  299. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +79 -0
  300. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +80 -0
  301. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +1 -1
  302. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +109 -0
  303. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +84 -0
  304. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +388 -0
  305. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +40 -0
  306. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +7 -32
  307. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +347 -0
  308. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +176 -0
  309. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +79 -0
  310. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +341 -379
  311. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +173 -343
  312. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +559 -206
  313. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +1 -1
  314. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +30 -30
  315. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +254 -72
  316. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.cpp +1 -1
  317. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +12 -4
  318. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +36 -0
  319. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +75 -0
  320. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +87 -0
  321. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +129 -0
  322. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +78 -0
  323. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +855 -94
  324. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +358 -449
  325. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +165 -418
  326. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +878 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +386 -0
  328. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +6 -743
  329. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +20 -0
  330. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +79 -19
  331. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +111 -23
  332. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +164 -0
  333. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +136 -0
  334. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +104 -14
  335. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +185 -0
  336. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +131 -0
  337. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +50 -0
  338. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +5 -5
  339. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +821 -71
  340. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +23 -4
  341. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +31 -99
  342. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +1 -1
  343. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +313 -0
  344. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +2 -2
  345. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +5 -10
  346. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +16 -19
  347. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +1 -1
  348. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +1 -1
  349. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +28 -14
  350. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +55 -47
  351. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +28 -14
  352. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +76 -44
  353. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +28 -14
  354. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +85 -33
  355. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +2 -14
  356. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +1 -1
  357. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +56 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +218 -0
  359. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +55 -0
  360. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +187 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +8 -8
  362. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +263 -0
  363. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +237 -0
  364. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +131 -0
  365. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +3 -90
  366. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_service.hpp +48 -24
  367. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +3 -3
  368. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +1 -1
  369. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +3 -3
  370. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +3 -3
  371. data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +48 -0
  372. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +1 -1
  373. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +1 -1
  374. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +1 -1
  375. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +23 -21
  376. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +1 -1
  377. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +1 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +3 -2
  379. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +1 -1
  380. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +128 -0
  381. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +30 -2
  382. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +138 -46
  383. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +15 -15
  384. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +646 -0
  385. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +17 -24
  386. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +326 -3
  387. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor_service.hpp +63 -44
  388. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +109 -0
  389. data/src/cxx_supportlib/vendor-modified/boost/asio/raw_socket_service.hpp +94 -64
  390. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +328 -12
  391. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +13 -6
  392. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +1148 -247
  393. data/src/cxx_supportlib/vendor-modified/boost/asio/seq_packet_socket_service.hpp +88 -56
  394. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +736 -3
  395. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +11 -11
  396. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_service.hpp +41 -45
  397. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +422 -3
  398. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_service.hpp +32 -24
  399. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_acceptor_service.hpp +114 -48
  400. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +85 -46
  401. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +89 -18
  402. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +1 -4
  403. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +33 -62
  404. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +1 -1
  405. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +27 -23
  406. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +10 -14
  407. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +2 -8
  408. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +22 -25
  409. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +5 -4
  410. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +40 -17
  411. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +2 -2
  412. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +1 -1
  413. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +4 -10
  414. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +3 -9
  415. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +2 -8
  416. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +27 -19
  417. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +2 -8
  418. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +3 -9
  419. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +1 -1
  420. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +8 -12
  421. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +86 -102
  422. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +1 -1
  423. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +7 -13
  424. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +1 -1
  425. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +7 -13
  426. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +90 -85
  427. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +1 -1
  428. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +3 -9
  429. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +1 -1
  430. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +4 -23
  431. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +209 -175
  432. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_socket_service.hpp +88 -56
  433. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +1 -1
  434. data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +80 -0
  435. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +131 -0
  436. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +4 -19
  437. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +234 -0
  438. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +1 -1
  439. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +24 -0
  440. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +35 -0
  441. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +40 -0
  442. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +20 -0
  443. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +26 -0
  444. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +199 -0
  445. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +27 -0
  446. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +26 -0
  447. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +1 -1
  448. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +70 -3
  449. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +73 -0
  450. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +2 -2
  451. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +17 -2
  452. data/src/cxx_supportlib/vendor-modified/boost/asio/waitable_timer_service.hpp +62 -20
  453. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_handle.hpp +22 -30
  454. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +14 -10
  455. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +15 -15
  456. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +15 -15
  457. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +346 -3
  458. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle_service.hpp +26 -20
  459. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +333 -0
  460. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +6 -6
  461. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +344 -3
  462. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle_service.hpp +31 -37
  463. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +328 -3
  464. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle_service.hpp +29 -37
  465. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +321 -12
  466. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +13 -6
  467. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +1 -1
  468. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +11 -0
  469. data/src/cxx_supportlib/vendor-modified/boost/atomic/capabilities.hpp +50 -1
  470. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +58 -0
  471. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag.hpp +1 -0
  472. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_template.hpp +688 -220
  473. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +25 -21
  474. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +86 -0
  475. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_arm.hpp +1 -18
  476. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_atomic.hpp +9 -10
  477. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_ppc.hpp +2 -1
  478. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_sync.hpp +7 -8
  479. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_x86.hpp +1 -36
  480. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +108 -34
  481. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_operations.hpp +28 -0
  482. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_operations_fwd.hpp +35 -0
  483. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +107 -0
  484. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +189 -0
  485. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_operations.hpp +28 -0
  486. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_operations_fwd.hpp +35 -0
  487. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +238 -0
  488. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_arm.hpp +1111 -0
  489. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +840 -0
  490. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_x86.hpp +1656 -0
  491. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_generic.hpp +402 -0
  492. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_arm.hpp +106 -0
  493. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_x86.hpp +1301 -0
  494. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/float_sizes.hpp +142 -0
  495. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_operations.hpp +28 -0
  496. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_operations_fwd.hpp +35 -0
  497. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +72 -0
  498. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_generic.hpp +83 -0
  499. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_arm.hpp +67 -0
  500. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_ppc.hpp +42 -0
  501. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_x86.hpp +58 -0
  502. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +3 -3
  503. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_extend.hpp +105 -0
  504. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +35 -1
  505. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations_lockfree.hpp +1 -1
  506. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_cas_based.hpp +2 -0
  507. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_emulated.hpp +8 -9
  508. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_extending_cas_based.hpp +8 -7
  509. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_alpha.hpp +14 -16
  510. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm.hpp +548 -126
  511. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm_common.hpp +134 -0
  512. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_atomic.hpp +36 -44
  513. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc.hpp +524 -96
  514. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc_common.hpp +70 -0
  515. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sparc.hpp +14 -16
  516. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sync.hpp +27 -59
  517. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86.hpp +104 -57
  518. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +268 -340
  519. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_linux_arm.hpp +9 -9
  520. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_arm.hpp +22 -24
  521. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_x86.hpp +55 -80
  522. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +88 -46
  523. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_type.hpp +30 -103
  524. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/string_ops.hpp +61 -0
  525. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/conditional.hpp +42 -0
  526. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/integral_constant.hpp +46 -0
  527. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_floating_point.hpp +42 -0
  528. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_function.hpp +42 -0
  529. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_iec559.hpp +47 -0
  530. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_integral.hpp +43 -0
  531. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_signed.hpp +43 -0
  532. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_default_constructible.hpp +46 -0
  533. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_signed.hpp +43 -0
  534. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_unsigned.hpp +43 -0
  535. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +37 -0
  536. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_cc.hpp +30 -30
  537. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf_cc.hpp +36 -36
  538. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/system.hpp +0 -10
  539. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +28 -30
  540. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_get.hpp +2 -4
  541. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +1 -1
  542. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +14 -8
  543. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_units.hpp +1 -1
  544. data/src/cxx_supportlib/vendor-modified/boost/chrono/io_v1/chrono_io.hpp +2 -4
  545. data/src/cxx_supportlib/vendor-modified/boost/chrono/process_cpu_clocks.hpp +2 -2
  546. data/src/cxx_supportlib/vendor-modified/boost/chrono/time_point.hpp +0 -1
  547. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +9 -9
  548. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +7 -6
  549. data/src/cxx_supportlib/vendor-modified/boost/config.hpp +4 -4
  550. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +26 -4
  551. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +12 -0
  552. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +30 -2
  553. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +13 -0
  554. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +11 -0
  555. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +32 -2
  556. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/diab.hpp +26 -0
  557. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +11 -0
  558. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +33 -6
  559. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +11 -0
  560. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +8 -1
  561. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +11 -0
  562. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +11 -0
  563. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +28 -2
  564. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +17 -1
  565. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pgi.hpp +8 -142
  566. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +14 -3
  567. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +16 -0
  568. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +37 -9
  569. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +19 -0
  570. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +169 -0
  571. data/src/cxx_supportlib/vendor-modified/boost/config/{posix_features.hpp → detail/posix_features.hpp} +0 -0
  572. data/src/cxx_supportlib/vendor-modified/boost/config/{select_compiler_config.hpp → detail/select_compiler_config.hpp} +15 -5
  573. data/src/cxx_supportlib/vendor-modified/boost/config/{select_platform_config.hpp → detail/select_platform_config.hpp} +8 -3
  574. data/src/cxx_supportlib/vendor-modified/boost/config/{select_stdlib_config.hpp → detail/select_stdlib_config.hpp} +5 -0
  575. data/src/cxx_supportlib/vendor-modified/boost/config/{suffix.hpp → detail/suffix.hpp} +27 -27
  576. data/src/cxx_supportlib/vendor-modified/boost/config/header_deprecated.hpp +26 -0
  577. data/src/cxx_supportlib/vendor-modified/boost/config/helper_macros.hpp +37 -0
  578. data/src/cxx_supportlib/vendor-modified/boost/config/platform/aix.hpp +1 -1
  579. data/src/cxx_supportlib/vendor-modified/boost/config/platform/beos.hpp +1 -1
  580. data/src/cxx_supportlib/vendor-modified/boost/config/platform/bsd.hpp +1 -1
  581. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cray.hpp +1 -1
  582. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +12 -1
  583. data/src/cxx_supportlib/vendor-modified/boost/config/platform/haiku.hpp +1 -1
  584. data/src/cxx_supportlib/vendor-modified/boost/config/platform/hpux.hpp +1 -1
  585. data/src/cxx_supportlib/vendor-modified/boost/config/platform/irix.hpp +1 -1
  586. data/src/cxx_supportlib/vendor-modified/boost/config/platform/linux.hpp +4 -3
  587. data/src/cxx_supportlib/vendor-modified/boost/config/platform/macos.hpp +1 -1
  588. data/src/cxx_supportlib/vendor-modified/boost/config/platform/qnxnto.hpp +1 -1
  589. data/src/cxx_supportlib/vendor-modified/boost/config/platform/solaris.hpp +1 -1
  590. data/src/cxx_supportlib/vendor-modified/boost/config/platform/symbian.hpp +1 -1
  591. data/src/cxx_supportlib/vendor-modified/boost/config/platform/vxworks.hpp +155 -91
  592. data/src/cxx_supportlib/vendor-modified/boost/config/platform/zos.hpp +32 -0
  593. data/src/cxx_supportlib/vendor-modified/boost/config/pragma_message.hpp +31 -0
  594. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +21 -2
  595. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcomo.hpp +2 -0
  596. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +20 -0
  597. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +35 -0
  598. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/modena.hpp +2 -0
  599. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/msl.hpp +3 -1
  600. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/roguewave.hpp +2 -0
  601. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/sgi.hpp +2 -0
  602. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/stlport.hpp +2 -0
  603. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/vacpp.hpp +2 -0
  604. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/xlcpp_zos.hpp +60 -0
  605. data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +279 -0
  606. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +19 -19
  607. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +5 -5
  608. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +58 -58
  609. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +7 -28
  610. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +57 -57
  611. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +3 -3
  612. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +10 -10
  613. data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -2
  614. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +18 -18
  615. data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +122 -0
  616. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +8 -8
  617. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +7 -7
  618. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +1 -1
  619. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_or_allocator_rebind.hpp +49 -0
  620. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +258 -0
  621. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +119 -134
  622. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +15 -15
  623. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +55 -55
  624. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +714 -282
  625. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +55 -0
  626. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +47 -0
  627. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_sorted.hpp +2 -2
  628. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +30 -0
  629. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator_to_raw_pointer.hpp +4 -29
  630. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +9 -9
  631. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +2 -2
  632. data/src/cxx_supportlib/vendor-modified/boost/container/detail/min_max.hpp +2 -2
  633. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +2 -2
  634. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +8 -8
  635. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +2 -2
  636. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +37 -35
  637. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +41 -41
  638. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +4 -4
  639. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +4 -4
  640. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +69 -16
  641. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair_key_mapped_of_value.hpp +55 -0
  642. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +2 -2
  643. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +7 -7
  644. data/src/cxx_supportlib/vendor-modified/boost/container/detail/singleton.hpp +2 -2
  645. data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +1 -1
  646. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +180 -116
  647. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +2 -2
  648. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_functors.hpp +36 -0
  649. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +2 -2
  650. data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +2 -2
  651. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +8 -8
  652. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +0 -6
  653. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +874 -572
  654. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +497 -248
  655. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +33 -42
  656. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +326 -246
  657. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +19 -19
  658. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +122 -78
  659. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +165 -0
  660. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_map.hpp +4 -8
  661. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_set.hpp +4 -8
  662. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/map.hpp +4 -4
  663. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +6 -6
  664. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +1 -1
  665. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/set.hpp +4 -4
  666. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +19 -19
  667. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +285 -110
  668. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +35 -53
  669. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +18 -19
  670. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +25 -25
  671. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +24 -9
  672. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +194 -142
  673. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +15 -5
  674. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +5 -5
  675. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +395 -421
  676. data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/detail/float_functions.hpp +0 -0
  677. data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/detail/hash_float.hpp +4 -4
  678. data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/detail/limits.hpp +0 -0
  679. data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/extensions.hpp +112 -16
  680. data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/hash.hpp +195 -7
  681. data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/hash_fwd.hpp +3 -3
  682. data/src/cxx_supportlib/vendor-modified/boost/core/addressof.hpp +53 -44
  683. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +80 -2
  684. data/src/cxx_supportlib/vendor-modified/boost/core/no_exceptions_support.hpp +1 -1
  685. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_traits.hpp +233 -0
  686. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +2 -2
  687. data/src/cxx_supportlib/vendor-modified/boost/cstdint.hpp +26 -16
  688. data/src/cxx_supportlib/vendor-modified/boost/date_time/adjust_functors.hpp +20 -34
  689. data/src/cxx_supportlib/vendor-modified/boost/date_time/c_local_time_adjustor.hpp +8 -5
  690. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration.hpp +4 -0
  691. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_formatting.hpp +2 -0
  692. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_formatting_locales.hpp +7 -6
  693. data/src/cxx_supportlib/vendor-modified/boost/date_time/dst_rules.hpp +6 -6
  694. data/src/cxx_supportlib/vendor-modified/boost/date_time/filetime_functions.hpp +8 -94
  695. data/src/cxx_supportlib/vendor-modified/boost/date_time/format_date_parser.hpp +1 -8
  696. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day.hpp +3 -3
  697. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_facet.hpp +6 -4
  698. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_month.hpp +3 -3
  699. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_weekday.hpp +2 -2
  700. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_year.hpp +6 -6
  701. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/gregorian_io.hpp +52 -52
  702. data/src/cxx_supportlib/vendor-modified/boost/date_time/int_adapter.hpp +14 -27
  703. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/custom_time_zone.hpp +0 -1
  704. data/src/cxx_supportlib/vendor-modified/boost/date_time/locale_config.hpp +3 -1
  705. data/src/cxx_supportlib/vendor-modified/boost/date_time/microsec_time_clock.hpp +36 -5
  706. data/src/cxx_supportlib/vendor-modified/boost/date_time/period_formatter.hpp +10 -9
  707. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/conversion.hpp +10 -12
  708. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +18 -10
  709. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_io.hpp +12 -12
  710. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_serialize.hpp +65 -20
  711. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +32 -23
  712. data/src/cxx_supportlib/vendor-modified/boost/date_time/string_parse_tree.hpp +6 -5
  713. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +10 -7
  714. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +8 -3
  715. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +20 -0
  716. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_resolution_traits.hpp +31 -8
  717. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_system_split.hpp +10 -4
  718. data/src/cxx_supportlib/vendor-modified/boost/date_time/tz_db_base.hpp +3 -1
  719. data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +2 -264
  720. data/src/cxx_supportlib/vendor-modified/boost/enable_shared_from_this.hpp +1 -1
  721. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +38 -21
  722. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +10 -9
  723. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/is_output_streamable.hpp +3 -2
  724. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/object_hex_dump.hpp +7 -6
  725. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +7 -6
  726. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +10 -7
  727. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +8 -6
  728. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +13 -47
  729. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string.hpp +5 -4
  730. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string_stub.hpp +5 -4
  731. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +12 -4
  732. data/src/cxx_supportlib/vendor-modified/boost/function/detail/gen_maybe_include.pl +2 -0
  733. data/src/cxx_supportlib/vendor-modified/boost/function/detail/maybe_include.hpp +102 -0
  734. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +20 -0
  735. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +9 -0
  736. data/src/cxx_supportlib/vendor-modified/boost/functional/hash.hpp +1 -2
  737. data/src/cxx_supportlib/vendor-modified/boost/functional/hash_fwd.hpp +1 -6
  738. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +508 -390
  739. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_mask.hpp +9 -1
  740. data/src/cxx_supportlib/vendor-modified/boost/integer_fwd.hpp +3 -0
  741. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +11 -3
  742. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +1 -1
  743. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +7 -20
  744. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +2 -2
  745. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +1 -1
  746. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +1 -1
  747. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +5 -5
  748. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +108 -2
  749. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +15 -5
  750. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_to_value.hpp +1 -1
  751. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +8 -4
  752. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +147 -64
  753. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +9 -2
  754. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +3 -3
  755. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +15 -0
  756. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +2 -2
  757. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +9 -2
  758. data/src/cxx_supportlib/vendor-modified/boost/intrusive_ptr.hpp +1 -1
  759. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +84 -0
  760. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +0 -2
  761. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_categories.hpp +3 -2
  762. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +8 -10
  763. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +2 -1
  764. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_traits.hpp +7 -6
  765. data/src/cxx_supportlib/vendor-modified/boost/iterator/reverse_iterator.hpp +7 -4
  766. data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +6 -2
  767. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +7 -7
  768. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +1 -1
  769. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +36 -92
  770. data/src/cxx_supportlib/vendor-modified/boost/make_shared.hpp +1 -2
  771. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +2 -1
  772. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +57 -3
  773. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/sign.hpp +1 -1
  774. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +12 -1
  775. data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +40 -9
  776. data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +6 -0
  777. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +253 -0
  778. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +563 -4
  779. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +324 -1071
  780. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +10 -10
  781. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/heap_sort.hpp +111 -0
  782. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +12 -11
  783. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/is_sorted.hpp +55 -0
  784. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +59 -143
  785. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +6 -6
  786. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +334 -0
  787. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/set_difference.hpp +207 -0
  788. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +2 -1
  789. data/src/cxx_supportlib/vendor-modified/boost/move/algo/predicate.hpp +86 -0
  790. data/src/cxx_supportlib/vendor-modified/boost/move/algo/unique.hpp +55 -0
  791. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +1 -9
  792. data/src/cxx_supportlib/vendor-modified/boost/move/detail/destruct_n.hpp +3 -4
  793. data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +25 -0
  794. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +59 -0
  795. data/src/cxx_supportlib/vendor-modified/boost/{intrusive → move}/detail/pointer_element.hpp +12 -12
  796. data/src/cxx_supportlib/vendor-modified/boost/move/detail/to_raw_pointer.hpp +45 -0
  797. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +19 -5
  798. data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +1 -1
  799. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +1 -1
  800. data/src/cxx_supportlib/vendor-modified/boost/mpl/get_tag.hpp +26 -0
  801. data/src/cxx_supportlib/vendor-modified/boost/next_prior.hpp +85 -55
  802. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/cast.hpp +1 -1
  803. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/conversion_traits.hpp +0 -7
  804. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/converter.hpp +4 -13
  805. data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +26 -7
  806. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/experimental_traits.hpp +98 -0
  807. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +10 -10
  808. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +17 -21
  809. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +25 -6
  810. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +15 -15
  811. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +1 -1
  812. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +499 -0
  813. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +126 -21
  814. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/arg_list.hpp +1 -0
  815. data/src/cxx_supportlib/vendor-modified/boost/pointer_cast.hpp +10 -9
  816. data/src/cxx_supportlib/vendor-modified/boost/pointer_to_other.hpp +1 -1
  817. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +6 -1
  818. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/parisc.h +1 -1
  819. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/intel.h +8 -1
  820. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/arm.h +3 -1
  821. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c.h +1 -0
  822. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/cloudabi.h +53 -0
  823. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
  824. data/src/cxx_supportlib/vendor-modified/boost/predef/os/android.h +2 -2
  825. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/free.h +10 -3
  826. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/open.h +80 -0
  827. data/src/cxx_supportlib/vendor-modified/boost/predef/other/workaround.h +87 -0
  828. data/src/cxx_supportlib/vendor-modified/boost/predef/platform.h +9 -2
  829. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/cloudabi.h +43 -0
  830. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/ios.h +58 -0
  831. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw.h +4 -4
  832. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw32.h +63 -0
  833. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw64.h +63 -0
  834. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_desktop.h +9 -3
  835. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_phone.h +7 -2
  836. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_runtime.h +13 -5
  837. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_server.h +47 -0
  838. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_store.h +11 -4
  839. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_system.h +47 -0
  840. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_uwp.h +60 -0
  841. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  842. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +11 -9
  843. data/src/cxx_supportlib/vendor-modified/boost/random/binomial_distribution.hpp +27 -27
  844. data/src/cxx_supportlib/vendor-modified/boost/random/detail/vector_io.hpp +3 -0
  845. data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +2 -2
  846. data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +0 -11
  847. data/src/cxx_supportlib/vendor-modified/boost/random/independent_bits.hpp +12 -0
  848. data/src/cxx_supportlib/vendor-modified/boost/random/linear_congruential.hpp +5 -1
  849. data/src/cxx_supportlib/vendor-modified/boost/random/poisson_distribution.hpp +17 -17
  850. data/src/cxx_supportlib/vendor-modified/boost/random/seed_seq.hpp +1 -1
  851. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_on_sphere.hpp +6 -2
  852. data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +6 -4
  853. data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +1 -0
  854. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +1 -1
  855. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +2 -2
  856. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +2 -2
  857. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +56 -11
  858. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +10 -10
  859. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +7 -2
  860. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +6 -1
  861. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +37 -13
  862. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +4 -4
  863. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +9 -6
  864. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +1 -1
  865. data/src/cxx_supportlib/vendor-modified/boost/scoped_array.hpp +1 -2
  866. data/src/cxx_supportlib/vendor-modified/boost/scoped_ptr.hpp +1 -2
  867. data/src/cxx_supportlib/vendor-modified/boost/shared_array.hpp +1 -1
  868. data/src/cxx_supportlib/vendor-modified/boost/shared_ptr.hpp +1 -1
  869. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +333 -656
  870. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +4 -2
  871. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc.hpp +1 -1
  872. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +148 -0
  873. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_sp_deleter.hpp +91 -0
  874. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/operator_bool.hpp +6 -6
  875. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +15 -3
  876. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
  877. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
  878. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +3 -2
  879. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
  880. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
  881. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
  882. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +7 -0
  883. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
  884. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
  885. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
  886. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
  887. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
  888. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +1 -0
  889. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
  890. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
  891. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +3 -2
  892. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
  893. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
  894. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +29 -0
  895. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_noexcept.hpp +21 -3
  896. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +1 -1
  897. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +6 -6
  898. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +26 -26
  899. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ref_counter.hpp +17 -16
  900. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared.hpp +1 -2
  901. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +19 -19
  902. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +11 -12
  903. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +15 -16
  904. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +22 -22
  905. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +135 -90
  906. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +23 -23
  907. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.ipp +140 -111
  908. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +297 -49
  909. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +4 -4
  910. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +30 -30
  911. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +30 -30
  912. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_bounded_queue.hpp +4 -2
  913. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_deque.hpp +5 -7
  914. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_priority_queue.hpp +19 -19
  915. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_queue.hpp +5 -15
  916. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_timed_queue.hpp +118 -183
  917. data/src/cxx_supportlib/vendor-modified/boost/{detail → thread/detail}/atomic_redef_macros.hpp +0 -0
  918. data/src/cxx_supportlib/vendor-modified/boost/{detail → thread/detail}/atomic_undef_macros.hpp +0 -0
  919. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +62 -11
  920. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/log.hpp +15 -0
  921. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/move.hpp +0 -2
  922. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/platform.hpp +2 -0
  923. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/platform_time.hpp +478 -0
  924. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +51 -85
  925. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/basic_thread_pool.hpp +11 -3
  926. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/detail/priority_executor_base.hpp +10 -4
  927. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduled_thread_pool.hpp +1 -0
  928. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduler.hpp +10 -0
  929. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduling_adaptor.hpp +15 -4
  930. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/serial_executor.hpp +9 -0
  931. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +320 -92
  932. data/src/cxx_supportlib/vendor-modified/boost/thread/once.hpp +10 -0
  933. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +187 -112
  934. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +137 -164
  935. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/mutex.hpp +67 -37
  936. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_helpers.hpp +42 -0
  937. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +15 -9
  938. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/recursive_mutex.hpp +65 -33
  939. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +84 -158
  940. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +143 -35
  941. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_heap_alloc.hpp +32 -2
  942. data/src/cxx_supportlib/vendor-modified/boost/thread/shared_mutex.hpp +8 -1
  943. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_only.hpp +1 -1
  944. data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +579 -589
  945. data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +2 -1
  946. data/src/cxx_supportlib/vendor-modified/boost/token_iterator.hpp +5 -2
  947. data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +7 -9
  948. data/src/cxx_supportlib/vendor-modified/boost/tuple/tuple.hpp +8 -8
  949. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +1 -1
  950. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +6 -2
  951. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +5 -8
  952. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_const.hpp +6 -0
  953. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_cv.hpp +6 -0
  954. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_lvalue_reference.hpp +6 -0
  955. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_pointer.hpp +6 -0
  956. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_reference.hpp +7 -0
  957. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_rvalue_reference.hpp +6 -0
  958. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_volatile.hpp +6 -0
  959. data/src/cxx_supportlib/vendor-modified/boost/type_traits/common_type.hpp +7 -0
  960. data/src/cxx_supportlib/vendor-modified/boost/type_traits/conditional.hpp +8 -0
  961. data/src/cxx_supportlib/vendor-modified/boost/type_traits/copy_cv.hpp +6 -0
  962. data/src/cxx_supportlib/vendor-modified/boost/type_traits/decay.hpp +6 -0
  963. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +12 -1
  964. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/detector.hpp +37 -0
  965. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_binary_operator.hpp +71 -14
  966. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_postfix_operator.hpp +1 -1
  967. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_prefix_operator.hpp +4 -1
  968. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +370 -102
  969. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_likely_lambda.hpp +94 -0
  970. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +1177 -572
  971. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp +2 -2
  972. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected.hpp +24 -0
  973. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected_or.hpp +25 -0
  974. data/src/cxx_supportlib/vendor-modified/boost/type_traits/floating_point_promotion.hpp +8 -0
  975. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_equal_to.hpp +3 -0
  976. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_greater.hpp +3 -0
  977. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_greater_equal.hpp +3 -0
  978. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_less.hpp +3 -0
  979. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_less_equal.hpp +3 -0
  980. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus.hpp +93 -0
  981. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus_assign.hpp +95 -2
  982. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_not_equal_to.hpp +3 -0
  983. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_destructor.hpp +11 -2
  984. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus_assign.hpp +90 -0
  985. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +2 -1
  986. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_promotion.hpp +6 -0
  987. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +2 -1
  988. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_assignable.hpp +10 -2
  989. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +90 -0
  990. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complex.hpp +1 -0
  991. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_constructible.hpp +12 -2
  992. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_convertible.hpp +20 -2
  993. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_default_constructible.hpp +16 -2
  994. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_destructible.hpp +10 -2
  995. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected.hpp +29 -0
  996. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_convertible.hpp +29 -0
  997. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_exact.hpp +29 -0
  998. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_list_constructible.hpp +48 -0
  999. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +14 -3
  1000. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +14 -4
  1001. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_swappable.hpp +67 -0
  1002. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_signed.hpp +6 -0
  1003. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_unsigned.hpp +6 -0
  1004. data/src/cxx_supportlib/vendor-modified/boost/type_traits/nonesuch.hpp +35 -0
  1005. data/src/cxx_supportlib/vendor-modified/boost/type_traits/promote.hpp +6 -0
  1006. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_all_extents.hpp +6 -0
  1007. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_bounds.hpp +7 -0
  1008. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_const.hpp +6 -0
  1009. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv.hpp +5 -0
  1010. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv_ref.hpp +30 -0
  1011. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_extent.hpp +6 -0
  1012. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_pointer.hpp +7 -0
  1013. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_reference.hpp +5 -0
  1014. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_volatile.hpp +5 -0
  1015. data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_identity.hpp +9 -0
  1016. data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +2 -3
  1017. data/src/cxx_supportlib/vendor-modified/boost/typeof/decltype.hpp +34 -0
  1018. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +5 -85
  1019. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +1 -2
  1020. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/functional.hpp +6 -0
  1021. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/memory.hpp +2 -0
  1022. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof.hpp +24 -14
  1023. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +18 -12
  1024. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +4018 -4052
  1025. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +57 -97
  1026. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +56 -95
  1027. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +2150 -1777
  1028. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +41 -38
  1029. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +1630 -1420
  1030. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +40 -37
  1031. data/src/cxx_supportlib/vendor-modified/boost/utility.hpp +6 -3
  1032. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +55 -0
  1033. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/result_of_iterate.hpp +14 -17
  1034. data/src/cxx_supportlib/vendor-modified/boost/utility/result_of.hpp +44 -20
  1035. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +30 -30
  1036. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  1037. data/src/cxx_supportlib/vendor-modified/boost/weak_ptr.hpp +1 -1
  1038. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  1039. data/src/ruby_supportlib/phusion_passenger/common_library.rb +3 -0
  1040. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +8 -1
  1041. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +7 -1
  1042. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -2
  1043. data/src/ruby_supportlib/phusion_passenger/utils/tee_input.rb +4 -4
  1044. metadata +201 -47
  1045. data/src/cxx_supportlib/ConfigKit/VariantMapUtils.h +0 -96
  1046. data/src/cxx_supportlib/MessageClient.h +0 -309
  1047. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/addressof.hpp +0 -40
  1048. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/task_io_service.hpp +0 -80
  1049. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/shared_ptr.hpp +0 -40
  1050. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/weak_ptr.hpp +0 -40
  1051. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/win_iocp_serial_port_service.hpp +0 -230
  1052. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_service.hpp +0 -156
  1053. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_service.ipp +0 -157
  1054. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/basic_context.hpp +0 -42
  1055. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_service.hpp +0 -42
  1056. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/basic_context.hpp +0 -436
  1057. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/context_service.hpp +0 -176
  1058. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_context_service.hpp +0 -396
  1059. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_operation.hpp +0 -526
  1060. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_stream_service.hpp +0 -573
  1061. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/stream.hpp +0 -503
  1062. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/stream_service.hpp +0 -186
  1063. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_service.hpp +0 -42
  1064. data/src/cxx_supportlib/vendor-modified/boost/container/detail/to_raw_pointer.hpp +0 -33
  1065. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/to_raw_pointer.hpp +0 -47
  1066. data/src/cxx_supportlib/vendor-modified/boost/iterator.hpp +0 -20
  1067. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex_assert.hpp +0 -724
  1068. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/timespec.hpp +0 -149
  1069. data/src/cxx_supportlib/vendor-modified/boost/thread/v2/thread.hpp +0 -155
  1070. data/src/cxx_supportlib/vendor-modified/boost/utility/empty_deleter.hpp +0 -43
@@ -2,7 +2,7 @@
2
2
  // basic_socket_iostream.hpp
3
3
  // ~~~~~~~~~~~~~~~~~~~~~~~~~
4
4
  //
5
- // Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com)
5
+ // Copyright (c) 2003-2018 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)
@@ -22,7 +22,10 @@
22
22
  #include <istream>
23
23
  #include <ostream>
24
24
  #include <boost/asio/basic_socket_streambuf.hpp>
25
- #include <boost/asio/stream_socket_service.hpp>
25
+
26
+ #if defined(BOOST_ASIO_ENABLE_OLD_SERVICES)
27
+ # include <boost/asio/stream_socket_service.hpp>
28
+ #endif // defined(BOOST_ASIO_ENABLE_OLD_SERVICES)
26
29
 
27
30
  #if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
28
31
 
@@ -33,8 +36,8 @@
33
36
  // explicit basic_socket_iostream(T1 x1, ..., Tn xn)
34
37
  // : std::basic_iostream<char>(
35
38
  // &this->detail::socket_iostream_base<
36
- // Protocol, StreamSocketService, Time,
37
- // TimeTraits, TimerService>::streambuf_)
39
+ // Protocol BOOST_ASIO_SVC_TARG, Clock,
40
+ // WaitTraits BOOST_ASIO_SVC_TARG1>::streambuf_)
38
41
  // {
39
42
  // if (rdbuf()->connect(x1, ..., xn) == 0)
40
43
  // this->setstate(std::ios_base::failbit);
@@ -43,14 +46,14 @@
43
46
 
44
47
  # define BOOST_ASIO_PRIVATE_CTR_DEF(n) \
45
48
  template <BOOST_ASIO_VARIADIC_TPARAMS(n)> \
46
- explicit basic_socket_iostream(BOOST_ASIO_VARIADIC_PARAMS(n)) \
49
+ explicit basic_socket_iostream(BOOST_ASIO_VARIADIC_BYVAL_PARAMS(n)) \
47
50
  : std::basic_iostream<char>( \
48
51
  &this->detail::socket_iostream_base< \
49
- Protocol, StreamSocketService, Time, \
50
- TimeTraits, TimerService>::streambuf_) \
52
+ Protocol BOOST_ASIO_SVC_TARG, Clock, \
53
+ WaitTraits BOOST_ASIO_SVC_TARG1>::streambuf_) \
51
54
  { \
52
55
  this->setf(std::ios_base::unitbuf); \
53
- if (rdbuf()->connect(BOOST_ASIO_VARIADIC_ARGS(n)) == 0) \
56
+ if (rdbuf()->connect(BOOST_ASIO_VARIADIC_BYVAL_ARGS(n)) == 0) \
54
57
  this->setstate(std::ios_base::failbit); \
55
58
  } \
56
59
  /**/
@@ -66,9 +69,9 @@
66
69
 
67
70
  # define BOOST_ASIO_PRIVATE_CONNECT_DEF(n) \
68
71
  template <BOOST_ASIO_VARIADIC_TPARAMS(n)> \
69
- void connect(BOOST_ASIO_VARIADIC_PARAMS(n)) \
72
+ void connect(BOOST_ASIO_VARIADIC_BYVAL_PARAMS(n)) \
70
73
  { \
71
- if (rdbuf()->connect(BOOST_ASIO_VARIADIC_ARGS(n)) == 0) \
74
+ if (rdbuf()->connect(BOOST_ASIO_VARIADIC_BYVAL_ARGS(n)) == 0) \
72
75
  this->setstate(std::ios_base::failbit); \
73
76
  } \
74
77
  /**/
@@ -83,69 +86,169 @@ namespace detail {
83
86
 
84
87
  // A separate base class is used to ensure that the streambuf is initialised
85
88
  // prior to the basic_socket_iostream's basic_iostream base class.
86
- template <typename Protocol, typename StreamSocketService,
87
- typename Time, typename TimeTraits, typename TimerService>
89
+ template <typename Protocol BOOST_ASIO_SVC_TPARAM,
90
+ typename Clock, typename WaitTraits BOOST_ASIO_SVC_TPARAM1>
88
91
  class socket_iostream_base
89
92
  {
90
93
  protected:
91
- basic_socket_streambuf<Protocol, StreamSocketService,
92
- Time, TimeTraits, TimerService> streambuf_;
94
+ socket_iostream_base()
95
+ {
96
+ }
97
+
98
+ #if defined(BOOST_ASIO_HAS_MOVE)
99
+ socket_iostream_base(socket_iostream_base&& other)
100
+ : streambuf_(std::move(other.streambuf_))
101
+ {
102
+ }
103
+
104
+ socket_iostream_base(basic_stream_socket<Protocol> s)
105
+ : streambuf_(std::move(s))
106
+ {
107
+ }
108
+
109
+ socket_iostream_base& operator=(socket_iostream_base&& other)
110
+ {
111
+ streambuf_ = std::move(other.streambuf_);
112
+ return *this;
113
+ }
114
+ #endif // defined(BOOST_ASIO_HAS_MOVE)
115
+
116
+ basic_socket_streambuf<Protocol BOOST_ASIO_SVC_TARG,
117
+ Clock, WaitTraits BOOST_ASIO_SVC_TARG1> streambuf_;
93
118
  };
94
119
 
95
- }
120
+ } // namespace detail
121
+
122
+ #if !defined(BOOST_ASIO_BASIC_SOCKET_IOSTREAM_FWD_DECL)
123
+ #define BOOST_ASIO_BASIC_SOCKET_IOSTREAM_FWD_DECL
124
+
125
+ // Forward declaration with defaulted arguments.
126
+ template <typename Protocol
127
+ BOOST_ASIO_SVC_TPARAM_DEF1(= stream_socket_service<Protocol>),
128
+ #if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
129
+ && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
130
+ typename Clock = boost::posix_time::ptime,
131
+ typename WaitTraits = time_traits<Clock>
132
+ BOOST_ASIO_SVC_TPARAM1_DEF2(= deadline_timer_service<Clock, WaitTraits>)>
133
+ #else // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
134
+ // && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
135
+ typename Clock = chrono::steady_clock,
136
+ typename WaitTraits = wait_traits<Clock>
137
+ BOOST_ASIO_SVC_TPARAM1_DEF1(= steady_timer::service_type)>
138
+ #endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
139
+ // && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
140
+ class basic_socket_iostream;
141
+
142
+ #endif // !defined(BOOST_ASIO_BASIC_SOCKET_IOSTREAM_FWD_DECL)
96
143
 
97
144
  /// Iostream interface for a socket.
145
+ #if defined(GENERATING_DOCUMENTATION)
98
146
  template <typename Protocol,
99
- typename StreamSocketService = stream_socket_service<Protocol>,
100
- #if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
101
- || defined(GENERATING_DOCUMENTATION)
102
- typename Time = boost::posix_time::ptime,
103
- typename TimeTraits = boost::asio::time_traits<Time>,
104
- typename TimerService = deadline_timer_service<Time, TimeTraits> >
105
- #else
106
- typename Time = steady_timer::clock_type,
107
- typename TimeTraits = steady_timer::traits_type,
108
- typename TimerService = steady_timer::service_type>
109
- #endif
147
+ typename Clock = chrono::steady_clock,
148
+ typename WaitTraits = wait_traits<Clock> >
149
+ #else // defined(GENERATING_DOCUMENTATION)
150
+ template <typename Protocol BOOST_ASIO_SVC_TPARAM,
151
+ typename Clock, typename WaitTraits BOOST_ASIO_SVC_TPARAM1>
152
+ #endif // defined(GENERATING_DOCUMENTATION)
110
153
  class basic_socket_iostream
111
- : private detail::socket_iostream_base<Protocol,
112
- StreamSocketService, Time, TimeTraits, TimerService>,
154
+ : private detail::socket_iostream_base<Protocol
155
+ BOOST_ASIO_SVC_TARG, Clock, WaitTraits BOOST_ASIO_SVC_TARG1>,
113
156
  public std::basic_iostream<char>
114
157
  {
115
158
  private:
116
159
  // These typedefs are intended keep this class's implementation independent
117
- // of whether it's using Boost.DateTime, Boost.Chrono or std::chrono.
118
- #if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
119
- typedef TimeTraits traits_helper;
120
- #else
121
- typedef detail::chrono_time_traits<Time, TimeTraits> traits_helper;
122
- #endif
160
+ // of whether it's using Boost.DateClock, Boost.Chrono or std::chrono.
161
+ #if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
162
+ && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
163
+ typedef WaitTraits traits_helper;
164
+ #else // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
165
+ // && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
166
+ typedef detail::chrono_time_traits<Clock, WaitTraits> traits_helper;
167
+ #endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
168
+ // && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
123
169
 
124
170
  public:
171
+ /// The protocol type.
172
+ typedef Protocol protocol_type;
173
+
125
174
  /// The endpoint type.
126
175
  typedef typename Protocol::endpoint endpoint_type;
127
176
 
177
+ /// The clock type.
178
+ typedef Clock clock_type;
179
+
128
180
  #if defined(GENERATING_DOCUMENTATION)
181
+ /// (Deprecated: Use time_point.) The time type.
182
+ typedef typename WaitTraits::time_type time_type;
183
+
129
184
  /// The time type.
130
- typedef typename TimeTraits::time_type time_type;
185
+ typedef typename WaitTraits::time_point time_point;
186
+
187
+ /// (Deprecated: Use duration.) The duration type.
188
+ typedef typename WaitTraits::duration_type duration_type;
131
189
 
132
190
  /// The duration type.
133
- typedef typename TimeTraits::duration_type duration_type;
191
+ typedef typename WaitTraits::duration duration;
134
192
  #else
193
+ # if !defined(BOOST_ASIO_NO_DEPRECATED)
135
194
  typedef typename traits_helper::time_type time_type;
136
195
  typedef typename traits_helper::duration_type duration_type;
196
+ # endif // !defined(BOOST_ASIO_NO_DEPRECATED)
197
+ typedef typename traits_helper::time_type time_point;
198
+ typedef typename traits_helper::duration_type duration;
137
199
  #endif
138
200
 
139
201
  /// Construct a basic_socket_iostream without establishing a connection.
140
202
  basic_socket_iostream()
141
203
  : std::basic_iostream<char>(
142
204
  &this->detail::socket_iostream_base<
143
- Protocol, StreamSocketService, Time,
144
- TimeTraits, TimerService>::streambuf_)
205
+ Protocol BOOST_ASIO_SVC_TARG, Clock,
206
+ WaitTraits BOOST_ASIO_SVC_TARG1>::streambuf_)
207
+ {
208
+ this->setf(std::ios_base::unitbuf);
209
+ }
210
+
211
+ #if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
212
+ /// Construct a basic_socket_iostream from the supplied socket.
213
+ explicit basic_socket_iostream(basic_stream_socket<protocol_type> s)
214
+ : detail::socket_iostream_base<
215
+ Protocol BOOST_ASIO_SVC_TARG, Clock,
216
+ WaitTraits BOOST_ASIO_SVC_TARG1>(std::move(s)),
217
+ std::basic_iostream<char>(
218
+ &this->detail::socket_iostream_base<
219
+ Protocol BOOST_ASIO_SVC_TARG, Clock,
220
+ WaitTraits BOOST_ASIO_SVC_TARG1>::streambuf_)
145
221
  {
146
222
  this->setf(std::ios_base::unitbuf);
147
223
  }
148
224
 
225
+ #if defined(BOOST_ASIO_HAS_STD_IOSTREAM_MOVE) \
226
+ || defined(GENERATING_DOCUMENTATION)
227
+ /// Move-construct a basic_socket_iostream from another.
228
+ basic_socket_iostream(basic_socket_iostream&& other)
229
+ : detail::socket_iostream_base<
230
+ Protocol BOOST_ASIO_SVC_TARG, Clock,
231
+ WaitTraits BOOST_ASIO_SVC_TARG1>(std::move(other)),
232
+ std::basic_iostream<char>(std::move(other))
233
+ {
234
+ this->set_rdbuf(&this->detail::socket_iostream_base<
235
+ Protocol BOOST_ASIO_SVC_TARG, Clock,
236
+ WaitTraits BOOST_ASIO_SVC_TARG1>::streambuf_);
237
+ }
238
+
239
+ /// Move-assign a basic_socket_iostream from another.
240
+ basic_socket_iostream& operator=(basic_socket_iostream&& other)
241
+ {
242
+ std::basic_iostream<char>::operator=(std::move(other));
243
+ detail::socket_iostream_base<
244
+ Protocol BOOST_ASIO_SVC_TARG, Clock,
245
+ WaitTraits BOOST_ASIO_SVC_TARG1>::operator=(std::move(other));
246
+ return *this;
247
+ }
248
+ #endif // defined(BOOST_ASIO_HAS_STD_IOSTREAM_MOVE)
249
+ // || defined(GENERATING_DOCUMENTATION)
250
+ #endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
251
+
149
252
  #if defined(GENERATING_DOCUMENTATION)
150
253
  /// Establish a connection to an endpoint corresponding to a resolver query.
151
254
  /**
@@ -160,8 +263,8 @@ public:
160
263
  explicit basic_socket_iostream(T... x)
161
264
  : std::basic_iostream<char>(
162
265
  &this->detail::socket_iostream_base<
163
- Protocol, StreamSocketService, Time,
164
- TimeTraits, TimerService>::streambuf_)
266
+ Protocol BOOST_ASIO_SVC_TARG, Clock,
267
+ WaitTraits BOOST_ASIO_SVC_TARG1>::streambuf_)
165
268
  {
166
269
  this->setf(std::ios_base::unitbuf);
167
270
  if (rdbuf()->connect(x...) == 0)
@@ -199,14 +302,20 @@ public:
199
302
  }
200
303
 
201
304
  /// Return a pointer to the underlying streambuf.
202
- basic_socket_streambuf<Protocol, StreamSocketService,
203
- Time, TimeTraits, TimerService>* rdbuf() const
305
+ basic_socket_streambuf<Protocol BOOST_ASIO_SVC_TARG,
306
+ Clock, WaitTraits BOOST_ASIO_SVC_TARG1>* rdbuf() const
204
307
  {
205
- return const_cast<basic_socket_streambuf<Protocol, StreamSocketService,
206
- Time, TimeTraits, TimerService>*>(
308
+ return const_cast<basic_socket_streambuf<Protocol BOOST_ASIO_SVC_TARG,
309
+ Clock, WaitTraits BOOST_ASIO_SVC_TARG1>*>(
207
310
  &this->detail::socket_iostream_base<
208
- Protocol, StreamSocketService, Time,
209
- TimeTraits, TimerService>::streambuf_);
311
+ Protocol BOOST_ASIO_SVC_TARG, Clock,
312
+ WaitTraits BOOST_ASIO_SVC_TARG1>::streambuf_);
313
+ }
314
+
315
+ /// Get a reference to the underlying socket.
316
+ basic_socket<Protocol BOOST_ASIO_SVC_TARG>& socket()
317
+ {
318
+ return rdbuf()->socket();
210
319
  }
211
320
 
212
321
  /// Get the last error associated with the stream.
@@ -223,17 +332,29 @@ public:
223
332
  */
224
333
  const boost::system::error_code& error() const
225
334
  {
226
- return rdbuf()->puberror();
335
+ return rdbuf()->error();
227
336
  }
228
337
 
229
- /// Get the stream's expiry time as an absolute time.
338
+ #if !defined(BOOST_ASIO_NO_DEPRECATED)
339
+ /// (Deprecated: Use expiry().) Get the stream's expiry time as an absolute
340
+ /// time.
230
341
  /**
231
342
  * @return An absolute time value representing the stream's expiry time.
232
343
  */
233
- time_type expires_at() const
344
+ time_point expires_at() const
234
345
  {
235
346
  return rdbuf()->expires_at();
236
347
  }
348
+ #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
349
+
350
+ /// Get the stream's expiry time as an absolute time.
351
+ /**
352
+ * @return An absolute time value representing the stream's expiry time.
353
+ */
354
+ time_point expiry() const
355
+ {
356
+ return rdbuf()->expiry();
357
+ }
237
358
 
238
359
  /// Set the stream's expiry time as an absolute time.
239
360
  /**
@@ -244,21 +365,37 @@ public:
244
365
  *
245
366
  * @param expiry_time The expiry time to be used for the stream.
246
367
  */
247
- void expires_at(const time_type& expiry_time)
368
+ void expires_at(const time_point& expiry_time)
248
369
  {
249
370
  rdbuf()->expires_at(expiry_time);
250
371
  }
251
372
 
252
- /// Get the timer's expiry time relative to now.
373
+ /// Set the stream's expiry time relative to now.
374
+ /**
375
+ * This function sets the expiry time associated with the stream. Stream
376
+ * operations performed after this time (where the operations cannot be
377
+ * completed using the internal buffers) will fail with the error
378
+ * boost::asio::error::operation_aborted.
379
+ *
380
+ * @param expiry_time The expiry time to be used for the timer.
381
+ */
382
+ void expires_after(const duration& expiry_time)
383
+ {
384
+ rdbuf()->expires_after(expiry_time);
385
+ }
386
+
387
+ #if !defined(BOOST_ASIO_NO_DEPRECATED)
388
+ /// (Deprecated: Use expiry().) Get the stream's expiry time relative to now.
253
389
  /**
254
390
  * @return A relative time value representing the stream's expiry time.
255
391
  */
256
- duration_type expires_from_now() const
392
+ duration expires_from_now() const
257
393
  {
258
394
  return rdbuf()->expires_from_now();
259
395
  }
260
396
 
261
- /// Set the stream's expiry time relative to now.
397
+ /// (Deprecated: Use expires_after().) Set the stream's expiry time relative
398
+ /// to now.
262
399
  /**
263
400
  * This function sets the expiry time associated with the stream. Stream
264
401
  * operations performed after this time (where the operations cannot be
@@ -267,10 +404,17 @@ public:
267
404
  *
268
405
  * @param expiry_time The expiry time to be used for the timer.
269
406
  */
270
- void expires_from_now(const duration_type& expiry_time)
407
+ void expires_from_now(const duration& expiry_time)
271
408
  {
272
409
  rdbuf()->expires_from_now(expiry_time);
273
410
  }
411
+ #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
412
+
413
+ private:
414
+ // Disallow copying and assignment.
415
+ basic_socket_iostream(const basic_socket_iostream&) BOOST_ASIO_DELETED;
416
+ basic_socket_iostream& operator=(
417
+ const basic_socket_iostream&) BOOST_ASIO_DELETED;
274
418
  };
275
419
 
276
420
  } // namespace asio
@@ -2,7 +2,7 @@
2
2
  // basic_socket_streambuf.hpp
3
3
  // ~~~~~~~~~~~~~~~~~~~~~~~~~~
4
4
  //
5
- // Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com)
5
+ // Copyright (c) 2003-2018 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)
@@ -20,18 +20,30 @@
20
20
  #if !defined(BOOST_ASIO_NO_IOSTREAM)
21
21
 
22
22
  #include <streambuf>
23
+ #include <vector>
23
24
  #include <boost/asio/basic_socket.hpp>
24
- #include <boost/asio/deadline_timer_service.hpp>
25
- #include <boost/asio/detail/array.hpp>
25
+ #include <boost/asio/basic_stream_socket.hpp>
26
+ #include <boost/asio/detail/buffer_sequence_adapter.hpp>
27
+ #include <boost/asio/detail/memory.hpp>
26
28
  #include <boost/asio/detail/throw_error.hpp>
27
- #include <boost/asio/io_service.hpp>
28
- #include <boost/asio/stream_socket_service.hpp>
29
+ #include <boost/asio/io_context.hpp>
29
30
 
30
- #if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
31
- # include <boost/asio/deadline_timer.hpp>
32
- #else
31
+ #if defined(BOOST_ASIO_ENABLE_OLD_SERVICES)
32
+ # include <boost/asio/stream_socket_service.hpp>
33
+ #endif // defined(BOOST_ASIO_ENABLE_OLD_SERVICES)
34
+
35
+ #if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
36
+ && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
37
+ # if defined(BOOST_ASIO_ENABLE_OLD_SERVICES)
38
+ # include <boost/asio/deadline_timer_service.hpp>
39
+ # else // defined(BOOST_ASIO_ENABLE_OLD_SERVICES)
40
+ # include <boost/asio/detail/deadline_timer_service.hpp>
41
+ # endif // defined(BOOST_ASIO_ENABLE_OLD_SERVICES)
42
+ #else // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
43
+ // && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
33
44
  # include <boost/asio/steady_timer.hpp>
34
- #endif
45
+ #endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
46
+ // && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
35
47
 
36
48
  #if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
37
49
 
@@ -39,113 +51,220 @@
39
51
 
40
52
  // A macro that should expand to:
41
53
  // template <typename T1, ..., typename Tn>
42
- // basic_socket_streambuf<Protocol, StreamSocketService,
43
- // Time, TimeTraits, TimerService>* connect(
44
- // T1 x1, ..., Tn xn)
54
+ // basic_socket_streambuf* connect(T1 x1, ..., Tn xn)
45
55
  // {
46
56
  // init_buffers();
47
- // this->basic_socket<Protocol, StreamSocketService>::close(ec_);
48
57
  // typedef typename Protocol::resolver resolver_type;
49
- // typedef typename resolver_type::query resolver_query;
50
- // resolver_query query(x1, ..., xn);
51
- // resolve_and_connect(query);
58
+ // resolver_type resolver(socket().get_executor().context());
59
+ // connect_to_endpoints(
60
+ // resolver.resolve(x1, ..., xn, ec_));
52
61
  // return !ec_ ? this : 0;
53
62
  // }
54
63
  // This macro should only persist within this file.
55
64
 
56
65
  # define BOOST_ASIO_PRIVATE_CONNECT_DEF(n) \
57
66
  template <BOOST_ASIO_VARIADIC_TPARAMS(n)> \
58
- basic_socket_streambuf<Protocol, StreamSocketService, \
59
- Time, TimeTraits, TimerService>* connect(BOOST_ASIO_VARIADIC_PARAMS(n)) \
67
+ basic_socket_streambuf* connect(BOOST_ASIO_VARIADIC_BYVAL_PARAMS(n)) \
60
68
  { \
61
69
  init_buffers(); \
62
- this->basic_socket<Protocol, StreamSocketService>::close(ec_); \
63
70
  typedef typename Protocol::resolver resolver_type; \
64
- typedef typename resolver_type::query resolver_query; \
65
- resolver_query query(BOOST_ASIO_VARIADIC_ARGS(n)); \
66
- resolve_and_connect(query); \
71
+ resolver_type resolver(socket().get_executor().context()); \
72
+ connect_to_endpoints( \
73
+ resolver.resolve(BOOST_ASIO_VARIADIC_BYVAL_ARGS(n), ec_)); \
67
74
  return !ec_ ? this : 0; \
68
75
  } \
69
76
  /**/
70
77
 
71
78
  #endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
72
79
 
80
+ #if !defined(BOOST_ASIO_ENABLE_OLD_SERVICES)
81
+ # define BOOST_ASIO_SVC_T1 detail::deadline_timer_service<traits_helper>
82
+ #endif // !defined(BOOST_ASIO_ENABLE_OLD_SERVICES)
83
+
73
84
  #include <boost/asio/detail/push_options.hpp>
74
85
 
75
86
  namespace boost {
76
87
  namespace asio {
77
88
  namespace detail {
78
89
 
79
- // A separate base class is used to ensure that the io_service is initialised
80
- // prior to the basic_socket_streambuf's basic_socket base class.
81
- class socket_streambuf_base
90
+ // A separate base class is used to ensure that the io_context member is
91
+ // initialised prior to the basic_socket_streambuf's basic_socket base class.
92
+ class socket_streambuf_io_context
93
+ {
94
+ protected:
95
+ socket_streambuf_io_context(io_context* ctx)
96
+ : default_io_context_(ctx)
97
+ {
98
+ }
99
+
100
+ shared_ptr<io_context> default_io_context_;
101
+ };
102
+
103
+ // A separate base class is used to ensure that the dynamically allocated
104
+ // buffers are constructed prior to the basic_socket_streambuf's basic_socket
105
+ // base class. This makes moving the socket is the last potentially throwing
106
+ // step in the streambuf's move constructor, giving the constructor a strong
107
+ // exception safety guarantee.
108
+ class socket_streambuf_buffers
82
109
  {
83
110
  protected:
84
- io_service io_service_;
111
+ socket_streambuf_buffers()
112
+ : get_buffer_(buffer_size),
113
+ put_buffer_(buffer_size)
114
+ {
115
+ }
116
+
117
+ enum { buffer_size = 512 };
118
+ std::vector<char> get_buffer_;
119
+ std::vector<char> put_buffer_;
85
120
  };
86
121
 
87
122
  } // namespace detail
88
123
 
124
+ #if !defined(BOOST_ASIO_BASIC_SOCKET_STREAMBUF_FWD_DECL)
125
+ #define BOOST_ASIO_BASIC_SOCKET_STREAMBUF_FWD_DECL
126
+
127
+ // Forward declaration with defaulted arguments.
128
+ template <typename Protocol
129
+ BOOST_ASIO_SVC_TPARAM_DEF1(= stream_socket_service<Protocol>),
130
+ #if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
131
+ && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
132
+ typename Clock = boost::posix_time::ptime,
133
+ typename WaitTraits = time_traits<Clock>
134
+ BOOST_ASIO_SVC_TPARAM1_DEF2(= deadline_timer_service<Clock, WaitTraits>)>
135
+ #else // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
136
+ // && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
137
+ typename Clock = chrono::steady_clock,
138
+ typename WaitTraits = wait_traits<Clock>
139
+ BOOST_ASIO_SVC_TPARAM1_DEF1(= steady_timer::service_type)>
140
+ #endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
141
+ // && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
142
+ class basic_socket_streambuf;
143
+
144
+ #endif // !defined(BOOST_ASIO_BASIC_SOCKET_STREAMBUF_FWD_DECL)
145
+
89
146
  /// Iostream streambuf for a socket.
147
+ #if defined(GENERATING_DOCUMENTATION)
90
148
  template <typename Protocol,
91
- typename StreamSocketService = stream_socket_service<Protocol>,
92
- #if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
93
- || defined(GENERATING_DOCUMENTATION)
94
- typename Time = boost::posix_time::ptime,
95
- typename TimeTraits = boost::asio::time_traits<Time>,
96
- typename TimerService = deadline_timer_service<Time, TimeTraits> >
97
- #else
98
- typename Time = steady_timer::clock_type,
99
- typename TimeTraits = steady_timer::traits_type,
100
- typename TimerService = steady_timer::service_type>
101
- #endif
149
+ typename Clock = chrono::steady_clock,
150
+ typename WaitTraits = wait_traits<Clock> >
151
+ #else // defined(GENERATING_DOCUMENTATION)
152
+ template <typename Protocol BOOST_ASIO_SVC_TPARAM,
153
+ typename Clock, typename WaitTraits BOOST_ASIO_SVC_TPARAM1>
154
+ #endif // defined(GENERATING_DOCUMENTATION)
102
155
  class basic_socket_streambuf
103
156
  : public std::streambuf,
104
- private detail::socket_streambuf_base,
105
- public basic_socket<Protocol, StreamSocketService>
157
+ private detail::socket_streambuf_io_context,
158
+ private detail::socket_streambuf_buffers,
159
+ #if defined(BOOST_ASIO_NO_DEPRECATED) || defined(GENERATING_DOCUMENTATION)
160
+ private basic_socket<Protocol BOOST_ASIO_SVC_TARG>
161
+ #else // defined(BOOST_ASIO_NO_DEPRECATED) || defined(GENERATING_DOCUMENTATION)
162
+ public basic_socket<Protocol BOOST_ASIO_SVC_TARG>
163
+ #endif // defined(BOOST_ASIO_NO_DEPRECATED) || defined(GENERATING_DOCUMENTATION)
106
164
  {
107
165
  private:
108
166
  // These typedefs are intended keep this class's implementation independent
109
- // of whether it's using Boost.DateTime, Boost.Chrono or std::chrono.
110
- #if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
111
- typedef TimeTraits traits_helper;
112
- #else
113
- typedef detail::chrono_time_traits<Time, TimeTraits> traits_helper;
114
- #endif
167
+ // of whether it's using Boost.DateClock, Boost.Chrono or std::chrono.
168
+ #if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
169
+ && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
170
+ typedef WaitTraits traits_helper;
171
+ #else // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
172
+ // && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
173
+ typedef detail::chrono_time_traits<Clock, WaitTraits> traits_helper;
174
+ #endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
175
+ // && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
115
176
 
116
177
  public:
178
+ /// The protocol type.
179
+ typedef Protocol protocol_type;
180
+
117
181
  /// The endpoint type.
118
182
  typedef typename Protocol::endpoint endpoint_type;
119
183
 
184
+ /// The clock type.
185
+ typedef Clock clock_type;
186
+
120
187
  #if defined(GENERATING_DOCUMENTATION)
188
+ /// (Deprecated: Use time_point.) The time type.
189
+ typedef typename WaitTraits::time_type time_type;
190
+
121
191
  /// The time type.
122
- typedef typename TimeTraits::time_type time_type;
192
+ typedef typename WaitTraits::time_point time_point;
193
+
194
+ /// (Deprecated: Use duration.) The duration type.
195
+ typedef typename WaitTraits::duration_type duration_type;
123
196
 
124
197
  /// The duration type.
125
- typedef typename TimeTraits::duration_type duration_type;
198
+ typedef typename WaitTraits::duration duration;
126
199
  #else
200
+ # if !defined(BOOST_ASIO_NO_DEPRECATED)
127
201
  typedef typename traits_helper::time_type time_type;
128
202
  typedef typename traits_helper::duration_type duration_type;
203
+ # endif // !defined(BOOST_ASIO_NO_DEPRECATED)
204
+ typedef typename traits_helper::time_type time_point;
205
+ typedef typename traits_helper::duration_type duration;
129
206
  #endif
130
207
 
131
208
  /// Construct a basic_socket_streambuf without establishing a connection.
132
209
  basic_socket_streambuf()
133
- : basic_socket<Protocol, StreamSocketService>(
134
- this->detail::socket_streambuf_base::io_service_),
135
- unbuffered_(false),
136
- timer_service_(0),
137
- timer_state_(no_timer)
210
+ : detail::socket_streambuf_io_context(new io_context),
211
+ basic_socket<Protocol BOOST_ASIO_SVC_TARG>(*default_io_context_),
212
+ expiry_time_(max_expiry_time())
138
213
  {
139
214
  init_buffers();
140
215
  }
141
216
 
217
+ #if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
218
+ /// Construct a basic_socket_streambuf from the supplied socket.
219
+ explicit basic_socket_streambuf(basic_stream_socket<protocol_type> s)
220
+ : detail::socket_streambuf_io_context(0),
221
+ basic_socket<Protocol BOOST_ASIO_SVC_TARG>(std::move(s)),
222
+ expiry_time_(max_expiry_time())
223
+ {
224
+ init_buffers();
225
+ }
226
+
227
+ /// Move-construct a basic_socket_streambuf from another.
228
+ basic_socket_streambuf(basic_socket_streambuf&& other)
229
+ : detail::socket_streambuf_io_context(other),
230
+ basic_socket<Protocol BOOST_ASIO_SVC_TARG>(std::move(other.socket())),
231
+ ec_(other.ec_),
232
+ expiry_time_(other.expiry_time_)
233
+ {
234
+ get_buffer_.swap(other.get_buffer_);
235
+ put_buffer_.swap(other.put_buffer_);
236
+ setg(other.eback(), other.gptr(), other.egptr());
237
+ setp(other.pptr(), other.epptr());
238
+ other.ec_ = boost::system::error_code();
239
+ other.expiry_time_ = max_expiry_time();
240
+ other.init_buffers();
241
+ }
242
+
243
+ /// Move-assign a basic_socket_streambuf from another.
244
+ basic_socket_streambuf& operator=(basic_socket_streambuf&& other)
245
+ {
246
+ this->close();
247
+ socket() = std::move(other.socket());
248
+ detail::socket_streambuf_io_context::operator=(other);
249
+ ec_ = other.ec_;
250
+ expiry_time_ = other.expiry_time_;
251
+ get_buffer_.swap(other.get_buffer_);
252
+ put_buffer_.swap(other.put_buffer_);
253
+ setg(other.eback(), other.gptr(), other.egptr());
254
+ setp(other.pptr(), other.epptr());
255
+ other.ec_ = boost::system::error_code();
256
+ other.expiry_time_ = max_expiry_time();
257
+ other.put_buffer_.resize(buffer_size);
258
+ other.init_buffers();
259
+ return *this;
260
+ }
261
+ #endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
262
+
142
263
  /// Destructor flushes buffered data.
143
264
  virtual ~basic_socket_streambuf()
144
265
  {
145
266
  if (pptr() != pbase())
146
267
  overflow(traits_type::eof());
147
-
148
- destroy_timer();
149
268
  }
150
269
 
151
270
  /// Establish a connection.
@@ -155,29 +274,11 @@ public:
155
274
  * @return \c this if a connection was successfully established, a null
156
275
  * pointer otherwise.
157
276
  */
158
- basic_socket_streambuf<Protocol, StreamSocketService,
159
- Time, TimeTraits, TimerService>* connect(
160
- const endpoint_type& endpoint)
277
+ basic_socket_streambuf* connect(const endpoint_type& endpoint)
161
278
  {
162
279
  init_buffers();
163
-
164
- this->basic_socket<Protocol, StreamSocketService>::close(ec_);
165
-
166
- if (timer_state_ == timer_has_expired)
167
- {
168
- ec_ = boost::asio::error::operation_aborted;
169
- return 0;
170
- }
171
-
172
- io_handler handler = { this };
173
- this->basic_socket<Protocol, StreamSocketService>::async_connect(
174
- endpoint, handler);
175
-
176
- ec_ = boost::asio::error::would_block;
177
- this->get_service().get_io_service().reset();
178
- do this->get_service().get_io_service().run_one();
179
- while (ec_ == boost::asio::error::would_block);
180
-
280
+ ec_ = boost::system::error_code();
281
+ this->connect_to_endpoints(&endpoint, &endpoint + 1);
181
282
  return !ec_ ? this : 0;
182
283
  }
183
284
 
@@ -192,19 +293,15 @@ public:
192
293
  * pointer otherwise.
193
294
  */
194
295
  template <typename T1, ..., typename TN>
195
- basic_socket_streambuf<Protocol, StreamSocketService>* connect(
196
- T1 t1, ..., TN tn);
296
+ basic_socket_streambuf* connect(T1 t1, ..., TN tn);
197
297
  #elif defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
198
298
  template <typename... T>
199
- basic_socket_streambuf<Protocol, StreamSocketService,
200
- Time, TimeTraits, TimerService>* connect(T... x)
299
+ basic_socket_streambuf* connect(T... x)
201
300
  {
202
301
  init_buffers();
203
- this->basic_socket<Protocol, StreamSocketService>::close(ec_);
204
302
  typedef typename Protocol::resolver resolver_type;
205
- typedef typename resolver_type::query resolver_query;
206
- resolver_query query(x...);
207
- resolve_and_connect(query);
303
+ resolver_type resolver(socket().get_executor().context());
304
+ connect_to_endpoints(resolver.resolve(x..., ec_));
208
305
  return !ec_ ? this : 0;
209
306
  }
210
307
  #else
@@ -216,17 +313,34 @@ public:
216
313
  * @return \c this if a connection was successfully established, a null
217
314
  * pointer otherwise.
218
315
  */
219
- basic_socket_streambuf<Protocol, StreamSocketService,
220
- Time, TimeTraits, TimerService>* close()
316
+ basic_socket_streambuf* close()
221
317
  {
222
318
  sync();
223
- this->basic_socket<Protocol, StreamSocketService>::close(ec_);
319
+ socket().close(ec_);
224
320
  if (!ec_)
225
321
  init_buffers();
226
322
  return !ec_ ? this : 0;
227
323
  }
228
324
 
325
+ /// Get a reference to the underlying socket.
326
+ basic_socket<Protocol BOOST_ASIO_SVC_TARG>& socket()
327
+ {
328
+ return *this;
329
+ }
330
+
229
331
  /// Get the last error associated with the stream buffer.
332
+ /**
333
+ * @return An \c error_code corresponding to the last error from the stream
334
+ * buffer.
335
+ */
336
+ const boost::system::error_code& error() const
337
+ {
338
+ return ec_;
339
+ }
340
+
341
+ #if !defined(BOOST_ASIO_NO_DEPRECATED)
342
+ /// (Deprecated: Use error().) Get the last error associated with the stream
343
+ /// buffer.
230
344
  /**
231
345
  * @return An \c error_code corresponding to the last error from the stream
232
346
  * buffer.
@@ -236,16 +350,26 @@ public:
236
350
  return error();
237
351
  }
238
352
 
353
+ /// (Deprecated: Use expiry().) Get the stream buffer's expiry time as an
354
+ /// absolute time.
355
+ /**
356
+ * @return An absolute time value representing the stream buffer's expiry
357
+ * time.
358
+ */
359
+ time_point expires_at() const
360
+ {
361
+ return expiry_time_;
362
+ }
363
+ #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
364
+
239
365
  /// Get the stream buffer's expiry time as an absolute time.
240
366
  /**
241
367
  * @return An absolute time value representing the stream buffer's expiry
242
368
  * time.
243
369
  */
244
- time_type expires_at() const
370
+ time_point expiry() const
245
371
  {
246
- return timer_service_
247
- ? timer_service_->expires_at(timer_implementation_)
248
- : time_type();
372
+ return expiry_time_;
249
373
  }
250
374
 
251
375
  /// Set the stream buffer's expiry time as an absolute time.
@@ -257,27 +381,38 @@ public:
257
381
  *
258
382
  * @param expiry_time The expiry time to be used for the stream.
259
383
  */
260
- void expires_at(const time_type& expiry_time)
384
+ void expires_at(const time_point& expiry_time)
261
385
  {
262
- construct_timer();
263
-
264
- boost::system::error_code ec;
265
- timer_service_->expires_at(timer_implementation_, expiry_time, ec);
266
- boost::asio::detail::throw_error(ec, "expires_at");
386
+ expiry_time_ = expiry_time;
387
+ }
267
388
 
268
- start_timer();
389
+ /// Set the stream buffer's expiry time relative to now.
390
+ /**
391
+ * This function sets the expiry time associated with the stream. Stream
392
+ * operations performed after this time (where the operations cannot be
393
+ * completed using the internal buffers) will fail with the error
394
+ * boost::asio::error::operation_aborted.
395
+ *
396
+ * @param expiry_time The expiry time to be used for the timer.
397
+ */
398
+ void expires_after(const duration& expiry_time)
399
+ {
400
+ expiry_time_ = traits_helper::add(traits_helper::now(), expiry_time);
269
401
  }
270
402
 
271
- /// Get the stream buffer's expiry time relative to now.
403
+ #if !defined(BOOST_ASIO_NO_DEPRECATED)
404
+ /// (Deprecated: Use expiry().) Get the stream buffer's expiry time relative
405
+ /// to now.
272
406
  /**
273
407
  * @return A relative time value representing the stream buffer's expiry time.
274
408
  */
275
- duration_type expires_from_now() const
409
+ duration expires_from_now() const
276
410
  {
277
411
  return traits_helper::subtract(expires_at(), traits_helper::now());
278
412
  }
279
413
 
280
- /// Set the stream buffer's expiry time relative to now.
414
+ /// (Deprecated: Use expires_after().) Set the stream buffer's expiry time
415
+ /// relative to now.
281
416
  /**
282
417
  * This function sets the expiry time associated with the stream. Stream
283
418
  * operations performed after this time (where the operations cannot be
@@ -286,109 +421,126 @@ public:
286
421
  *
287
422
  * @param expiry_time The expiry time to be used for the timer.
288
423
  */
289
- void expires_from_now(const duration_type& expiry_time)
424
+ void expires_from_now(const duration& expiry_time)
290
425
  {
291
- construct_timer();
292
-
293
- boost::system::error_code ec;
294
- timer_service_->expires_from_now(timer_implementation_, expiry_time, ec);
295
- boost::asio::detail::throw_error(ec, "expires_from_now");
296
-
297
- start_timer();
426
+ expiry_time_ = traits_helper::add(traits_helper::now(), expiry_time);
298
427
  }
428
+ #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
299
429
 
300
430
  protected:
301
431
  int_type underflow()
302
432
  {
303
- if (gptr() == egptr())
433
+ #if defined(BOOST_ASIO_WINDOWS_RUNTIME)
434
+ ec_ = boost::asio::error::operation_not_supported;
435
+ return traits_type::eof();
436
+ #else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
437
+ if (gptr() != egptr())
438
+ return traits_type::eof();
439
+
440
+ for (;;)
304
441
  {
305
- if (timer_state_ == timer_has_expired)
442
+ // Check if we are past the expiry time.
443
+ if (traits_helper::less_than(expiry_time_, traits_helper::now()))
306
444
  {
307
- ec_ = boost::asio::error::operation_aborted;
445
+ ec_ = boost::asio::error::timed_out;
308
446
  return traits_type::eof();
309
447
  }
310
448
 
311
- io_handler handler = { this };
312
- this->get_service().async_receive(this->get_implementation(),
313
- boost::asio::buffer(boost::asio::buffer(get_buffer_) + putback_max),
314
- 0, handler);
449
+ // Try to complete the operation without blocking.
450
+ if (!socket().native_non_blocking())
451
+ socket().native_non_blocking(true, ec_);
452
+ detail::buffer_sequence_adapter<mutable_buffer, mutable_buffer>
453
+ bufs(boost::asio::buffer(get_buffer_) + putback_max);
454
+ detail::signed_size_type bytes = detail::socket_ops::recv(
455
+ socket().native_handle(), bufs.buffers(), bufs.count(), 0, ec_);
315
456
 
316
- ec_ = boost::asio::error::would_block;
317
- this->get_service().get_io_service().reset();
318
- do this->get_service().get_io_service().run_one();
319
- while (ec_ == boost::asio::error::would_block);
320
- if (ec_)
457
+ // Check if operation succeeded.
458
+ if (bytes > 0)
459
+ {
460
+ setg(&get_buffer_[0], &get_buffer_[0] + putback_max,
461
+ &get_buffer_[0] + putback_max + bytes);
462
+ return traits_type::to_int_type(*gptr());
463
+ }
464
+
465
+ // Check for EOF.
466
+ if (bytes == 0)
467
+ {
468
+ ec_ = boost::asio::error::eof;
469
+ return traits_type::eof();
470
+ }
471
+
472
+ // Operation failed.
473
+ if (ec_ != boost::asio::error::would_block
474
+ && ec_ != boost::asio::error::try_again)
321
475
  return traits_type::eof();
322
476
 
323
- setg(&get_buffer_[0], &get_buffer_[0] + putback_max,
324
- &get_buffer_[0] + putback_max + bytes_transferred_);
325
- return traits_type::to_int_type(*gptr());
326
- }
327
- else
328
- {
329
- return traits_type::eof();
477
+ // Wait for socket to become ready.
478
+ if (detail::socket_ops::poll_read(
479
+ socket().native_handle(), 0, timeout(), ec_) < 0)
480
+ return traits_type::eof();
330
481
  }
482
+ #endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
331
483
  }
332
484
 
333
485
  int_type overflow(int_type c)
334
486
  {
335
- if (unbuffered_)
487
+ #if defined(BOOST_ASIO_WINDOWS_RUNTIME)
488
+ ec_ = boost::asio::error::operation_not_supported;
489
+ return traits_type::eof();
490
+ #else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
491
+ char_type ch = traits_type::to_char_type(c);
492
+
493
+ // Determine what needs to be sent.
494
+ const_buffer output_buffer;
495
+ if (put_buffer_.empty())
336
496
  {
337
497
  if (traits_type::eq_int_type(c, traits_type::eof()))
498
+ return traits_type::not_eof(c); // Nothing to do.
499
+ output_buffer = boost::asio::buffer(&ch, sizeof(char_type));
500
+ }
501
+ else
502
+ {
503
+ output_buffer = boost::asio::buffer(pbase(),
504
+ (pptr() - pbase()) * sizeof(char_type));
505
+ }
506
+
507
+ while (output_buffer.size() > 0)
508
+ {
509
+ // Check if we are past the expiry time.
510
+ if (traits_helper::less_than(expiry_time_, traits_helper::now()))
338
511
  {
339
- // Nothing to do.
340
- return traits_type::not_eof(c);
512
+ ec_ = boost::asio::error::timed_out;
513
+ return traits_type::eof();
341
514
  }
342
- else
515
+
516
+ // Try to complete the operation without blocking.
517
+ if (!socket().native_non_blocking())
518
+ socket().native_non_blocking(true, ec_);
519
+ detail::buffer_sequence_adapter<
520
+ const_buffer, const_buffer> bufs(output_buffer);
521
+ detail::signed_size_type bytes = detail::socket_ops::send(
522
+ socket().native_handle(), bufs.buffers(), bufs.count(), 0, ec_);
523
+
524
+ // Check if operation succeeded.
525
+ if (bytes > 0)
343
526
  {
344
- if (timer_state_ == timer_has_expired)
345
- {
346
- ec_ = boost::asio::error::operation_aborted;
347
- return traits_type::eof();
348
- }
349
-
350
- // Send the single character immediately.
351
- char_type ch = traits_type::to_char_type(c);
352
- io_handler handler = { this };
353
- this->get_service().async_send(this->get_implementation(),
354
- boost::asio::buffer(&ch, sizeof(char_type)), 0, handler);
355
-
356
- ec_ = boost::asio::error::would_block;
357
- this->get_service().get_io_service().reset();
358
- do this->get_service().get_io_service().run_one();
359
- while (ec_ == boost::asio::error::would_block);
360
- if (ec_)
361
- return traits_type::eof();
362
-
363
- return c;
527
+ output_buffer += static_cast<std::size_t>(bytes);
528
+ continue;
364
529
  }
530
+
531
+ // Operation failed.
532
+ if (ec_ != boost::asio::error::would_block
533
+ && ec_ != boost::asio::error::try_again)
534
+ return traits_type::eof();
535
+
536
+ // Wait for socket to become ready.
537
+ if (detail::socket_ops::poll_write(
538
+ socket().native_handle(), 0, timeout(), ec_) < 0)
539
+ return traits_type::eof();
365
540
  }
366
- else
541
+
542
+ if (!put_buffer_.empty())
367
543
  {
368
- // Send all data in the output buffer.
369
- boost::asio::const_buffer buffer =
370
- boost::asio::buffer(pbase(), pptr() - pbase());
371
- while (boost::asio::buffer_size(buffer) > 0)
372
- {
373
- if (timer_state_ == timer_has_expired)
374
- {
375
- ec_ = boost::asio::error::operation_aborted;
376
- return traits_type::eof();
377
- }
378
-
379
- io_handler handler = { this };
380
- this->get_service().async_send(this->get_implementation(),
381
- boost::asio::buffer(buffer), 0, handler);
382
-
383
- ec_ = boost::asio::error::would_block;
384
- this->get_service().get_io_service().reset();
385
- do this->get_service().get_io_service().run_one();
386
- while (ec_ == boost::asio::error::would_block);
387
- if (ec_)
388
- return traits_type::eof();
389
-
390
- buffer = buffer + bytes_transferred_;
391
- }
392
544
  setp(&put_buffer_[0], &put_buffer_[0] + put_buffer_.size());
393
545
 
394
546
  // If the new character is eof then our work here is done.
@@ -396,10 +548,12 @@ protected:
396
548
  return traits_type::not_eof(c);
397
549
 
398
550
  // Add the new character to the output buffer.
399
- *pptr() = traits_type::to_char_type(c);
551
+ *pptr() = ch;
400
552
  pbump(1);
401
- return c;
402
553
  }
554
+
555
+ return c;
556
+ #endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
403
557
  }
404
558
 
405
559
  int sync()
@@ -411,148 +565,130 @@ protected:
411
565
  {
412
566
  if (pptr() == pbase() && s == 0 && n == 0)
413
567
  {
414
- unbuffered_ = true;
568
+ put_buffer_.clear();
415
569
  setp(0, 0);
570
+ sync();
416
571
  return this;
417
572
  }
418
573
 
419
574
  return 0;
420
575
  }
421
576
 
422
- /// Get the last error associated with the stream buffer.
423
- /**
424
- * @return An \c error_code corresponding to the last error from the stream
425
- * buffer.
426
- */
427
- virtual const boost::system::error_code& error() const
428
- {
429
- return ec_;
430
- }
431
-
432
577
  private:
578
+ // Disallow copying and assignment.
579
+ basic_socket_streambuf(const basic_socket_streambuf&) BOOST_ASIO_DELETED;
580
+ basic_socket_streambuf& operator=(
581
+ const basic_socket_streambuf&) BOOST_ASIO_DELETED;
582
+
433
583
  void init_buffers()
434
584
  {
435
585
  setg(&get_buffer_[0],
436
586
  &get_buffer_[0] + putback_max,
437
587
  &get_buffer_[0] + putback_max);
438
- if (unbuffered_)
588
+
589
+ if (put_buffer_.empty())
439
590
  setp(0, 0);
440
591
  else
441
592
  setp(&put_buffer_[0], &put_buffer_[0] + put_buffer_.size());
442
593
  }
443
594
 
444
- template <typename ResolverQuery>
445
- void resolve_and_connect(const ResolverQuery& query)
595
+ int timeout() const
446
596
  {
447
- typedef typename Protocol::resolver resolver_type;
448
- typedef typename resolver_type::iterator iterator_type;
449
- resolver_type resolver(detail::socket_streambuf_base::io_service_);
450
- iterator_type i = resolver.resolve(query, ec_);
451
- if (!ec_)
452
- {
453
- iterator_type end;
454
- ec_ = boost::asio::error::host_not_found;
455
- while (ec_ && i != end)
456
- {
457
- this->basic_socket<Protocol, StreamSocketService>::close(ec_);
458
-
459
- if (timer_state_ == timer_has_expired)
460
- {
461
- ec_ = boost::asio::error::operation_aborted;
462
- return;
463
- }
464
-
465
- io_handler handler = { this };
466
- this->basic_socket<Protocol, StreamSocketService>::async_connect(
467
- *i, handler);
468
-
469
- ec_ = boost::asio::error::would_block;
470
- this->get_service().get_io_service().reset();
471
- do this->get_service().get_io_service().run_one();
472
- while (ec_ == boost::asio::error::would_block);
473
-
474
- ++i;
475
- }
476
- }
597
+ int64_t msec = traits_helper::to_posix_duration(
598
+ traits_helper::subtract(expiry_time_,
599
+ traits_helper::now())).total_milliseconds();
600
+ if (msec > (std::numeric_limits<int>::max)())
601
+ msec = (std::numeric_limits<int>::max)();
602
+ else if (msec < 0)
603
+ msec = 0;
604
+ return static_cast<int>(msec);
477
605
  }
478
606
 
479
- struct io_handler;
480
- friend struct io_handler;
481
- struct io_handler
607
+ template <typename EndpointSequence>
608
+ void connect_to_endpoints(const EndpointSequence& endpoints)
482
609
  {
483
- basic_socket_streambuf* this_;
484
-
485
- void operator()(const boost::system::error_code& ec,
486
- std::size_t bytes_transferred = 0)
487
- {
488
- this_->ec_ = ec;
489
- this_->bytes_transferred_ = bytes_transferred;
490
- }
491
- };
610
+ this->connect_to_endpoints(endpoints.begin(), endpoints.end());
611
+ }
492
612
 
493
- struct timer_handler;
494
- friend struct timer_handler;
495
- struct timer_handler
613
+ template <typename EndpointIterator>
614
+ void connect_to_endpoints(EndpointIterator begin, EndpointIterator end)
496
615
  {
497
- basic_socket_streambuf* this_;
498
-
499
- void operator()(const boost::system::error_code&)
616
+ #if defined(BOOST_ASIO_WINDOWS_RUNTIME)
617
+ ec_ = boost::asio::error::operation_not_supported;
618
+ #else // defined(BOOST_ASIO_WINDOWS_RUNTIME)
619
+ if (ec_)
620
+ return;
621
+
622
+ ec_ = boost::asio::error::not_found;
623
+ for (EndpointIterator i = begin; i != end; ++i)
500
624
  {
501
- time_type now = traits_helper::now();
502
-
503
- time_type expiry_time = this_->timer_service_->expires_at(
504
- this_->timer_implementation_);
505
-
506
- if (traits_helper::less_than(now, expiry_time))
625
+ // Check if we are past the expiry time.
626
+ if (traits_helper::less_than(expiry_time_, traits_helper::now()))
507
627
  {
508
- this_->timer_state_ = timer_is_pending;
509
- this_->timer_service_->async_wait(this_->timer_implementation_, *this);
628
+ ec_ = boost::asio::error::timed_out;
629
+ return;
510
630
  }
511
- else
512
- {
513
- this_->timer_state_ = timer_has_expired;
514
- boost::system::error_code ec;
515
- this_->basic_socket<Protocol, StreamSocketService>::close(ec);
516
- }
517
- }
518
- };
519
631
 
520
- void construct_timer()
521
- {
522
- if (timer_service_ == 0)
523
- {
524
- TimerService& timer_service = use_service<TimerService>(
525
- detail::socket_streambuf_base::io_service_);
526
- timer_service.construct(timer_implementation_);
527
- timer_service_ = &timer_service;
632
+ // Close and reopen the socket.
633
+ typename Protocol::endpoint ep(*i);
634
+ socket().close(ec_);
635
+ socket().open(ep.protocol(), ec_);
636
+ if (ec_)
637
+ continue;
638
+
639
+ // Try to complete the operation without blocking.
640
+ if (!socket().native_non_blocking())
641
+ socket().native_non_blocking(true, ec_);
642
+ detail::socket_ops::connect(socket().native_handle(),
643
+ ep.data(), ep.size(), ec_);
644
+
645
+ // Check if operation succeeded.
646
+ if (!ec_)
647
+ return;
648
+
649
+ // Operation failed.
650
+ if (ec_ != boost::asio::error::in_progress
651
+ && ec_ != boost::asio::error::would_block)
652
+ continue;
653
+
654
+ // Wait for socket to become ready.
655
+ if (detail::socket_ops::poll_connect(
656
+ socket().native_handle(), timeout(), ec_) < 0)
657
+ continue;
658
+
659
+ // Get the error code from the connect operation.
660
+ int connect_error = 0;
661
+ size_t connect_error_len = sizeof(connect_error);
662
+ if (detail::socket_ops::getsockopt(socket().native_handle(), 0,
663
+ SOL_SOCKET, SO_ERROR, &connect_error, &connect_error_len, ec_)
664
+ == detail::socket_error_retval)
665
+ return;
666
+
667
+ // Check the result of the connect operation.
668
+ ec_ = boost::system::error_code(connect_error,
669
+ boost::asio::error::get_system_category());
670
+ if (!ec_)
671
+ return;
528
672
  }
673
+ #endif // defined(BOOST_ASIO_WINDOWS_RUNTIME)
529
674
  }
530
675
 
531
- void destroy_timer()
676
+ // Helper function to get the maximum expiry time.
677
+ static time_point max_expiry_time()
532
678
  {
533
- if (timer_service_)
534
- timer_service_->destroy(timer_implementation_);
535
- }
536
-
537
- void start_timer()
538
- {
539
- if (timer_state_ != timer_is_pending)
540
- {
541
- timer_handler handler = { this };
542
- handler(boost::system::error_code());
543
- }
679
+ #if defined(BOOST_ASIO_HAS_BOOST_DATE_TIME) \
680
+ && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
681
+ return boost::posix_time::pos_infin;
682
+ #else // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
683
+ // && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
684
+ return (time_point::max)();
685
+ #endif // defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
686
+ // && defined(BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM)
544
687
  }
545
688
 
546
689
  enum { putback_max = 8 };
547
- enum { buffer_size = 512 };
548
- boost::asio::detail::array<char, buffer_size> get_buffer_;
549
- boost::asio::detail::array<char, buffer_size> put_buffer_;
550
- bool unbuffered_;
551
690
  boost::system::error_code ec_;
552
- std::size_t bytes_transferred_;
553
- TimerService* timer_service_;
554
- typename TimerService::implementation_type timer_implementation_;
555
- enum state { no_timer, timer_is_pending, timer_has_expired } timer_state_;
691
+ time_point expiry_time_;
556
692
  };
557
693
 
558
694
  } // namespace asio
@@ -560,6 +696,10 @@ private:
560
696
 
561
697
  #include <boost/asio/detail/pop_options.hpp>
562
698
 
699
+ #if !defined(BOOST_ASIO_ENABLE_OLD_SERVICES)
700
+ # undef BOOST_ASIO_SVC_T1
701
+ #endif // !defined(BOOST_ASIO_ENABLE_OLD_SERVICES)
702
+
563
703
  #if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
564
704
  # undef BOOST_ASIO_PRIVATE_CONNECT_DEF
565
705
  #endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)