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
  // read_until.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)
@@ -16,17 +16,18 @@
16
16
  #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
17
 
18
18
  #include <boost/asio/detail/config.hpp>
19
-
20
- #if !defined(BOOST_ASIO_NO_IOSTREAM)
21
-
22
19
  #include <cstddef>
23
20
  #include <string>
24
21
  #include <boost/asio/async_result.hpp>
25
- #include <boost/asio/basic_streambuf.hpp>
26
22
  #include <boost/asio/detail/regex_fwd.hpp>
23
+ #include <boost/asio/detail/string_view.hpp>
27
24
  #include <boost/asio/detail/type_traits.hpp>
28
25
  #include <boost/asio/error.hpp>
29
26
 
27
+ #if !defined(BOOST_ASIO_NO_EXTENSIONS)
28
+ # include <boost/asio/basic_streambuf_fwd.hpp>
29
+ #endif // !defined(BOOST_ASIO_NO_EXTENSIONS)
30
+
30
31
  #include <boost/asio/detail/push_options.hpp>
31
32
 
32
33
  namespace boost {
@@ -67,289 +68,1221 @@ struct is_match_condition
67
68
  /**
68
69
  * @defgroup read_until boost::asio::read_until
69
70
  *
70
- * @brief Read data into a streambuf until it contains a delimiter, matches a
71
- * regular expression, or a function object indicates a match.
71
+ * @brief Read data into a dynamic buffer sequence, or into a streambuf, until
72
+ * it contains a delimiter, matches a regular expression, or a function object
73
+ * indicates a match.
72
74
  */
73
75
  /*@{*/
74
76
 
75
- /// Read data into a streambuf until it contains a specified delimiter.
77
+ /// Read data into a dynamic buffer sequence until it contains a specified
78
+ /// delimiter.
76
79
  /**
77
- * This function is used to read data into the specified streambuf until the
78
- * streambuf's get area contains the specified delimiter. The call will block
79
- * until one of the following conditions is true:
80
+ * This function is used to read data into the specified dynamic buffer
81
+ * sequence until the dynamic buffer sequence's get area contains the specified
82
+ * delimiter. The call will block until one of the following conditions is
83
+ * true:
80
84
  *
81
- * @li The get area of the streambuf contains the specified delimiter.
85
+ * @li The get area of the dynamic buffer sequence contains the specified
86
+ * delimiter.
82
87
  *
83
88
  * @li An error occurred.
84
89
  *
85
90
  * This operation is implemented in terms of zero or more calls to the stream's
86
- * read_some function. If the streambuf's get area already contains the
87
- * delimiter, the function returns immediately.
91
+ * read_some function. If the dynamic buffer sequence's get area already
92
+ * contains the delimiter, the function returns immediately.
88
93
  *
89
94
  * @param s The stream from which the data is to be read. The type must support
90
95
  * the SyncReadStream concept.
91
96
  *
92
- * @param b A streambuf object into which the data will be read.
97
+ * @param buffers The dynamic buffer sequence into which the data will be read.
93
98
  *
94
99
  * @param delim The delimiter character.
95
100
  *
96
- * @returns The number of bytes in the streambuf's get area up to and including
97
- * the delimiter.
101
+ * @returns The number of bytes in the dynamic buffer sequence's get area up to
102
+ * and including the delimiter.
98
103
  *
99
104
  * @throws boost::system::system_error Thrown on failure.
100
105
  *
101
- * @note After a successful read_until operation, the streambuf may contain
102
- * additional data beyond the delimiter. An application will typically leave
103
- * that data in the streambuf for a subsequent read_until operation to examine.
106
+ * @note After a successful read_until operation, the dynamic buffer sequence
107
+ * may contain additional data beyond the delimiter. An application will
108
+ * typically leave that data in the dynamic buffer sequence for a subsequent
109
+ * read_until operation to examine.
104
110
  *
105
111
  * @par Example
106
- * To read data into a streambuf until a newline is encountered:
107
- * @code boost::asio::streambuf b;
108
- * boost::asio::read_until(s, b, '\n');
109
- * std::istream is(&b);
110
- * std::string line;
111
- * std::getline(is, line); @endcode
112
- * After the @c read_until operation completes successfully, the buffer @c b
112
+ * To read data into a @c std::string until a newline is encountered:
113
+ * @code std::string data;
114
+ * std::string n = boost::asio::read_until(s,
115
+ * boost::asio::dynamic_buffer(data), '\n');
116
+ * std::string line = data.substr(0, n);
117
+ * data.erase(0, n); @endcode
118
+ * After the @c read_until operation completes successfully, the string @c data
113
119
  * contains the delimiter:
114
120
  * @code { 'a', 'b', ..., 'c', '\n', 'd', 'e', ... } @endcode
115
- * The call to @c std::getline then extracts the data up to and including the
121
+ * The call to @c substr then extracts the data up to and including the
116
122
  * delimiter, so that the string @c line contains:
117
123
  * @code { 'a', 'b', ..., 'c', '\n' } @endcode
118
- * The remaining data is left in the buffer @c b as follows:
124
+ * After the call to @c erase, the remaining data is left in the buffer @c b as
125
+ * follows:
119
126
  * @code { 'd', 'e', ... } @endcode
120
127
  * This data may be the start of a new line, to be extracted by a subsequent
121
128
  * @c read_until operation.
122
129
  */
123
- template <typename SyncReadStream, typename Allocator>
130
+ template <typename SyncReadStream, typename DynamicBuffer>
124
131
  std::size_t read_until(SyncReadStream& s,
125
- boost::asio::basic_streambuf<Allocator>& b, char delim);
132
+ BOOST_ASIO_MOVE_ARG(DynamicBuffer) buffers, char delim);
126
133
 
127
- /// Read data into a streambuf until it contains a specified delimiter.
134
+ /// Read data into a dynamic buffer sequence until it contains a specified
135
+ /// delimiter.
128
136
  /**
129
- * This function is used to read data into the specified streambuf until the
130
- * streambuf's get area contains the specified delimiter. The call will block
131
- * until one of the following conditions is true:
137
+ * This function is used to read data into the specified dynamic buffer
138
+ * sequence until the dynamic buffer sequence's get area contains the specified
139
+ * delimiter. The call will block until one of the following conditions is
140
+ * true:
132
141
  *
133
- * @li The get area of the streambuf contains the specified delimiter.
142
+ * @li The get area of the dynamic buffer sequence contains the specified
143
+ * delimiter.
134
144
  *
135
145
  * @li An error occurred.
136
146
  *
137
147
  * This operation is implemented in terms of zero or more calls to the stream's
138
- * read_some function. If the streambuf's get area already contains the
139
- * delimiter, the function returns immediately.
148
+ * read_some function. If the dynamic buffer sequence's get area already
149
+ * contains the delimiter, the function returns immediately.
140
150
  *
141
151
  * @param s The stream from which the data is to be read. The type must support
142
152
  * the SyncReadStream concept.
143
153
  *
144
- * @param b A streambuf object into which the data will be read.
154
+ * @param buffers The dynamic buffer sequence into which the data will be read.
145
155
  *
146
156
  * @param delim The delimiter character.
147
157
  *
148
158
  * @param ec Set to indicate what error occurred, if any.
149
159
  *
150
- * @returns The number of bytes in the streambuf's get area up to and including
151
- * the delimiter. Returns 0 if an error occurred.
160
+ * @returns The number of bytes in the dynamic buffer sequence's get area up to
161
+ * and including the delimiter. Returns 0 if an error occurred.
152
162
  *
153
- * @note After a successful read_until operation, the streambuf may contain
154
- * additional data beyond the delimiter. An application will typically leave
155
- * that data in the streambuf for a subsequent read_until operation to examine.
163
+ * @note After a successful read_until operation, the dynamic buffer sequence
164
+ * may contain additional data beyond the delimiter. An application will
165
+ * typically leave that data in the dynamic buffer sequence for a subsequent
166
+ * read_until operation to examine.
156
167
  */
157
- template <typename SyncReadStream, typename Allocator>
168
+ template <typename SyncReadStream, typename DynamicBuffer>
158
169
  std::size_t read_until(SyncReadStream& s,
159
- boost::asio::basic_streambuf<Allocator>& b, char delim,
160
- boost::system::error_code& ec);
170
+ BOOST_ASIO_MOVE_ARG(DynamicBuffer) buffers,
171
+ char delim, boost::system::error_code& ec);
161
172
 
162
- /// Read data into a streambuf until it contains a specified delimiter.
173
+ /// Read data into a dynamic buffer sequence until it contains a specified
174
+ /// delimiter.
163
175
  /**
164
- * This function is used to read data into the specified streambuf until the
165
- * streambuf's get area contains the specified delimiter. The call will block
166
- * until one of the following conditions is true:
176
+ * This function is used to read data into the specified dynamic buffer
177
+ * sequence until the dynamic buffer sequence's get area contains the specified
178
+ * delimiter. The call will block until one of the following conditions is
179
+ * true:
167
180
  *
168
- * @li The get area of the streambuf contains the specified delimiter.
181
+ * @li The get area of the dynamic buffer sequence contains the specified
182
+ * delimiter.
169
183
  *
170
184
  * @li An error occurred.
171
185
  *
172
186
  * This operation is implemented in terms of zero or more calls to the stream's
173
- * read_some function. If the streambuf's get area already contains the
174
- * delimiter, the function returns immediately.
187
+ * read_some function. If the dynamic buffer sequence's get area already
188
+ * contains the delimiter, the function returns immediately.
175
189
  *
176
190
  * @param s The stream from which the data is to be read. The type must support
177
191
  * the SyncReadStream concept.
178
192
  *
179
- * @param b A streambuf object into which the data will be read.
193
+ * @param buffers The dynamic buffer sequence into which the data will be read.
180
194
  *
181
195
  * @param delim The delimiter string.
182
196
  *
183
- * @returns The number of bytes in the streambuf's get area up to and including
184
- * the delimiter.
185
- *
186
- * @throws boost::system::system_error Thrown on failure.
197
+ * @returns The number of bytes in the dynamic buffer sequence's get area up to
198
+ * and including the delimiter.
187
199
  *
188
- * @note After a successful read_until operation, the streambuf may contain
189
- * additional data beyond the delimiter. An application will typically leave
190
- * that data in the streambuf for a subsequent read_until operation to examine.
200
+ * @note After a successful read_until operation, the dynamic buffer sequence
201
+ * may contain additional data beyond the delimiter. An application will
202
+ * typically leave that data in the dynamic buffer sequence for a subsequent
203
+ * read_until operation to examine.
191
204
  *
192
205
  * @par Example
193
- * To read data into a streambuf until a newline is encountered:
194
- * @code boost::asio::streambuf b;
195
- * boost::asio::read_until(s, b, "\r\n");
196
- * std::istream is(&b);
197
- * std::string line;
198
- * std::getline(is, line); @endcode
199
- * After the @c read_until operation completes successfully, the buffer @c b
206
+ * To read data into a @c std::string until a CR-LF sequence is encountered:
207
+ * @code std::string data;
208
+ * std::string n = boost::asio::read_until(s,
209
+ * boost::asio::dynamic_buffer(data), "\r\n");
210
+ * std::string line = data.substr(0, n);
211
+ * data.erase(0, n); @endcode
212
+ * After the @c read_until operation completes successfully, the string @c data
200
213
  * contains the delimiter:
201
214
  * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
202
- * The call to @c std::getline then extracts the data up to and including the
215
+ * The call to @c substr then extracts the data up to and including the
203
216
  * delimiter, so that the string @c line contains:
204
217
  * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
205
- * The remaining data is left in the buffer @c b as follows:
218
+ * After the call to @c erase, the remaining data is left in the buffer @c b as
219
+ * follows:
206
220
  * @code { 'd', 'e', ... } @endcode
207
221
  * This data may be the start of a new line, to be extracted by a subsequent
208
222
  * @c read_until operation.
209
223
  */
210
- template <typename SyncReadStream, typename Allocator>
224
+ template <typename SyncReadStream, typename DynamicBuffer>
211
225
  std::size_t read_until(SyncReadStream& s,
212
- boost::asio::basic_streambuf<Allocator>& b, const std::string& delim);
226
+ BOOST_ASIO_MOVE_ARG(DynamicBuffer) buffers,
227
+ BOOST_ASIO_STRING_VIEW_PARAM delim);
213
228
 
214
- /// Read data into a streambuf until it contains a specified delimiter.
229
+ /// Read data into a dynamic buffer sequence until it contains a specified
230
+ /// delimiter.
215
231
  /**
216
- * This function is used to read data into the specified streambuf until the
217
- * streambuf's get area contains the specified delimiter. The call will block
218
- * until one of the following conditions is true:
232
+ * This function is used to read data into the specified dynamic buffer
233
+ * sequence until the dynamic buffer sequence's get area contains the specified
234
+ * delimiter. The call will block until one of the following conditions is
235
+ * true:
219
236
  *
220
- * @li The get area of the streambuf contains the specified delimiter.
237
+ * @li The get area of the dynamic buffer sequence contains the specified
238
+ * delimiter.
221
239
  *
222
240
  * @li An error occurred.
223
241
  *
224
242
  * This operation is implemented in terms of zero or more calls to the stream's
225
- * read_some function. If the streambuf's get area already contains the
226
- * delimiter, the function returns immediately.
243
+ * read_some function. If the dynamic buffer sequence's get area already
244
+ * contains the delimiter, the function returns immediately.
227
245
  *
228
246
  * @param s The stream from which the data is to be read. The type must support
229
247
  * the SyncReadStream concept.
230
248
  *
231
- * @param b A streambuf object into which the data will be read.
249
+ * @param buffers The dynamic buffer sequence into which the data will be read.
232
250
  *
233
251
  * @param delim The delimiter string.
234
252
  *
235
253
  * @param ec Set to indicate what error occurred, if any.
236
254
  *
237
- * @returns The number of bytes in the streambuf's get area up to and including
238
- * the delimiter. Returns 0 if an error occurred.
255
+ * @returns The number of bytes in the dynamic buffer sequence's get area up to
256
+ * and including the delimiter. Returns 0 if an error occurred.
239
257
  *
240
- * @note After a successful read_until operation, the streambuf may contain
241
- * additional data beyond the delimiter. An application will typically leave
242
- * that data in the streambuf for a subsequent read_until operation to examine.
258
+ * @note After a successful read_until operation, the dynamic buffer sequence
259
+ * may contain additional data beyond the delimiter. An application will
260
+ * typically leave that data in the dynamic buffer sequence for a subsequent
261
+ * read_until operation to examine.
243
262
  */
244
- template <typename SyncReadStream, typename Allocator>
263
+ template <typename SyncReadStream, typename DynamicBuffer>
245
264
  std::size_t read_until(SyncReadStream& s,
246
- boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
265
+ BOOST_ASIO_MOVE_ARG(DynamicBuffer) buffers,
266
+ BOOST_ASIO_STRING_VIEW_PARAM delim,
247
267
  boost::system::error_code& ec);
248
268
 
269
+ #if !defined(BOOST_ASIO_NO_EXTENSIONS)
249
270
  #if defined(BOOST_ASIO_HAS_BOOST_REGEX) \
250
271
  || defined(GENERATING_DOCUMENTATION)
251
272
 
252
- /// Read data into a streambuf until some part of the data it contains matches
253
- /// a regular expression.
273
+ /// Read data into a dynamic buffer sequence until some part of the data it
274
+ /// contains matches a regular expression.
275
+ /**
276
+ * This function is used to read data into the specified dynamic buffer
277
+ * sequence until the dynamic buffer sequence's get area contains some data
278
+ * that matches a regular expression. The call will block until one of the
279
+ * following conditions is true:
280
+ *
281
+ * @li A substring of the dynamic buffer sequence's get area matches the
282
+ * regular expression.
283
+ *
284
+ * @li An error occurred.
285
+ *
286
+ * This operation is implemented in terms of zero or more calls to the stream's
287
+ * read_some function. If the dynamic buffer sequence's get area already
288
+ * contains data that matches the regular expression, the function returns
289
+ * immediately.
290
+ *
291
+ * @param s The stream from which the data is to be read. The type must support
292
+ * the SyncReadStream concept.
293
+ *
294
+ * @param buffers A dynamic buffer sequence into which the data will be read.
295
+ *
296
+ * @param expr The regular expression.
297
+ *
298
+ * @returns The number of bytes in the dynamic buffer sequence's get area up to
299
+ * and including the substring that matches the regular expression.
300
+ *
301
+ * @throws boost::system::system_error Thrown on failure.
302
+ *
303
+ * @note After a successful read_until operation, the dynamic buffer sequence
304
+ * may contain additional data beyond that which matched the regular
305
+ * expression. An application will typically leave that data in the dynamic
306
+ * buffer sequence for a subsequent read_until operation to examine.
307
+ *
308
+ * @par Example
309
+ * To read data into a @c std::string until a CR-LF sequence is encountered:
310
+ * @code std::string data;
311
+ * std::string n = boost::asio::read_until(s,
312
+ * boost::asio::dynamic_buffer(data), boost::regex("\r\n"));
313
+ * std::string line = data.substr(0, n);
314
+ * data.erase(0, n); @endcode
315
+ * After the @c read_until operation completes successfully, the string @c data
316
+ * contains the delimiter:
317
+ * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
318
+ * The call to @c substr then extracts the data up to and including the
319
+ * delimiter, so that the string @c line contains:
320
+ * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
321
+ * After the call to @c erase, the remaining data is left in the buffer @c b as
322
+ * follows:
323
+ * @code { 'd', 'e', ... } @endcode
324
+ * This data may be the start of a new line, to be extracted by a subsequent
325
+ * @c read_until operation.
326
+ */
327
+ template <typename SyncReadStream, typename DynamicBuffer>
328
+ std::size_t read_until(SyncReadStream& s,
329
+ BOOST_ASIO_MOVE_ARG(DynamicBuffer) buffers,
330
+ const boost::regex& expr);
331
+
332
+ /// Read data into a dynamic buffer sequence until some part of the data it
333
+ /// contains matches a regular expression.
334
+ /**
335
+ * This function is used to read data into the specified dynamic buffer
336
+ * sequence until the dynamic buffer sequence's get area contains some data
337
+ * that matches a regular expression. The call will block until one of the
338
+ * following conditions is true:
339
+ *
340
+ * @li A substring of the dynamic buffer sequence's get area matches the
341
+ * regular expression.
342
+ *
343
+ * @li An error occurred.
344
+ *
345
+ * This operation is implemented in terms of zero or more calls to the stream's
346
+ * read_some function. If the dynamic buffer sequence's get area already
347
+ * contains data that matches the regular expression, the function returns
348
+ * immediately.
349
+ *
350
+ * @param s The stream from which the data is to be read. The type must support
351
+ * the SyncReadStream concept.
352
+ *
353
+ * @param buffers A dynamic buffer sequence into which the data will be read.
354
+ *
355
+ * @param expr The regular expression.
356
+ *
357
+ * @param ec Set to indicate what error occurred, if any.
358
+ *
359
+ * @returns The number of bytes in the dynamic buffer sequence's get area up to
360
+ * and including the substring that matches the regular expression. Returns 0
361
+ * if an error occurred.
362
+ *
363
+ * @note After a successful read_until operation, the dynamic buffer sequence
364
+ * may contain additional data beyond that which matched the regular
365
+ * expression. An application will typically leave that data in the dynamic
366
+ * buffer sequence for a subsequent read_until operation to examine.
367
+ */
368
+ template <typename SyncReadStream, typename DynamicBuffer>
369
+ std::size_t read_until(SyncReadStream& s,
370
+ BOOST_ASIO_MOVE_ARG(DynamicBuffer) buffers,
371
+ const boost::regex& expr, boost::system::error_code& ec);
372
+
373
+ #endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
374
+ // || defined(GENERATING_DOCUMENTATION)
375
+
376
+ /// Read data into a dynamic buffer sequence until a function object indicates a
377
+ /// match.
378
+
379
+ /**
380
+ * This function is used to read data into the specified dynamic buffer
381
+ * sequence until a user-defined match condition function object, when applied
382
+ * to the data contained in the dynamic buffer sequence, indicates a successful
383
+ * match. The call will block until one of the following conditions is true:
384
+ *
385
+ * @li The match condition function object returns a std::pair where the second
386
+ * element evaluates to true.
387
+ *
388
+ * @li An error occurred.
389
+ *
390
+ * This operation is implemented in terms of zero or more calls to the stream's
391
+ * read_some function. If the match condition function object already indicates
392
+ * a match, the function returns immediately.
393
+ *
394
+ * @param s The stream from which the data is to be read. The type must support
395
+ * the SyncReadStream concept.
396
+ *
397
+ * @param buffers A dynamic buffer sequence into which the data will be read.
398
+ *
399
+ * @param match_condition The function object to be called to determine whether
400
+ * a match exists. The signature of the function object must be:
401
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
402
+ * @endcode
403
+ * where @c iterator represents the type:
404
+ * @code buffers_iterator<typename DynamicBuffer::const_buffers_type>
405
+ * @endcode
406
+ * The iterator parameters @c begin and @c end define the range of bytes to be
407
+ * scanned to determine whether there is a match. The @c first member of the
408
+ * return value is an iterator marking one-past-the-end of the bytes that have
409
+ * been consumed by the match function. This iterator is used to calculate the
410
+ * @c begin parameter for any subsequent invocation of the match condition. The
411
+ * @c second member of the return value is true if a match has been found, false
412
+ * otherwise.
413
+ *
414
+ * @returns The number of bytes in the dynamic_buffer's get area that
415
+ * have been fully consumed by the match function.
416
+ *
417
+ * @throws boost::system::system_error Thrown on failure.
418
+ *
419
+ * @note After a successful read_until operation, the dynamic buffer sequence
420
+ * may contain additional data beyond that which matched the function object.
421
+ * An application will typically leave that data in the dynamic buffer sequence
422
+ * for a subsequent read_until operation to examine.
423
+
424
+ * @note The default implementation of the @c is_match_condition type trait
425
+ * evaluates to true for function pointers and function objects with a
426
+ * @c result_type typedef. It must be specialised for other user-defined
427
+ * function objects.
428
+ *
429
+ * @par Examples
430
+ * To read data into a dynamic buffer sequence until whitespace is encountered:
431
+ * @code typedef boost::asio::buffers_iterator<
432
+ * boost::asio::const_buffers_1> iterator;
433
+ *
434
+ * std::pair<iterator, bool>
435
+ * match_whitespace(iterator begin, iterator end)
436
+ * {
437
+ * iterator i = begin;
438
+ * while (i != end)
439
+ * if (std::isspace(*i++))
440
+ * return std::make_pair(i, true);
441
+ * return std::make_pair(i, false);
442
+ * }
443
+ * ...
444
+ * std::string data;
445
+ * boost::asio::read_until(s, data, match_whitespace);
446
+ * @endcode
447
+ *
448
+ * To read data into a @c std::string until a matching character is found:
449
+ * @code class match_char
450
+ * {
451
+ * public:
452
+ * explicit match_char(char c) : c_(c) {}
453
+ *
454
+ * template <typename Iterator>
455
+ * std::pair<Iterator, bool> operator()(
456
+ * Iterator begin, Iterator end) const
457
+ * {
458
+ * Iterator i = begin;
459
+ * while (i != end)
460
+ * if (c_ == *i++)
461
+ * return std::make_pair(i, true);
462
+ * return std::make_pair(i, false);
463
+ * }
464
+ *
465
+ * private:
466
+ * char c_;
467
+ * };
468
+ *
469
+ * namespace asio {
470
+ * template <> struct is_match_condition<match_char>
471
+ * : public boost::true_type {};
472
+ * } // namespace asio
473
+ * ...
474
+ * std::string data;
475
+ * boost::asio::read_until(s, data, match_char('a'));
476
+ * @endcode
477
+ */
478
+ template <typename SyncReadStream,
479
+ typename DynamicBuffer, typename MatchCondition>
480
+ std::size_t read_until(SyncReadStream& s,
481
+ BOOST_ASIO_MOVE_ARG(DynamicBuffer) buffers,
482
+ MatchCondition match_condition,
483
+ typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
484
+
485
+ /// Read data into a dynamic buffer sequence until a function object indicates a
486
+ /// match.
487
+ /**
488
+ * This function is used to read data into the specified dynamic buffer
489
+ * sequence until a user-defined match condition function object, when applied
490
+ * to the data contained in the dynamic buffer sequence, indicates a successful
491
+ * match. The call will block until one of the following conditions is true:
492
+ *
493
+ * @li The match condition function object returns a std::pair where the second
494
+ * element evaluates to true.
495
+ *
496
+ * @li An error occurred.
497
+ *
498
+ * This operation is implemented in terms of zero or more calls to the stream's
499
+ * read_some function. If the match condition function object already indicates
500
+ * a match, the function returns immediately.
501
+ *
502
+ * @param s The stream from which the data is to be read. The type must support
503
+ * the SyncReadStream concept.
504
+ *
505
+ * @param buffers A dynamic buffer sequence into which the data will be read.
506
+ *
507
+ * @param match_condition The function object to be called to determine whether
508
+ * a match exists. The signature of the function object must be:
509
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
510
+ * @endcode
511
+ * where @c iterator represents the type:
512
+ * @code buffers_iterator<DynamicBuffer::const_buffers_type>
513
+ * @endcode
514
+ * The iterator parameters @c begin and @c end define the range of bytes to be
515
+ * scanned to determine whether there is a match. The @c first member of the
516
+ * return value is an iterator marking one-past-the-end of the bytes that have
517
+ * been consumed by the match function. This iterator is used to calculate the
518
+ * @c begin parameter for any subsequent invocation of the match condition. The
519
+ * @c second member of the return value is true if a match has been found, false
520
+ * otherwise.
521
+ *
522
+ * @param ec Set to indicate what error occurred, if any.
523
+ *
524
+ * @returns The number of bytes in the dynamic buffer sequence's get area that
525
+ * have been fully consumed by the match function. Returns 0 if an error
526
+ * occurred.
527
+ *
528
+ * @note After a successful read_until operation, the dynamic buffer sequence
529
+ * may contain additional data beyond that which matched the function object.
530
+ * An application will typically leave that data in the dynamic buffer sequence
531
+ * for a subsequent read_until operation to examine.
532
+ *
533
+ * @note The default implementation of the @c is_match_condition type trait
534
+ * evaluates to true for function pointers and function objects with a
535
+ * @c result_type typedef. It must be specialised for other user-defined
536
+ * function objects.
537
+ */
538
+ template <typename SyncReadStream,
539
+ typename DynamicBuffer, typename MatchCondition>
540
+ std::size_t read_until(SyncReadStream& s,
541
+ BOOST_ASIO_MOVE_ARG(DynamicBuffer) buffers,
542
+ MatchCondition match_condition, boost::system::error_code& ec,
543
+ typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
544
+
545
+ #if !defined(BOOST_ASIO_NO_IOSTREAM)
546
+
547
+ /// Read data into a streambuf until it contains a specified delimiter.
548
+ /**
549
+ * This function is used to read data into the specified streambuf until the
550
+ * streambuf's get area contains the specified delimiter. The call will block
551
+ * until one of the following conditions is true:
552
+ *
553
+ * @li The get area of the streambuf contains the specified delimiter.
554
+ *
555
+ * @li An error occurred.
556
+ *
557
+ * This operation is implemented in terms of zero or more calls to the stream's
558
+ * read_some function. If the streambuf's get area already contains the
559
+ * delimiter, the function returns immediately.
560
+ *
561
+ * @param s The stream from which the data is to be read. The type must support
562
+ * the SyncReadStream concept.
563
+ *
564
+ * @param b A streambuf object into which the data will be read.
565
+ *
566
+ * @param delim The delimiter character.
567
+ *
568
+ * @returns The number of bytes in the streambuf's get area up to and including
569
+ * the delimiter.
570
+ *
571
+ * @throws boost::system::system_error Thrown on failure.
572
+ *
573
+ * @note After a successful read_until operation, the streambuf may contain
574
+ * additional data beyond the delimiter. An application will typically leave
575
+ * that data in the streambuf for a subsequent read_until operation to examine.
576
+ *
577
+ * @par Example
578
+ * To read data into a streambuf until a newline is encountered:
579
+ * @code boost::asio::streambuf b;
580
+ * boost::asio::read_until(s, b, '\n');
581
+ * std::istream is(&b);
582
+ * std::string line;
583
+ * std::getline(is, line); @endcode
584
+ * After the @c read_until operation completes successfully, the buffer @c b
585
+ * contains the delimiter:
586
+ * @code { 'a', 'b', ..., 'c', '\n', 'd', 'e', ... } @endcode
587
+ * The call to @c std::getline then extracts the data up to and including the
588
+ * newline (which is discarded), so that the string @c line contains:
589
+ * @code { 'a', 'b', ..., 'c' } @endcode
590
+ * The remaining data is left in the buffer @c b as follows:
591
+ * @code { 'd', 'e', ... } @endcode
592
+ * This data may be the start of a new line, to be extracted by a subsequent
593
+ * @c read_until operation.
594
+ */
595
+ template <typename SyncReadStream, typename Allocator>
596
+ std::size_t read_until(SyncReadStream& s,
597
+ boost::asio::basic_streambuf<Allocator>& b, char delim);
598
+
599
+ /// Read data into a streambuf until it contains a specified delimiter.
600
+ /**
601
+ * This function is used to read data into the specified streambuf until the
602
+ * streambuf's get area contains the specified delimiter. The call will block
603
+ * until one of the following conditions is true:
604
+ *
605
+ * @li The get area of the streambuf contains the specified delimiter.
606
+ *
607
+ * @li An error occurred.
608
+ *
609
+ * This operation is implemented in terms of zero or more calls to the stream's
610
+ * read_some function. If the streambuf's get area already contains the
611
+ * delimiter, the function returns immediately.
612
+ *
613
+ * @param s The stream from which the data is to be read. The type must support
614
+ * the SyncReadStream concept.
615
+ *
616
+ * @param b A streambuf object into which the data will be read.
617
+ *
618
+ * @param delim The delimiter character.
619
+ *
620
+ * @param ec Set to indicate what error occurred, if any.
621
+ *
622
+ * @returns The number of bytes in the streambuf's get area up to and including
623
+ * the delimiter. Returns 0 if an error occurred.
624
+ *
625
+ * @note After a successful read_until operation, the streambuf may contain
626
+ * additional data beyond the delimiter. An application will typically leave
627
+ * that data in the streambuf for a subsequent read_until operation to examine.
628
+ */
629
+ template <typename SyncReadStream, typename Allocator>
630
+ std::size_t read_until(SyncReadStream& s,
631
+ boost::asio::basic_streambuf<Allocator>& b, char delim,
632
+ boost::system::error_code& ec);
633
+
634
+ /// Read data into a streambuf until it contains a specified delimiter.
635
+ /**
636
+ * This function is used to read data into the specified streambuf until the
637
+ * streambuf's get area contains the specified delimiter. The call will block
638
+ * until one of the following conditions is true:
639
+ *
640
+ * @li The get area of the streambuf contains the specified delimiter.
641
+ *
642
+ * @li An error occurred.
643
+ *
644
+ * This operation is implemented in terms of zero or more calls to the stream's
645
+ * read_some function. If the streambuf's get area already contains the
646
+ * delimiter, the function returns immediately.
647
+ *
648
+ * @param s The stream from which the data is to be read. The type must support
649
+ * the SyncReadStream concept.
650
+ *
651
+ * @param b A streambuf object into which the data will be read.
652
+ *
653
+ * @param delim The delimiter string.
654
+ *
655
+ * @returns The number of bytes in the streambuf's get area up to and including
656
+ * the delimiter.
657
+ *
658
+ * @throws boost::system::system_error Thrown on failure.
659
+ *
660
+ * @note After a successful read_until operation, the streambuf may contain
661
+ * additional data beyond the delimiter. An application will typically leave
662
+ * that data in the streambuf for a subsequent read_until operation to examine.
663
+ *
664
+ * @par Example
665
+ * To read data into a streambuf until a newline is encountered:
666
+ * @code boost::asio::streambuf b;
667
+ * boost::asio::read_until(s, b, "\r\n");
668
+ * std::istream is(&b);
669
+ * std::string line;
670
+ * std::getline(is, line); @endcode
671
+ * After the @c read_until operation completes successfully, the buffer @c b
672
+ * contains the delimiter:
673
+ * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
674
+ * The call to @c std::getline then extracts the data up to and including the
675
+ * newline (which is discarded), so that the string @c line contains:
676
+ * @code { 'a', 'b', ..., 'c', '\r' } @endcode
677
+ * The remaining data is left in the buffer @c b as follows:
678
+ * @code { 'd', 'e', ... } @endcode
679
+ * This data may be the start of a new line, to be extracted by a subsequent
680
+ * @c read_until operation.
681
+ */
682
+ template <typename SyncReadStream, typename Allocator>
683
+ std::size_t read_until(SyncReadStream& s,
684
+ boost::asio::basic_streambuf<Allocator>& b,
685
+ BOOST_ASIO_STRING_VIEW_PARAM delim);
686
+
687
+ /// Read data into a streambuf until it contains a specified delimiter.
688
+ /**
689
+ * This function is used to read data into the specified streambuf until the
690
+ * streambuf's get area contains the specified delimiter. The call will block
691
+ * until one of the following conditions is true:
692
+ *
693
+ * @li The get area of the streambuf contains the specified delimiter.
694
+ *
695
+ * @li An error occurred.
696
+ *
697
+ * This operation is implemented in terms of zero or more calls to the stream's
698
+ * read_some function. If the streambuf's get area already contains the
699
+ * delimiter, the function returns immediately.
700
+ *
701
+ * @param s The stream from which the data is to be read. The type must support
702
+ * the SyncReadStream concept.
703
+ *
704
+ * @param b A streambuf object into which the data will be read.
705
+ *
706
+ * @param delim The delimiter string.
707
+ *
708
+ * @param ec Set to indicate what error occurred, if any.
709
+ *
710
+ * @returns The number of bytes in the streambuf's get area up to and including
711
+ * the delimiter. Returns 0 if an error occurred.
712
+ *
713
+ * @note After a successful read_until operation, the streambuf may contain
714
+ * additional data beyond the delimiter. An application will typically leave
715
+ * that data in the streambuf for a subsequent read_until operation to examine.
716
+ */
717
+ template <typename SyncReadStream, typename Allocator>
718
+ std::size_t read_until(SyncReadStream& s,
719
+ boost::asio::basic_streambuf<Allocator>& b,
720
+ BOOST_ASIO_STRING_VIEW_PARAM delim, boost::system::error_code& ec);
721
+
722
+ #if defined(BOOST_ASIO_HAS_BOOST_REGEX) \
723
+ || defined(GENERATING_DOCUMENTATION)
724
+
725
+ /// Read data into a streambuf until some part of the data it contains matches
726
+ /// a regular expression.
727
+ /**
728
+ * This function is used to read data into the specified streambuf until the
729
+ * streambuf's get area contains some data that matches a regular expression.
730
+ * The call will block until one of the following conditions is true:
731
+ *
732
+ * @li A substring of the streambuf's get area matches the regular expression.
733
+ *
734
+ * @li An error occurred.
735
+ *
736
+ * This operation is implemented in terms of zero or more calls to the stream's
737
+ * read_some function. If the streambuf's get area already contains data that
738
+ * matches the regular expression, the function returns immediately.
739
+ *
740
+ * @param s The stream from which the data is to be read. The type must support
741
+ * the SyncReadStream concept.
742
+ *
743
+ * @param b A streambuf object into which the data will be read.
744
+ *
745
+ * @param expr The regular expression.
746
+ *
747
+ * @returns The number of bytes in the streambuf's get area up to and including
748
+ * the substring that matches the regular expression.
749
+ *
750
+ * @throws boost::system::system_error Thrown on failure.
751
+ *
752
+ * @note After a successful read_until operation, the streambuf may contain
753
+ * additional data beyond that which matched the regular expression. An
754
+ * application will typically leave that data in the streambuf for a subsequent
755
+ * read_until operation to examine.
756
+ *
757
+ * @par Example
758
+ * To read data into a streambuf until a CR-LF sequence is encountered:
759
+ * @code boost::asio::streambuf b;
760
+ * boost::asio::read_until(s, b, boost::regex("\r\n"));
761
+ * std::istream is(&b);
762
+ * std::string line;
763
+ * std::getline(is, line); @endcode
764
+ * After the @c read_until operation completes successfully, the buffer @c b
765
+ * contains the data which matched the regular expression:
766
+ * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
767
+ * The call to @c std::getline then extracts the data up to and including the
768
+ * newline (which is discarded), so that the string @c line contains:
769
+ * @code { 'a', 'b', ..., 'c', '\r' } @endcode
770
+ * The remaining data is left in the buffer @c b as follows:
771
+ * @code { 'd', 'e', ... } @endcode
772
+ * This data may be the start of a new line, to be extracted by a subsequent
773
+ * @c read_until operation.
774
+ */
775
+ template <typename SyncReadStream, typename Allocator>
776
+ std::size_t read_until(SyncReadStream& s,
777
+ boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr);
778
+
779
+ /// Read data into a streambuf until some part of the data it contains matches
780
+ /// a regular expression.
781
+ /**
782
+ * This function is used to read data into the specified streambuf until the
783
+ * streambuf's get area contains some data that matches a regular expression.
784
+ * The call will block until one of the following conditions is true:
785
+ *
786
+ * @li A substring of the streambuf's get area matches the regular expression.
787
+ *
788
+ * @li An error occurred.
789
+ *
790
+ * This operation is implemented in terms of zero or more calls to the stream's
791
+ * read_some function. If the streambuf's get area already contains data that
792
+ * matches the regular expression, the function returns immediately.
793
+ *
794
+ * @param s The stream from which the data is to be read. The type must support
795
+ * the SyncReadStream concept.
796
+ *
797
+ * @param b A streambuf object into which the data will be read.
798
+ *
799
+ * @param expr The regular expression.
800
+ *
801
+ * @param ec Set to indicate what error occurred, if any.
802
+ *
803
+ * @returns The number of bytes in the streambuf's get area up to and including
804
+ * the substring that matches the regular expression. Returns 0 if an error
805
+ * occurred.
806
+ *
807
+ * @note After a successful read_until operation, the streambuf may contain
808
+ * additional data beyond that which matched the regular expression. An
809
+ * application will typically leave that data in the streambuf for a subsequent
810
+ * read_until operation to examine.
811
+ */
812
+ template <typename SyncReadStream, typename Allocator>
813
+ std::size_t read_until(SyncReadStream& s,
814
+ boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
815
+ boost::system::error_code& ec);
816
+
817
+ #endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
818
+ // || defined(GENERATING_DOCUMENTATION)
819
+
820
+ /// Read data into a streambuf until a function object indicates a match.
821
+ /**
822
+ * This function is used to read data into the specified streambuf until a
823
+ * user-defined match condition function object, when applied to the data
824
+ * contained in the streambuf, indicates a successful match. The call will
825
+ * block until one of the following conditions is true:
826
+ *
827
+ * @li The match condition function object returns a std::pair where the second
828
+ * element evaluates to true.
829
+ *
830
+ * @li An error occurred.
831
+ *
832
+ * This operation is implemented in terms of zero or more calls to the stream's
833
+ * read_some function. If the match condition function object already indicates
834
+ * a match, the function returns immediately.
835
+ *
836
+ * @param s The stream from which the data is to be read. The type must support
837
+ * the SyncReadStream concept.
838
+ *
839
+ * @param b A streambuf object into which the data will be read.
840
+ *
841
+ * @param match_condition The function object to be called to determine whether
842
+ * a match exists. The signature of the function object must be:
843
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
844
+ * @endcode
845
+ * where @c iterator represents the type:
846
+ * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
847
+ * @endcode
848
+ * The iterator parameters @c begin and @c end define the range of bytes to be
849
+ * scanned to determine whether there is a match. The @c first member of the
850
+ * return value is an iterator marking one-past-the-end of the bytes that have
851
+ * been consumed by the match function. This iterator is used to calculate the
852
+ * @c begin parameter for any subsequent invocation of the match condition. The
853
+ * @c second member of the return value is true if a match has been found, false
854
+ * otherwise.
855
+ *
856
+ * @returns The number of bytes in the streambuf's get area that have been fully
857
+ * consumed by the match function.
858
+ *
859
+ * @throws boost::system::system_error Thrown on failure.
860
+ *
861
+ * @note After a successful read_until operation, the streambuf may contain
862
+ * additional data beyond that which matched the function object. An application
863
+ * will typically leave that data in the streambuf for a subsequent read_until
864
+ * operation to examine.
865
+ *
866
+ * @note The default implementation of the @c is_match_condition type trait
867
+ * evaluates to true for function pointers and function objects with a
868
+ * @c result_type typedef. It must be specialised for other user-defined
869
+ * function objects.
870
+ *
871
+ * @par Examples
872
+ * To read data into a streambuf until whitespace is encountered:
873
+ * @code typedef boost::asio::buffers_iterator<
874
+ * boost::asio::streambuf::const_buffers_type> iterator;
875
+ *
876
+ * std::pair<iterator, bool>
877
+ * match_whitespace(iterator begin, iterator end)
878
+ * {
879
+ * iterator i = begin;
880
+ * while (i != end)
881
+ * if (std::isspace(*i++))
882
+ * return std::make_pair(i, true);
883
+ * return std::make_pair(i, false);
884
+ * }
885
+ * ...
886
+ * boost::asio::streambuf b;
887
+ * boost::asio::read_until(s, b, match_whitespace);
888
+ * @endcode
889
+ *
890
+ * To read data into a streambuf until a matching character is found:
891
+ * @code class match_char
892
+ * {
893
+ * public:
894
+ * explicit match_char(char c) : c_(c) {}
895
+ *
896
+ * template <typename Iterator>
897
+ * std::pair<Iterator, bool> operator()(
898
+ * Iterator begin, Iterator end) const
899
+ * {
900
+ * Iterator i = begin;
901
+ * while (i != end)
902
+ * if (c_ == *i++)
903
+ * return std::make_pair(i, true);
904
+ * return std::make_pair(i, false);
905
+ * }
906
+ *
907
+ * private:
908
+ * char c_;
909
+ * };
910
+ *
911
+ * namespace asio {
912
+ * template <> struct is_match_condition<match_char>
913
+ * : public boost::true_type {};
914
+ * } // namespace asio
915
+ * ...
916
+ * boost::asio::streambuf b;
917
+ * boost::asio::read_until(s, b, match_char('a'));
918
+ * @endcode
919
+ */
920
+ template <typename SyncReadStream, typename Allocator, typename MatchCondition>
921
+ std::size_t read_until(SyncReadStream& s,
922
+ boost::asio::basic_streambuf<Allocator>& b, MatchCondition match_condition,
923
+ typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
924
+
925
+ /// Read data into a streambuf until a function object indicates a match.
926
+ /**
927
+ * This function is used to read data into the specified streambuf until a
928
+ * user-defined match condition function object, when applied to the data
929
+ * contained in the streambuf, indicates a successful match. The call will
930
+ * block until one of the following conditions is true:
931
+ *
932
+ * @li The match condition function object returns a std::pair where the second
933
+ * element evaluates to true.
934
+ *
935
+ * @li An error occurred.
936
+ *
937
+ * This operation is implemented in terms of zero or more calls to the stream's
938
+ * read_some function. If the match condition function object already indicates
939
+ * a match, the function returns immediately.
940
+ *
941
+ * @param s The stream from which the data is to be read. The type must support
942
+ * the SyncReadStream concept.
943
+ *
944
+ * @param b A streambuf object into which the data will be read.
945
+ *
946
+ * @param match_condition The function object to be called to determine whether
947
+ * a match exists. The signature of the function object must be:
948
+ * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
949
+ * @endcode
950
+ * where @c iterator represents the type:
951
+ * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
952
+ * @endcode
953
+ * The iterator parameters @c begin and @c end define the range of bytes to be
954
+ * scanned to determine whether there is a match. The @c first member of the
955
+ * return value is an iterator marking one-past-the-end of the bytes that have
956
+ * been consumed by the match function. This iterator is used to calculate the
957
+ * @c begin parameter for any subsequent invocation of the match condition. The
958
+ * @c second member of the return value is true if a match has been found, false
959
+ * otherwise.
960
+ *
961
+ * @param ec Set to indicate what error occurred, if any.
962
+ *
963
+ * @returns The number of bytes in the streambuf's get area that have been fully
964
+ * consumed by the match function. Returns 0 if an error occurred.
965
+ *
966
+ * @note After a successful read_until operation, the streambuf may contain
967
+ * additional data beyond that which matched the function object. An application
968
+ * will typically leave that data in the streambuf for a subsequent read_until
969
+ * operation to examine.
970
+ *
971
+ * @note The default implementation of the @c is_match_condition type trait
972
+ * evaluates to true for function pointers and function objects with a
973
+ * @c result_type typedef. It must be specialised for other user-defined
974
+ * function objects.
975
+ */
976
+ template <typename SyncReadStream, typename Allocator, typename MatchCondition>
977
+ std::size_t read_until(SyncReadStream& s,
978
+ boost::asio::basic_streambuf<Allocator>& b,
979
+ MatchCondition match_condition, boost::system::error_code& ec,
980
+ typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
981
+
982
+ #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
983
+ #endif // !defined(BOOST_ASIO_NO_EXTENSIONS)
984
+
985
+ /*@}*/
986
+ /**
987
+ * @defgroup async_read_until boost::asio::async_read_until
988
+ *
989
+ * @brief Start an asynchronous operation to read data into a dynamic buffer
990
+ * sequence, or into a streambuf, until it contains a delimiter, matches a
991
+ * regular expression, or a function object indicates a match.
992
+ */
993
+ /*@{*/
994
+
995
+ /// Start an asynchronous operation to read data into a dynamic buffer sequence
996
+ /// until it contains a specified delimiter.
997
+ /**
998
+ * This function is used to asynchronously read data into the specified dynamic
999
+ * buffer sequence until the dynamic buffer sequence's get area contains the
1000
+ * specified delimiter. The function call always returns immediately. The
1001
+ * asynchronous operation will continue until one of the following conditions
1002
+ * is true:
1003
+ *
1004
+ * @li The get area of the dynamic buffer sequence contains the specified
1005
+ * delimiter.
1006
+ *
1007
+ * @li An error occurred.
1008
+ *
1009
+ * This operation is implemented in terms of zero or more calls to the stream's
1010
+ * async_read_some function, and is known as a <em>composed operation</em>. If
1011
+ * the dynamic buffer sequence's get area already contains the delimiter, this
1012
+ * asynchronous operation completes immediately. The program must ensure that
1013
+ * the stream performs no other read operations (such as async_read,
1014
+ * async_read_until, the stream's async_read_some function, or any other
1015
+ * composed operations that perform reads) until this operation completes.
1016
+ *
1017
+ * @param s The stream from which the data is to be read. The type must support
1018
+ * the AsyncReadStream concept.
1019
+ *
1020
+ * @param buffers The dynamic buffer sequence into which the data will be read.
1021
+ * Although the buffers object may be copied as necessary, ownership of the
1022
+ * underlying memory blocks is retained by the caller, which must guarantee
1023
+ * that they remain valid until the handler is called.
1024
+ *
1025
+ * @param delim The delimiter character.
1026
+ *
1027
+ * @param handler The handler to be called when the read operation completes.
1028
+ * Copies will be made of the handler as required. The function signature of the
1029
+ * handler must be:
1030
+ * @code void handler(
1031
+ * // Result of operation.
1032
+ * const boost::system::error_code& error,
1033
+ *
1034
+ * // The number of bytes in the dynamic buffer sequence's
1035
+ * // get area up to and including the delimiter.
1036
+ * // 0 if an error occurred.
1037
+ * std::size_t bytes_transferred
1038
+ * ); @endcode
1039
+ * Regardless of whether the asynchronous operation completes immediately or
1040
+ * not, the handler will not be invoked from within this function. Invocation of
1041
+ * the handler will be performed in a manner equivalent to using
1042
+ * boost::asio::io_context::post().
1043
+ *
1044
+ * @note After a successful async_read_until operation, the dynamic buffer
1045
+ * sequence may contain additional data beyond the delimiter. An application
1046
+ * will typically leave that data in the dynamic buffer sequence for a
1047
+ * subsequent async_read_until operation to examine.
1048
+ *
1049
+ * @par Example
1050
+ * To asynchronously read data into a @c std::string until a newline is
1051
+ * encountered:
1052
+ * @code std::string data;
1053
+ * ...
1054
+ * void handler(const boost::system::error_code& e, std::size_t size)
1055
+ * {
1056
+ * if (!e)
1057
+ * {
1058
+ * std::string line = data.substr(0, n);
1059
+ * data.erase(0, n);
1060
+ * ...
1061
+ * }
1062
+ * }
1063
+ * ...
1064
+ * boost::asio::async_read_until(s, data, '\n', handler); @endcode
1065
+ * After the @c async_read_until operation completes successfully, the buffer
1066
+ * @c data contains the delimiter:
1067
+ * @code { 'a', 'b', ..., 'c', '\n', 'd', 'e', ... } @endcode
1068
+ * The call to @c substr then extracts the data up to and including the
1069
+ * delimiter, so that the string @c line contains:
1070
+ * @code { 'a', 'b', ..., 'c', '\n' } @endcode
1071
+ * After the call to @c erase, the remaining data is left in the buffer @c data
1072
+ * as follows:
1073
+ * @code { 'd', 'e', ... } @endcode
1074
+ * This data may be the start of a new line, to be extracted by a subsequent
1075
+ * @c async_read_until operation.
1076
+ */
1077
+ template <typename AsyncReadStream,
1078
+ typename DynamicBuffer, typename ReadHandler>
1079
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
1080
+ void (boost::system::error_code, std::size_t))
1081
+ async_read_until(AsyncReadStream& s,
1082
+ BOOST_ASIO_MOVE_ARG(DynamicBuffer) buffers,
1083
+ char delim, BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
1084
+
1085
+ /// Start an asynchronous operation to read data into a dynamic buffer sequence
1086
+ /// until it contains a specified delimiter.
254
1087
  /**
255
- * This function is used to read data into the specified streambuf until the
256
- * streambuf's get area contains some data that matches a regular expression.
257
- * The call will block until one of the following conditions is true:
1088
+ * This function is used to asynchronously read data into the specified dynamic
1089
+ * buffer sequence until the dynamic buffer sequence's get area contains the
1090
+ * specified delimiter. The function call always returns immediately. The
1091
+ * asynchronous operation will continue until one of the following conditions
1092
+ * is true:
258
1093
  *
259
- * @li A substring of the streambuf's get area matches the regular expression.
1094
+ * @li The get area of the dynamic buffer sequence contains the specified
1095
+ * delimiter.
260
1096
  *
261
1097
  * @li An error occurred.
262
1098
  *
263
1099
  * This operation is implemented in terms of zero or more calls to the stream's
264
- * read_some function. If the streambuf's get area already contains data that
265
- * matches the regular expression, the function returns immediately.
1100
+ * async_read_some function, and is known as a <em>composed operation</em>. If
1101
+ * the dynamic buffer sequence's get area already contains the delimiter, this
1102
+ * asynchronous operation completes immediately. The program must ensure that
1103
+ * the stream performs no other read operations (such as async_read,
1104
+ * async_read_until, the stream's async_read_some function, or any other
1105
+ * composed operations that perform reads) until this operation completes.
266
1106
  *
267
1107
  * @param s The stream from which the data is to be read. The type must support
268
- * the SyncReadStream concept.
1108
+ * the AsyncReadStream concept.
269
1109
  *
270
- * @param b A streambuf object into which the data will be read.
1110
+ * @param buffers The dynamic buffer sequence into which the data will be read.
1111
+ * Although the buffers object may be copied as necessary, ownership of the
1112
+ * underlying memory blocks is retained by the caller, which must guarantee
1113
+ * that they remain valid until the handler is called.
271
1114
  *
272
- * @param expr The regular expression.
1115
+ * @param delim The delimiter string.
273
1116
  *
274
- * @returns The number of bytes in the streambuf's get area up to and including
275
- * the substring that matches the regular expression.
1117
+ * @param handler The handler to be called when the read operation completes.
1118
+ * Copies will be made of the handler as required. The function signature of the
1119
+ * handler must be:
1120
+ * @code void handler(
1121
+ * // Result of operation.
1122
+ * const boost::system::error_code& error,
276
1123
  *
277
- * @throws boost::system::system_error Thrown on failure.
1124
+ * // The number of bytes in the dynamic buffer sequence's
1125
+ * // get area up to and including the delimiter.
1126
+ * // 0 if an error occurred.
1127
+ * std::size_t bytes_transferred
1128
+ * ); @endcode
1129
+ * Regardless of whether the asynchronous operation completes immediately or
1130
+ * not, the handler will not be invoked from within this function. Invocation of
1131
+ * the handler will be performed in a manner equivalent to using
1132
+ * boost::asio::io_context::post().
278
1133
  *
279
- * @note After a successful read_until operation, the streambuf may contain
280
- * additional data beyond that which matched the regular expression. An
281
- * application will typically leave that data in the streambuf for a subsequent
282
- * read_until operation to examine.
1134
+ * @note After a successful async_read_until operation, the dynamic buffer
1135
+ * sequence may contain additional data beyond the delimiter. An application
1136
+ * will typically leave that data in the dynamic buffer sequence for a
1137
+ * subsequent async_read_until operation to examine.
283
1138
  *
284
1139
  * @par Example
285
- * To read data into a streambuf until a CR-LF sequence is encountered:
286
- * @code boost::asio::streambuf b;
287
- * boost::asio::read_until(s, b, boost::regex("\r\n"));
288
- * std::istream is(&b);
289
- * std::string line;
290
- * std::getline(is, line); @endcode
291
- * After the @c read_until operation completes successfully, the buffer @c b
292
- * contains the data which matched the regular expression:
1140
+ * To asynchronously read data into a @c std::string until a CR-LF sequence is
1141
+ * encountered:
1142
+ * @code std::string data;
1143
+ * ...
1144
+ * void handler(const boost::system::error_code& e, std::size_t size)
1145
+ * {
1146
+ * if (!e)
1147
+ * {
1148
+ * std::string line = data.substr(0, n);
1149
+ * data.erase(0, n);
1150
+ * ...
1151
+ * }
1152
+ * }
1153
+ * ...
1154
+ * boost::asio::async_read_until(s, data, "\r\n", handler); @endcode
1155
+ * After the @c async_read_until operation completes successfully, the string
1156
+ * @c data contains the delimiter:
293
1157
  * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
294
- * The call to @c std::getline then extracts the data up to and including the
295
- * match, so that the string @c line contains:
1158
+ * The call to @c substr then extracts the data up to and including the
1159
+ * delimiter, so that the string @c line contains:
296
1160
  * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
297
- * The remaining data is left in the buffer @c b as follows:
1161
+ * After the call to @c erase, the remaining data is left in the string @c data
1162
+ * as follows:
298
1163
  * @code { 'd', 'e', ... } @endcode
299
1164
  * This data may be the start of a new line, to be extracted by a subsequent
300
- * @c read_until operation.
1165
+ * @c async_read_until operation.
301
1166
  */
302
- template <typename SyncReadStream, typename Allocator>
303
- std::size_t read_until(SyncReadStream& s,
304
- boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr);
1167
+ template <typename AsyncReadStream,
1168
+ typename DynamicBuffer, typename ReadHandler>
1169
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
1170
+ void (boost::system::error_code, std::size_t))
1171
+ async_read_until(AsyncReadStream& s,
1172
+ BOOST_ASIO_MOVE_ARG(DynamicBuffer) buffers,
1173
+ BOOST_ASIO_STRING_VIEW_PARAM delim,
1174
+ BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
305
1175
 
306
- /// Read data into a streambuf until some part of the data it contains matches
307
- /// a regular expression.
1176
+ #if !defined(BOOST_ASIO_NO_EXTENSIONS)
1177
+ #if defined(BOOST_ASIO_HAS_BOOST_REGEX) \
1178
+ || defined(GENERATING_DOCUMENTATION)
1179
+
1180
+ /// Start an asynchronous operation to read data into a dynamic buffer sequence
1181
+ /// until some part of its data matches a regular expression.
308
1182
  /**
309
- * This function is used to read data into the specified streambuf until the
310
- * streambuf's get area contains some data that matches a regular expression.
311
- * The call will block until one of the following conditions is true:
1183
+ * This function is used to asynchronously read data into the specified dynamic
1184
+ * buffer sequence until the dynamic buffer sequence's get area contains some
1185
+ * data that matches a regular expression. The function call always returns
1186
+ * immediately. The asynchronous operation will continue until one of the
1187
+ * following conditions is true:
312
1188
  *
313
- * @li A substring of the streambuf's get area matches the regular expression.
1189
+ * @li A substring of the dynamic buffer sequence's get area matches the regular
1190
+ * expression.
314
1191
  *
315
1192
  * @li An error occurred.
316
1193
  *
317
1194
  * This operation is implemented in terms of zero or more calls to the stream's
318
- * read_some function. If the streambuf's get area already contains data that
319
- * matches the regular expression, the function returns immediately.
1195
+ * async_read_some function, and is known as a <em>composed operation</em>. If
1196
+ * the dynamic buffer sequence's get area already contains data that matches
1197
+ * the regular expression, this asynchronous operation completes immediately.
1198
+ * The program must ensure that the stream performs no other read operations
1199
+ * (such as async_read, async_read_until, the stream's async_read_some
1200
+ * function, or any other composed operations that perform reads) until this
1201
+ * operation completes.
320
1202
  *
321
1203
  * @param s The stream from which the data is to be read. The type must support
322
- * the SyncReadStream concept.
1204
+ * the AsyncReadStream concept.
323
1205
  *
324
- * @param b A streambuf object into which the data will be read.
1206
+ * @param buffers The dynamic buffer sequence into which the data will be read.
1207
+ * Although the buffers object may be copied as necessary, ownership of the
1208
+ * underlying memory blocks is retained by the caller, which must guarantee
1209
+ * that they remain valid until the handler is called.
325
1210
  *
326
1211
  * @param expr The regular expression.
327
1212
  *
328
- * @param ec Set to indicate what error occurred, if any.
1213
+ * @param handler The handler to be called when the read operation completes.
1214
+ * Copies will be made of the handler as required. The function signature of the
1215
+ * handler must be:
1216
+ * @code void handler(
1217
+ * // Result of operation.
1218
+ * const boost::system::error_code& error,
329
1219
  *
330
- * @returns The number of bytes in the streambuf's get area up to and including
331
- * the substring that matches the regular expression. Returns 0 if an error
332
- * occurred.
1220
+ * // The number of bytes in the dynamic buffer
1221
+ * // sequence's get area up to and including the
1222
+ * // substring that matches the regular expression.
1223
+ * // 0 if an error occurred.
1224
+ * std::size_t bytes_transferred
1225
+ * ); @endcode
1226
+ * Regardless of whether the asynchronous operation completes immediately or
1227
+ * not, the handler will not be invoked from within this function. Invocation of
1228
+ * the handler will be performed in a manner equivalent to using
1229
+ * boost::asio::io_context::post().
333
1230
  *
334
- * @note After a successful read_until operation, the streambuf may contain
335
- * additional data beyond that which matched the regular expression. An
336
- * application will typically leave that data in the streambuf for a subsequent
337
- * read_until operation to examine.
1231
+ * @note After a successful async_read_until operation, the dynamic buffer
1232
+ * sequence may contain additional data beyond that which matched the regular
1233
+ * expression. An application will typically leave that data in the dynamic
1234
+ * buffer sequence for a subsequent async_read_until operation to examine.
1235
+ *
1236
+ * @par Example
1237
+ * To asynchronously read data into a @c std::string until a CR-LF sequence is
1238
+ * encountered:
1239
+ * @code std::string data;
1240
+ * ...
1241
+ * void handler(const boost::system::error_code& e, std::size_t size)
1242
+ * {
1243
+ * if (!e)
1244
+ * {
1245
+ * std::string line = data.substr(0, n);
1246
+ * data.erase(0, n);
1247
+ * ...
1248
+ * }
1249
+ * }
1250
+ * ...
1251
+ * boost::asio::async_read_until(s, data,
1252
+ * boost::regex("\r\n"), handler); @endcode
1253
+ * After the @c async_read_until operation completes successfully, the string
1254
+ * @c data contains the data which matched the regular expression:
1255
+ * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
1256
+ * The call to @c substr then extracts the data up to and including the match,
1257
+ * so that the string @c line contains:
1258
+ * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
1259
+ * After the call to @c erase, the remaining data is left in the string @c data
1260
+ * as follows:
1261
+ * @code { 'd', 'e', ... } @endcode
1262
+ * This data may be the start of a new line, to be extracted by a subsequent
1263
+ * @c async_read_until operation.
338
1264
  */
339
- template <typename SyncReadStream, typename Allocator>
340
- std::size_t read_until(SyncReadStream& s,
341
- boost::asio::basic_streambuf<Allocator>& b, const boost::regex& expr,
342
- boost::system::error_code& ec);
1265
+ template <typename AsyncReadStream,
1266
+ typename DynamicBuffer, typename ReadHandler>
1267
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
1268
+ void (boost::system::error_code, std::size_t))
1269
+ async_read_until(AsyncReadStream& s,
1270
+ BOOST_ASIO_MOVE_ARG(DynamicBuffer) buffers,
1271
+ const boost::regex& expr,
1272
+ BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
343
1273
 
344
1274
  #endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
345
1275
  // || defined(GENERATING_DOCUMENTATION)
346
1276
 
347
- /// Read data into a streambuf until a function object indicates a match.
1277
+ /// Start an asynchronous operation to read data into a dynamic buffer sequence
1278
+ /// until a function object indicates a match.
348
1279
  /**
349
- * This function is used to read data into the specified streambuf until a
350
- * user-defined match condition function object, when applied to the data
351
- * contained in the streambuf, indicates a successful match. The call will
352
- * block until one of the following conditions is true:
1280
+ * This function is used to asynchronously read data into the specified dynamic
1281
+ * buffer sequence until a user-defined match condition function object, when
1282
+ * applied to the data contained in the dynamic buffer sequence, indicates a
1283
+ * successful match. The function call always returns immediately. The
1284
+ * asynchronous operation will continue until one of the following conditions
1285
+ * is true:
353
1286
  *
354
1287
  * @li The match condition function object returns a std::pair where the second
355
1288
  * element evaluates to true.
@@ -357,20 +1290,27 @@ std::size_t read_until(SyncReadStream& s,
357
1290
  * @li An error occurred.
358
1291
  *
359
1292
  * This operation is implemented in terms of zero or more calls to the stream's
360
- * read_some function. If the match condition function object already indicates
361
- * a match, the function returns immediately.
1293
+ * async_read_some function, and is known as a <em>composed operation</em>. If
1294
+ * the match condition function object already indicates a match, this
1295
+ * asynchronous operation completes immediately. The program must ensure that
1296
+ * the stream performs no other read operations (such as async_read,
1297
+ * async_read_until, the stream's async_read_some function, or any other
1298
+ * composed operations that perform reads) until this operation completes.
362
1299
  *
363
1300
  * @param s The stream from which the data is to be read. The type must support
364
- * the SyncReadStream concept.
1301
+ * the AsyncReadStream concept.
365
1302
  *
366
- * @param b A streambuf object into which the data will be read.
1303
+ * @param buffers The dynamic buffer sequence into which the data will be read.
1304
+ * Although the buffers object may be copied as necessary, ownership of the
1305
+ * underlying memory blocks is retained by the caller, which must guarantee
1306
+ * that they remain valid until the handler is called.
367
1307
  *
368
1308
  * @param match_condition The function object to be called to determine whether
369
1309
  * a match exists. The signature of the function object must be:
370
1310
  * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
371
1311
  * @endcode
372
1312
  * where @c iterator represents the type:
373
- * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
1313
+ * @code buffers_iterator<typename DynamicBuffer::const_buffers_type>
374
1314
  * @endcode
375
1315
  * The iterator parameters @c begin and @c end define the range of bytes to be
376
1316
  * scanned to determine whether there is a match. The @c first member of the
@@ -380,14 +1320,27 @@ std::size_t read_until(SyncReadStream& s,
380
1320
  * @c second member of the return value is true if a match has been found, false
381
1321
  * otherwise.
382
1322
  *
383
- * @returns The number of bytes in the streambuf's get area that have been fully
384
- * consumed by the match function.
1323
+ * @param handler The handler to be called when the read operation completes.
1324
+ * Copies will be made of the handler as required. The function signature of the
1325
+ * handler must be:
1326
+ * @code void handler(
1327
+ * // Result of operation.
1328
+ * const boost::system::error_code& error,
385
1329
  *
386
- * @throws boost::system::system_error Thrown on failure.
1330
+ * // The number of bytes in the dynamic buffer sequence's
1331
+ * // get area that have been fully consumed by the match
1332
+ * // function. O if an error occurred.
1333
+ * std::size_t bytes_transferred
1334
+ * ); @endcode
1335
+ * Regardless of whether the asynchronous operation completes immediately or
1336
+ * not, the handler will not be invoked from within this function. Invocation of
1337
+ * the handler will be performed in a manner equivalent to using
1338
+ * boost::asio::io_context::post().
387
1339
  *
388
- * @note After a successful read_until operation, the streambuf may contain
389
- * additional data beyond that which matched the function object. An application
390
- * will typically leave that data in the streambuf for a subsequent
1340
+ * @note After a successful async_read_until operation, the dynamic buffer
1341
+ * sequence may contain additional data beyond that which matched the function
1342
+ * object. An application will typically leave that data in the dynamic buffer
1343
+ * sequence for a subsequent async_read_until operation to examine.
391
1344
  *
392
1345
  * @note The default implementation of the @c is_match_condition type trait
393
1346
  * evaluates to true for function pointers and function objects with a
@@ -395,9 +1348,10 @@ std::size_t read_until(SyncReadStream& s,
395
1348
  * function objects.
396
1349
  *
397
1350
  * @par Examples
398
- * To read data into a streambuf until whitespace is encountered:
1351
+ * To asynchronously read data into a @c std::string until whitespace is
1352
+ * encountered:
399
1353
  * @code typedef boost::asio::buffers_iterator<
400
- * boost::asio::streambuf::const_buffers_type> iterator;
1354
+ * boost::asio::const_buffers_1> iterator;
401
1355
  *
402
1356
  * std::pair<iterator, bool>
403
1357
  * match_whitespace(iterator begin, iterator end)
@@ -409,11 +1363,14 @@ std::size_t read_until(SyncReadStream& s,
409
1363
  * return std::make_pair(i, false);
410
1364
  * }
411
1365
  * ...
412
- * boost::asio::streambuf b;
413
- * boost::asio::read_until(s, b, match_whitespace);
1366
+ * void handler(const boost::system::error_code& e, std::size_t size);
1367
+ * ...
1368
+ * std::string data;
1369
+ * boost::asio::async_read_until(s, data, match_whitespace, handler);
414
1370
  * @endcode
415
1371
  *
416
- * To read data into a streambuf until a matching character is found:
1372
+ * To asynchronously read data into a @c std::string until a matching character
1373
+ * is found:
417
1374
  * @code class match_char
418
1375
  * {
419
1376
  * public:
@@ -439,80 +1396,22 @@ std::size_t read_until(SyncReadStream& s,
439
1396
  * : public boost::true_type {};
440
1397
  * } // namespace asio
441
1398
  * ...
442
- * boost::asio::streambuf b;
443
- * boost::asio::read_until(s, b, match_char('a'));
444
- * @endcode
445
- */
446
- template <typename SyncReadStream, typename Allocator, typename MatchCondition>
447
- std::size_t read_until(SyncReadStream& s,
448
- boost::asio::basic_streambuf<Allocator>& b, MatchCondition match_condition,
449
- typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
450
-
451
- /// Read data into a streambuf until a function object indicates a match.
452
- /**
453
- * This function is used to read data into the specified streambuf until a
454
- * user-defined match condition function object, when applied to the data
455
- * contained in the streambuf, indicates a successful match. The call will
456
- * block until one of the following conditions is true:
457
- *
458
- * @li The match condition function object returns a std::pair where the second
459
- * element evaluates to true.
460
- *
461
- * @li An error occurred.
462
- *
463
- * This operation is implemented in terms of zero or more calls to the stream's
464
- * read_some function. If the match condition function object already indicates
465
- * a match, the function returns immediately.
466
- *
467
- * @param s The stream from which the data is to be read. The type must support
468
- * the SyncReadStream concept.
469
- *
470
- * @param b A streambuf object into which the data will be read.
471
- *
472
- * @param match_condition The function object to be called to determine whether
473
- * a match exists. The signature of the function object must be:
474
- * @code pair<iterator, bool> match_condition(iterator begin, iterator end);
475
- * @endcode
476
- * where @c iterator represents the type:
477
- * @code buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
1399
+ * void handler(const boost::system::error_code& e, std::size_t size);
1400
+ * ...
1401
+ * std::string data;
1402
+ * boost::asio::async_read_until(s, data, match_char('a'), handler);
478
1403
  * @endcode
479
- * The iterator parameters @c begin and @c end define the range of bytes to be
480
- * scanned to determine whether there is a match. The @c first member of the
481
- * return value is an iterator marking one-past-the-end of the bytes that have
482
- * been consumed by the match function. This iterator is used to calculate the
483
- * @c begin parameter for any subsequent invocation of the match condition. The
484
- * @c second member of the return value is true if a match has been found, false
485
- * otherwise.
486
- *
487
- * @param ec Set to indicate what error occurred, if any.
488
- *
489
- * @returns The number of bytes in the streambuf's get area that have been fully
490
- * consumed by the match function. Returns 0 if an error occurred.
491
- *
492
- * @note After a successful read_until operation, the streambuf may contain
493
- * additional data beyond that which matched the function object. An application
494
- * will typically leave that data in the streambuf for a subsequent
495
- *
496
- * @note The default implementation of the @c is_match_condition type trait
497
- * evaluates to true for function pointers and function objects with a
498
- * @c result_type typedef. It must be specialised for other user-defined
499
- * function objects.
500
1404
  */
501
- template <typename SyncReadStream, typename Allocator, typename MatchCondition>
502
- std::size_t read_until(SyncReadStream& s,
503
- boost::asio::basic_streambuf<Allocator>& b,
504
- MatchCondition match_condition, boost::system::error_code& ec,
1405
+ template <typename AsyncReadStream, typename DynamicBuffer,
1406
+ typename MatchCondition, typename ReadHandler>
1407
+ BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
1408
+ void (boost::system::error_code, std::size_t))
1409
+ async_read_until(AsyncReadStream& s,
1410
+ BOOST_ASIO_MOVE_ARG(DynamicBuffer) buffers,
1411
+ MatchCondition match_condition, BOOST_ASIO_MOVE_ARG(ReadHandler) handler,
505
1412
  typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
506
1413
 
507
- /*@}*/
508
- /**
509
- * @defgroup async_read_until boost::asio::async_read_until
510
- *
511
- * @brief Start an asynchronous operation to read data into a streambuf until it
512
- * contains a delimiter, matches a regular expression, or a function object
513
- * indicates a match.
514
- */
515
- /*@{*/
1414
+ #if !defined(BOOST_ASIO_NO_IOSTREAM)
516
1415
 
517
1416
  /// Start an asynchronous operation to read data into a streambuf until it
518
1417
  /// contains a specified delimiter.
@@ -558,7 +1457,7 @@ std::size_t read_until(SyncReadStream& s,
558
1457
  * Regardless of whether the asynchronous operation completes immediately or
559
1458
  * not, the handler will not be invoked from within this function. Invocation of
560
1459
  * the handler will be performed in a manner equivalent to using
561
- * boost::asio::io_service::post().
1460
+ * boost::asio::io_context::post().
562
1461
  *
563
1462
  * @note After a successful async_read_until operation, the streambuf may
564
1463
  * contain additional data beyond the delimiter. An application will typically
@@ -585,8 +1484,8 @@ std::size_t read_until(SyncReadStream& s,
585
1484
  * @c b contains the delimiter:
586
1485
  * @code { 'a', 'b', ..., 'c', '\n', 'd', 'e', ... } @endcode
587
1486
  * The call to @c std::getline then extracts the data up to and including the
588
- * delimiter, so that the string @c line contains:
589
- * @code { 'a', 'b', ..., 'c', '\n' } @endcode
1487
+ * newline (which is discarded), so that the string @c line contains:
1488
+ * @code { 'a', 'b', ..., 'c' } @endcode
590
1489
  * The remaining data is left in the buffer @c b as follows:
591
1490
  * @code { 'd', 'e', ... } @endcode
592
1491
  * This data may be the start of a new line, to be extracted by a subsequent
@@ -643,7 +1542,7 @@ async_read_until(AsyncReadStream& s,
643
1542
  * Regardless of whether the asynchronous operation completes immediately or
644
1543
  * not, the handler will not be invoked from within this function. Invocation of
645
1544
  * the handler will be performed in a manner equivalent to using
646
- * boost::asio::io_service::post().
1545
+ * boost::asio::io_context::post().
647
1546
  *
648
1547
  * @note After a successful async_read_until operation, the streambuf may
649
1548
  * contain additional data beyond the delimiter. An application will typically
@@ -670,8 +1569,8 @@ async_read_until(AsyncReadStream& s,
670
1569
  * @c b contains the delimiter:
671
1570
  * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
672
1571
  * The call to @c std::getline then extracts the data up to and including the
673
- * delimiter, so that the string @c line contains:
674
- * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
1572
+ * newline (which is discarded), so that the string @c line contains:
1573
+ * @code { 'a', 'b', ..., 'c', '\r' } @endcode
675
1574
  * The remaining data is left in the buffer @c b as follows:
676
1575
  * @code { 'd', 'e', ... } @endcode
677
1576
  * This data may be the start of a new line, to be extracted by a subsequent
@@ -681,7 +1580,8 @@ template <typename AsyncReadStream, typename Allocator, typename ReadHandler>
681
1580
  BOOST_ASIO_INITFN_RESULT_TYPE(ReadHandler,
682
1581
  void (boost::system::error_code, std::size_t))
683
1582
  async_read_until(AsyncReadStream& s,
684
- boost::asio::basic_streambuf<Allocator>& b, const std::string& delim,
1583
+ boost::asio::basic_streambuf<Allocator>& b,
1584
+ BOOST_ASIO_STRING_VIEW_PARAM delim,
685
1585
  BOOST_ASIO_MOVE_ARG(ReadHandler) handler);
686
1586
 
687
1587
  #if defined(BOOST_ASIO_HAS_BOOST_REGEX) \
@@ -734,7 +1634,7 @@ async_read_until(AsyncReadStream& s,
734
1634
  * Regardless of whether the asynchronous operation completes immediately or
735
1635
  * not, the handler will not be invoked from within this function. Invocation of
736
1636
  * the handler will be performed in a manner equivalent to using
737
- * boost::asio::io_service::post().
1637
+ * boost::asio::io_context::post().
738
1638
  *
739
1639
  * @note After a successful async_read_until operation, the streambuf may
740
1640
  * contain additional data beyond that which matched the regular expression. An
@@ -762,8 +1662,8 @@ async_read_until(AsyncReadStream& s,
762
1662
  * @c b contains the data which matched the regular expression:
763
1663
  * @code { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } @endcode
764
1664
  * The call to @c std::getline then extracts the data up to and including the
765
- * match, so that the string @c line contains:
766
- * @code { 'a', 'b', ..., 'c', '\r', '\n' } @endcode
1665
+ * newline (which is discarded), so that the string @c line contains:
1666
+ * @code { 'a', 'b', ..., 'c', '\r' } @endcode
767
1667
  * The remaining data is left in the buffer @c b as follows:
768
1668
  * @code { 'd', 'e', ... } @endcode
769
1669
  * This data may be the start of a new line, to be extracted by a subsequent
@@ -836,7 +1736,7 @@ async_read_until(AsyncReadStream& s,
836
1736
  * Regardless of whether the asynchronous operation completes immediately or
837
1737
  * not, the handler will not be invoked from within this function. Invocation of
838
1738
  * the handler will be performed in a manner equivalent to using
839
- * boost::asio::io_service::post().
1739
+ * boost::asio::io_context::post().
840
1740
  *
841
1741
  * @note After a successful async_read_until operation, the streambuf may
842
1742
  * contain additional data beyond that which matched the function object. An
@@ -911,6 +1811,9 @@ async_read_until(AsyncReadStream& s,
911
1811
  MatchCondition match_condition, BOOST_ASIO_MOVE_ARG(ReadHandler) handler,
912
1812
  typename enable_if<is_match_condition<MatchCondition>::value>::type* = 0);
913
1813
 
1814
+ #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
1815
+ #endif // !defined(BOOST_ASIO_NO_EXTENSIONS)
1816
+
914
1817
  /*@}*/
915
1818
 
916
1819
  } // namespace asio
@@ -920,6 +1823,4 @@ async_read_until(AsyncReadStream& s,
920
1823
 
921
1824
  #include <boost/asio/impl/read_until.hpp>
922
1825
 
923
- #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
924
-
925
1826
  #endif // BOOST_ASIO_READ_UNTIL_HPP