passenger 5.3.3 → 5.3.4

Sign up to get free protection for your applications and to get access to all the features.
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
  // buffer.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)
@@ -18,17 +18,23 @@
18
18
  #include <boost/asio/detail/config.hpp>
19
19
  #include <cstddef>
20
20
  #include <cstring>
21
+ #include <limits>
22
+ #include <stdexcept>
21
23
  #include <string>
22
24
  #include <vector>
23
25
  #include <boost/asio/detail/array_fwd.hpp>
26
+ #include <boost/asio/detail/is_buffer_sequence.hpp>
27
+ #include <boost/asio/detail/string_view.hpp>
28
+ #include <boost/asio/detail/throw_exception.hpp>
29
+ #include <boost/asio/detail/type_traits.hpp>
24
30
 
25
- #if defined(BOOST_ASIO_MSVC)
31
+ #if defined(BOOST_ASIO_MSVC) && (BOOST_ASIO_MSVC >= 1700)
26
32
  # if defined(_HAS_ITERATOR_DEBUGGING) && (_HAS_ITERATOR_DEBUGGING != 0)
27
33
  # if !defined(BOOST_ASIO_DISABLE_BUFFER_DEBUGGING)
28
34
  # define BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
29
35
  # endif // !defined(BOOST_ASIO_DISABLE_BUFFER_DEBUGGING)
30
36
  # endif // defined(_HAS_ITERATOR_DEBUGGING)
31
- #endif // defined(BOOST_ASIO_MSVC)
37
+ #endif // defined(BOOST_ASIO_MSVC) && (BOOST_ASIO_MSVC >= 1700)
32
38
 
33
39
  #if defined(__GNUC__)
34
40
  # if defined(_GLIBCXX_DEBUG)
@@ -39,7 +45,7 @@
39
45
  #endif // defined(__GNUC__)
40
46
 
41
47
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
42
- # include <boost/asio/detail/function.hpp>
48
+ # include <boost/asio/detail/functional.hpp>
43
49
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
44
50
 
45
51
  #if defined(BOOST_ASIO_HAS_BOOST_WORKAROUND)
@@ -63,13 +69,6 @@ namespace asio {
63
69
  class mutable_buffer;
64
70
  class const_buffer;
65
71
 
66
- namespace detail {
67
- void* buffer_cast_helper(const mutable_buffer&);
68
- const void* buffer_cast_helper(const const_buffer&);
69
- std::size_t buffer_size_helper(const mutable_buffer&);
70
- std::size_t buffer_size_helper(const const_buffer&);
71
- } // namespace detail
72
-
73
72
  /// Holds a buffer that can be modified.
74
73
  /**
75
74
  * The mutable_buffer class provides a safe representation of a buffer that can
@@ -78,29 +77,29 @@ std::size_t buffer_size_helper(const const_buffer&);
78
77
  *
79
78
  * @par Accessing Buffer Contents
80
79
  *
81
- * The contents of a buffer may be accessed using the @ref buffer_size
82
- * and @ref buffer_cast functions:
80
+ * The contents of a buffer may be accessed using the @c data() and @c size()
81
+ * member functions:
83
82
  *
84
83
  * @code boost::asio::mutable_buffer b1 = ...;
85
- * std::size_t s1 = boost::asio::buffer_size(b1);
86
- * unsigned char* p1 = boost::asio::buffer_cast<unsigned char*>(b1);
84
+ * std::size_t s1 = b1.size();
85
+ * unsigned char* p1 = static_cast<unsigned char*>(b1.data());
87
86
  * @endcode
88
87
  *
89
- * The boost::asio::buffer_cast function permits violations of type safety, so
90
- * uses of it in application code should be carefully considered.
88
+ * The @c data() member function permits violations of type safety, so uses of
89
+ * it in application code should be carefully considered.
91
90
  */
92
91
  class mutable_buffer
93
92
  {
94
93
  public:
95
94
  /// Construct an empty buffer.
96
- mutable_buffer()
95
+ mutable_buffer() BOOST_ASIO_NOEXCEPT
97
96
  : data_(0),
98
97
  size_(0)
99
98
  {
100
99
  }
101
100
 
102
101
  /// Construct a buffer to represent a given memory range.
103
- mutable_buffer(void* data, std::size_t size)
102
+ mutable_buffer(void* data, std::size_t size) BOOST_ASIO_NOEXCEPT
104
103
  : data_(data),
105
104
  size_(size)
106
105
  {
@@ -121,12 +120,32 @@ public:
121
120
  }
122
121
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
123
122
 
124
- private:
125
- friend void* boost::asio::detail::buffer_cast_helper(
126
- const mutable_buffer& b);
127
- friend std::size_t boost::asio::detail::buffer_size_helper(
128
- const mutable_buffer& b);
123
+ /// Get a pointer to the beginning of the memory range.
124
+ void* data() const BOOST_ASIO_NOEXCEPT
125
+ {
126
+ #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
127
+ if (size_ && debug_check_)
128
+ debug_check_();
129
+ #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
130
+ return data_;
131
+ }
132
+
133
+ /// Get the size of the memory range.
134
+ std::size_t size() const BOOST_ASIO_NOEXCEPT
135
+ {
136
+ return size_;
137
+ }
138
+
139
+ /// Move the start of the buffer by the specified number of bytes.
140
+ mutable_buffer& operator+=(std::size_t n) BOOST_ASIO_NOEXCEPT
141
+ {
142
+ std::size_t offset = n < size_ ? n : size_;
143
+ data_ = static_cast<char*>(data_) + offset;
144
+ size_ -= offset;
145
+ return *this;
146
+ }
129
147
 
148
+ private:
130
149
  void* data_;
131
150
  std::size_t size_;
132
151
 
@@ -135,26 +154,10 @@ private:
135
154
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
136
155
  };
137
156
 
138
- namespace detail {
139
-
140
- inline void* buffer_cast_helper(const mutable_buffer& b)
141
- {
142
- #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
143
- if (b.size_ && b.debug_check_)
144
- b.debug_check_();
145
- #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
146
- return b.data_;
147
- }
148
-
149
- inline std::size_t buffer_size_helper(const mutable_buffer& b)
150
- {
151
- return b.size_;
152
- }
153
-
154
- } // namespace detail
157
+ #if !defined(BOOST_ASIO_NO_DEPRECATED)
155
158
 
156
- /// Adapts a single modifiable buffer so that it meets the requirements of the
157
- /// MutableBufferSequence concept.
159
+ /// (Deprecated: Use mutable_buffer.) Adapts a single modifiable buffer so that
160
+ /// it meets the requirements of the MutableBufferSequence concept.
158
161
  class mutable_buffers_1
159
162
  : public mutable_buffer
160
163
  {
@@ -166,30 +169,40 @@ public:
166
169
  typedef const mutable_buffer* const_iterator;
167
170
 
168
171
  /// Construct to represent a given memory range.
169
- mutable_buffers_1(void* data, std::size_t size)
172
+ mutable_buffers_1(void* data, std::size_t size) BOOST_ASIO_NOEXCEPT
170
173
  : mutable_buffer(data, size)
171
174
  {
172
175
  }
173
176
 
177
+ #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
178
+ mutable_buffers_1(void* data, std::size_t size,
179
+ boost::asio::detail::function<void()> debug_check)
180
+ : mutable_buffer(data, size, debug_check)
181
+ {
182
+ }
183
+ #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
184
+
174
185
  /// Construct to represent a single modifiable buffer.
175
- explicit mutable_buffers_1(const mutable_buffer& b)
186
+ explicit mutable_buffers_1(const mutable_buffer& b) BOOST_ASIO_NOEXCEPT
176
187
  : mutable_buffer(b)
177
188
  {
178
189
  }
179
190
 
180
191
  /// Get a random-access iterator to the first element.
181
- const_iterator begin() const
192
+ const_iterator begin() const BOOST_ASIO_NOEXCEPT
182
193
  {
183
194
  return this;
184
195
  }
185
196
 
186
197
  /// Get a random-access iterator for one past the last element.
187
- const_iterator end() const
198
+ const_iterator end() const BOOST_ASIO_NOEXCEPT
188
199
  {
189
200
  return begin() + 1;
190
201
  }
191
202
  };
192
203
 
204
+ #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
205
+
193
206
  /// Holds a buffer that cannot be modified.
194
207
  /**
195
208
  * The const_buffer class provides a safe representation of a buffer that cannot
@@ -198,38 +211,38 @@ public:
198
211
  *
199
212
  * @par Accessing Buffer Contents
200
213
  *
201
- * The contents of a buffer may be accessed using the @ref buffer_size
202
- * and @ref buffer_cast functions:
214
+ * The contents of a buffer may be accessed using the @c data() and @c size()
215
+ * member functions:
203
216
  *
204
217
  * @code boost::asio::const_buffer b1 = ...;
205
- * std::size_t s1 = boost::asio::buffer_size(b1);
206
- * const unsigned char* p1 = boost::asio::buffer_cast<const unsigned char*>(b1);
218
+ * std::size_t s1 = b1.size();
219
+ * const unsigned char* p1 = static_cast<const unsigned char*>(b1.data());
207
220
  * @endcode
208
221
  *
209
- * The boost::asio::buffer_cast function permits violations of type safety, so
210
- * uses of it in application code should be carefully considered.
222
+ * The @c data() member function permits violations of type safety, so uses of
223
+ * it in application code should be carefully considered.
211
224
  */
212
225
  class const_buffer
213
226
  {
214
227
  public:
215
228
  /// Construct an empty buffer.
216
- const_buffer()
229
+ const_buffer() BOOST_ASIO_NOEXCEPT
217
230
  : data_(0),
218
231
  size_(0)
219
232
  {
220
233
  }
221
234
 
222
235
  /// Construct a buffer to represent a given memory range.
223
- const_buffer(const void* data, std::size_t size)
236
+ const_buffer(const void* data, std::size_t size) BOOST_ASIO_NOEXCEPT
224
237
  : data_(data),
225
238
  size_(size)
226
239
  {
227
240
  }
228
241
 
229
242
  /// Construct a non-modifiable buffer from a modifiable one.
230
- const_buffer(const mutable_buffer& b)
231
- : data_(boost::asio::detail::buffer_cast_helper(b)),
232
- size_(boost::asio::detail::buffer_size_helper(b))
243
+ const_buffer(const mutable_buffer& b) BOOST_ASIO_NOEXCEPT
244
+ : data_(b.data()),
245
+ size_(b.size())
233
246
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
234
247
  , debug_check_(b.get_debug_check())
235
248
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
@@ -251,12 +264,32 @@ public:
251
264
  }
252
265
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
253
266
 
254
- private:
255
- friend const void* boost::asio::detail::buffer_cast_helper(
256
- const const_buffer& b);
257
- friend std::size_t boost::asio::detail::buffer_size_helper(
258
- const const_buffer& b);
267
+ /// Get a pointer to the beginning of the memory range.
268
+ const void* data() const BOOST_ASIO_NOEXCEPT
269
+ {
270
+ #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
271
+ if (size_ && debug_check_)
272
+ debug_check_();
273
+ #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
274
+ return data_;
275
+ }
276
+
277
+ /// Get the size of the memory range.
278
+ std::size_t size() const BOOST_ASIO_NOEXCEPT
279
+ {
280
+ return size_;
281
+ }
282
+
283
+ /// Move the start of the buffer by the specified number of bytes.
284
+ const_buffer& operator+=(std::size_t n) BOOST_ASIO_NOEXCEPT
285
+ {
286
+ std::size_t offset = n < size_ ? n : size_;
287
+ data_ = static_cast<const char*>(data_) + offset;
288
+ size_ -= offset;
289
+ return *this;
290
+ }
259
291
 
292
+ private:
260
293
  const void* data_;
261
294
  std::size_t size_;
262
295
 
@@ -265,26 +298,10 @@ private:
265
298
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
266
299
  };
267
300
 
268
- namespace detail {
269
-
270
- inline const void* buffer_cast_helper(const const_buffer& b)
271
- {
272
- #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
273
- if (b.size_ && b.debug_check_)
274
- b.debug_check_();
275
- #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
276
- return b.data_;
277
- }
278
-
279
- inline std::size_t buffer_size_helper(const const_buffer& b)
280
- {
281
- return b.size_;
282
- }
283
-
284
- } // namespace detail
301
+ #if !defined(BOOST_ASIO_NO_DEPRECATED)
285
302
 
286
- /// Adapts a single non-modifiable buffer so that it meets the requirements of
287
- /// the ConstBufferSequence concept.
303
+ /// (Deprecated: Use const_buffer.) Adapts a single non-modifiable buffer so
304
+ /// that it meets the requirements of the ConstBufferSequence concept.
288
305
  class const_buffers_1
289
306
  : public const_buffer
290
307
  {
@@ -296,32 +313,78 @@ public:
296
313
  typedef const const_buffer* const_iterator;
297
314
 
298
315
  /// Construct to represent a given memory range.
299
- const_buffers_1(const void* data, std::size_t size)
316
+ const_buffers_1(const void* data, std::size_t size) BOOST_ASIO_NOEXCEPT
300
317
  : const_buffer(data, size)
301
318
  {
302
319
  }
303
320
 
321
+ #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
322
+ const_buffers_1(const void* data, std::size_t size,
323
+ boost::asio::detail::function<void()> debug_check)
324
+ : const_buffer(data, size, debug_check)
325
+ {
326
+ }
327
+ #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
328
+
304
329
  /// Construct to represent a single non-modifiable buffer.
305
- explicit const_buffers_1(const const_buffer& b)
330
+ explicit const_buffers_1(const const_buffer& b) BOOST_ASIO_NOEXCEPT
306
331
  : const_buffer(b)
307
332
  {
308
333
  }
309
334
 
310
335
  /// Get a random-access iterator to the first element.
311
- const_iterator begin() const
336
+ const_iterator begin() const BOOST_ASIO_NOEXCEPT
312
337
  {
313
338
  return this;
314
339
  }
315
340
 
316
341
  /// Get a random-access iterator for one past the last element.
317
- const_iterator end() const
342
+ const_iterator end() const BOOST_ASIO_NOEXCEPT
318
343
  {
319
344
  return begin() + 1;
320
345
  }
321
346
  };
322
347
 
323
- /// An implementation of both the ConstBufferSequence and MutableBufferSequence
324
- /// concepts to represent a null buffer sequence.
348
+ #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
349
+
350
+ /// Trait to determine whether a type satisfies the MutableBufferSequence
351
+ /// requirements.
352
+ template <typename T>
353
+ struct is_mutable_buffer_sequence
354
+ #if defined(GENERATING_DOCUMENTATION)
355
+ : integral_constant<bool, automatically_determined>
356
+ #else // defined(GENERATING_DOCUMENTATION)
357
+ : boost::asio::detail::is_buffer_sequence<T, mutable_buffer>
358
+ #endif // defined(GENERATING_DOCUMENTATION)
359
+ {
360
+ };
361
+
362
+ /// Trait to determine whether a type satisfies the ConstBufferSequence
363
+ /// requirements.
364
+ template <typename T>
365
+ struct is_const_buffer_sequence
366
+ #if defined(GENERATING_DOCUMENTATION)
367
+ : integral_constant<bool, automatically_determined>
368
+ #else // defined(GENERATING_DOCUMENTATION)
369
+ : boost::asio::detail::is_buffer_sequence<T, const_buffer>
370
+ #endif // defined(GENERATING_DOCUMENTATION)
371
+ {
372
+ };
373
+
374
+ /// Trait to determine whether a type satisfies the DynamicBuffer requirements.
375
+ template <typename T>
376
+ struct is_dynamic_buffer
377
+ #if defined(GENERATING_DOCUMENTATION)
378
+ : integral_constant<bool, automatically_determined>
379
+ #else // defined(GENERATING_DOCUMENTATION)
380
+ : boost::asio::detail::is_dynamic_buffer<T>
381
+ #endif // defined(GENERATING_DOCUMENTATION)
382
+ {
383
+ };
384
+
385
+ /// (Deprecated: Use the socket/descriptor wait() and async_wait() member
386
+ /// functions.) An implementation of both the ConstBufferSequence and
387
+ /// MutableBufferSequence concepts to represent a null buffer sequence.
325
388
  class null_buffers
326
389
  {
327
390
  public:
@@ -332,13 +395,13 @@ public:
332
395
  typedef const mutable_buffer* const_iterator;
333
396
 
334
397
  /// Get a random-access iterator to the first element.
335
- const_iterator begin() const
398
+ const_iterator begin() const BOOST_ASIO_NOEXCEPT
336
399
  {
337
400
  return &buf_;
338
401
  }
339
402
 
340
403
  /// Get a random-access iterator for one past the last element.
341
- const_iterator end() const
404
+ const_iterator end() const BOOST_ASIO_NOEXCEPT
342
405
  {
343
406
  return &buf_;
344
407
  }
@@ -347,61 +410,189 @@ private:
347
410
  mutable_buffer buf_;
348
411
  };
349
412
 
350
- /** @defgroup buffer_size boost::asio::buffer_size
413
+ /** @defgroup buffer_sequence_begin boost::asio::buffer_sequence_begin
351
414
  *
352
- * @brief The boost::asio::buffer_size function determines the total number of
353
- * bytes in a buffer or buffer sequence.
415
+ * @brief The boost::asio::buffer_sequence_begin function returns an iterator
416
+ * pointing to the first element in a buffer sequence.
354
417
  */
355
418
  /*@{*/
356
419
 
357
- /// Get the number of bytes in a modifiable buffer.
358
- inline std::size_t buffer_size(const mutable_buffer& b)
420
+ /// Get an iterator to the first element in a buffer sequence.
421
+ inline const mutable_buffer* buffer_sequence_begin(const mutable_buffer& b)
359
422
  {
360
- return detail::buffer_size_helper(b);
423
+ return &b;
361
424
  }
362
425
 
363
- /// Get the number of bytes in a modifiable buffer.
364
- inline std::size_t buffer_size(const mutable_buffers_1& b)
426
+ /// Get an iterator to the first element in a buffer sequence.
427
+ inline const const_buffer* buffer_sequence_begin(const const_buffer& b)
365
428
  {
366
- return detail::buffer_size_helper(b);
429
+ return &b;
367
430
  }
368
431
 
369
- /// Get the number of bytes in a non-modifiable buffer.
370
- inline std::size_t buffer_size(const const_buffer& b)
432
+ #if defined(BOOST_ASIO_HAS_DECLTYPE) || defined(GENERATING_DOCUMENTATION)
433
+
434
+ /// Get an iterator to the first element in a buffer sequence.
435
+ template <typename C>
436
+ inline auto buffer_sequence_begin(C& c) -> decltype(c.begin())
371
437
  {
372
- return detail::buffer_size_helper(b);
438
+ return c.begin();
373
439
  }
374
440
 
375
- /// Get the number of bytes in a non-modifiable buffer.
376
- inline std::size_t buffer_size(const const_buffers_1& b)
441
+ /// Get an iterator to the first element in a buffer sequence.
442
+ template <typename C>
443
+ inline auto buffer_sequence_begin(const C& c) -> decltype(c.begin())
377
444
  {
378
- return detail::buffer_size_helper(b);
445
+ return c.begin();
379
446
  }
380
447
 
381
- /// Get the total number of bytes in a buffer sequence.
382
- /**
383
- * The @c BufferSequence template parameter may meet either of the @c
384
- * ConstBufferSequence or @c MutableBufferSequence type requirements.
448
+ #else // defined(BOOST_ASIO_HAS_DECLTYPE) || defined(GENERATING_DOCUMENTATION)
449
+
450
+ template <typename C>
451
+ inline typename C::iterator buffer_sequence_begin(C& c)
452
+ {
453
+ return c.begin();
454
+ }
455
+
456
+ template <typename C>
457
+ inline typename C::const_iterator buffer_sequence_begin(const C& c)
458
+ {
459
+ return c.begin();
460
+ }
461
+
462
+ #endif // defined(BOOST_ASIO_HAS_DECLTYPE) || defined(GENERATING_DOCUMENTATION)
463
+
464
+ /*@}*/
465
+
466
+ /** @defgroup buffer_sequence_end boost::asio::buffer_sequence_end
467
+ *
468
+ * @brief The boost::asio::buffer_sequence_end function returns an iterator
469
+ * pointing to one past the end element in a buffer sequence.
385
470
  */
471
+ /*@{*/
472
+
473
+ /// Get an iterator to one past the end element in a buffer sequence.
474
+ inline const mutable_buffer* buffer_sequence_end(const mutable_buffer& b)
475
+ {
476
+ return &b + 1;
477
+ }
478
+
479
+ /// Get an iterator to one past the end element in a buffer sequence.
480
+ inline const const_buffer* buffer_sequence_end(const const_buffer& b)
481
+ {
482
+ return &b + 1;
483
+ }
484
+
485
+ #if defined(BOOST_ASIO_HAS_DECLTYPE) || defined(GENERATING_DOCUMENTATION)
486
+
487
+ /// Get an iterator to one past the end element in a buffer sequence.
488
+ template <typename C>
489
+ inline auto buffer_sequence_end(C& c) -> decltype(c.end())
490
+ {
491
+ return c.end();
492
+ }
493
+
494
+ /// Get an iterator to one past the end element in a buffer sequence.
495
+ template <typename C>
496
+ inline auto buffer_sequence_end(const C& c) -> decltype(c.end())
497
+ {
498
+ return c.end();
499
+ }
500
+
501
+ #else // defined(BOOST_ASIO_HAS_DECLTYPE) || defined(GENERATING_DOCUMENTATION)
502
+
503
+ template <typename C>
504
+ inline typename C::iterator buffer_sequence_end(C& c)
505
+ {
506
+ return c.end();
507
+ }
508
+
509
+ template <typename C>
510
+ inline typename C::const_iterator buffer_sequence_end(const C& c)
511
+ {
512
+ return c.end();
513
+ }
514
+
515
+ #endif // defined(BOOST_ASIO_HAS_DECLTYPE) || defined(GENERATING_DOCUMENTATION)
516
+
517
+ /*@}*/
518
+
519
+ namespace detail {
520
+
521
+ // Tag types used to select appropriately optimised overloads.
522
+ struct one_buffer {};
523
+ struct multiple_buffers {};
524
+
525
+ // Helper trait to detect single buffers.
386
526
  template <typename BufferSequence>
387
- inline std::size_t buffer_size(const BufferSequence& b)
527
+ struct buffer_sequence_cardinality :
528
+ conditional<
529
+ is_same<BufferSequence, mutable_buffer>::value
530
+ #if !defined(BOOST_ASIO_NO_DEPRECATED)
531
+ || is_same<BufferSequence, mutable_buffers_1>::value
532
+ || is_same<BufferSequence, const_buffers_1>::value
533
+ #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
534
+ || is_same<BufferSequence, const_buffer>::value,
535
+ one_buffer, multiple_buffers>::type {};
536
+
537
+ template <typename Iterator>
538
+ inline std::size_t buffer_size(one_buffer,
539
+ Iterator begin, Iterator) BOOST_ASIO_NOEXCEPT
540
+ {
541
+ return const_buffer(*begin).size();
542
+ }
543
+
544
+ template <typename Iterator>
545
+ inline std::size_t buffer_size(multiple_buffers,
546
+ Iterator begin, Iterator end) BOOST_ASIO_NOEXCEPT
388
547
  {
389
548
  std::size_t total_buffer_size = 0;
390
549
 
391
- typename BufferSequence::const_iterator iter = b.begin();
392
- typename BufferSequence::const_iterator end = b.end();
550
+ Iterator iter = begin;
393
551
  for (; iter != end; ++iter)
394
- total_buffer_size += detail::buffer_size_helper(*iter);
552
+ {
553
+ const_buffer b(*iter);
554
+ total_buffer_size += b.size();
555
+ }
395
556
 
396
557
  return total_buffer_size;
397
558
  }
398
559
 
399
- /*@}*/
560
+ } // namespace detail
561
+
562
+ /// Get the total number of bytes in a buffer sequence.
563
+ /**
564
+ * The @c buffer_size function determines the total size of all buffers in the
565
+ * buffer sequence, as if computed as follows:
566
+ *
567
+ * @code size_t total_size = 0;
568
+ * auto i = boost::asio::buffer_sequence_begin(buffers);
569
+ * auto end = boost::asio::buffer_sequence_end(buffers);
570
+ * for (; i != end; ++i)
571
+ * {
572
+ * const_buffer b(*i);
573
+ * total_size += b.size();
574
+ * }
575
+ * return total_size; @endcode
576
+ *
577
+ * The @c BufferSequence template parameter may meet either of the @c
578
+ * ConstBufferSequence or @c MutableBufferSequence type requirements.
579
+ */
580
+ template <typename BufferSequence>
581
+ inline std::size_t buffer_size(const BufferSequence& b) BOOST_ASIO_NOEXCEPT
582
+ {
583
+ return detail::buffer_size(
584
+ detail::buffer_sequence_cardinality<BufferSequence>(),
585
+ boost::asio::buffer_sequence_begin(b),
586
+ boost::asio::buffer_sequence_end(b));
587
+ }
588
+
589
+ #if !defined(BOOST_ASIO_NO_DEPRECATED)
400
590
 
401
591
  /** @defgroup buffer_cast boost::asio::buffer_cast
402
592
  *
403
- * @brief The boost::asio::buffer_cast function is used to obtain a pointer to
404
- * the underlying memory region associated with a buffer.
593
+ * @brief (Deprecated: Use the @c data() member function.) The
594
+ * boost::asio::buffer_cast function is used to obtain a pointer to the
595
+ * underlying memory region associated with a buffer.
405
596
  *
406
597
  * @par Examples:
407
598
  *
@@ -422,30 +613,32 @@ inline std::size_t buffer_size(const BufferSequence& b)
422
613
 
423
614
  /// Cast a non-modifiable buffer to a specified pointer to POD type.
424
615
  template <typename PointerToPodType>
425
- inline PointerToPodType buffer_cast(const mutable_buffer& b)
616
+ inline PointerToPodType buffer_cast(const mutable_buffer& b) BOOST_ASIO_NOEXCEPT
426
617
  {
427
- return static_cast<PointerToPodType>(detail::buffer_cast_helper(b));
618
+ return static_cast<PointerToPodType>(b.data());
428
619
  }
429
620
 
430
621
  /// Cast a non-modifiable buffer to a specified pointer to POD type.
431
622
  template <typename PointerToPodType>
432
- inline PointerToPodType buffer_cast(const const_buffer& b)
623
+ inline PointerToPodType buffer_cast(const const_buffer& b) BOOST_ASIO_NOEXCEPT
433
624
  {
434
- return static_cast<PointerToPodType>(detail::buffer_cast_helper(b));
625
+ return static_cast<PointerToPodType>(b.data());
435
626
  }
436
627
 
437
628
  /*@}*/
438
629
 
630
+ #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
631
+
439
632
  /// Create a new modifiable buffer that is offset from the start of another.
440
633
  /**
441
634
  * @relates mutable_buffer
442
635
  */
443
- inline mutable_buffer operator+(const mutable_buffer& b, std::size_t start)
636
+ inline mutable_buffer operator+(const mutable_buffer& b,
637
+ std::size_t n) BOOST_ASIO_NOEXCEPT
444
638
  {
445
- if (start > buffer_size(b))
446
- return mutable_buffer();
447
- char* new_data = buffer_cast<char*>(b) + start;
448
- std::size_t new_size = buffer_size(b) - start;
639
+ std::size_t offset = n < b.size() ? n : b.size();
640
+ char* new_data = static_cast<char*>(b.data()) + offset;
641
+ std::size_t new_size = b.size() - offset;
449
642
  return mutable_buffer(new_data, new_size
450
643
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
451
644
  , b.get_debug_check()
@@ -457,29 +650,22 @@ inline mutable_buffer operator+(const mutable_buffer& b, std::size_t start)
457
650
  /**
458
651
  * @relates mutable_buffer
459
652
  */
460
- inline mutable_buffer operator+(std::size_t start, const mutable_buffer& b)
653
+ inline mutable_buffer operator+(std::size_t n,
654
+ const mutable_buffer& b) BOOST_ASIO_NOEXCEPT
461
655
  {
462
- if (start > buffer_size(b))
463
- return mutable_buffer();
464
- char* new_data = buffer_cast<char*>(b) + start;
465
- std::size_t new_size = buffer_size(b) - start;
466
- return mutable_buffer(new_data, new_size
467
- #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
468
- , b.get_debug_check()
469
- #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
470
- );
656
+ return b + n;
471
657
  }
472
658
 
473
659
  /// Create a new non-modifiable buffer that is offset from the start of another.
474
660
  /**
475
661
  * @relates const_buffer
476
662
  */
477
- inline const_buffer operator+(const const_buffer& b, std::size_t start)
663
+ inline const_buffer operator+(const const_buffer& b,
664
+ std::size_t n) BOOST_ASIO_NOEXCEPT
478
665
  {
479
- if (start > buffer_size(b))
480
- return const_buffer();
481
- const char* new_data = buffer_cast<const char*>(b) + start;
482
- std::size_t new_size = buffer_size(b) - start;
666
+ std::size_t offset = n < b.size() ? n : b.size();
667
+ const char* new_data = static_cast<const char*>(b.data()) + offset;
668
+ std::size_t new_size = b.size() - offset;
483
669
  return const_buffer(new_data, new_size
484
670
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
485
671
  , b.get_debug_check()
@@ -491,17 +677,10 @@ inline const_buffer operator+(const const_buffer& b, std::size_t start)
491
677
  /**
492
678
  * @relates const_buffer
493
679
  */
494
- inline const_buffer operator+(std::size_t start, const const_buffer& b)
680
+ inline const_buffer operator+(std::size_t n,
681
+ const const_buffer& b) BOOST_ASIO_NOEXCEPT
495
682
  {
496
- if (start > buffer_size(b))
497
- return const_buffer();
498
- const char* new_data = buffer_cast<const char*>(b) + start;
499
- std::size_t new_size = buffer_size(b) - start;
500
- return const_buffer(new_data, new_size
501
- #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
502
- , b.get_debug_check()
503
- #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
504
- );
683
+ return b + n;
505
684
  }
506
685
 
507
686
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
@@ -528,7 +707,7 @@ public:
528
707
 
529
708
  void operator()()
530
709
  {
531
- *iter_;
710
+ (void)*iter_;
532
711
  }
533
712
 
534
713
  private:
@@ -586,32 +765,33 @@ private:
586
765
  *
587
766
  * @par Accessing Buffer Contents
588
767
  *
589
- * The contents of a buffer may be accessed using the @ref buffer_size and
590
- * @ref buffer_cast functions:
768
+ * The contents of a buffer may be accessed using the @c data() and @c size()
769
+ * member functions:
591
770
  *
592
771
  * @code boost::asio::mutable_buffer b1 = ...;
593
- * std::size_t s1 = boost::asio::buffer_size(b1);
594
- * unsigned char* p1 = boost::asio::buffer_cast<unsigned char*>(b1);
772
+ * std::size_t s1 = b1.size();
773
+ * unsigned char* p1 = static_cast<unsigned char*>(b1.data());
595
774
  *
596
775
  * boost::asio::const_buffer b2 = ...;
597
- * std::size_t s2 = boost::asio::buffer_size(b2);
598
- * const void* p2 = boost::asio::buffer_cast<const void*>(b2); @endcode
776
+ * std::size_t s2 = b2.size();
777
+ * const void* p2 = b2.data(); @endcode
599
778
  *
600
- * The boost::asio::buffer_cast function permits violations of type safety, so
779
+ * The @c data() member function permits violations of type safety, so
601
780
  * uses of it in application code should be carefully considered.
602
781
  *
603
- * For convenience, the @ref buffer_size function also works on buffer
604
- * sequences (that is, types meeting the ConstBufferSequence or
605
- * MutableBufferSequence type requirements). In this case, the function returns
606
- * the total size of all buffers in the sequence.
782
+ * For convenience, a @ref buffer_size function is provided that works with
783
+ * both buffers and buffer sequences (that is, types meeting the
784
+ * ConstBufferSequence or MutableBufferSequence type requirements). In this
785
+ * case, the function returns the total size of all buffers in the sequence.
607
786
  *
608
787
  * @par Buffer Copying
609
788
  *
610
789
  * The @ref buffer_copy function may be used to copy raw bytes between
611
790
  * individual buffers and buffer sequences.
612
- *
613
- * In particular, when used with the @ref buffer_size, the @ref buffer_copy
614
- * function can be used to linearise a sequence of buffers. For example:
791
+ *
792
+ * In particular, when used with the @ref buffer_size function, the @ref
793
+ * buffer_copy function can be used to linearise a sequence of buffers. For
794
+ * example:
615
795
  *
616
796
  * @code vector<const_buffer> buffers = ...;
617
797
  *
@@ -700,29 +880,38 @@ private:
700
880
  */
701
881
  /*@{*/
702
882
 
883
+ #if defined(BOOST_ASIO_NO_DEPRECATED) || defined(GENERATING_DOCUMENTATION)
884
+ # define BOOST_ASIO_MUTABLE_BUFFER mutable_buffer
885
+ # define BOOST_ASIO_CONST_BUFFER const_buffer
886
+ #else // defined(BOOST_ASIO_NO_DEPRECATED) || defined(GENERATING_DOCUMENTATION)
887
+ # define BOOST_ASIO_MUTABLE_BUFFER mutable_buffers_1
888
+ # define BOOST_ASIO_CONST_BUFFER const_buffers_1
889
+ #endif // defined(BOOST_ASIO_NO_DEPRECATED) || defined(GENERATING_DOCUMENTATION)
890
+
703
891
  /// Create a new modifiable buffer from an existing buffer.
704
892
  /**
705
- * @returns <tt>mutable_buffers_1(b)</tt>.
893
+ * @returns <tt>mutable_buffer(b)</tt>.
706
894
  */
707
- inline mutable_buffers_1 buffer(const mutable_buffer& b)
895
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(
896
+ const mutable_buffer& b) BOOST_ASIO_NOEXCEPT
708
897
  {
709
- return mutable_buffers_1(b);
898
+ return BOOST_ASIO_MUTABLE_BUFFER(b);
710
899
  }
711
900
 
712
901
  /// Create a new modifiable buffer from an existing buffer.
713
902
  /**
714
- * @returns A mutable_buffers_1 value equivalent to:
715
- * @code mutable_buffers_1(
716
- * buffer_cast<void*>(b),
717
- * min(buffer_size(b), max_size_in_bytes)); @endcode
903
+ * @returns A mutable_buffer value equivalent to:
904
+ * @code mutable_buffer(
905
+ * b.data(),
906
+ * min(b.size(), max_size_in_bytes)); @endcode
718
907
  */
719
- inline mutable_buffers_1 buffer(const mutable_buffer& b,
720
- std::size_t max_size_in_bytes)
908
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(const mutable_buffer& b,
909
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
721
910
  {
722
- return mutable_buffers_1(
723
- mutable_buffer(buffer_cast<void*>(b),
724
- buffer_size(b) < max_size_in_bytes
725
- ? buffer_size(b) : max_size_in_bytes
911
+ return BOOST_ASIO_MUTABLE_BUFFER(
912
+ mutable_buffer(b.data(),
913
+ b.size() < max_size_in_bytes
914
+ ? b.size() : max_size_in_bytes
726
915
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
727
916
  , b.get_debug_check()
728
917
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
@@ -731,110 +920,110 @@ inline mutable_buffers_1 buffer(const mutable_buffer& b,
731
920
 
732
921
  /// Create a new non-modifiable buffer from an existing buffer.
733
922
  /**
734
- * @returns <tt>const_buffers_1(b)</tt>.
923
+ * @returns <tt>const_buffer(b)</tt>.
735
924
  */
736
- inline const_buffers_1 buffer(const const_buffer& b)
925
+ inline BOOST_ASIO_CONST_BUFFER buffer(
926
+ const const_buffer& b) BOOST_ASIO_NOEXCEPT
737
927
  {
738
- return const_buffers_1(b);
928
+ return BOOST_ASIO_CONST_BUFFER(b);
739
929
  }
740
930
 
741
931
  /// Create a new non-modifiable buffer from an existing buffer.
742
932
  /**
743
- * @returns A const_buffers_1 value equivalent to:
744
- * @code const_buffers_1(
745
- * buffer_cast<const void*>(b),
746
- * min(buffer_size(b), max_size_in_bytes)); @endcode
933
+ * @returns A const_buffer value equivalent to:
934
+ * @code const_buffer(
935
+ * b.data(),
936
+ * min(b.size(), max_size_in_bytes)); @endcode
747
937
  */
748
- inline const_buffers_1 buffer(const const_buffer& b,
749
- std::size_t max_size_in_bytes)
938
+ inline BOOST_ASIO_CONST_BUFFER buffer(const const_buffer& b,
939
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
750
940
  {
751
- return const_buffers_1(
752
- const_buffer(buffer_cast<const void*>(b),
753
- buffer_size(b) < max_size_in_bytes
754
- ? buffer_size(b) : max_size_in_bytes
941
+ return BOOST_ASIO_CONST_BUFFER(b.data(),
942
+ b.size() < max_size_in_bytes
943
+ ? b.size() : max_size_in_bytes
755
944
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
756
- , b.get_debug_check()
945
+ , b.get_debug_check()
757
946
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
758
- ));
947
+ );
759
948
  }
760
949
 
761
950
  /// Create a new modifiable buffer that represents the given memory range.
762
951
  /**
763
- * @returns <tt>mutable_buffers_1(data, size_in_bytes)</tt>.
952
+ * @returns <tt>mutable_buffer(data, size_in_bytes)</tt>.
764
953
  */
765
- inline mutable_buffers_1 buffer(void* data, std::size_t size_in_bytes)
954
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(void* data,
955
+ std::size_t size_in_bytes) BOOST_ASIO_NOEXCEPT
766
956
  {
767
- return mutable_buffers_1(mutable_buffer(data, size_in_bytes));
957
+ return BOOST_ASIO_MUTABLE_BUFFER(data, size_in_bytes);
768
958
  }
769
959
 
770
960
  /// Create a new non-modifiable buffer that represents the given memory range.
771
961
  /**
772
- * @returns <tt>const_buffers_1(data, size_in_bytes)</tt>.
962
+ * @returns <tt>const_buffer(data, size_in_bytes)</tt>.
773
963
  */
774
- inline const_buffers_1 buffer(const void* data,
775
- std::size_t size_in_bytes)
964
+ inline BOOST_ASIO_CONST_BUFFER buffer(const void* data,
965
+ std::size_t size_in_bytes) BOOST_ASIO_NOEXCEPT
776
966
  {
777
- return const_buffers_1(const_buffer(data, size_in_bytes));
967
+ return BOOST_ASIO_CONST_BUFFER(data, size_in_bytes);
778
968
  }
779
969
 
780
970
  /// Create a new modifiable buffer that represents the given POD array.
781
971
  /**
782
- * @returns A mutable_buffers_1 value equivalent to:
783
- * @code mutable_buffers_1(
972
+ * @returns A mutable_buffer value equivalent to:
973
+ * @code mutable_buffer(
784
974
  * static_cast<void*>(data),
785
975
  * N * sizeof(PodType)); @endcode
786
976
  */
787
977
  template <typename PodType, std::size_t N>
788
- inline mutable_buffers_1 buffer(PodType (&data)[N])
978
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(PodType (&data)[N]) BOOST_ASIO_NOEXCEPT
789
979
  {
790
- return mutable_buffers_1(mutable_buffer(data, N * sizeof(PodType)));
980
+ return BOOST_ASIO_MUTABLE_BUFFER(data, N * sizeof(PodType));
791
981
  }
792
982
 
793
983
  /// Create a new modifiable buffer that represents the given POD array.
794
984
  /**
795
- * @returns A mutable_buffers_1 value equivalent to:
796
- * @code mutable_buffers_1(
985
+ * @returns A mutable_buffer value equivalent to:
986
+ * @code mutable_buffer(
797
987
  * static_cast<void*>(data),
798
988
  * min(N * sizeof(PodType), max_size_in_bytes)); @endcode
799
989
  */
800
990
  template <typename PodType, std::size_t N>
801
- inline mutable_buffers_1 buffer(PodType (&data)[N],
802
- std::size_t max_size_in_bytes)
991
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(PodType (&data)[N],
992
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
803
993
  {
804
- return mutable_buffers_1(
805
- mutable_buffer(data,
806
- N * sizeof(PodType) < max_size_in_bytes
807
- ? N * sizeof(PodType) : max_size_in_bytes));
994
+ return BOOST_ASIO_MUTABLE_BUFFER(data,
995
+ N * sizeof(PodType) < max_size_in_bytes
996
+ ? N * sizeof(PodType) : max_size_in_bytes);
808
997
  }
809
998
 
810
999
  /// Create a new non-modifiable buffer that represents the given POD array.
811
1000
  /**
812
- * @returns A const_buffers_1 value equivalent to:
813
- * @code const_buffers_1(
1001
+ * @returns A const_buffer value equivalent to:
1002
+ * @code const_buffer(
814
1003
  * static_cast<const void*>(data),
815
1004
  * N * sizeof(PodType)); @endcode
816
1005
  */
817
1006
  template <typename PodType, std::size_t N>
818
- inline const_buffers_1 buffer(const PodType (&data)[N])
1007
+ inline BOOST_ASIO_CONST_BUFFER buffer(
1008
+ const PodType (&data)[N]) BOOST_ASIO_NOEXCEPT
819
1009
  {
820
- return const_buffers_1(const_buffer(data, N * sizeof(PodType)));
1010
+ return BOOST_ASIO_CONST_BUFFER(data, N * sizeof(PodType));
821
1011
  }
822
1012
 
823
1013
  /// Create a new non-modifiable buffer that represents the given POD array.
824
1014
  /**
825
- * @returns A const_buffers_1 value equivalent to:
826
- * @code const_buffers_1(
1015
+ * @returns A const_buffer value equivalent to:
1016
+ * @code const_buffer(
827
1017
  * static_cast<const void*>(data),
828
1018
  * min(N * sizeof(PodType), max_size_in_bytes)); @endcode
829
1019
  */
830
1020
  template <typename PodType, std::size_t N>
831
- inline const_buffers_1 buffer(const PodType (&data)[N],
832
- std::size_t max_size_in_bytes)
1021
+ inline BOOST_ASIO_CONST_BUFFER buffer(const PodType (&data)[N],
1022
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
833
1023
  {
834
- return const_buffers_1(
835
- const_buffer(data,
836
- N * sizeof(PodType) < max_size_in_bytes
837
- ? N * sizeof(PodType) : max_size_in_bytes));
1024
+ return BOOST_ASIO_CONST_BUFFER(data,
1025
+ N * sizeof(PodType) < max_size_in_bytes
1026
+ ? N * sizeof(PodType) : max_size_in_bytes);
838
1027
  }
839
1028
 
840
1029
  #if defined(BOOST_ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND)
@@ -860,14 +1049,14 @@ template <>
860
1049
  struct buffer_types_base<false>
861
1050
  {
862
1051
  typedef mutable_buffer buffer_type;
863
- typedef mutable_buffers_1 container_type;
1052
+ typedef BOOST_ASIO_MUTABLE_BUFFER container_type;
864
1053
  };
865
1054
 
866
1055
  template <>
867
1056
  struct buffer_types_base<true>
868
1057
  {
869
1058
  typedef const_buffer buffer_type;
870
- typedef const_buffers_1 container_type;
1059
+ typedef BOOST_ASIO_CONST_BUFFER container_type;
871
1060
  };
872
1061
 
873
1062
  template <typename PodType>
@@ -880,7 +1069,7 @@ struct buffer_types
880
1069
 
881
1070
  template <typename PodType, std::size_t N>
882
1071
  inline typename detail::buffer_types<PodType>::container_type
883
- buffer(boost::array<PodType, N>& data)
1072
+ buffer(boost::array<PodType, N>& data) BOOST_ASIO_NOEXCEPT
884
1073
  {
885
1074
  typedef typename boost::asio::detail::buffer_types<PodType>::buffer_type
886
1075
  buffer_type;
@@ -892,7 +1081,8 @@ buffer(boost::array<PodType, N>& data)
892
1081
 
893
1082
  template <typename PodType, std::size_t N>
894
1083
  inline typename detail::buffer_types<PodType>::container_type
895
- buffer(boost::array<PodType, N>& data, std::size_t max_size_in_bytes)
1084
+ buffer(boost::array<PodType, N>& data,
1085
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
896
1086
  {
897
1087
  typedef typename boost::asio::detail::buffer_types<PodType>::buffer_type
898
1088
  buffer_type;
@@ -908,200 +1098,195 @@ buffer(boost::array<PodType, N>& data, std::size_t max_size_in_bytes)
908
1098
 
909
1099
  /// Create a new modifiable buffer that represents the given POD array.
910
1100
  /**
911
- * @returns A mutable_buffers_1 value equivalent to:
912
- * @code mutable_buffers_1(
1101
+ * @returns A mutable_buffer value equivalent to:
1102
+ * @code mutable_buffer(
913
1103
  * data.data(),
914
1104
  * data.size() * sizeof(PodType)); @endcode
915
1105
  */
916
1106
  template <typename PodType, std::size_t N>
917
- inline mutable_buffers_1 buffer(boost::array<PodType, N>& data)
1107
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(
1108
+ boost::array<PodType, N>& data) BOOST_ASIO_NOEXCEPT
918
1109
  {
919
- return mutable_buffers_1(
920
- mutable_buffer(data.c_array(), data.size() * sizeof(PodType)));
1110
+ return BOOST_ASIO_MUTABLE_BUFFER(
1111
+ data.c_array(), data.size() * sizeof(PodType));
921
1112
  }
922
1113
 
923
1114
  /// Create a new modifiable buffer that represents the given POD array.
924
1115
  /**
925
- * @returns A mutable_buffers_1 value equivalent to:
926
- * @code mutable_buffers_1(
1116
+ * @returns A mutable_buffer value equivalent to:
1117
+ * @code mutable_buffer(
927
1118
  * data.data(),
928
1119
  * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
929
1120
  */
930
1121
  template <typename PodType, std::size_t N>
931
- inline mutable_buffers_1 buffer(boost::array<PodType, N>& data,
932
- std::size_t max_size_in_bytes)
1122
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(boost::array<PodType, N>& data,
1123
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
933
1124
  {
934
- return mutable_buffers_1(
935
- mutable_buffer(data.c_array(),
936
- data.size() * sizeof(PodType) < max_size_in_bytes
937
- ? data.size() * sizeof(PodType) : max_size_in_bytes));
1125
+ return BOOST_ASIO_MUTABLE_BUFFER(data.c_array(),
1126
+ data.size() * sizeof(PodType) < max_size_in_bytes
1127
+ ? data.size() * sizeof(PodType) : max_size_in_bytes);
938
1128
  }
939
1129
 
940
1130
  /// Create a new non-modifiable buffer that represents the given POD array.
941
1131
  /**
942
- * @returns A const_buffers_1 value equivalent to:
943
- * @code const_buffers_1(
1132
+ * @returns A const_buffer value equivalent to:
1133
+ * @code const_buffer(
944
1134
  * data.data(),
945
1135
  * data.size() * sizeof(PodType)); @endcode
946
1136
  */
947
1137
  template <typename PodType, std::size_t N>
948
- inline const_buffers_1 buffer(boost::array<const PodType, N>& data)
1138
+ inline BOOST_ASIO_CONST_BUFFER buffer(
1139
+ boost::array<const PodType, N>& data) BOOST_ASIO_NOEXCEPT
949
1140
  {
950
- return const_buffers_1(
951
- const_buffer(data.data(), data.size() * sizeof(PodType)));
1141
+ return BOOST_ASIO_CONST_BUFFER(data.data(), data.size() * sizeof(PodType));
952
1142
  }
953
1143
 
954
1144
  /// Create a new non-modifiable buffer that represents the given POD array.
955
1145
  /**
956
- * @returns A const_buffers_1 value equivalent to:
957
- * @code const_buffers_1(
1146
+ * @returns A const_buffer value equivalent to:
1147
+ * @code const_buffer(
958
1148
  * data.data(),
959
1149
  * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
960
1150
  */
961
1151
  template <typename PodType, std::size_t N>
962
- inline const_buffers_1 buffer(boost::array<const PodType, N>& data,
963
- std::size_t max_size_in_bytes)
1152
+ inline BOOST_ASIO_CONST_BUFFER buffer(boost::array<const PodType, N>& data,
1153
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
964
1154
  {
965
- return const_buffers_1(
966
- const_buffer(data.data(),
967
- data.size() * sizeof(PodType) < max_size_in_bytes
968
- ? data.size() * sizeof(PodType) : max_size_in_bytes));
1155
+ return BOOST_ASIO_CONST_BUFFER(data.data(),
1156
+ data.size() * sizeof(PodType) < max_size_in_bytes
1157
+ ? data.size() * sizeof(PodType) : max_size_in_bytes);
969
1158
  }
970
1159
 
971
1160
  #endif // defined(BOOST_ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND)
972
1161
 
973
1162
  /// Create a new non-modifiable buffer that represents the given POD array.
974
1163
  /**
975
- * @returns A const_buffers_1 value equivalent to:
976
- * @code const_buffers_1(
1164
+ * @returns A const_buffer value equivalent to:
1165
+ * @code const_buffer(
977
1166
  * data.data(),
978
1167
  * data.size() * sizeof(PodType)); @endcode
979
1168
  */
980
1169
  template <typename PodType, std::size_t N>
981
- inline const_buffers_1 buffer(const boost::array<PodType, N>& data)
1170
+ inline BOOST_ASIO_CONST_BUFFER buffer(
1171
+ const boost::array<PodType, N>& data) BOOST_ASIO_NOEXCEPT
982
1172
  {
983
- return const_buffers_1(
984
- const_buffer(data.data(), data.size() * sizeof(PodType)));
1173
+ return BOOST_ASIO_CONST_BUFFER(data.data(), data.size() * sizeof(PodType));
985
1174
  }
986
1175
 
987
1176
  /// Create a new non-modifiable buffer that represents the given POD array.
988
1177
  /**
989
- * @returns A const_buffers_1 value equivalent to:
990
- * @code const_buffers_1(
1178
+ * @returns A const_buffer value equivalent to:
1179
+ * @code const_buffer(
991
1180
  * data.data(),
992
1181
  * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
993
1182
  */
994
1183
  template <typename PodType, std::size_t N>
995
- inline const_buffers_1 buffer(const boost::array<PodType, N>& data,
996
- std::size_t max_size_in_bytes)
1184
+ inline BOOST_ASIO_CONST_BUFFER buffer(const boost::array<PodType, N>& data,
1185
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
997
1186
  {
998
- return const_buffers_1(
999
- const_buffer(data.data(),
1000
- data.size() * sizeof(PodType) < max_size_in_bytes
1001
- ? data.size() * sizeof(PodType) : max_size_in_bytes));
1187
+ return BOOST_ASIO_CONST_BUFFER(data.data(),
1188
+ data.size() * sizeof(PodType) < max_size_in_bytes
1189
+ ? data.size() * sizeof(PodType) : max_size_in_bytes);
1002
1190
  }
1003
1191
 
1004
1192
  #if defined(BOOST_ASIO_HAS_STD_ARRAY) || defined(GENERATING_DOCUMENTATION)
1005
1193
 
1006
1194
  /// Create a new modifiable buffer that represents the given POD array.
1007
1195
  /**
1008
- * @returns A mutable_buffers_1 value equivalent to:
1009
- * @code mutable_buffers_1(
1196
+ * @returns A mutable_buffer value equivalent to:
1197
+ * @code mutable_buffer(
1010
1198
  * data.data(),
1011
1199
  * data.size() * sizeof(PodType)); @endcode
1012
1200
  */
1013
1201
  template <typename PodType, std::size_t N>
1014
- inline mutable_buffers_1 buffer(std::array<PodType, N>& data)
1202
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(
1203
+ std::array<PodType, N>& data) BOOST_ASIO_NOEXCEPT
1015
1204
  {
1016
- return mutable_buffers_1(
1017
- mutable_buffer(data.data(), data.size() * sizeof(PodType)));
1205
+ return BOOST_ASIO_MUTABLE_BUFFER(data.data(), data.size() * sizeof(PodType));
1018
1206
  }
1019
1207
 
1020
1208
  /// Create a new modifiable buffer that represents the given POD array.
1021
1209
  /**
1022
- * @returns A mutable_buffers_1 value equivalent to:
1023
- * @code mutable_buffers_1(
1210
+ * @returns A mutable_buffer value equivalent to:
1211
+ * @code mutable_buffer(
1024
1212
  * data.data(),
1025
1213
  * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1026
1214
  */
1027
1215
  template <typename PodType, std::size_t N>
1028
- inline mutable_buffers_1 buffer(std::array<PodType, N>& data,
1029
- std::size_t max_size_in_bytes)
1216
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(std::array<PodType, N>& data,
1217
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
1030
1218
  {
1031
- return mutable_buffers_1(
1032
- mutable_buffer(data.data(),
1033
- data.size() * sizeof(PodType) < max_size_in_bytes
1034
- ? data.size() * sizeof(PodType) : max_size_in_bytes));
1219
+ return BOOST_ASIO_MUTABLE_BUFFER(data.data(),
1220
+ data.size() * sizeof(PodType) < max_size_in_bytes
1221
+ ? data.size() * sizeof(PodType) : max_size_in_bytes);
1035
1222
  }
1036
1223
 
1037
1224
  /// Create a new non-modifiable buffer that represents the given POD array.
1038
1225
  /**
1039
- * @returns A const_buffers_1 value equivalent to:
1040
- * @code const_buffers_1(
1226
+ * @returns A const_buffer value equivalent to:
1227
+ * @code const_buffer(
1041
1228
  * data.data(),
1042
1229
  * data.size() * sizeof(PodType)); @endcode
1043
1230
  */
1044
1231
  template <typename PodType, std::size_t N>
1045
- inline const_buffers_1 buffer(std::array<const PodType, N>& data)
1232
+ inline BOOST_ASIO_CONST_BUFFER buffer(
1233
+ std::array<const PodType, N>& data) BOOST_ASIO_NOEXCEPT
1046
1234
  {
1047
- return const_buffers_1(
1048
- const_buffer(data.data(), data.size() * sizeof(PodType)));
1235
+ return BOOST_ASIO_CONST_BUFFER(data.data(), data.size() * sizeof(PodType));
1049
1236
  }
1050
1237
 
1051
1238
  /// Create a new non-modifiable buffer that represents the given POD array.
1052
1239
  /**
1053
- * @returns A const_buffers_1 value equivalent to:
1054
- * @code const_buffers_1(
1240
+ * @returns A const_buffer value equivalent to:
1241
+ * @code const_buffer(
1055
1242
  * data.data(),
1056
1243
  * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1057
1244
  */
1058
1245
  template <typename PodType, std::size_t N>
1059
- inline const_buffers_1 buffer(std::array<const PodType, N>& data,
1060
- std::size_t max_size_in_bytes)
1246
+ inline BOOST_ASIO_CONST_BUFFER buffer(std::array<const PodType, N>& data,
1247
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
1061
1248
  {
1062
- return const_buffers_1(
1063
- const_buffer(data.data(),
1064
- data.size() * sizeof(PodType) < max_size_in_bytes
1065
- ? data.size() * sizeof(PodType) : max_size_in_bytes));
1249
+ return BOOST_ASIO_CONST_BUFFER(data.data(),
1250
+ data.size() * sizeof(PodType) < max_size_in_bytes
1251
+ ? data.size() * sizeof(PodType) : max_size_in_bytes);
1066
1252
  }
1067
1253
 
1068
1254
  /// Create a new non-modifiable buffer that represents the given POD array.
1069
1255
  /**
1070
- * @returns A const_buffers_1 value equivalent to:
1071
- * @code const_buffers_1(
1256
+ * @returns A const_buffer value equivalent to:
1257
+ * @code const_buffer(
1072
1258
  * data.data(),
1073
1259
  * data.size() * sizeof(PodType)); @endcode
1074
1260
  */
1075
1261
  template <typename PodType, std::size_t N>
1076
- inline const_buffers_1 buffer(const std::array<PodType, N>& data)
1262
+ inline BOOST_ASIO_CONST_BUFFER buffer(
1263
+ const std::array<PodType, N>& data) BOOST_ASIO_NOEXCEPT
1077
1264
  {
1078
- return const_buffers_1(
1079
- const_buffer(data.data(), data.size() * sizeof(PodType)));
1265
+ return BOOST_ASIO_CONST_BUFFER(data.data(), data.size() * sizeof(PodType));
1080
1266
  }
1081
1267
 
1082
1268
  /// Create a new non-modifiable buffer that represents the given POD array.
1083
1269
  /**
1084
- * @returns A const_buffers_1 value equivalent to:
1085
- * @code const_buffers_1(
1270
+ * @returns A const_buffer value equivalent to:
1271
+ * @code const_buffer(
1086
1272
  * data.data(),
1087
1273
  * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1088
1274
  */
1089
1275
  template <typename PodType, std::size_t N>
1090
- inline const_buffers_1 buffer(const std::array<PodType, N>& data,
1091
- std::size_t max_size_in_bytes)
1276
+ inline BOOST_ASIO_CONST_BUFFER buffer(const std::array<PodType, N>& data,
1277
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
1092
1278
  {
1093
- return const_buffers_1(
1094
- const_buffer(data.data(),
1095
- data.size() * sizeof(PodType) < max_size_in_bytes
1096
- ? data.size() * sizeof(PodType) : max_size_in_bytes));
1279
+ return BOOST_ASIO_CONST_BUFFER(data.data(),
1280
+ data.size() * sizeof(PodType) < max_size_in_bytes
1281
+ ? data.size() * sizeof(PodType) : max_size_in_bytes);
1097
1282
  }
1098
1283
 
1099
1284
  #endif // defined(BOOST_ASIO_HAS_STD_ARRAY) || defined(GENERATING_DOCUMENTATION)
1100
1285
 
1101
1286
  /// Create a new modifiable buffer that represents the given POD vector.
1102
1287
  /**
1103
- * @returns A mutable_buffers_1 value equivalent to:
1104
- * @code mutable_buffers_1(
1288
+ * @returns A mutable_buffer value equivalent to:
1289
+ * @code mutable_buffer(
1105
1290
  * data.size() ? &data[0] : 0,
1106
1291
  * data.size() * sizeof(PodType)); @endcode
1107
1292
  *
@@ -1109,22 +1294,23 @@ inline const_buffers_1 buffer(const std::array<PodType, N>& data,
1109
1294
  * invalidate iterators.
1110
1295
  */
1111
1296
  template <typename PodType, typename Allocator>
1112
- inline mutable_buffers_1 buffer(std::vector<PodType, Allocator>& data)
1297
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(
1298
+ std::vector<PodType, Allocator>& data) BOOST_ASIO_NOEXCEPT
1113
1299
  {
1114
- return mutable_buffers_1(
1115
- mutable_buffer(data.size() ? &data[0] : 0, data.size() * sizeof(PodType)
1300
+ return BOOST_ASIO_MUTABLE_BUFFER(
1301
+ data.size() ? &data[0] : 0, data.size() * sizeof(PodType)
1116
1302
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
1117
- , detail::buffer_debug_check<
1118
- typename std::vector<PodType, Allocator>::iterator
1119
- >(data.begin())
1303
+ , detail::buffer_debug_check<
1304
+ typename std::vector<PodType, Allocator>::iterator
1305
+ >(data.begin())
1120
1306
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
1121
- ));
1307
+ );
1122
1308
  }
1123
1309
 
1124
1310
  /// Create a new modifiable buffer that represents the given POD vector.
1125
1311
  /**
1126
- * @returns A mutable_buffers_1 value equivalent to:
1127
- * @code mutable_buffers_1(
1312
+ * @returns A mutable_buffer value equivalent to:
1313
+ * @code mutable_buffer(
1128
1314
  * data.size() ? &data[0] : 0,
1129
1315
  * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1130
1316
  *
@@ -1132,25 +1318,24 @@ inline mutable_buffers_1 buffer(std::vector<PodType, Allocator>& data)
1132
1318
  * invalidate iterators.
1133
1319
  */
1134
1320
  template <typename PodType, typename Allocator>
1135
- inline mutable_buffers_1 buffer(std::vector<PodType, Allocator>& data,
1136
- std::size_t max_size_in_bytes)
1321
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(std::vector<PodType, Allocator>& data,
1322
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
1137
1323
  {
1138
- return mutable_buffers_1(
1139
- mutable_buffer(data.size() ? &data[0] : 0,
1140
- data.size() * sizeof(PodType) < max_size_in_bytes
1141
- ? data.size() * sizeof(PodType) : max_size_in_bytes
1324
+ return BOOST_ASIO_MUTABLE_BUFFER(data.size() ? &data[0] : 0,
1325
+ data.size() * sizeof(PodType) < max_size_in_bytes
1326
+ ? data.size() * sizeof(PodType) : max_size_in_bytes
1142
1327
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
1143
- , detail::buffer_debug_check<
1144
- typename std::vector<PodType, Allocator>::iterator
1145
- >(data.begin())
1328
+ , detail::buffer_debug_check<
1329
+ typename std::vector<PodType, Allocator>::iterator
1330
+ >(data.begin())
1146
1331
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
1147
- ));
1332
+ );
1148
1333
  }
1149
1334
 
1150
1335
  /// Create a new non-modifiable buffer that represents the given POD vector.
1151
1336
  /**
1152
- * @returns A const_buffers_1 value equivalent to:
1153
- * @code const_buffers_1(
1337
+ * @returns A const_buffer value equivalent to:
1338
+ * @code const_buffer(
1154
1339
  * data.size() ? &data[0] : 0,
1155
1340
  * data.size() * sizeof(PodType)); @endcode
1156
1341
  *
@@ -1158,23 +1343,23 @@ inline mutable_buffers_1 buffer(std::vector<PodType, Allocator>& data,
1158
1343
  * invalidate iterators.
1159
1344
  */
1160
1345
  template <typename PodType, typename Allocator>
1161
- inline const_buffers_1 buffer(
1162
- const std::vector<PodType, Allocator>& data)
1346
+ inline BOOST_ASIO_CONST_BUFFER buffer(
1347
+ const std::vector<PodType, Allocator>& data) BOOST_ASIO_NOEXCEPT
1163
1348
  {
1164
- return const_buffers_1(
1165
- const_buffer(data.size() ? &data[0] : 0, data.size() * sizeof(PodType)
1349
+ return BOOST_ASIO_CONST_BUFFER(
1350
+ data.size() ? &data[0] : 0, data.size() * sizeof(PodType)
1166
1351
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
1167
- , detail::buffer_debug_check<
1168
- typename std::vector<PodType, Allocator>::const_iterator
1169
- >(data.begin())
1352
+ , detail::buffer_debug_check<
1353
+ typename std::vector<PodType, Allocator>::const_iterator
1354
+ >(data.begin())
1170
1355
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
1171
- ));
1356
+ );
1172
1357
  }
1173
1358
 
1174
1359
  /// Create a new non-modifiable buffer that represents the given POD vector.
1175
1360
  /**
1176
- * @returns A const_buffers_1 value equivalent to:
1177
- * @code const_buffers_1(
1361
+ * @returns A const_buffer value equivalent to:
1362
+ * @code const_buffer(
1178
1363
  * data.size() ? &data[0] : 0,
1179
1364
  * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1180
1365
  *
@@ -1182,963 +1367,730 @@ inline const_buffers_1 buffer(
1182
1367
  * invalidate iterators.
1183
1368
  */
1184
1369
  template <typename PodType, typename Allocator>
1185
- inline const_buffers_1 buffer(
1186
- const std::vector<PodType, Allocator>& data, std::size_t max_size_in_bytes)
1370
+ inline BOOST_ASIO_CONST_BUFFER buffer(
1371
+ const std::vector<PodType, Allocator>& data,
1372
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
1187
1373
  {
1188
- return const_buffers_1(
1189
- const_buffer(data.size() ? &data[0] : 0,
1190
- data.size() * sizeof(PodType) < max_size_in_bytes
1191
- ? data.size() * sizeof(PodType) : max_size_in_bytes
1374
+ return BOOST_ASIO_CONST_BUFFER(data.size() ? &data[0] : 0,
1375
+ data.size() * sizeof(PodType) < max_size_in_bytes
1376
+ ? data.size() * sizeof(PodType) : max_size_in_bytes
1192
1377
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
1193
- , detail::buffer_debug_check<
1194
- typename std::vector<PodType, Allocator>::const_iterator
1195
- >(data.begin())
1378
+ , detail::buffer_debug_check<
1379
+ typename std::vector<PodType, Allocator>::const_iterator
1380
+ >(data.begin())
1196
1381
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
1197
- ));
1382
+ );
1198
1383
  }
1199
1384
 
1200
- /// Create a new non-modifiable buffer that represents the given string.
1385
+ /// Create a new modifiable buffer that represents the given string.
1201
1386
  /**
1202
- * @returns <tt>const_buffers_1(data.data(), data.size() * sizeof(Elem))</tt>.
1387
+ * @returns <tt>mutable_buffer(data.size() ? &data[0] : 0,
1388
+ * data.size() * sizeof(Elem))</tt>.
1203
1389
  *
1204
1390
  * @note The buffer is invalidated by any non-const operation called on the
1205
1391
  * given string object.
1206
1392
  */
1207
1393
  template <typename Elem, typename Traits, typename Allocator>
1208
- inline const_buffers_1 buffer(
1209
- const std::basic_string<Elem, Traits, Allocator>& data)
1394
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(
1395
+ std::basic_string<Elem, Traits, Allocator>& data) BOOST_ASIO_NOEXCEPT
1210
1396
  {
1211
- return const_buffers_1(const_buffer(data.data(), data.size() * sizeof(Elem)
1397
+ return BOOST_ASIO_MUTABLE_BUFFER(data.size() ? &data[0] : 0,
1398
+ data.size() * sizeof(Elem)
1212
1399
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
1213
- , detail::buffer_debug_check<
1214
- typename std::basic_string<Elem, Traits, Allocator>::const_iterator
1215
- >(data.begin())
1400
+ , detail::buffer_debug_check<
1401
+ typename std::basic_string<Elem, Traits, Allocator>::iterator
1402
+ >(data.begin())
1216
1403
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
1217
- ));
1404
+ );
1218
1405
  }
1219
1406
 
1220
1407
  /// Create a new non-modifiable buffer that represents the given string.
1221
1408
  /**
1222
- * @returns A const_buffers_1 value equivalent to:
1223
- * @code const_buffers_1(
1224
- * data.data(),
1409
+ * @returns A mutable_buffer value equivalent to:
1410
+ * @code mutable_buffer(
1411
+ * data.size() ? &data[0] : 0,
1225
1412
  * min(data.size() * sizeof(Elem), max_size_in_bytes)); @endcode
1226
1413
  *
1227
1414
  * @note The buffer is invalidated by any non-const operation called on the
1228
1415
  * given string object.
1229
1416
  */
1230
1417
  template <typename Elem, typename Traits, typename Allocator>
1231
- inline const_buffers_1 buffer(
1232
- const std::basic_string<Elem, Traits, Allocator>& data,
1233
- std::size_t max_size_in_bytes)
1418
+ inline BOOST_ASIO_MUTABLE_BUFFER buffer(
1419
+ std::basic_string<Elem, Traits, Allocator>& data,
1420
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
1234
1421
  {
1235
- return const_buffers_1(
1236
- const_buffer(data.data(),
1237
- data.size() * sizeof(Elem) < max_size_in_bytes
1238
- ? data.size() * sizeof(Elem) : max_size_in_bytes
1422
+ return BOOST_ASIO_MUTABLE_BUFFER(data.size() ? &data[0] : 0,
1423
+ data.size() * sizeof(Elem) < max_size_in_bytes
1424
+ ? data.size() * sizeof(Elem) : max_size_in_bytes
1239
1425
  #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
1240
- , detail::buffer_debug_check<
1241
- typename std::basic_string<Elem, Traits, Allocator>::const_iterator
1242
- >(data.begin())
1426
+ , detail::buffer_debug_check<
1427
+ typename std::basic_string<Elem, Traits, Allocator>::iterator
1428
+ >(data.begin())
1243
1429
  #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
1244
- ));
1430
+ );
1245
1431
  }
1246
1432
 
1247
- /*@}*/
1248
-
1249
- /** @defgroup buffer_copy boost::asio::buffer_copy
1250
- *
1251
- * @brief The boost::asio::buffer_copy function is used to copy bytes from a
1252
- * source buffer (or buffer sequence) to a target buffer (or buffer sequence).
1253
- *
1254
- * The @c buffer_copy function is available in two forms:
1255
- *
1256
- * @li A 2-argument form: @c buffer_copy(target, source)
1257
- *
1258
- * @li A 3-argument form: @c buffer_copy(target, source, max_bytes_to_copy)
1259
-
1260
- * Both forms return the number of bytes actually copied. The number of bytes
1261
- * copied is the lesser of:
1262
- *
1263
- * @li @c buffer_size(target)
1264
- *
1265
- * @li @c buffer_size(source)
1266
- *
1267
- * @li @c If specified, @c max_bytes_to_copy.
1268
- *
1269
- * This prevents buffer overflow, regardless of the buffer sizes used in the
1270
- * copy operation.
1433
+ /// Create a new non-modifiable buffer that represents the given string.
1434
+ /**
1435
+ * @returns <tt>const_buffer(data.data(), data.size() * sizeof(Elem))</tt>.
1271
1436
  *
1272
- * Note that @ref buffer_copy is implemented in terms of @c memcpy, and
1273
- * consequently it cannot be used to copy between overlapping memory regions.
1437
+ * @note The buffer is invalidated by any non-const operation called on the
1438
+ * given string object.
1274
1439
  */
1275
- /*@{*/
1440
+ template <typename Elem, typename Traits, typename Allocator>
1441
+ inline BOOST_ASIO_CONST_BUFFER buffer(
1442
+ const std::basic_string<Elem, Traits, Allocator>& data) BOOST_ASIO_NOEXCEPT
1443
+ {
1444
+ return BOOST_ASIO_CONST_BUFFER(data.data(), data.size() * sizeof(Elem)
1445
+ #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
1446
+ , detail::buffer_debug_check<
1447
+ typename std::basic_string<Elem, Traits, Allocator>::const_iterator
1448
+ >(data.begin())
1449
+ #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
1450
+ );
1451
+ }
1276
1452
 
1277
- /// Copies bytes from a source buffer to a target buffer.
1453
+ /// Create a new non-modifiable buffer that represents the given string.
1278
1454
  /**
1279
- * @param target A modifiable buffer representing the memory region to which
1280
- * the bytes will be copied.
1281
- *
1282
- * @param source A non-modifiable buffer representing the memory region from
1283
- * which the bytes will be copied.
1284
- *
1285
- * @returns The number of bytes copied.
1286
- *
1287
- * @note The number of bytes copied is the lesser of:
1288
- *
1289
- * @li @c buffer_size(target)
1290
- *
1291
- * @li @c buffer_size(source)
1455
+ * @returns A const_buffer value equivalent to:
1456
+ * @code const_buffer(
1457
+ * data.data(),
1458
+ * min(data.size() * sizeof(Elem), max_size_in_bytes)); @endcode
1292
1459
  *
1293
- * This function is implemented in terms of @c memcpy, and consequently it
1294
- * cannot be used to copy between overlapping memory regions.
1460
+ * @note The buffer is invalidated by any non-const operation called on the
1461
+ * given string object.
1295
1462
  */
1296
- inline std::size_t buffer_copy(const mutable_buffer& target,
1297
- const const_buffer& source)
1463
+ template <typename Elem, typename Traits, typename Allocator>
1464
+ inline BOOST_ASIO_CONST_BUFFER buffer(
1465
+ const std::basic_string<Elem, Traits, Allocator>& data,
1466
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
1298
1467
  {
1299
- using namespace std; // For memcpy.
1300
- std::size_t target_size = buffer_size(target);
1301
- std::size_t source_size = buffer_size(source);
1302
- std::size_t n = target_size < source_size ? target_size : source_size;
1303
- memcpy(buffer_cast<void*>(target), buffer_cast<const void*>(source), n);
1304
- return n;
1468
+ return BOOST_ASIO_CONST_BUFFER(data.data(),
1469
+ data.size() * sizeof(Elem) < max_size_in_bytes
1470
+ ? data.size() * sizeof(Elem) : max_size_in_bytes
1471
+ #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
1472
+ , detail::buffer_debug_check<
1473
+ typename std::basic_string<Elem, Traits, Allocator>::const_iterator
1474
+ >(data.begin())
1475
+ #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
1476
+ );
1305
1477
  }
1306
1478
 
1307
- /// Copies bytes from a source buffer to a target buffer.
1479
+ #if defined(BOOST_ASIO_HAS_STRING_VIEW) \
1480
+ || defined(GENERATING_DOCUMENTATION)
1481
+
1482
+ /// Create a new modifiable buffer that represents the given string_view.
1308
1483
  /**
1309
- * @param target A modifiable buffer representing the memory region to which
1310
- * the bytes will be copied.
1311
- *
1312
- * @param source A non-modifiable buffer representing the memory region from
1313
- * which the bytes will be copied.
1314
- *
1315
- * @returns The number of bytes copied.
1316
- *
1317
- * @note The number of bytes copied is the lesser of:
1318
- *
1319
- * @li @c buffer_size(target)
1320
- *
1321
- * @li @c buffer_size(source)
1322
- *
1323
- * This function is implemented in terms of @c memcpy, and consequently it
1324
- * cannot be used to copy between overlapping memory regions.
1484
+ * @returns <tt>mutable_buffer(data.size() ? &data[0] : 0,
1485
+ * data.size() * sizeof(Elem))</tt>.
1325
1486
  */
1326
- inline std::size_t buffer_copy(const mutable_buffer& target,
1327
- const const_buffers_1& source)
1487
+ template <typename Elem, typename Traits>
1488
+ inline BOOST_ASIO_CONST_BUFFER buffer(
1489
+ basic_string_view<Elem, Traits> data) BOOST_ASIO_NOEXCEPT
1328
1490
  {
1329
- return buffer_copy(target, static_cast<const const_buffer&>(source));
1491
+ return BOOST_ASIO_CONST_BUFFER(data.size() ? &data[0] : 0,
1492
+ data.size() * sizeof(Elem)
1493
+ #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
1494
+ , detail::buffer_debug_check<
1495
+ typename basic_string_view<Elem, Traits>::iterator
1496
+ >(data.begin())
1497
+ #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
1498
+ );
1330
1499
  }
1331
1500
 
1332
- /// Copies bytes from a source buffer to a target buffer.
1501
+ /// Create a new non-modifiable buffer that represents the given string.
1333
1502
  /**
1334
- * @param target A modifiable buffer representing the memory region to which
1335
- * the bytes will be copied.
1336
- *
1337
- * @param source A modifiable buffer representing the memory region from which
1338
- * the bytes will be copied. The contents of the source buffer will not be
1339
- * modified.
1340
- *
1341
- * @returns The number of bytes copied.
1342
- *
1343
- * @note The number of bytes copied is the lesser of:
1344
- *
1345
- * @li @c buffer_size(target)
1346
- *
1347
- * @li @c buffer_size(source)
1348
- *
1349
- * This function is implemented in terms of @c memcpy, and consequently it
1350
- * cannot be used to copy between overlapping memory regions.
1503
+ * @returns A mutable_buffer value equivalent to:
1504
+ * @code mutable_buffer(
1505
+ * data.size() ? &data[0] : 0,
1506
+ * min(data.size() * sizeof(Elem), max_size_in_bytes)); @endcode
1351
1507
  */
1352
- inline std::size_t buffer_copy(const mutable_buffer& target,
1353
- const mutable_buffer& source)
1508
+ template <typename Elem, typename Traits>
1509
+ inline BOOST_ASIO_CONST_BUFFER buffer(
1510
+ basic_string_view<Elem, Traits> data,
1511
+ std::size_t max_size_in_bytes) BOOST_ASIO_NOEXCEPT
1354
1512
  {
1355
- return buffer_copy(target, const_buffer(source));
1513
+ return BOOST_ASIO_CONST_BUFFER(data.size() ? &data[0] : 0,
1514
+ data.size() * sizeof(Elem) < max_size_in_bytes
1515
+ ? data.size() * sizeof(Elem) : max_size_in_bytes
1516
+ #if defined(BOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
1517
+ , detail::buffer_debug_check<
1518
+ typename basic_string_view<Elem, Traits>::iterator
1519
+ >(data.begin())
1520
+ #endif // BOOST_ASIO_ENABLE_BUFFER_DEBUGGING
1521
+ );
1356
1522
  }
1357
1523
 
1358
- /// Copies bytes from a source buffer to a target buffer.
1359
- /**
1360
- * @param target A modifiable buffer representing the memory region to which
1361
- * the bytes will be copied.
1362
- *
1363
- * @param source A modifiable buffer representing the memory region from which
1364
- * the bytes will be copied. The contents of the source buffer will not be
1365
- * modified.
1366
- *
1367
- * @returns The number of bytes copied.
1368
- *
1369
- * @note The number of bytes copied is the lesser of:
1370
- *
1371
- * @li @c buffer_size(target)
1372
- *
1373
- * @li @c buffer_size(source)
1374
- *
1375
- * This function is implemented in terms of @c memcpy, and consequently it
1376
- * cannot be used to copy between overlapping memory regions.
1377
- */
1378
- inline std::size_t buffer_copy(const mutable_buffer& target,
1379
- const mutable_buffers_1& source)
1380
- {
1381
- return buffer_copy(target, const_buffer(source));
1382
- }
1524
+ #endif // defined(BOOST_ASIO_HAS_STRING_VIEW)
1525
+ // || defined(GENERATING_DOCUMENTATION)
1526
+
1527
+ /*@}*/
1383
1528
 
1384
- /// Copies bytes from a source buffer sequence to a target buffer.
1529
+ /// Adapt a basic_string to the DynamicBuffer requirements.
1385
1530
  /**
1386
- * @param target A modifiable buffer representing the memory region to which
1387
- * the bytes will be copied.
1388
- *
1389
- * @param source A non-modifiable buffer sequence representing the memory
1390
- * regions from which the bytes will be copied.
1391
- *
1392
- * @returns The number of bytes copied.
1393
- *
1394
- * @note The number of bytes copied is the lesser of:
1395
- *
1396
- * @li @c buffer_size(target)
1397
- *
1398
- * @li @c buffer_size(source)
1399
- *
1400
- * This function is implemented in terms of @c memcpy, and consequently it
1401
- * cannot be used to copy between overlapping memory regions.
1531
+ * Requires that <tt>sizeof(Elem) == 1</tt>.
1402
1532
  */
1403
- template <typename ConstBufferSequence>
1404
- std::size_t buffer_copy(const mutable_buffer& target,
1405
- const ConstBufferSequence& source)
1533
+ template <typename Elem, typename Traits, typename Allocator>
1534
+ class dynamic_string_buffer
1406
1535
  {
1407
- std::size_t total_bytes_copied = 0;
1408
-
1409
- typename ConstBufferSequence::const_iterator source_iter = source.begin();
1410
- typename ConstBufferSequence::const_iterator source_end = source.end();
1411
-
1412
- for (mutable_buffer target_buffer(target);
1413
- buffer_size(target_buffer) && source_iter != source_end; ++source_iter)
1536
+ public:
1537
+ /// The type used to represent the input sequence as a list of buffers.
1538
+ typedef BOOST_ASIO_CONST_BUFFER const_buffers_type;
1539
+
1540
+ /// The type used to represent the output sequence as a list of buffers.
1541
+ typedef BOOST_ASIO_MUTABLE_BUFFER mutable_buffers_type;
1542
+
1543
+ /// Construct a dynamic buffer from a string.
1544
+ /**
1545
+ * @param s The string to be used as backing storage for the dynamic buffer.
1546
+ * Any existing data in the string is treated as the dynamic buffer's input
1547
+ * sequence. The object stores a reference to the string and the user is
1548
+ * responsible for ensuring that the string object remains valid until the
1549
+ * dynamic_string_buffer object is destroyed.
1550
+ *
1551
+ * @param maximum_size Specifies a maximum size for the buffer, in bytes.
1552
+ */
1553
+ explicit dynamic_string_buffer(std::basic_string<Elem, Traits, Allocator>& s,
1554
+ std::size_t maximum_size =
1555
+ (std::numeric_limits<std::size_t>::max)()) BOOST_ASIO_NOEXCEPT
1556
+ : string_(s),
1557
+ size_(string_.size()),
1558
+ max_size_(maximum_size)
1414
1559
  {
1415
- const_buffer source_buffer(*source_iter);
1416
- std::size_t bytes_copied = buffer_copy(target_buffer, source_buffer);
1417
- total_bytes_copied += bytes_copied;
1418
- target_buffer = target_buffer + bytes_copied;
1419
1560
  }
1420
1561
 
1421
- return total_bytes_copied;
1422
- }
1562
+ #if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
1563
+ /// Move construct a dynamic buffer.
1564
+ dynamic_string_buffer(dynamic_string_buffer&& other) BOOST_ASIO_NOEXCEPT
1565
+ : string_(other.string_),
1566
+ size_(other.size_),
1567
+ max_size_(other.max_size_)
1568
+ {
1569
+ }
1570
+ #endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
1423
1571
 
1424
- /// Copies bytes from a source buffer to a target buffer.
1425
- /**
1426
- * @param target A modifiable buffer representing the memory region to which
1427
- * the bytes will be copied.
1428
- *
1429
- * @param source A non-modifiable buffer representing the memory region from
1430
- * which the bytes will be copied.
1431
- *
1432
- * @returns The number of bytes copied.
1433
- *
1434
- * @note The number of bytes copied is the lesser of:
1435
- *
1436
- * @li @c buffer_size(target)
1437
- *
1438
- * @li @c buffer_size(source)
1439
- *
1440
- * This function is implemented in terms of @c memcpy, and consequently it
1441
- * cannot be used to copy between overlapping memory regions.
1442
- */
1443
- inline std::size_t buffer_copy(const mutable_buffers_1& target,
1444
- const const_buffer& source)
1445
- {
1446
- return buffer_copy(static_cast<const mutable_buffer&>(target), source);
1447
- }
1572
+ /// Get the size of the input sequence.
1573
+ std::size_t size() const BOOST_ASIO_NOEXCEPT
1574
+ {
1575
+ return size_;
1576
+ }
1448
1577
 
1449
- /// Copies bytes from a source buffer to a target buffer.
1450
- /**
1451
- * @param target A modifiable buffer representing the memory region to which
1452
- * the bytes will be copied.
1453
- *
1454
- * @param source A non-modifiable buffer representing the memory region from
1455
- * which the bytes will be copied.
1456
- *
1457
- * @returns The number of bytes copied.
1458
- *
1459
- * @note The number of bytes copied is the lesser of:
1460
- *
1461
- * @li @c buffer_size(target)
1462
- *
1463
- * @li @c buffer_size(source)
1464
- *
1465
- * This function is implemented in terms of @c memcpy, and consequently it
1466
- * cannot be used to copy between overlapping memory regions.
1467
- */
1468
- inline std::size_t buffer_copy(const mutable_buffers_1& target,
1469
- const const_buffers_1& source)
1470
- {
1471
- return buffer_copy(static_cast<const mutable_buffer&>(target),
1472
- static_cast<const const_buffer&>(source));
1473
- }
1578
+ /// Get the maximum size of the dynamic buffer.
1579
+ /**
1580
+ * @returns The allowed maximum of the sum of the sizes of the input sequence
1581
+ * and output sequence.
1582
+ */
1583
+ std::size_t max_size() const BOOST_ASIO_NOEXCEPT
1584
+ {
1585
+ return max_size_;
1586
+ }
1474
1587
 
1475
- /// Copies bytes from a source buffer to a target buffer.
1476
- /**
1477
- * @param target A modifiable buffer representing the memory region to which
1478
- * the bytes will be copied.
1479
- *
1480
- * @param source A modifiable buffer representing the memory region from which
1481
- * the bytes will be copied. The contents of the source buffer will not be
1482
- * modified.
1483
- *
1484
- * @returns The number of bytes copied.
1485
- *
1486
- * @note The number of bytes copied is the lesser of:
1487
- *
1488
- * @li @c buffer_size(target)
1489
- *
1490
- * @li @c buffer_size(source)
1491
- *
1492
- * This function is implemented in terms of @c memcpy, and consequently it
1493
- * cannot be used to copy between overlapping memory regions.
1494
- */
1495
- inline std::size_t buffer_copy(const mutable_buffers_1& target,
1496
- const mutable_buffer& source)
1497
- {
1498
- return buffer_copy(static_cast<const mutable_buffer&>(target),
1499
- const_buffer(source));
1500
- }
1588
+ /// Get the current capacity of the dynamic buffer.
1589
+ /**
1590
+ * @returns The current total capacity of the buffer, i.e. for both the input
1591
+ * sequence and output sequence.
1592
+ */
1593
+ std::size_t capacity() const BOOST_ASIO_NOEXCEPT
1594
+ {
1595
+ return string_.capacity();
1596
+ }
1501
1597
 
1502
- /// Copies bytes from a source buffer to a target buffer.
1503
- /**
1504
- * @param target A modifiable buffer representing the memory region to which
1505
- * the bytes will be copied.
1506
- *
1507
- * @param source A modifiable buffer representing the memory region from which
1508
- * the bytes will be copied. The contents of the source buffer will not be
1509
- * modified.
1510
- *
1511
- * @returns The number of bytes copied.
1512
- *
1513
- * @note The number of bytes copied is the lesser of:
1514
- *
1515
- * @li @c buffer_size(target)
1516
- *
1517
- * @li @c buffer_size(source)
1518
- *
1519
- * This function is implemented in terms of @c memcpy, and consequently it
1520
- * cannot be used to copy between overlapping memory regions.
1521
- */
1522
- inline std::size_t buffer_copy(const mutable_buffers_1& target,
1523
- const mutable_buffers_1& source)
1524
- {
1525
- return buffer_copy(static_cast<const mutable_buffer&>(target),
1526
- const_buffer(source));
1527
- }
1598
+ /// Get a list of buffers that represents the input sequence.
1599
+ /**
1600
+ * @returns An object of type @c const_buffers_type that satisfies
1601
+ * ConstBufferSequence requirements, representing the basic_string memory in
1602
+ * input sequence.
1603
+ *
1604
+ * @note The returned object is invalidated by any @c dynamic_string_buffer
1605
+ * or @c basic_string member function that modifies the input sequence or
1606
+ * output sequence.
1607
+ */
1608
+ const_buffers_type data() const BOOST_ASIO_NOEXCEPT
1609
+ {
1610
+ return const_buffers_type(boost::asio::buffer(string_, size_));
1611
+ }
1528
1612
 
1529
- /// Copies bytes from a source buffer sequence to a target buffer.
1530
- /**
1531
- * @param target A modifiable buffer representing the memory region to which
1532
- * the bytes will be copied.
1533
- *
1534
- * @param source A non-modifiable buffer sequence representing the memory
1535
- * regions from which the bytes will be copied.
1536
- *
1537
- * @returns The number of bytes copied.
1538
- *
1539
- * @note The number of bytes copied is the lesser of:
1540
- *
1541
- * @li @c buffer_size(target)
1542
- *
1543
- * @li @c buffer_size(source)
1544
- *
1545
- * This function is implemented in terms of @c memcpy, and consequently it
1546
- * cannot be used to copy between overlapping memory regions.
1547
- */
1548
- template <typename ConstBufferSequence>
1549
- inline std::size_t buffer_copy(const mutable_buffers_1& target,
1550
- const ConstBufferSequence& source)
1551
- {
1552
- return buffer_copy(static_cast<const mutable_buffer&>(target), source);
1553
- }
1613
+ /// Get a list of buffers that represents the output sequence, with the given
1614
+ /// size.
1615
+ /**
1616
+ * Ensures that the output sequence can accommodate @c n bytes, resizing the
1617
+ * basic_string object as necessary.
1618
+ *
1619
+ * @returns An object of type @c mutable_buffers_type that satisfies
1620
+ * MutableBufferSequence requirements, representing basic_string memory
1621
+ * at the start of the output sequence of size @c n.
1622
+ *
1623
+ * @throws std::length_error If <tt>size() + n > max_size()</tt>.
1624
+ *
1625
+ * @note The returned object is invalidated by any @c dynamic_string_buffer
1626
+ * or @c basic_string member function that modifies the input sequence or
1627
+ * output sequence.
1628
+ */
1629
+ mutable_buffers_type prepare(std::size_t n)
1630
+ {
1631
+ if (size () > max_size() || max_size() - size() < n)
1632
+ {
1633
+ std::length_error ex("dynamic_string_buffer too long");
1634
+ boost::asio::detail::throw_exception(ex);
1635
+ }
1554
1636
 
1555
- /// Copies bytes from a source buffer to a target buffer sequence.
1556
- /**
1557
- * @param target A modifiable buffer sequence representing the memory regions to
1558
- * which the bytes will be copied.
1559
- *
1560
- * @param source A non-modifiable buffer representing the memory region from
1561
- * which the bytes will be copied.
1562
- *
1563
- * @returns The number of bytes copied.
1564
- *
1565
- * @note The number of bytes copied is the lesser of:
1566
- *
1567
- * @li @c buffer_size(target)
1568
- *
1569
- * @li @c buffer_size(source)
1570
- *
1571
- * This function is implemented in terms of @c memcpy, and consequently it
1572
- * cannot be used to copy between overlapping memory regions.
1573
- */
1574
- template <typename MutableBufferSequence>
1575
- std::size_t buffer_copy(const MutableBufferSequence& target,
1576
- const const_buffer& source)
1577
- {
1578
- std::size_t total_bytes_copied = 0;
1637
+ string_.resize(size_ + n);
1579
1638
 
1580
- typename MutableBufferSequence::const_iterator target_iter = target.begin();
1581
- typename MutableBufferSequence::const_iterator target_end = target.end();
1639
+ return boost::asio::buffer(boost::asio::buffer(string_) + size_, n);
1640
+ }
1582
1641
 
1583
- for (const_buffer source_buffer(source);
1584
- buffer_size(source_buffer) && target_iter != target_end; ++target_iter)
1642
+ /// Move bytes from the output sequence to the input sequence.
1643
+ /**
1644
+ * @param n The number of bytes to append from the start of the output
1645
+ * sequence to the end of the input sequence. The remainder of the output
1646
+ * sequence is discarded.
1647
+ *
1648
+ * Requires a preceding call <tt>prepare(x)</tt> where <tt>x >= n</tt>, and
1649
+ * no intervening operations that modify the input or output sequence.
1650
+ *
1651
+ * @note If @c n is greater than the size of the output sequence, the entire
1652
+ * output sequence is moved to the input sequence and no error is issued.
1653
+ */
1654
+ void commit(std::size_t n)
1585
1655
  {
1586
- mutable_buffer target_buffer(*target_iter);
1587
- std::size_t bytes_copied = buffer_copy(target_buffer, source_buffer);
1588
- total_bytes_copied += bytes_copied;
1589
- source_buffer = source_buffer + bytes_copied;
1656
+ size_ += (std::min)(n, string_.size() - size_);
1657
+ string_.resize(size_);
1590
1658
  }
1591
1659
 
1592
- return total_bytes_copied;
1593
- }
1594
-
1595
- /// Copies bytes from a source buffer to a target buffer sequence.
1596
- /**
1597
- * @param target A modifiable buffer sequence representing the memory regions to
1598
- * which the bytes will be copied.
1599
- *
1600
- * @param source A non-modifiable buffer representing the memory region from
1601
- * which the bytes will be copied.
1602
- *
1603
- * @returns The number of bytes copied.
1604
- *
1605
- * @note The number of bytes copied is the lesser of:
1606
- *
1607
- * @li @c buffer_size(target)
1608
- *
1609
- * @li @c buffer_size(source)
1610
- *
1611
- * This function is implemented in terms of @c memcpy, and consequently it
1612
- * cannot be used to copy between overlapping memory regions.
1613
- */
1614
- template <typename MutableBufferSequence>
1615
- inline std::size_t buffer_copy(const MutableBufferSequence& target,
1616
- const const_buffers_1& source)
1617
- {
1618
- return buffer_copy(target, static_cast<const const_buffer&>(source));
1619
- }
1620
-
1621
- /// Copies bytes from a source buffer to a target buffer sequence.
1622
- /**
1623
- * @param target A modifiable buffer sequence representing the memory regions to
1624
- * which the bytes will be copied.
1625
- *
1626
- * @param source A modifiable buffer representing the memory region from which
1627
- * the bytes will be copied. The contents of the source buffer will not be
1628
- * modified.
1629
- *
1630
- * @returns The number of bytes copied.
1631
- *
1632
- * @note The number of bytes copied is the lesser of:
1633
- *
1634
- * @li @c buffer_size(target)
1635
- *
1636
- * @li @c buffer_size(source)
1637
- *
1638
- * This function is implemented in terms of @c memcpy, and consequently it
1639
- * cannot be used to copy between overlapping memory regions.
1640
- */
1641
- template <typename MutableBufferSequence>
1642
- inline std::size_t buffer_copy(const MutableBufferSequence& target,
1643
- const mutable_buffer& source)
1644
- {
1645
- return buffer_copy(target, const_buffer(source));
1646
- }
1660
+ /// Remove characters from the input sequence.
1661
+ /**
1662
+ * Removes @c n characters from the beginning of the input sequence.
1663
+ *
1664
+ * @note If @c n is greater than the size of the input sequence, the entire
1665
+ * input sequence is consumed and no error is issued.
1666
+ */
1667
+ void consume(std::size_t n)
1668
+ {
1669
+ std::size_t consume_length = (std::min)(n, size_);
1670
+ string_.erase(0, consume_length);
1671
+ size_ -= consume_length;
1672
+ }
1647
1673
 
1648
- /// Copies bytes from a source buffer to a target buffer sequence.
1649
- /**
1650
- * @param target A modifiable buffer sequence representing the memory regions to
1651
- * which the bytes will be copied.
1652
- *
1653
- * @param source A modifiable buffer representing the memory region from which
1654
- * the bytes will be copied. The contents of the source buffer will not be
1655
- * modified.
1656
- *
1657
- * @returns The number of bytes copied.
1658
- *
1659
- * @note The number of bytes copied is the lesser of:
1660
- *
1661
- * @li @c buffer_size(target)
1662
- *
1663
- * @li @c buffer_size(source)
1664
- *
1665
- * This function is implemented in terms of @c memcpy, and consequently it
1666
- * cannot be used to copy between overlapping memory regions.
1667
- */
1668
- template <typename MutableBufferSequence>
1669
- inline std::size_t buffer_copy(const MutableBufferSequence& target,
1670
- const mutable_buffers_1& source)
1671
- {
1672
- return buffer_copy(target, const_buffer(source));
1673
- }
1674
+ private:
1675
+ std::basic_string<Elem, Traits, Allocator>& string_;
1676
+ std::size_t size_;
1677
+ const std::size_t max_size_;
1678
+ };
1674
1679
 
1675
- /// Copies bytes from a source buffer sequence to a target buffer sequence.
1680
+ /// Adapt a vector to the DynamicBuffer requirements.
1676
1681
  /**
1677
- * @param target A modifiable buffer sequence representing the memory regions to
1678
- * which the bytes will be copied.
1679
- *
1680
- * @param source A non-modifiable buffer sequence representing the memory
1681
- * regions from which the bytes will be copied.
1682
- *
1683
- * @returns The number of bytes copied.
1684
- *
1685
- * @note The number of bytes copied is the lesser of:
1686
- *
1687
- * @li @c buffer_size(target)
1688
- *
1689
- * @li @c buffer_size(source)
1690
- *
1691
- * This function is implemented in terms of @c memcpy, and consequently it
1692
- * cannot be used to copy between overlapping memory regions.
1682
+ * Requires that <tt>sizeof(Elem) == 1</tt>.
1693
1683
  */
1694
- template <typename MutableBufferSequence, typename ConstBufferSequence>
1695
- std::size_t buffer_copy(const MutableBufferSequence& target,
1696
- const ConstBufferSequence& source)
1684
+ template <typename Elem, typename Allocator>
1685
+ class dynamic_vector_buffer
1697
1686
  {
1698
- std::size_t total_bytes_copied = 0;
1699
-
1700
- typename MutableBufferSequence::const_iterator target_iter = target.begin();
1701
- typename MutableBufferSequence::const_iterator target_end = target.end();
1702
- std::size_t target_buffer_offset = 0;
1687
+ public:
1688
+ /// The type used to represent the input sequence as a list of buffers.
1689
+ typedef BOOST_ASIO_CONST_BUFFER const_buffers_type;
1690
+
1691
+ /// The type used to represent the output sequence as a list of buffers.
1692
+ typedef BOOST_ASIO_MUTABLE_BUFFER mutable_buffers_type;
1693
+
1694
+ /// Construct a dynamic buffer from a string.
1695
+ /**
1696
+ * @param v The vector to be used as backing storage for the dynamic buffer.
1697
+ * Any existing data in the vector is treated as the dynamic buffer's input
1698
+ * sequence. The object stores a reference to the vector and the user is
1699
+ * responsible for ensuring that the vector object remains valid until the
1700
+ * dynamic_vector_buffer object is destroyed.
1701
+ *
1702
+ * @param maximum_size Specifies a maximum size for the buffer, in bytes.
1703
+ */
1704
+ explicit dynamic_vector_buffer(std::vector<Elem, Allocator>& v,
1705
+ std::size_t maximum_size =
1706
+ (std::numeric_limits<std::size_t>::max)()) BOOST_ASIO_NOEXCEPT
1707
+ : vector_(v),
1708
+ size_(vector_.size()),
1709
+ max_size_(maximum_size)
1710
+ {
1711
+ }
1703
1712
 
1704
- typename ConstBufferSequence::const_iterator source_iter = source.begin();
1705
- typename ConstBufferSequence::const_iterator source_end = source.end();
1706
- std::size_t source_buffer_offset = 0;
1713
+ #if defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
1714
+ /// Move construct a dynamic buffer.
1715
+ dynamic_vector_buffer(dynamic_vector_buffer&& other) BOOST_ASIO_NOEXCEPT
1716
+ : vector_(other.vector_),
1717
+ size_(other.size_),
1718
+ max_size_(other.max_size_)
1719
+ {
1720
+ }
1721
+ #endif // defined(BOOST_ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
1707
1722
 
1708
- while (target_iter != target_end && source_iter != source_end)
1723
+ /// Get the size of the input sequence.
1724
+ std::size_t size() const BOOST_ASIO_NOEXCEPT
1709
1725
  {
1710
- mutable_buffer target_buffer =
1711
- mutable_buffer(*target_iter) + target_buffer_offset;
1726
+ return size_;
1727
+ }
1712
1728
 
1713
- const_buffer source_buffer =
1714
- const_buffer(*source_iter) + source_buffer_offset;
1729
+ /// Get the maximum size of the dynamic buffer.
1730
+ /**
1731
+ * @returns The allowed maximum of the sum of the sizes of the input sequence
1732
+ * and output sequence.
1733
+ */
1734
+ std::size_t max_size() const BOOST_ASIO_NOEXCEPT
1735
+ {
1736
+ return max_size_;
1737
+ }
1715
1738
 
1716
- std::size_t bytes_copied = buffer_copy(target_buffer, source_buffer);
1717
- total_bytes_copied += bytes_copied;
1739
+ /// Get the current capacity of the dynamic buffer.
1740
+ /**
1741
+ * @returns The current total capacity of the buffer, i.e. for both the input
1742
+ * sequence and output sequence.
1743
+ */
1744
+ std::size_t capacity() const BOOST_ASIO_NOEXCEPT
1745
+ {
1746
+ return vector_.capacity();
1747
+ }
1718
1748
 
1719
- if (bytes_copied == buffer_size(target_buffer))
1720
- {
1721
- ++target_iter;
1722
- target_buffer_offset = 0;
1723
- }
1724
- else
1725
- target_buffer_offset += bytes_copied;
1749
+ /// Get a list of buffers that represents the input sequence.
1750
+ /**
1751
+ * @returns An object of type @c const_buffers_type that satisfies
1752
+ * ConstBufferSequence requirements, representing the basic_string memory in
1753
+ * input sequence.
1754
+ *
1755
+ * @note The returned object is invalidated by any @c dynamic_vector_buffer
1756
+ * or @c basic_string member function that modifies the input sequence or
1757
+ * output sequence.
1758
+ */
1759
+ const_buffers_type data() const BOOST_ASIO_NOEXCEPT
1760
+ {
1761
+ return const_buffers_type(boost::asio::buffer(vector_, size_));
1762
+ }
1726
1763
 
1727
- if (bytes_copied == buffer_size(source_buffer))
1764
+ /// Get a list of buffers that represents the output sequence, with the given
1765
+ /// size.
1766
+ /**
1767
+ * Ensures that the output sequence can accommodate @c n bytes, resizing the
1768
+ * basic_string object as necessary.
1769
+ *
1770
+ * @returns An object of type @c mutable_buffers_type that satisfies
1771
+ * MutableBufferSequence requirements, representing basic_string memory
1772
+ * at the start of the output sequence of size @c n.
1773
+ *
1774
+ * @throws std::length_error If <tt>size() + n > max_size()</tt>.
1775
+ *
1776
+ * @note The returned object is invalidated by any @c dynamic_vector_buffer
1777
+ * or @c basic_string member function that modifies the input sequence or
1778
+ * output sequence.
1779
+ */
1780
+ mutable_buffers_type prepare(std::size_t n)
1781
+ {
1782
+ if (size () > max_size() || max_size() - size() < n)
1728
1783
  {
1729
- ++source_iter;
1730
- source_buffer_offset = 0;
1784
+ std::length_error ex("dynamic_vector_buffer too long");
1785
+ boost::asio::detail::throw_exception(ex);
1731
1786
  }
1732
- else
1733
- source_buffer_offset += bytes_copied;
1734
- }
1735
1787
 
1736
- return total_bytes_copied;
1737
- }
1788
+ vector_.resize(size_ + n);
1738
1789
 
1739
- /// Copies a limited number of bytes from a source buffer to a target buffer.
1740
- /**
1741
- * @param target A modifiable buffer representing the memory region to which
1742
- * the bytes will be copied.
1743
- *
1744
- * @param source A non-modifiable buffer representing the memory region from
1745
- * which the bytes will be copied.
1746
- *
1747
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
1748
- *
1749
- * @returns The number of bytes copied.
1750
- *
1751
- * @note The number of bytes copied is the lesser of:
1752
- *
1753
- * @li @c buffer_size(target)
1754
- *
1755
- * @li @c buffer_size(source)
1756
- *
1757
- * @li @c max_bytes_to_copy
1758
- *
1759
- * This function is implemented in terms of @c memcpy, and consequently it
1760
- * cannot be used to copy between overlapping memory regions.
1761
- */
1762
- inline std::size_t buffer_copy(const mutable_buffer& target,
1763
- const const_buffer& source, std::size_t max_bytes_to_copy)
1764
- {
1765
- return buffer_copy(buffer(target, max_bytes_to_copy), source);
1766
- }
1767
-
1768
- /// Copies a limited number of bytes from a source buffer to a target buffer.
1769
- /**
1770
- * @param target A modifiable buffer representing the memory region to which
1771
- * the bytes will be copied.
1772
- *
1773
- * @param source A non-modifiable buffer representing the memory region from
1774
- * which the bytes will be copied.
1775
- *
1776
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
1777
- *
1778
- * @returns The number of bytes copied.
1779
- *
1780
- * @note The number of bytes copied is the lesser of:
1781
- *
1782
- * @li @c buffer_size(target)
1783
- *
1784
- * @li @c buffer_size(source)
1785
- *
1786
- * @li @c max_bytes_to_copy
1787
- *
1788
- * This function is implemented in terms of @c memcpy, and consequently it
1789
- * cannot be used to copy between overlapping memory regions.
1790
- */
1791
- inline std::size_t buffer_copy(const mutable_buffer& target,
1792
- const const_buffers_1& source, std::size_t max_bytes_to_copy)
1793
- {
1794
- return buffer_copy(buffer(target, max_bytes_to_copy), source);
1795
- }
1796
-
1797
- /// Copies a limited number of bytes from a source buffer to a target buffer.
1798
- /**
1799
- * @param target A modifiable buffer representing the memory region to which
1800
- * the bytes will be copied.
1801
- *
1802
- * @param source A modifiable buffer representing the memory region from which
1803
- * the bytes will be copied. The contents of the source buffer will not be
1804
- * modified.
1805
- *
1806
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
1807
- *
1808
- * @returns The number of bytes copied.
1809
- *
1810
- * @note The number of bytes copied is the lesser of:
1811
- *
1812
- * @li @c buffer_size(target)
1813
- *
1814
- * @li @c buffer_size(source)
1815
- *
1816
- * @li @c max_bytes_to_copy
1817
- *
1818
- * This function is implemented in terms of @c memcpy, and consequently it
1819
- * cannot be used to copy between overlapping memory regions.
1820
- */
1821
- inline std::size_t buffer_copy(const mutable_buffer& target,
1822
- const mutable_buffer& source, std::size_t max_bytes_to_copy)
1823
- {
1824
- return buffer_copy(buffer(target, max_bytes_to_copy), source);
1825
- }
1790
+ return boost::asio::buffer(boost::asio::buffer(vector_) + size_, n);
1791
+ }
1826
1792
 
1827
- /// Copies a limited number of bytes from a source buffer to a target buffer.
1828
- /**
1829
- * @param target A modifiable buffer representing the memory region to which
1830
- * the bytes will be copied.
1831
- *
1832
- * @param source A modifiable buffer representing the memory region from which
1833
- * the bytes will be copied. The contents of the source buffer will not be
1834
- * modified.
1835
- *
1836
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
1837
- *
1838
- * @returns The number of bytes copied.
1839
- *
1840
- * @note The number of bytes copied is the lesser of:
1841
- *
1842
- * @li @c buffer_size(target)
1843
- *
1844
- * @li @c buffer_size(source)
1845
- *
1846
- * @li @c max_bytes_to_copy
1847
- *
1848
- * This function is implemented in terms of @c memcpy, and consequently it
1849
- * cannot be used to copy between overlapping memory regions.
1850
- */
1851
- inline std::size_t buffer_copy(const mutable_buffer& target,
1852
- const mutable_buffers_1& source, std::size_t max_bytes_to_copy)
1853
- {
1854
- return buffer_copy(buffer(target, max_bytes_to_copy), source);
1855
- }
1793
+ /// Move bytes from the output sequence to the input sequence.
1794
+ /**
1795
+ * @param n The number of bytes to append from the start of the output
1796
+ * sequence to the end of the input sequence. The remainder of the output
1797
+ * sequence is discarded.
1798
+ *
1799
+ * Requires a preceding call <tt>prepare(x)</tt> where <tt>x >= n</tt>, and
1800
+ * no intervening operations that modify the input or output sequence.
1801
+ *
1802
+ * @note If @c n is greater than the size of the output sequence, the entire
1803
+ * output sequence is moved to the input sequence and no error is issued.
1804
+ */
1805
+ void commit(std::size_t n)
1806
+ {
1807
+ size_ += (std::min)(n, vector_.size() - size_);
1808
+ vector_.resize(size_);
1809
+ }
1856
1810
 
1857
- /// Copies a limited number of bytes from a source buffer sequence to a target
1858
- /// buffer.
1859
- /**
1860
- * @param target A modifiable buffer representing the memory region to which
1861
- * the bytes will be copied.
1862
- *
1863
- * @param source A non-modifiable buffer sequence representing the memory
1864
- * regions from which the bytes will be copied.
1865
- *
1866
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
1867
- *
1868
- * @returns The number of bytes copied.
1869
- *
1870
- * @note The number of bytes copied is the lesser of:
1871
- *
1872
- * @li @c buffer_size(target)
1873
- *
1874
- * @li @c buffer_size(source)
1875
- *
1876
- * @li @c max_bytes_to_copy
1877
- *
1878
- * This function is implemented in terms of @c memcpy, and consequently it
1879
- * cannot be used to copy between overlapping memory regions.
1880
- */
1881
- template <typename ConstBufferSequence>
1882
- inline std::size_t buffer_copy(const mutable_buffer& target,
1883
- const ConstBufferSequence& source, std::size_t max_bytes_to_copy)
1884
- {
1885
- return buffer_copy(buffer(target, max_bytes_to_copy), source);
1886
- }
1811
+ /// Remove characters from the input sequence.
1812
+ /**
1813
+ * Removes @c n characters from the beginning of the input sequence.
1814
+ *
1815
+ * @note If @c n is greater than the size of the input sequence, the entire
1816
+ * input sequence is consumed and no error is issued.
1817
+ */
1818
+ void consume(std::size_t n)
1819
+ {
1820
+ std::size_t consume_length = (std::min)(n, size_);
1821
+ vector_.erase(vector_.begin(), vector_.begin() + consume_length);
1822
+ size_ -= consume_length;
1823
+ }
1887
1824
 
1888
- /// Copies a limited number of bytes from a source buffer to a target buffer.
1889
- /**
1890
- * @param target A modifiable buffer representing the memory region to which
1891
- * the bytes will be copied.
1892
- *
1893
- * @param source A non-modifiable buffer representing the memory region from
1894
- * which the bytes will be copied.
1895
- *
1896
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
1897
- *
1898
- * @returns The number of bytes copied.
1899
- *
1900
- * @note The number of bytes copied is the lesser of:
1901
- *
1902
- * @li @c buffer_size(target)
1903
- *
1904
- * @li @c buffer_size(source)
1905
- *
1906
- * @li @c max_bytes_to_copy
1907
- *
1908
- * This function is implemented in terms of @c memcpy, and consequently it
1909
- * cannot be used to copy between overlapping memory regions.
1910
- */
1911
- inline std::size_t buffer_copy(const mutable_buffers_1& target,
1912
- const const_buffer& source, std::size_t max_bytes_to_copy)
1913
- {
1914
- return buffer_copy(buffer(target, max_bytes_to_copy), source);
1915
- }
1825
+ private:
1826
+ std::vector<Elem, Allocator>& vector_;
1827
+ std::size_t size_;
1828
+ const std::size_t max_size_;
1829
+ };
1916
1830
 
1917
- /// Copies a limited number of bytes from a source buffer to a target buffer.
1918
- /**
1919
- * @param target A modifiable buffer representing the memory region to which
1920
- * the bytes will be copied.
1921
- *
1922
- * @param source A non-modifiable buffer representing the memory region from
1923
- * which the bytes will be copied.
1924
- *
1925
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
1926
- *
1927
- * @returns The number of bytes copied.
1831
+ /** @defgroup dynamic_buffer boost::asio::dynamic_buffer
1928
1832
  *
1929
- * @note The number of bytes copied is the lesser of:
1930
- *
1931
- * @li @c buffer_size(target)
1932
- *
1933
- * @li @c buffer_size(source)
1934
- *
1935
- * @li @c max_bytes_to_copy
1936
- *
1937
- * This function is implemented in terms of @c memcpy, and consequently it
1938
- * cannot be used to copy between overlapping memory regions.
1833
+ * @brief The boost::asio::dynamic_buffer function is used to create a
1834
+ * dynamically resized buffer from a @c std::basic_string or @c std::vector.
1939
1835
  */
1940
- inline std::size_t buffer_copy(const mutable_buffers_1& target,
1941
- const const_buffers_1& source, std::size_t max_bytes_to_copy)
1942
- {
1943
- return buffer_copy(buffer(target, max_bytes_to_copy), source);
1944
- }
1836
+ /*@{*/
1945
1837
 
1946
- /// Copies a limited number of bytes from a source buffer to a target buffer.
1947
- /**
1948
- * @param target A modifiable buffer representing the memory region to which
1949
- * the bytes will be copied.
1950
- *
1951
- * @param source A modifiable buffer representing the memory region from which
1952
- * the bytes will be copied. The contents of the source buffer will not be
1953
- * modified.
1954
- *
1955
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
1956
- *
1957
- * @returns The number of bytes copied.
1958
- *
1959
- * @note The number of bytes copied is the lesser of:
1960
- *
1961
- * @li @c buffer_size(target)
1962
- *
1963
- * @li @c buffer_size(source)
1964
- *
1965
- * @li @c max_bytes_to_copy
1966
- *
1967
- * This function is implemented in terms of @c memcpy, and consequently it
1968
- * cannot be used to copy between overlapping memory regions.
1838
+ /// Create a new dynamic buffer that represents the given string.
1839
+ /**
1840
+ * @returns <tt>dynamic_string_buffer<Elem, Traits, Allocator>(data)</tt>.
1969
1841
  */
1970
- inline std::size_t buffer_copy(const mutable_buffers_1& target,
1971
- const mutable_buffer& source, std::size_t max_bytes_to_copy)
1842
+ template <typename Elem, typename Traits, typename Allocator>
1843
+ inline dynamic_string_buffer<Elem, Traits, Allocator> dynamic_buffer(
1844
+ std::basic_string<Elem, Traits, Allocator>& data) BOOST_ASIO_NOEXCEPT
1972
1845
  {
1973
- return buffer_copy(buffer(target, max_bytes_to_copy), source);
1846
+ return dynamic_string_buffer<Elem, Traits, Allocator>(data);
1974
1847
  }
1975
1848
 
1976
- /// Copies a limited number of bytes from a source buffer to a target buffer.
1849
+ /// Create a new dynamic buffer that represents the given string.
1977
1850
  /**
1978
- * @param target A modifiable buffer representing the memory region to which
1979
- * the bytes will be copied.
1980
- *
1981
- * @param source A modifiable buffer representing the memory region from which
1982
- * the bytes will be copied. The contents of the source buffer will not be
1983
- * modified.
1984
- *
1985
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
1986
- *
1987
- * @returns The number of bytes copied.
1988
- *
1989
- * @note The number of bytes copied is the lesser of:
1990
- *
1991
- * @li @c buffer_size(target)
1992
- *
1993
- * @li @c buffer_size(source)
1994
- *
1995
- * @li @c max_bytes_to_copy
1996
- *
1997
- * This function is implemented in terms of @c memcpy, and consequently it
1998
- * cannot be used to copy between overlapping memory regions.
1851
+ * @returns <tt>dynamic_string_buffer<Elem, Traits, Allocator>(data,
1852
+ * max_size)</tt>.
1999
1853
  */
2000
- inline std::size_t buffer_copy(const mutable_buffers_1& target,
2001
- const mutable_buffers_1& source, std::size_t max_bytes_to_copy)
1854
+ template <typename Elem, typename Traits, typename Allocator>
1855
+ inline dynamic_string_buffer<Elem, Traits, Allocator> dynamic_buffer(
1856
+ std::basic_string<Elem, Traits, Allocator>& data,
1857
+ std::size_t max_size) BOOST_ASIO_NOEXCEPT
2002
1858
  {
2003
- return buffer_copy(buffer(target, max_bytes_to_copy), source);
1859
+ return dynamic_string_buffer<Elem, Traits, Allocator>(data, max_size);
2004
1860
  }
2005
1861
 
2006
- /// Copies a limited number of bytes from a source buffer sequence to a target
2007
- /// buffer.
1862
+ /// Create a new dynamic buffer that represents the given vector.
2008
1863
  /**
2009
- * @param target A modifiable buffer representing the memory region to which
2010
- * the bytes will be copied.
2011
- *
2012
- * @param source A non-modifiable buffer sequence representing the memory
2013
- * regions from which the bytes will be copied.
2014
- *
2015
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
2016
- *
2017
- * @returns The number of bytes copied.
2018
- *
2019
- * @note The number of bytes copied is the lesser of:
2020
- *
2021
- * @li @c buffer_size(target)
2022
- *
2023
- * @li @c buffer_size(source)
2024
- *
2025
- * @li @c max_bytes_to_copy
2026
- *
2027
- * This function is implemented in terms of @c memcpy, and consequently it
2028
- * cannot be used to copy between overlapping memory regions.
1864
+ * @returns <tt>dynamic_vector_buffer<Elem, Allocator>(data)</tt>.
2029
1865
  */
2030
- template <typename ConstBufferSequence>
2031
- inline std::size_t buffer_copy(const mutable_buffers_1& target,
2032
- const ConstBufferSequence& source, std::size_t max_bytes_to_copy)
1866
+ template <typename Elem, typename Allocator>
1867
+ inline dynamic_vector_buffer<Elem, Allocator> dynamic_buffer(
1868
+ std::vector<Elem, Allocator>& data) BOOST_ASIO_NOEXCEPT
2033
1869
  {
2034
- return buffer_copy(buffer(target, max_bytes_to_copy), source);
1870
+ return dynamic_vector_buffer<Elem, Allocator>(data);
2035
1871
  }
2036
1872
 
2037
- /// Copies a limited number of bytes from a source buffer to a target buffer
2038
- /// sequence.
1873
+ /// Create a new dynamic buffer that represents the given vector.
2039
1874
  /**
2040
- * @param target A modifiable buffer sequence representing the memory regions to
2041
- * which the bytes will be copied.
2042
- *
2043
- * @param source A non-modifiable buffer representing the memory region from
2044
- * which the bytes will be copied.
2045
- *
2046
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
2047
- *
2048
- * @returns The number of bytes copied.
2049
- *
2050
- * @note The number of bytes copied is the lesser of:
2051
- *
2052
- * @li @c buffer_size(target)
2053
- *
2054
- * @li @c buffer_size(source)
2055
- *
2056
- * @li @c max_bytes_to_copy
2057
- *
2058
- * This function is implemented in terms of @c memcpy, and consequently it
2059
- * cannot be used to copy between overlapping memory regions.
1875
+ * @returns <tt>dynamic_vector_buffer<Elem, Allocator>(data, max_size)</tt>.
2060
1876
  */
2061
- template <typename MutableBufferSequence>
2062
- inline std::size_t buffer_copy(const MutableBufferSequence& target,
2063
- const const_buffer& source, std::size_t max_bytes_to_copy)
1877
+ template <typename Elem, typename Allocator>
1878
+ inline dynamic_vector_buffer<Elem, Allocator> dynamic_buffer(
1879
+ std::vector<Elem, Allocator>& data,
1880
+ std::size_t max_size) BOOST_ASIO_NOEXCEPT
2064
1881
  {
2065
- return buffer_copy(target, buffer(source, max_bytes_to_copy));
1882
+ return dynamic_vector_buffer<Elem, Allocator>(data, max_size);
2066
1883
  }
2067
1884
 
2068
- /// Copies a limited number of bytes from a source buffer to a target buffer
2069
- /// sequence.
2070
- /**
2071
- * @param target A modifiable buffer sequence representing the memory regions to
2072
- * which the bytes will be copied.
1885
+ /*@}*/
1886
+
1887
+ /** @defgroup buffer_copy boost::asio::buffer_copy
2073
1888
  *
2074
- * @param source A non-modifiable buffer representing the memory region from
2075
- * which the bytes will be copied.
1889
+ * @brief The boost::asio::buffer_copy function is used to copy bytes from a
1890
+ * source buffer (or buffer sequence) to a target buffer (or buffer sequence).
2076
1891
  *
2077
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
1892
+ * The @c buffer_copy function is available in two forms:
2078
1893
  *
2079
- * @returns The number of bytes copied.
1894
+ * @li A 2-argument form: @c buffer_copy(target, source)
2080
1895
  *
2081
- * @note The number of bytes copied is the lesser of:
1896
+ * @li A 3-argument form: @c buffer_copy(target, source, max_bytes_to_copy)
1897
+ *
1898
+ * Both forms return the number of bytes actually copied. The number of bytes
1899
+ * copied is the lesser of:
2082
1900
  *
2083
1901
  * @li @c buffer_size(target)
2084
1902
  *
2085
1903
  * @li @c buffer_size(source)
2086
1904
  *
2087
- * @li @c max_bytes_to_copy
1905
+ * @li @c If specified, @c max_bytes_to_copy.
2088
1906
  *
2089
- * This function is implemented in terms of @c memcpy, and consequently it
2090
- * cannot be used to copy between overlapping memory regions.
1907
+ * This prevents buffer overflow, regardless of the buffer sizes used in the
1908
+ * copy operation.
1909
+ *
1910
+ * Note that @ref buffer_copy is implemented in terms of @c memcpy, and
1911
+ * consequently it cannot be used to copy between overlapping memory regions.
2091
1912
  */
2092
- template <typename MutableBufferSequence>
2093
- inline std::size_t buffer_copy(const MutableBufferSequence& target,
2094
- const const_buffers_1& source, std::size_t max_bytes_to_copy)
1913
+ /*@{*/
1914
+
1915
+ namespace detail {
1916
+
1917
+ inline std::size_t buffer_copy_1(const mutable_buffer& target,
1918
+ const const_buffer& source)
2095
1919
  {
2096
- return buffer_copy(target, buffer(source, max_bytes_to_copy));
1920
+ using namespace std; // For memcpy.
1921
+ std::size_t target_size = target.size();
1922
+ std::size_t source_size = source.size();
1923
+ std::size_t n = target_size < source_size ? target_size : source_size;
1924
+ if (n > 0)
1925
+ memcpy(target.data(), source.data(), n);
1926
+ return n;
2097
1927
  }
2098
1928
 
2099
- /// Copies a limited number of bytes from a source buffer to a target buffer
2100
- /// sequence.
2101
- /**
2102
- * @param target A modifiable buffer sequence representing the memory regions to
2103
- * which the bytes will be copied.
2104
- *
2105
- * @param source A modifiable buffer representing the memory region from which
2106
- * the bytes will be copied. The contents of the source buffer will not be
2107
- * modified.
2108
- *
2109
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
2110
- *
2111
- * @returns The number of bytes copied.
2112
- *
2113
- * @note The number of bytes copied is the lesser of:
2114
- *
2115
- * @li @c buffer_size(target)
2116
- *
2117
- * @li @c buffer_size(source)
2118
- *
2119
- * @li @c max_bytes_to_copy
2120
- *
2121
- * This function is implemented in terms of @c memcpy, and consequently it
2122
- * cannot be used to copy between overlapping memory regions.
2123
- */
2124
- template <typename MutableBufferSequence>
2125
- inline std::size_t buffer_copy(const MutableBufferSequence& target,
2126
- const mutable_buffer& source, std::size_t max_bytes_to_copy)
1929
+ template <typename TargetIterator, typename SourceIterator>
1930
+ inline std::size_t buffer_copy(one_buffer, one_buffer,
1931
+ TargetIterator target_begin, TargetIterator,
1932
+ SourceIterator source_begin, SourceIterator) BOOST_ASIO_NOEXCEPT
1933
+ {
1934
+ return (buffer_copy_1)(*target_begin, *source_begin);
1935
+ }
1936
+
1937
+ template <typename TargetIterator, typename SourceIterator>
1938
+ inline std::size_t buffer_copy(one_buffer, one_buffer,
1939
+ TargetIterator target_begin, TargetIterator,
1940
+ SourceIterator source_begin, SourceIterator,
1941
+ std::size_t max_bytes_to_copy) BOOST_ASIO_NOEXCEPT
1942
+ {
1943
+ return (buffer_copy_1)(*target_begin,
1944
+ boost::asio::buffer(*source_begin, max_bytes_to_copy));
1945
+ }
1946
+
1947
+ template <typename TargetIterator, typename SourceIterator>
1948
+ std::size_t buffer_copy(one_buffer, multiple_buffers,
1949
+ TargetIterator target_begin, TargetIterator,
1950
+ SourceIterator source_begin, SourceIterator source_end,
1951
+ std::size_t max_bytes_to_copy
1952
+ = (std::numeric_limits<std::size_t>::max)()) BOOST_ASIO_NOEXCEPT
1953
+ {
1954
+ std::size_t total_bytes_copied = 0;
1955
+ SourceIterator source_iter = source_begin;
1956
+
1957
+ for (mutable_buffer target_buffer(
1958
+ boost::asio::buffer(*target_begin, max_bytes_to_copy));
1959
+ target_buffer.size() && source_iter != source_end; ++source_iter)
1960
+ {
1961
+ const_buffer source_buffer(*source_iter);
1962
+ std::size_t bytes_copied = (buffer_copy_1)(target_buffer, source_buffer);
1963
+ total_bytes_copied += bytes_copied;
1964
+ target_buffer += bytes_copied;
1965
+ }
1966
+
1967
+ return total_bytes_copied;
1968
+ }
1969
+
1970
+ template <typename TargetIterator, typename SourceIterator>
1971
+ std::size_t buffer_copy(multiple_buffers, one_buffer,
1972
+ TargetIterator target_begin, TargetIterator target_end,
1973
+ SourceIterator source_begin, SourceIterator,
1974
+ std::size_t max_bytes_to_copy
1975
+ = (std::numeric_limits<std::size_t>::max)()) BOOST_ASIO_NOEXCEPT
1976
+ {
1977
+ std::size_t total_bytes_copied = 0;
1978
+ TargetIterator target_iter = target_begin;
1979
+
1980
+ for (const_buffer source_buffer(
1981
+ boost::asio::buffer(*source_begin, max_bytes_to_copy));
1982
+ source_buffer.size() && target_iter != target_end; ++target_iter)
1983
+ {
1984
+ mutable_buffer target_buffer(*target_iter);
1985
+ std::size_t bytes_copied = (buffer_copy_1)(target_buffer, source_buffer);
1986
+ total_bytes_copied += bytes_copied;
1987
+ source_buffer += bytes_copied;
1988
+ }
1989
+
1990
+ return total_bytes_copied;
1991
+ }
1992
+
1993
+ template <typename TargetIterator, typename SourceIterator>
1994
+ std::size_t buffer_copy(multiple_buffers, multiple_buffers,
1995
+ TargetIterator target_begin, TargetIterator target_end,
1996
+ SourceIterator source_begin, SourceIterator source_end) BOOST_ASIO_NOEXCEPT
1997
+ {
1998
+ std::size_t total_bytes_copied = 0;
1999
+
2000
+ TargetIterator target_iter = target_begin;
2001
+ std::size_t target_buffer_offset = 0;
2002
+
2003
+ SourceIterator source_iter = source_begin;
2004
+ std::size_t source_buffer_offset = 0;
2005
+
2006
+ while (target_iter != target_end && source_iter != source_end)
2007
+ {
2008
+ mutable_buffer target_buffer =
2009
+ mutable_buffer(*target_iter) + target_buffer_offset;
2010
+
2011
+ const_buffer source_buffer =
2012
+ const_buffer(*source_iter) + source_buffer_offset;
2013
+
2014
+ std::size_t bytes_copied = (buffer_copy_1)(target_buffer, source_buffer);
2015
+ total_bytes_copied += bytes_copied;
2016
+
2017
+ if (bytes_copied == target_buffer.size())
2018
+ {
2019
+ ++target_iter;
2020
+ target_buffer_offset = 0;
2021
+ }
2022
+ else
2023
+ target_buffer_offset += bytes_copied;
2024
+
2025
+ if (bytes_copied == source_buffer.size())
2026
+ {
2027
+ ++source_iter;
2028
+ source_buffer_offset = 0;
2029
+ }
2030
+ else
2031
+ source_buffer_offset += bytes_copied;
2032
+ }
2033
+
2034
+ return total_bytes_copied;
2035
+ }
2036
+
2037
+ template <typename TargetIterator, typename SourceIterator>
2038
+ std::size_t buffer_copy(multiple_buffers, multiple_buffers,
2039
+ TargetIterator target_begin, TargetIterator target_end,
2040
+ SourceIterator source_begin, SourceIterator source_end,
2041
+ std::size_t max_bytes_to_copy) BOOST_ASIO_NOEXCEPT
2127
2042
  {
2128
- return buffer_copy(target, buffer(source, max_bytes_to_copy));
2043
+ std::size_t total_bytes_copied = 0;
2044
+
2045
+ TargetIterator target_iter = target_begin;
2046
+ std::size_t target_buffer_offset = 0;
2047
+
2048
+ SourceIterator source_iter = source_begin;
2049
+ std::size_t source_buffer_offset = 0;
2050
+
2051
+ while (total_bytes_copied != max_bytes_to_copy
2052
+ && target_iter != target_end && source_iter != source_end)
2053
+ {
2054
+ mutable_buffer target_buffer =
2055
+ mutable_buffer(*target_iter) + target_buffer_offset;
2056
+
2057
+ const_buffer source_buffer =
2058
+ const_buffer(*source_iter) + source_buffer_offset;
2059
+
2060
+ std::size_t bytes_copied = (buffer_copy_1)(
2061
+ target_buffer, boost::asio::buffer(source_buffer,
2062
+ max_bytes_to_copy - total_bytes_copied));
2063
+ total_bytes_copied += bytes_copied;
2064
+
2065
+ if (bytes_copied == target_buffer.size())
2066
+ {
2067
+ ++target_iter;
2068
+ target_buffer_offset = 0;
2069
+ }
2070
+ else
2071
+ target_buffer_offset += bytes_copied;
2072
+
2073
+ if (bytes_copied == source_buffer.size())
2074
+ {
2075
+ ++source_iter;
2076
+ source_buffer_offset = 0;
2077
+ }
2078
+ else
2079
+ source_buffer_offset += bytes_copied;
2080
+ }
2081
+
2082
+ return total_bytes_copied;
2129
2083
  }
2130
2084
 
2131
- /// Copies a limited number of bytes from a source buffer to a target buffer
2132
- /// sequence.
2085
+ } // namespace detail
2086
+
2087
+ /// Copies bytes from a source buffer sequence to a target buffer sequence.
2133
2088
  /**
2134
2089
  * @param target A modifiable buffer sequence representing the memory regions to
2135
2090
  * which the bytes will be copied.
2136
2091
  *
2137
- * @param source A modifiable buffer representing the memory region from which
2138
- * the bytes will be copied. The contents of the source buffer will not be
2139
- * modified.
2140
- *
2141
- * @param max_bytes_to_copy The maximum number of bytes to be copied.
2092
+ * @param source A non-modifiable buffer sequence representing the memory
2093
+ * regions from which the bytes will be copied.
2142
2094
  *
2143
2095
  * @returns The number of bytes copied.
2144
2096
  *
@@ -2148,16 +2100,20 @@ inline std::size_t buffer_copy(const MutableBufferSequence& target,
2148
2100
  *
2149
2101
  * @li @c buffer_size(source)
2150
2102
  *
2151
- * @li @c max_bytes_to_copy
2152
- *
2153
2103
  * This function is implemented in terms of @c memcpy, and consequently it
2154
2104
  * cannot be used to copy between overlapping memory regions.
2155
2105
  */
2156
- template <typename MutableBufferSequence>
2106
+ template <typename MutableBufferSequence, typename ConstBufferSequence>
2157
2107
  inline std::size_t buffer_copy(const MutableBufferSequence& target,
2158
- const mutable_buffers_1& source, std::size_t max_bytes_to_copy)
2108
+ const ConstBufferSequence& source) BOOST_ASIO_NOEXCEPT
2159
2109
  {
2160
- return buffer_copy(target, buffer(source, max_bytes_to_copy));
2110
+ return detail::buffer_copy(
2111
+ detail::buffer_sequence_cardinality<MutableBufferSequence>(),
2112
+ detail::buffer_sequence_cardinality<ConstBufferSequence>(),
2113
+ boost::asio::buffer_sequence_begin(target),
2114
+ boost::asio::buffer_sequence_end(target),
2115
+ boost::asio::buffer_sequence_begin(source),
2116
+ boost::asio::buffer_sequence_end(source));
2161
2117
  }
2162
2118
 
2163
2119
  /// Copies a limited number of bytes from a source buffer sequence to a target
@@ -2185,50 +2141,17 @@ inline std::size_t buffer_copy(const MutableBufferSequence& target,
2185
2141
  * cannot be used to copy between overlapping memory regions.
2186
2142
  */
2187
2143
  template <typename MutableBufferSequence, typename ConstBufferSequence>
2188
- std::size_t buffer_copy(const MutableBufferSequence& target,
2189
- const ConstBufferSequence& source, std::size_t max_bytes_to_copy)
2190
- {
2191
- std::size_t total_bytes_copied = 0;
2192
-
2193
- typename MutableBufferSequence::const_iterator target_iter = target.begin();
2194
- typename MutableBufferSequence::const_iterator target_end = target.end();
2195
- std::size_t target_buffer_offset = 0;
2196
-
2197
- typename ConstBufferSequence::const_iterator source_iter = source.begin();
2198
- typename ConstBufferSequence::const_iterator source_end = source.end();
2199
- std::size_t source_buffer_offset = 0;
2200
-
2201
- while (total_bytes_copied != max_bytes_to_copy
2202
- && target_iter != target_end && source_iter != source_end)
2203
- {
2204
- mutable_buffer target_buffer =
2205
- mutable_buffer(*target_iter) + target_buffer_offset;
2206
-
2207
- const_buffer source_buffer =
2208
- const_buffer(*source_iter) + source_buffer_offset;
2209
-
2210
- std::size_t bytes_copied = buffer_copy(target_buffer,
2211
- source_buffer, max_bytes_to_copy - total_bytes_copied);
2212
- total_bytes_copied += bytes_copied;
2213
-
2214
- if (bytes_copied == buffer_size(target_buffer))
2215
- {
2216
- ++target_iter;
2217
- target_buffer_offset = 0;
2218
- }
2219
- else
2220
- target_buffer_offset += bytes_copied;
2221
-
2222
- if (bytes_copied == buffer_size(source_buffer))
2223
- {
2224
- ++source_iter;
2225
- source_buffer_offset = 0;
2226
- }
2227
- else
2228
- source_buffer_offset += bytes_copied;
2229
- }
2230
-
2231
- return total_bytes_copied;
2144
+ inline std::size_t buffer_copy(const MutableBufferSequence& target,
2145
+ const ConstBufferSequence& source,
2146
+ std::size_t max_bytes_to_copy) BOOST_ASIO_NOEXCEPT
2147
+ {
2148
+ return detail::buffer_copy(
2149
+ detail::buffer_sequence_cardinality<MutableBufferSequence>(),
2150
+ detail::buffer_sequence_cardinality<ConstBufferSequence>(),
2151
+ boost::asio::buffer_sequence_begin(target),
2152
+ boost::asio::buffer_sequence_end(target),
2153
+ boost::asio::buffer_sequence_begin(source),
2154
+ boost::asio::buffer_sequence_end(source), max_bytes_to_copy);
2232
2155
  }
2233
2156
 
2234
2157
  /*@}*/