passenger 5.3.3 → 5.3.4

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