passenger 6.0.19 → 6.0.21

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 (1293) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +65 -3
  3. data/CONTRIBUTORS +2 -0
  4. data/README.md +2 -2
  5. data/bin/passenger-install-nginx-module +4 -4
  6. data/build/integration_tests.rb +2 -1
  7. data/build/support/cxx_dependency_map.rb +155 -54
  8. data/dev/copy_boost_headers +21 -7
  9. data/dev/nginx_version_sha256 +72 -0
  10. data/package.json +15 -15
  11. data/src/agent/AgentMain.cpp +2 -8
  12. data/src/agent/Core/AdminPanelConnector.h +2 -3
  13. data/src/agent/Core/ApiServer.h +1 -1
  14. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +8 -1
  15. data/src/agent/Core/Config.h +6 -3
  16. data/src/agent/Core/Controller/AppResponse.h +0 -1
  17. data/src/agent/Core/Controller/Config.h +2 -2
  18. data/src/agent/Core/Controller/SendRequest.cpp +2 -2
  19. data/src/agent/Core/CoreMain.cpp +1 -0
  20. data/src/agent/Core/ResponseCache.h +3 -2
  21. data/src/agent/Core/SecurityUpdateChecker.h +1 -1
  22. data/src/agent/Core/SpawningKit/Handshake/Perform.h +4 -4
  23. data/src/agent/Core/SpawningKit/UserSwitchingRules.h +2 -2
  24. data/src/agent/ExecHelper/ExecHelperMain.cpp +10 -12
  25. data/src/agent/FileReadHelper/FileReadHelperMain.cpp +7 -10
  26. data/src/agent/MainFunctions.h +38 -0
  27. data/src/agent/Shared/ApiServerUtils.h +3 -2
  28. data/src/agent/Shared/Fundamentals/Initialization.cpp +1 -1
  29. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +2 -3
  30. data/src/agent/SystemMetrics/SystemMetricsMain.cpp +1 -0
  31. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +6 -4
  32. data/src/agent/Watchdog/ApiServer.h +1 -1
  33. data/src/agent/Watchdog/Config.h +1 -1
  34. data/src/agent/Watchdog/WatchdogMain.cpp +5 -12
  35. data/src/apache2_module/Hooks.cpp +26 -1
  36. data/src/cxx_supportlib/ConfigKit/Common.h +1 -1
  37. data/src/cxx_supportlib/Constants.h +1 -1
  38. data/src/cxx_supportlib/DataStructures/StringKeyTable.h +1 -1
  39. data/src/cxx_supportlib/FileTools/PathManip.cpp +10 -1
  40. data/src/cxx_supportlib/IOTools/IOUtils.cpp +2 -6
  41. data/src/cxx_supportlib/Integrations/LibevJsonUtils.h +3 -3
  42. data/src/cxx_supportlib/JsonTools/CBindings.cpp +0 -2
  43. data/src/cxx_supportlib/JsonTools/JsonUtils.h +4 -4
  44. data/src/cxx_supportlib/LoggingKit/Context.h +16 -21
  45. data/src/cxx_supportlib/LoggingKit/Forward.h +0 -2
  46. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +36 -72
  47. data/src/cxx_supportlib/MemoryKit/mbuf.cpp +12 -4
  48. data/src/cxx_supportlib/MemoryKit/mbuf.h +1 -1
  49. data/src/cxx_supportlib/ProcessManagement/Utils.cpp +1 -1
  50. data/src/cxx_supportlib/ResourceLocator.h +1 -1
  51. data/src/cxx_supportlib/SecurityKit/Crypto.cpp +3 -94
  52. data/src/cxx_supportlib/SecurityKit/Crypto.h +0 -8
  53. data/src/cxx_supportlib/ServerKit/Context.h +6 -0
  54. data/src/cxx_supportlib/ServerKit/Errors.h +3 -2
  55. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +99 -64
  56. data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +4 -1
  57. data/src/cxx_supportlib/ServerKit/HttpRequest.h +2 -2
  58. data/src/cxx_supportlib/ServerKit/HttpServer.h +3 -2
  59. data/src/cxx_supportlib/ServerKit/llerrors.h +84 -0
  60. data/src/cxx_supportlib/ServerKit/llhttp.c +10168 -0
  61. data/src/cxx_supportlib/ServerKit/llhttp.h +903 -0
  62. data/src/cxx_supportlib/ServerKit/llhttp_api.c +510 -0
  63. data/src/cxx_supportlib/ServerKit/llhttp_http.c +170 -0
  64. data/src/cxx_supportlib/ServerKit/llversion.h +12 -0
  65. data/src/cxx_supportlib/ServerKit/url_parser.c +574 -0
  66. data/src/cxx_supportlib/ServerKit/url_parser.h +74 -0
  67. data/src/cxx_supportlib/StaticString.h +3 -1
  68. data/src/cxx_supportlib/StrIntTools/DateParsing.h +1 -1
  69. data/src/cxx_supportlib/StrIntTools/StrIntUtils.cpp +12 -3
  70. data/src/cxx_supportlib/StrIntTools/StrIntUtils.h +5 -0
  71. data/src/cxx_supportlib/SystemTools/SystemMetricsCollector.h +2 -2
  72. data/src/cxx_supportlib/SystemTools/UserDatabase.cpp +14 -14
  73. data/src/cxx_supportlib/SystemTools/UserDatabase.h +6 -10
  74. data/src/cxx_supportlib/Utils/AnsiColorConstants.h +11 -9
  75. data/src/cxx_supportlib/Utils.cpp +1 -1
  76. data/src/cxx_supportlib/oxt/implementation.cpp +1 -2
  77. data/src/cxx_supportlib/oxt/system_calls.cpp +1 -1
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_executor.hpp +26 -32
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_handler.hpp +194 -56
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +34 -42
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/append.hpp +10 -23
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +21 -34
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +26 -45
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +26 -43
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +30 -52
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +282 -0
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +178 -863
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/awaitable.hpp +1 -1
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +64 -98
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +17 -22
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_file.hpp +18 -23
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +4 -8
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +30 -42
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +65 -96
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +20 -29
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +36 -48
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +31 -44
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +73 -23
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +34 -45
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +108 -151
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +6 -82
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +6 -51
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +30 -40
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +50 -76
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +13 -15
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +3 -3
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +23 -32
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +20 -29
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +97 -299
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +97 -288
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +90 -288
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +551 -0
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +365 -290
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +29 -39
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +27 -39
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +1 -1
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +33 -49
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +1 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +27 -39
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +1 -1
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +4 -4
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_signal.hpp +25 -85
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_state.hpp +16 -16
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_type.hpp +8 -25
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/co_spawn.hpp +17 -17
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +1 -1
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +60 -272
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +52 -79
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/connect_pipe.hpp +1 -1
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/consign.hpp +11 -24
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +2 -1
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +1 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +37 -34
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +302 -262
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +12 -20
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +2 -10
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +2 -4
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +1 -1
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +5 -13
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_cancellation_state.hpp +21 -20
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +2 -2
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +129 -563
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/blocking_executor_op.hpp +3 -3
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +1 -1
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +3 -7
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +1 -1
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +2 -23
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +1 -1
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +4 -4
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/composed_work.hpp +21 -97
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +1 -1
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +1 -1
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +1 -1
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +155 -963
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +3 -11
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +1 -5
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +2 -24
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +1 -1
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +4 -4
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +1 -1
  163. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +1 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +41 -3
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +40 -3
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +20 -3
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +20 -3
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +3 -5
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +1 -1
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/exception.hpp +2 -13
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_function.hpp +8 -60
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +6 -6
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +1 -1
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +3 -43
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/functional.hpp +1 -12
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +9 -10
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +3 -5
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +41 -104
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +1 -1
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +3 -3
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +9 -15
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +101 -123
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +1 -1
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +1 -1
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -15
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +2 -2
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +13 -4
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +2 -2
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +17 -8
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +1 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +5 -5
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_descriptor_service.ipp +2 -2
  193. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_file_service.ipp +1 -1
  194. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.hpp +1 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.ipp +69 -35
  196. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_socket_service_base.ipp +2 -2
  197. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +2 -2
  198. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +15 -6
  199. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +1 -1
  200. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +1 -1
  201. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +1 -1
  202. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_serial_port_service.ipp +1 -1
  204. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +1 -1
  205. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +1 -1
  206. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +9 -9
  207. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +26 -18
  208. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +3 -3
  209. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/scheduler.ipp +2 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +2 -2
  211. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +12 -4
  212. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +2 -3
  213. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +1 -1
  214. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +57 -4
  215. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +63 -5
  216. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +47 -68
  218. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +1 -1
  219. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +2 -3
  220. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +1 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/thread_context.ipp +1 -1
  222. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +1 -1
  223. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +12 -12
  224. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +1 -1
  225. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_defer.hpp +209 -0
  226. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_dispatch.hpp +195 -0
  227. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_post.hpp +209 -0
  228. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_object_impl.hpp +6 -10
  230. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_at_op.hpp +6 -3
  231. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_op.hpp +6 -3
  232. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_service.hpp +17 -9
  233. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_at_op.hpp +6 -3
  234. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_op.hpp +6 -3
  235. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_file_service.hpp +2 -3
  236. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_null_buffers_op.hpp +5 -4
  237. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_operation.hpp +1 -1
  238. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_service.hpp +4 -3
  239. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_accept_op.hpp +11 -12
  240. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_connect_op.hpp +5 -4
  241. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recv_op.hpp +6 -3
  242. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvfrom_op.hpp +7 -4
  243. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvmsg_op.hpp +6 -3
  244. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_send_op.hpp +6 -3
  245. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_sendto_op.hpp +6 -3
  246. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service.hpp +11 -13
  247. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service_base.hpp +9 -9
  248. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_wait_op.hpp +5 -4
  249. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +7 -49
  250. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +1 -1
  251. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +1 -1
  252. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +20 -3
  253. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/limits.hpp +1 -6
  254. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +1 -1
  255. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +13 -43
  256. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +3 -5
  257. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/non_const_lvalue.hpp +4 -15
  258. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +1 -1
  259. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +1 -1
  260. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +1 -1
  261. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +1 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +1 -1
  263. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +1 -1
  264. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +1 -1
  265. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +3 -3
  266. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +1 -1
  267. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +1 -1
  268. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +1 -1
  269. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +1 -1
  270. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +1 -1
  271. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +1 -1
  273. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +1 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +1 -1
  275. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +1 -1
  276. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +1 -1
  277. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +1 -1
  278. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_serial_port_service.hpp +1 -1
  279. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +1 -1
  280. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +1 -1
  281. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +1 -1
  282. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +1 -1
  283. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +1 -1
  284. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +61 -25
  285. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +37 -4
  286. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +89 -12
  287. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +41 -4
  288. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +40 -4
  289. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +41 -4
  290. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +41 -4
  291. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +41 -4
  292. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +40 -4
  293. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +20 -20
  294. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +135 -38
  295. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +37 -4
  296. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +1 -1
  297. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +1 -1
  298. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +1 -1
  299. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +2 -2
  300. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +4 -13
  301. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +4 -4
  302. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +1 -1
  303. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +4 -4
  304. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +3 -3
  305. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +1 -1
  306. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler.hpp +1 -1
  307. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_operation.hpp +1 -1
  308. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_task.hpp +1 -1
  309. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_thread_info.hpp +1 -1
  310. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +1 -1
  311. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +1 -1
  312. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +1 -1
  313. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +20 -3
  314. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +2 -3
  315. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +1 -1
  316. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +3 -3
  317. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +1 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +1 -1
  319. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +12 -3
  320. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +1 -1
  321. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +1 -1
  322. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +1 -1
  323. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +1 -1
  324. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +11 -1
  325. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/source_location.hpp +1 -1
  326. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +3 -5
  327. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +1 -6
  328. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +1 -6
  329. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +1 -6
  330. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +1 -6
  331. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +1 -6
  332. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +1 -6
  333. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +13 -13
  334. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +1 -1
  335. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +1 -1
  336. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +3 -5
  337. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +1 -1
  338. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +1 -1
  339. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +12 -22
  340. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +1 -1
  341. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +1 -1
  342. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +1 -1
  343. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +1 -1
  344. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +2 -2
  345. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +1 -1
  346. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +1 -1
  347. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +1 -1
  348. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +1 -1
  349. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +104 -90
  350. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/utility.hpp +4 -4
  351. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +3 -3
  352. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +1 -1
  353. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +2 -2
  354. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +20 -34
  355. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +7 -117
  356. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +36 -34
  357. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +1 -1
  358. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +34 -112
  359. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +268 -991
  360. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bad_executor.hpp +3 -4
  361. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +296 -536
  362. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +232 -409
  363. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +20 -73
  364. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +30 -72
  365. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +24 -170
  366. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/bad_executor.ipp +3 -3
  367. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/invocable_archetype.hpp +2 -30
  368. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +240 -398
  369. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +20 -73
  370. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +149 -296
  371. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/prefer_only.hpp +56 -59
  372. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +149 -296
  373. data/src/cxx_supportlib/vendor-modified/boost/asio/execution.hpp +1 -16
  374. data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +1 -25
  375. data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +59 -43
  376. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +56 -61
  377. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/append.hpp +1 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_single.hpp +20 -24
  379. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_tuple.hpp +1 -1
  380. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/awaitable_operators.hpp +7 -7
  381. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +56 -34
  382. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +56 -34
  383. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/cancellation_condition.hpp +25 -28
  384. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel.hpp +3 -3
  385. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_error.hpp +1 -1
  386. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_traits.hpp +15 -15
  387. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +5 -4
  388. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_spawn.hpp +1 -1
  389. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/concurrent_channel.hpp +3 -3
  390. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +1 -1
  391. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro_traits.hpp +1 -1
  392. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/deferred.hpp +1 -1
  393. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_handler.hpp +10 -13
  394. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_message.hpp +27 -20
  395. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_operation.hpp +193 -38
  396. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_payload.hpp +143 -14
  397. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +24 -9
  398. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +77 -17
  399. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +20 -12
  400. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +50 -50
  401. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_completion_handler.hpp +3 -3
  402. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +1 -1
  403. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/has_signature.hpp +1 -1
  404. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +46 -34
  405. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +1 -1
  406. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +33 -96
  407. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/channel_error.ipp +2 -2
  408. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_composed.hpp +62 -20
  409. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +48 -45
  410. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +56 -60
  411. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +18 -4
  412. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_coro.hpp +5 -5
  413. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_promise.hpp +3 -3
  414. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +27 -31
  415. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/prepend.hpp +1 -1
  416. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +1 -1
  417. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +15 -21
  418. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +13 -13
  419. data/src/cxx_supportlib/vendor-modified/boost/asio/file_base.hpp +1 -1
  420. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +2 -6
  421. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +4 -4
  422. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +1 -1
  423. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +1 -1
  424. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +4 -4
  425. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +4 -4
  426. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +4 -4
  427. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +1 -1
  428. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +1 -6
  429. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_completion_executor.ipp +10 -14
  430. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_io_executor.ipp +10 -17
  431. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +37 -100
  432. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +99 -107
  433. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +66 -25
  434. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +55 -178
  435. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +55 -178
  436. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancellation_signal.ipp +1 -1
  437. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +123 -73
  438. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +84 -234
  439. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.hpp +1 -1
  440. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.ipp +1 -1
  441. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +32 -97
  442. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/deferred.hpp +73 -31
  443. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +5 -58
  444. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +4 -4
  445. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +3 -35
  446. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +1 -1
  447. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +60 -43
  448. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +3 -3
  449. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +39 -56
  450. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +2 -1
  451. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/multiple_exceptions.ipp +4 -8
  452. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +36 -98
  453. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +206 -429
  454. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +60 -206
  455. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +456 -970
  456. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +43 -411
  457. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +1 -1
  458. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +1 -1
  459. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +207 -423
  460. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +1 -3
  461. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +2 -2
  462. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +2 -2
  463. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +19 -25
  464. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +32 -109
  465. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +5 -4
  466. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_awaitable.hpp +2 -2
  467. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +79 -425
  468. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +213 -427
  469. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +58 -194
  470. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +91 -120
  471. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +33 -25
  472. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +1 -1
  473. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +1 -1
  474. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +26 -35
  475. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +28 -36
  476. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +13 -19
  477. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +16 -22
  478. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +33 -42
  479. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +13 -18
  480. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +15 -20
  481. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +13 -3
  482. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +26 -35
  483. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +46 -76
  484. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +1 -1
  485. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +4 -8
  486. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +17 -1
  487. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +9 -13
  488. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +17 -17
  489. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +10 -14
  490. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
  491. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +1 -1
  492. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +7 -7
  493. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +1 -1
  494. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +18 -22
  495. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +1 -1
  496. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +9 -13
  497. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +1 -1
  498. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +24 -32
  499. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +1 -1
  500. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +1 -1
  501. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +1 -1
  502. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +3 -3
  503. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +1 -1
  504. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +3 -3
  505. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +1 -1
  506. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +16 -20
  507. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +14 -18
  508. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +1 -1
  509. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +1 -1
  510. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +7 -7
  511. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +7 -7
  512. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +1 -1
  513. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +1 -1
  514. data/src/cxx_supportlib/vendor-modified/boost/asio/is_applicable_property.hpp +6 -6
  515. data/src/cxx_supportlib/vendor-modified/boost/asio/is_contiguous_iterator.hpp +2 -2
  516. data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +1 -1
  517. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +1 -1
  518. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +1 -1
  519. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +2 -6
  520. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +1 -1
  521. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +4 -4
  522. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +1 -1
  523. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +1 -1
  524. data/src/cxx_supportlib/vendor-modified/boost/asio/local/seq_packet_protocol.hpp +86 -0
  525. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +4 -4
  526. data/src/cxx_supportlib/vendor-modified/boost/asio/multiple_exceptions.hpp +3 -9
  527. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +1 -61
  528. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +29 -105
  529. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +21 -29
  530. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +24 -34
  531. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +1 -1
  532. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +1 -1
  533. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +1 -1
  534. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +36 -34
  535. data/src/cxx_supportlib/vendor-modified/boost/asio/prefer.hpp +176 -333
  536. data/src/cxx_supportlib/vendor-modified/boost/asio/prepend.hpp +11 -23
  537. data/src/cxx_supportlib/vendor-modified/boost/asio/query.hpp +57 -70
  538. data/src/cxx_supportlib/vendor-modified/boost/asio/random_access_file.hpp +1 -1
  539. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +136 -168
  540. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +35 -52
  541. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +256 -298
  542. data/src/cxx_supportlib/vendor-modified/boost/asio/readable_pipe.hpp +1 -1
  543. data/src/cxx_supportlib/vendor-modified/boost/asio/recycling_allocator.hpp +15 -15
  544. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +7 -9
  545. data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +35 -47
  546. data/src/cxx_supportlib/vendor-modified/boost/asio/require.hpp +108 -246
  547. data/src/cxx_supportlib/vendor-modified/boost/asio/require_concept.hpp +70 -79
  548. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +1 -1
  549. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +1 -1
  550. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +1 -1
  551. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_base.hpp +173 -0
  552. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +1 -1
  553. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +127 -161
  554. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +1 -3
  555. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +24 -24
  556. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +3 -3
  557. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +3 -7
  558. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +3 -3
  559. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +3 -7
  560. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
  561. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +16 -75
  562. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +1 -1
  563. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +1 -1
  564. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +1 -1
  565. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +3 -3
  566. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +4 -4
  567. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +15 -19
  568. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +2 -2
  569. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +3 -3
  570. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +1 -1
  571. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/host_name_verification.hpp +1 -1
  572. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +1 -1
  573. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +2 -4
  574. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +3 -3
  575. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/host_name_verification.ipp +1 -1
  576. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +1 -1
  577. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +1 -1
  578. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +1 -1
  579. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +51 -82
  580. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +1 -1
  581. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +1 -1
  582. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +1 -1
  583. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +1 -1
  584. data/src/cxx_supportlib/vendor-modified/boost/asio/static_thread_pool.hpp +1 -1
  585. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +1 -6
  586. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +91 -118
  587. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_file.hpp +1 -1
  588. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +1 -1
  589. data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +3 -3
  590. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +62 -62
  591. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +1 -6
  592. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +35 -48
  593. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +91 -273
  594. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +1 -1
  595. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/equality_comparable.hpp +14 -18
  596. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_member.hpp +16 -20
  597. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_free.hpp +16 -20
  598. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_member.hpp +16 -20
  599. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_free.hpp +16 -20
  600. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_member.hpp +16 -20
  601. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_static_constexpr_member.hpp +15 -22
  602. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_free.hpp +16 -20
  603. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_member.hpp +16 -20
  604. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_free.hpp +16 -20
  605. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_member.hpp +16 -20
  606. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_query.hpp +20 -26
  607. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require.hpp +22 -30
  608. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require_concept.hpp +22 -30
  609. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +1 -1
  610. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +1 -1
  611. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +1 -1
  612. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +1 -1
  613. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +1 -1
  614. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +6 -24
  615. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +1 -1
  616. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +1 -1
  617. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +1 -1
  618. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +15 -21
  619. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +8 -12
  620. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +2 -6
  621. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +2 -2
  622. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +1 -1
  623. data/src/cxx_supportlib/vendor-modified/boost/asio/writable_pipe.hpp +1 -1
  624. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +122 -146
  625. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +34 -50
  626. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +1 -1
  627. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -28
  628. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +8 -3
  629. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +2 -16
  630. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +2 -3
  631. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +5 -3
  632. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +6 -4
  633. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +0 -49
  634. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +107 -40
  635. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +32 -5
  636. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +12 -13
  637. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +7 -8
  638. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +26 -27
  639. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/float_sizes.hpp +122 -35
  640. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +2 -3
  641. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +7 -0
  642. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +42 -0
  643. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +1 -2
  644. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +3 -4
  645. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +2 -3
  646. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +2 -3
  647. data/src/cxx_supportlib/vendor-modified/boost/bind/apply.hpp +2 -60
  648. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +230 -1740
  649. data/src/cxx_supportlib/vendor-modified/boost/bind/{bind_cc.hpp → detail/bind_cc.hpp} +20 -20
  650. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf2_cc.hpp +210 -0
  651. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf_cc.hpp +405 -0
  652. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/integer_sequence.hpp +111 -0
  653. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/result_traits.hpp +1 -0
  654. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/tuple_for_each.hpp +64 -0
  655. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +140 -290
  656. data/src/cxx_supportlib/vendor-modified/boost/bind/placeholders.hpp +3 -16
  657. data/src/cxx_supportlib/vendor-modified/boost/bind/protect.hpp +0 -279
  658. data/src/cxx_supportlib/vendor-modified/boost/bind/std_placeholders.hpp +0 -6
  659. data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +1 -0
  660. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/is_evenly_divisible_by.hpp +1 -7
  661. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/requires_cxx11.hpp +23 -0
  662. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +2 -1
  663. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_get.hpp +1 -1
  664. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +1 -0
  665. data/src/cxx_supportlib/vendor-modified/boost/chrono/io_v1/chrono_io.hpp +3 -3
  666. data/src/cxx_supportlib/vendor-modified/boost/chrono/system_clocks.hpp +1 -0
  667. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +1 -1
  668. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +4 -1
  669. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +1 -1
  670. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +4 -1
  671. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +1 -1
  672. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +41 -0
  673. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +4 -0
  674. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +8 -0
  675. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +8 -2
  676. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +5 -0
  677. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +4 -1
  678. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +1 -0
  679. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +4 -0
  680. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +4 -0
  681. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +4 -2
  682. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +5 -0
  683. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +1 -0
  684. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +4 -0
  685. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +4 -0
  686. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +3 -0
  687. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +4 -0
  688. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +4 -0
  689. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +4 -0
  690. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +13 -3
  691. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +8 -0
  692. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +2 -0
  693. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +16 -1
  694. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +56 -0
  695. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +32 -0
  696. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +16 -1
  697. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +6 -7
  698. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +18 -19
  699. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +27 -29
  700. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +0 -29
  701. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +144 -145
  702. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +4 -5
  703. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +48 -49
  704. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +6 -6
  705. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +14 -15
  706. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +22 -22
  707. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +1 -0
  708. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +71 -69
  709. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +48 -48
  710. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +38 -40
  711. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +165 -153
  712. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +162 -163
  713. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +1 -2
  714. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +48 -12
  715. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +6 -8
  716. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +44 -46
  717. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +10 -11
  718. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +18 -19
  719. data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +0 -8
  720. data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +28 -28
  721. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +83 -84
  722. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +3 -3
  723. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +77 -1
  724. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +81 -85
  725. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +231 -233
  726. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +86 -86
  727. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +33 -33
  728. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +107 -110
  729. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +9 -11
  730. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +10 -11
  731. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +29 -17
  732. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +2 -2
  733. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
  734. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +1 -0
  735. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +1 -1
  736. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +80 -82
  737. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +81 -81
  738. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +24 -26
  739. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +147 -122
  740. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +109 -110
  741. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +32 -32
  742. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +165 -194
  743. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +4 -5
  744. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +263 -199
  745. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_integral.hpp +146 -0
  746. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_mix.hpp +6 -6
  747. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_range.hpp +296 -61
  748. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple_like.hpp +62 -0
  749. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/mulx.hpp +79 -0
  750. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +38 -124
  751. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +1 -0
  752. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_contiguous_range.hpp +27 -20
  753. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_described_class.hpp +4 -5
  754. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_range.hpp +8 -40
  755. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_tuple_like.hpp +36 -0
  756. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_unordered_range.hpp +6 -7
  757. data/src/cxx_supportlib/vendor-modified/boost/core/alignof.hpp +57 -0
  758. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_access.hpp +22 -8
  759. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +362 -31
  760. data/src/cxx_supportlib/vendor-modified/boost/core/checked_delete.hpp +29 -3
  761. data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +46 -0
  762. data/src/cxx_supportlib/vendor-modified/boost/core/detail/is_same.hpp +39 -0
  763. data/src/cxx_supportlib/vendor-modified/boost/core/detail/lwt_unattended.hpp +66 -0
  764. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_pause.hpp +71 -0
  765. data/src/cxx_supportlib/vendor-modified/boost/{smart_ptr → core}/detail/sp_thread_sleep.hpp +39 -21
  766. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_yield.hpp +100 -0
  767. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +7 -7
  768. data/src/cxx_supportlib/vendor-modified/boost/core/fclose_deleter.hpp +7 -0
  769. data/src/cxx_supportlib/vendor-modified/boost/core/functor.hpp +41 -0
  770. data/src/cxx_supportlib/vendor-modified/boost/core/identity.hpp +61 -0
  771. data/src/cxx_supportlib/vendor-modified/boost/core/invoke_swap.hpp +93 -0
  772. data/src/cxx_supportlib/vendor-modified/boost/core/is_same.hpp +10 -15
  773. data/src/cxx_supportlib/vendor-modified/boost/core/launder.hpp +69 -0
  774. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +33 -36
  775. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +3 -3
  776. data/src/cxx_supportlib/vendor-modified/boost/core/make_span.hpp +59 -0
  777. data/src/cxx_supportlib/vendor-modified/boost/core/max_align.hpp +82 -0
  778. data/src/cxx_supportlib/vendor-modified/boost/core/memory_resource.hpp +108 -0
  779. data/src/cxx_supportlib/vendor-modified/boost/core/null_deleter.hpp +7 -0
  780. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +23 -16
  781. data/src/cxx_supportlib/vendor-modified/boost/core/serialization.hpp +131 -0
  782. data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +31 -0
  783. data/src/cxx_supportlib/vendor-modified/boost/core/snprintf.hpp +173 -0
  784. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +17 -17
  785. data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +10 -40
  786. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +29 -5
  787. data/src/cxx_supportlib/vendor-modified/boost/core/yield_primitives.hpp +12 -0
  788. data/src/cxx_supportlib/vendor-modified/boost/describe/members.hpp +2 -0
  789. data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +3 -6
  790. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +6 -97
  791. data/src/cxx_supportlib/vendor-modified/boost/exception/current_exception_cast.hpp +1 -1
  792. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/clone_current_exception.hpp +1 -1
  793. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +1 -1
  794. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +22 -10
  795. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/is_output_streamable.hpp +1 -1
  796. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/object_hex_dump.hpp +1 -1
  797. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +24 -0
  798. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +1 -1
  799. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +4 -4
  800. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +1 -1
  801. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +1 -1
  802. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +1 -1
  803. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string.hpp +2 -2
  804. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string_stub.hpp +1 -1
  805. data/src/cxx_supportlib/vendor-modified/boost/function/function0.hpp +1 -3
  806. data/src/cxx_supportlib/vendor-modified/boost/function/function1.hpp +1 -3
  807. data/src/cxx_supportlib/vendor-modified/boost/function/function10.hpp +1 -3
  808. data/src/cxx_supportlib/vendor-modified/boost/function/function2.hpp +1 -3
  809. data/src/cxx_supportlib/vendor-modified/boost/function/function3.hpp +1 -3
  810. data/src/cxx_supportlib/vendor-modified/boost/function/function4.hpp +1 -3
  811. data/src/cxx_supportlib/vendor-modified/boost/function/function5.hpp +1 -3
  812. data/src/cxx_supportlib/vendor-modified/boost/function/function6.hpp +1 -3
  813. data/src/cxx_supportlib/vendor-modified/boost/function/function7.hpp +1 -3
  814. data/src/cxx_supportlib/vendor-modified/boost/function/function8.hpp +1 -3
  815. data/src/cxx_supportlib/vendor-modified/boost/function/function9.hpp +1 -3
  816. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +49 -198
  817. data/src/cxx_supportlib/vendor-modified/boost/function/function_fwd.hpp +36 -41
  818. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +277 -420
  819. data/src/cxx_supportlib/vendor-modified/boost/function/function_typeof.hpp +1 -31
  820. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +5 -61
  821. data/src/cxx_supportlib/vendor-modified/boost/integer/extended_euclidean.hpp +2 -2
  822. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +24 -25
  823. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +12 -13
  824. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +1 -1
  825. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +24 -25
  826. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +65 -66
  827. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +20 -20
  828. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +7 -7
  829. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +10 -10
  830. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +3 -3
  831. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/array_initializer.hpp +5 -5
  832. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +10 -10
  833. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +3 -3
  834. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +24 -24
  835. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +1 -1
  836. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +1 -1
  837. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +14 -15
  838. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +277 -0
  839. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_combine.hpp +11 -49
  840. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_integral.hpp +119 -0
  841. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_mix.hpp +130 -0
  842. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +41 -41
  843. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +14 -20
  844. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +6 -6
  845. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +12 -12
  846. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +7 -7
  847. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +19 -19
  848. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +6 -0
  849. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +3 -3
  850. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +6 -17
  851. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +1 -1
  852. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +14 -14
  853. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +20 -20
  854. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +22 -22
  855. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +21 -21
  856. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +28 -28
  857. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +58 -1
  858. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +268 -239
  859. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +9 -9
  860. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +57 -58
  861. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +3 -3
  862. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
  863. data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +3 -3
  864. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +12 -13
  865. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +24 -25
  866. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +24 -25
  867. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +14 -15
  868. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +1 -1
  869. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +61 -62
  870. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +24 -25
  871. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +12 -13
  872. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +18 -19
  873. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +4 -0
  874. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +36 -37
  875. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +37 -34
  876. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +11 -11
  877. data/src/cxx_supportlib/vendor-modified/boost/io/ios_state.hpp +2 -2
  878. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +10 -11
  879. data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +148 -0
  880. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +2 -2
  881. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +7 -13
  882. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +59 -0
  883. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +113 -131
  884. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +612 -645
  885. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +85 -79
  886. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +25 -32
  887. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +22 -29
  888. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +73 -0
  889. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
  890. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +21 -16
  891. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +7 -9
  892. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +22 -161
  893. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +9 -12
  894. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/chrono.cpp +4 -2
  895. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/process_cpu_clocks.cpp +3 -1
  896. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/thread_clock.cpp +3 -1
  897. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +10 -18
  898. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +13 -14
  899. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +24 -14
  900. data/src/cxx_supportlib/vendor-modified/boost/limits.hpp +12 -12
  901. data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +5 -5
  902. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +5 -3
  903. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +20 -19
  904. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +41 -56
  905. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +11 -10
  906. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/heap_sort.hpp +3 -2
  907. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +32 -34
  908. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +4 -5
  909. data/src/cxx_supportlib/vendor-modified/boost/move/algo/predicate.hpp +11 -11
  910. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +0 -1
  911. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +3 -3
  912. data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +5 -6
  913. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +3 -3
  914. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +2 -2
  915. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
  916. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +65 -24
  917. data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +28 -28
  918. data/src/cxx_supportlib/vendor-modified/boost/move/detail/to_raw_pointer.hpp +1 -1
  919. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +72 -23
  920. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +81 -1
  921. data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +22 -22
  922. data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +65 -66
  923. data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +2 -2
  924. data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +8 -6
  925. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +97 -17
  926. data/src/cxx_supportlib/vendor-modified/boost/mp11/bind.hpp +9 -0
  927. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/config.hpp +11 -0
  928. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_append.hpp +140 -4
  929. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_defer.hpp +119 -0
  930. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_fold.hpp +108 -4
  931. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_front.hpp +13 -1
  932. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_value_list.hpp +41 -0
  933. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list_v.hpp +27 -0
  934. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +1 -1
  935. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_plus.hpp +4 -1
  936. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_rename.hpp +18 -5
  937. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_value.hpp +25 -0
  938. data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +9 -0
  939. data/src/cxx_supportlib/vendor-modified/boost/mp11/integral.hpp +10 -0
  940. data/src/cxx_supportlib/vendor-modified/boost/mp11/list.hpp +180 -3
  941. data/src/cxx_supportlib/vendor-modified/boost/mp11/utility.hpp +2 -96
  942. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  943. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +3 -3
  944. data/src/cxx_supportlib/vendor-modified/boost/next_prior.hpp +3 -44
  945. data/src/cxx_supportlib/vendor-modified/boost/nondet_random.hpp +22 -0
  946. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +8 -0
  947. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +5 -4
  948. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +3 -3
  949. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +2 -2
  950. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +1 -1
  951. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +6 -6
  952. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +3 -3
  953. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +4 -4
  954. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp +2 -2
  955. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/unmatched_argument.hpp +1 -1
  956. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/overloads.hpp +1 -1
  957. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tag.hpp +4 -4
  958. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/unwrap_cv_reference.hpp +1 -1
  959. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/void.hpp +1 -1
  960. data/src/cxx_supportlib/vendor-modified/boost/parameter/binding.hpp +3 -3
  961. data/src/cxx_supportlib/vendor-modified/boost/parameter/match.hpp +1 -1
  962. data/src/cxx_supportlib/vendor-modified/boost/parameter/template_keyword.hpp +1 -1
  963. data/src/cxx_supportlib/vendor-modified/boost/parameter/value_type.hpp +3 -3
  964. data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +1 -1
  965. data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +13 -0
  966. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/msvc.h +53 -0
  967. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std.h +1 -0
  968. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
  969. data/src/cxx_supportlib/vendor-modified/boost/predef/os/vms.h +1 -1
  970. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  971. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +2 -0
  972. data/src/cxx_supportlib/vendor-modified/boost/random/inversive_congruential.hpp +1 -1
  973. data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +203 -0
  974. data/src/cxx_supportlib/vendor-modified/boost/random/subtract_with_carry.hpp +14 -14
  975. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real_distribution.hpp +2 -2
  976. data/src/cxx_supportlib/vendor-modified/boost/random.hpp +1 -0
  977. data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +4 -82
  978. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/gcd_lcm.hpp +53 -0
  979. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_evenly_divisible_by.hpp +32 -0
  980. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_ratio.hpp +28 -0
  981. data/src/cxx_supportlib/vendor-modified/boost/ratio/include.hpp +1 -3
  982. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio.hpp +5 -249
  983. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_fwd.hpp +30 -56
  984. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_io.hpp +0 -533
  985. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -7
  986. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +9 -9
  987. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +7 -7
  988. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +1 -0
  989. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +23 -0
  990. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +1 -1
  991. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +4 -6
  992. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +1 -0
  993. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +2 -11
  994. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared.hpp +1 -0
  995. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +1 -0
  996. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +1 -0
  997. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_unique.hpp +70 -0
  998. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +1 -0
  999. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +1 -0
  1000. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +2 -0
  1001. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +1 -11
  1002. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +1 -0
  1003. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +4 -8
  1004. data/src/cxx_supportlib/vendor-modified/boost/system/detail/enable_if.hpp +3 -12
  1005. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +14 -50
  1006. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +16 -55
  1007. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +62 -124
  1008. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +29 -52
  1009. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +7 -7
  1010. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +4 -4
  1011. data/src/cxx_supportlib/vendor-modified/boost/system/detail/interop_category.hpp +7 -7
  1012. data/src/cxx_supportlib/vendor-modified/boost/system/detail/is_same.hpp +3 -13
  1013. data/src/cxx_supportlib/vendor-modified/boost/system/detail/mutex.hpp +128 -0
  1014. data/src/cxx_supportlib/vendor-modified/boost/system/detail/snprintf.hpp +1 -46
  1015. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category.hpp +14 -13
  1016. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category_impl.hpp +2 -2
  1017. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category.hpp +7 -7
  1018. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_impl.hpp +3 -3
  1019. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_message.hpp +2 -2
  1020. data/src/cxx_supportlib/vendor-modified/boost/system/errc.hpp +3 -3
  1021. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +1 -1
  1022. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/deque.hpp +1 -24
  1023. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/functional.hpp +1 -14
  1024. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/list.hpp +1 -14
  1025. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_arg.hpp +2 -12
  1026. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_traits.hpp +0 -11
  1027. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/config.hpp +0 -2
  1028. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/default_delete.hpp +0 -16
  1029. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/pointer_traits.hpp +0 -11
  1030. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/scoped_allocator.hpp +0 -11
  1031. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/shared_ptr.hpp +0 -19
  1032. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/unique_ptr.hpp +4 -6
  1033. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/queue.hpp +2 -26
  1034. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/tuple.hpp +1 -18
  1035. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/vector.hpp +1 -14
  1036. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/invoke.hpp +11 -4
  1037. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_to_unsigned.hpp +55 -0
  1038. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_trim.hpp +29 -0
  1039. data/src/cxx_supportlib/vendor-modified/boost/thread/externally_locked.hpp +5 -5
  1040. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +0 -1
  1041. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_any.hpp +3 -2
  1042. data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +4 -4
  1043. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +2 -2
  1044. data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +3 -3
  1045. data/src/cxx_supportlib/vendor-modified/boost/tuple/tuple.hpp +1 -1
  1046. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_swappable_cxx_11.hpp +70 -0
  1047. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_floating_point.hpp +22 -0
  1048. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_integral.hpp +3 -0
  1049. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_swappable.hpp +4 -24
  1050. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_swappable.hpp +92 -0
  1051. data/src/cxx_supportlib/vendor-modified/boost/typeof/decltype.hpp +2 -3
  1052. data/src/cxx_supportlib/vendor-modified/boost/typeof/incr_registration_group.hpp +1 -10
  1053. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +5 -6
  1054. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/bitset.hpp +2 -4
  1055. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/complex.hpp +2 -4
  1056. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/deque.hpp +2 -5
  1057. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/fstream.hpp +2 -15
  1058. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/functional.hpp +4 -51
  1059. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iostream.hpp +2 -6
  1060. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/istream.hpp +2 -9
  1061. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iterator.hpp +2 -46
  1062. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/list.hpp +2 -5
  1063. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/locale.hpp +2 -29
  1064. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/map.hpp +2 -9
  1065. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/memory.hpp +4 -9
  1066. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/ostream.hpp +2 -6
  1067. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/queue.hpp +2 -5
  1068. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/set.hpp +2 -9
  1069. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/sstream.hpp +2 -19
  1070. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/stack.hpp +2 -5
  1071. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/streambuf.hpp +2 -5
  1072. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/string.hpp +2 -12
  1073. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/utility.hpp +2 -4
  1074. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/valarray.hpp +2 -10
  1075. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/vector.hpp +2 -5
  1076. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof.hpp +8 -202
  1077. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +860 -0
  1078. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +51 -0
  1079. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +716 -0
  1080. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +52 -0
  1081. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocator_constructed.hpp +59 -0
  1082. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/archive_constructed.hpp +71 -0
  1083. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/bad_archive_exception.hpp +27 -0
  1084. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/concurrent_static_asserts.hpp +105 -0
  1085. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +120 -85
  1086. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +1764 -0
  1087. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2271 -0
  1088. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/element_type.hpp +64 -0
  1089. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_map_types.hpp +86 -0
  1090. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_set_types.hpp +44 -0
  1091. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/ignore_wshadow.hpp +35 -0
  1092. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_handle.hpp +204 -0
  1093. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_map_types.hpp +139 -0
  1094. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_set_types.hpp +92 -0
  1095. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/reentrancy_check.hpp +138 -0
  1096. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/restore_wshadow.hpp +11 -0
  1097. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/rw_spinlock.hpp +179 -0
  1098. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +651 -0
  1099. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/tuple_rotate_right.hpp +52 -0
  1100. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +356 -1118
  1101. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +2 -0
  1102. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/mulx.hpp +129 -0
  1103. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/narrow_cast.hpp +44 -0
  1104. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/opt_storage.hpp +30 -0
  1105. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +96 -150
  1106. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialization_version.hpp +74 -0
  1107. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_container.hpp +204 -0
  1108. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_fca_container.hpp +156 -0
  1109. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_tracked_address.hpp +104 -0
  1110. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/static_assert.hpp +16 -0
  1111. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/throw_exception.hpp +30 -0
  1112. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +136 -19
  1113. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +4 -5
  1114. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +171 -103
  1115. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +1 -6
  1116. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +70 -46
  1117. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +1 -6
  1118. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +406 -899
  1119. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +7 -13
  1120. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +895 -0
  1121. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +44 -0
  1122. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +699 -0
  1123. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +44 -0
  1124. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +253 -618
  1125. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +8 -14
  1126. data/src/cxx_supportlib/vendor-modified/boost/utility/swap.hpp +4 -1
  1127. data/src/cxx_supportlib/vendor-modified/boost/utility/value_init.hpp +8 -8
  1128. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  1129. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +2 -9
  1130. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/frame.hpp +0 -11
  1131. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi13.hpp +14 -20
  1132. data/src/helper-scripts/wsgi-loader.py +2 -2
  1133. data/src/nginx_module/ConfigGeneral/ManifestGeneration.c +2 -2
  1134. data/src/ruby_supportlib/phusion_passenger/common_library.rb +16 -5
  1135. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +1 -1
  1136. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +3 -1
  1137. data/src/ruby_supportlib/phusion_passenger/native_support.rb +10 -7
  1138. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +8 -10
  1139. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +14 -0
  1140. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +4 -1
  1141. data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/libs.rb +6 -6
  1142. data/src/ruby_supportlib/phusion_passenger/platform_info/pcre.rb +11 -12
  1143. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/app.rb +1 -1
  1144. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +4 -0
  1145. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/lldb_controller.rb +5 -1
  1146. data/src/ruby_supportlib/phusion_passenger.rb +8 -8
  1147. metadata +109 -150
  1148. data/src/cxx_supportlib/ServerKit/http_parser.cpp +0 -2265
  1149. data/src/cxx_supportlib/ServerKit/http_parser.h +0 -330
  1150. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +0 -456
  1151. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bulk_executor_op.hpp +0 -90
  1152. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +0 -93
  1153. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +0 -70
  1154. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +0 -67
  1155. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +0 -101
  1156. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +0 -80
  1157. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +0 -64
  1158. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +0 -216
  1159. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +0 -64
  1160. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +0 -294
  1161. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +0 -406
  1162. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +0 -1254
  1163. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +0 -498
  1164. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_invocable.hpp +0 -154
  1165. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +0 -111
  1166. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_receiver.hpp +0 -130
  1167. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/bulk_sender.hpp +0 -263
  1168. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/submit_receiver.hpp +0 -235
  1169. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/void_receiver.hpp +0 -92
  1170. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +0 -296
  1171. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/receiver_invocation_error.ipp +0 -38
  1172. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +0 -101
  1173. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +0 -287
  1174. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver_invocation_error.hpp +0 -50
  1175. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +0 -296
  1176. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +0 -93
  1177. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +0 -318
  1178. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +0 -259
  1179. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +0 -259
  1180. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +0 -492
  1181. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +0 -256
  1182. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +0 -459
  1183. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +0 -106
  1184. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +0 -113
  1185. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +0 -300
  1186. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +0 -275
  1187. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +0 -64
  1188. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +0 -300
  1189. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_free.hpp +0 -116
  1190. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_member.hpp +0 -116
  1191. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_free.hpp +0 -114
  1192. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_member.hpp +0 -114
  1193. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_free.hpp +0 -110
  1194. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_free.hpp +0 -110
  1195. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_member.hpp +0 -110
  1196. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_free.hpp +0 -110
  1197. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_member.hpp +0 -110
  1198. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_free.hpp +0 -114
  1199. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_member.hpp +0 -114
  1200. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_free.hpp +0 -236
  1201. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_member.hpp +0 -236
  1202. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_free.hpp +0 -110
  1203. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_member.hpp +0 -110
  1204. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_free.hpp +0 -114
  1205. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_member.hpp +0 -114
  1206. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +0 -495
  1207. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +0 -462
  1208. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +0 -581
  1209. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +0 -563
  1210. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +0 -40
  1211. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +0 -41
  1212. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +0 -147
  1213. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +0 -39
  1214. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +0 -39
  1215. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_windows.hpp +0 -201
  1216. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_windows.hpp +0 -67
  1217. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_windows.hpp +0 -57
  1218. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_windows.hpp +0 -179
  1219. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf2_cc.hpp +0 -228
  1220. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf_cc.hpp +0 -441
  1221. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_template.hpp +0 -345
  1222. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_cc.hpp +0 -103
  1223. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_template.hpp +0 -1047
  1224. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_vw.hpp +0 -130
  1225. data/src/cxx_supportlib/vendor-modified/boost/bind/storage.hpp +0 -475
  1226. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +0 -71
  1227. data/src/cxx_supportlib/vendor-modified/boost/container/detail/hash_table.hpp +0 -1278
  1228. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple.hpp +0 -133
  1229. data/src/cxx_supportlib/vendor-modified/boost/detail/atomic_count.hpp +0 -21
  1230. data/src/cxx_supportlib/vendor-modified/boost/function/detail/function_iterate.hpp +0 -16
  1231. data/src/cxx_supportlib/vendor-modified/boost/function/detail/gen_maybe_include.pl +0 -39
  1232. data/src/cxx_supportlib/vendor-modified/boost/function/detail/maybe_include.hpp +0 -369
  1233. data/src/cxx_supportlib/vendor-modified/boost/function/detail/prologue.hpp +0 -26
  1234. data/src/cxx_supportlib/vendor-modified/boost/function/gen_function_N.pl +0 -26
  1235. data/src/cxx_supportlib/vendor-modified/boost/functional/hash_fwd.hpp +0 -6
  1236. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/abs.hpp +0 -89
  1237. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/gcd.hpp +0 -124
  1238. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/lcm.hpp +0 -126
  1239. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/sign.hpp +0 -89
  1240. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/overflow_helpers.hpp +0 -367
  1241. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/ratio_io.hpp +0 -1342
  1242. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/abs.hpp +0 -30
  1243. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/arithmetic.hpp +0 -22
  1244. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/comparison.hpp +0 -19
  1245. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/divides.hpp +0 -30
  1246. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/equal_to.hpp +0 -30
  1247. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/gcd.hpp +0 -30
  1248. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater.hpp +0 -30
  1249. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater_equal.hpp +0 -30
  1250. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/lcm.hpp +0 -30
  1251. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less.hpp +0 -30
  1252. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less_equal.hpp +0 -30
  1253. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/minus.hpp +0 -30
  1254. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/negate.hpp +0 -30
  1255. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/not_equal_to.hpp +0 -30
  1256. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/numeric_cast.hpp +0 -31
  1257. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/plus.hpp +0 -30
  1258. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_c_tag.hpp +0 -25
  1259. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_constant.hpp +0 -15
  1260. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/sign.hpp +0 -30
  1261. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/times.hpp +0 -30
  1262. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_thread_pause.hpp +0 -51
  1263. data/src/cxx_supportlib/vendor-modified/boost/swap.hpp +0 -17
  1264. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +0 -278
  1265. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +0 -297
  1266. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +0 -265
  1267. data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +0 -100
  1268. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -58
  1269. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +0 -34
  1270. data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +0 -118
  1271. data/src/cxx_supportlib/vendor-modified/boost/typeof/integral_template_param.hpp +0 -80
  1272. data/src/cxx_supportlib/vendor-modified/boost/typeof/message.hpp +0 -8
  1273. data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +0 -121
  1274. data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +0 -60
  1275. data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +0 -38
  1276. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions.hpp +0 -50
  1277. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +0 -135
  1278. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +0 -61
  1279. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +0 -32
  1280. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +0 -160
  1281. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +0 -149
  1282. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +0 -27
  1283. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_template_param.hpp +0 -37
  1284. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +0 -187
  1285. data/src/cxx_supportlib/vendor-modified/boost/typeof/unsupported.hpp +0 -29
  1286. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +0 -166
  1287. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +0 -321
  1288. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +0 -471
  1289. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +0 -621
  1290. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +0 -171
  1291. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa.hpp +0 -1921
  1292. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +0 -64
  1293. /data/dev/{webpacketpp.patch → websocketpp.patch} +0 -0
@@ -0,0 +1,1764 @@
1
+ /* Fast open-addressing concurrent hash table.
2
+ *
3
+ * Copyright 2023-2024 Joaquin M Lopez Munoz.
4
+ * Copyright 2024 Braden Ganetsky.
5
+ * Distributed under the Boost Software License, Version 1.0.
6
+ * (See accompanying file LICENSE_1_0.txt or copy at
7
+ * http://www.boost.org/LICENSE_1_0.txt)
8
+ *
9
+ * See https://www.boost.org/libs/unordered for library home page.
10
+ */
11
+
12
+ #ifndef BOOST_UNORDERED_DETAIL_FOA_CONCURRENT_TABLE_HPP
13
+ #define BOOST_UNORDERED_DETAIL_FOA_CONCURRENT_TABLE_HPP
14
+
15
+ #include <atomic>
16
+ #include <boost/assert.hpp>
17
+ #include <boost/config.hpp>
18
+ #include <boost/core/ignore_unused.hpp>
19
+ #include <boost/core/no_exceptions_support.hpp>
20
+ #include <boost/core/serialization.hpp>
21
+ #include <boost/cstdint.hpp>
22
+ #include <boost/mp11/tuple.hpp>
23
+ #include <boost/throw_exception.hpp>
24
+ #include <boost/unordered/detail/archive_constructed.hpp>
25
+ #include <boost/unordered/detail/bad_archive_exception.hpp>
26
+ #include <boost/unordered/detail/foa/core.hpp>
27
+ #include <boost/unordered/detail/foa/reentrancy_check.hpp>
28
+ #include <boost/unordered/detail/foa/rw_spinlock.hpp>
29
+ #include <boost/unordered/detail/foa/tuple_rotate_right.hpp>
30
+ #include <boost/unordered/detail/serialization_version.hpp>
31
+ #include <boost/unordered/detail/static_assert.hpp>
32
+ #include <boost/unordered/detail/type_traits.hpp>
33
+ #include <cstddef>
34
+ #include <functional>
35
+ #include <initializer_list>
36
+ #include <iterator>
37
+ #include <memory>
38
+ #include <new>
39
+ #include <type_traits>
40
+ #include <tuple>
41
+ #include <utility>
42
+
43
+ #if !defined(BOOST_UNORDERED_DISABLE_PARALLEL_ALGORITHMS)
44
+ #if defined(BOOST_UNORDERED_ENABLE_PARALLEL_ALGORITHMS)|| \
45
+ !defined(BOOST_NO_CXX17_HDR_EXECUTION)
46
+ #define BOOST_UNORDERED_PARALLEL_ALGORITHMS
47
+ #endif
48
+ #endif
49
+
50
+ #if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
51
+ #include <algorithm>
52
+ #include <execution>
53
+ #endif
54
+
55
+ namespace boost{
56
+ namespace unordered{
57
+ namespace detail{
58
+
59
+ #if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
60
+
61
+ template<typename ExecutionPolicy>
62
+ using is_execution_policy=std::is_execution_policy<
63
+ typename std::remove_cv<
64
+ typename std::remove_reference<ExecutionPolicy>::type
65
+ >::type
66
+ >;
67
+
68
+ #else
69
+
70
+ template<typename ExecutionPolicy>
71
+ using is_execution_policy=std::false_type;
72
+
73
+ #endif
74
+
75
+ namespace foa{
76
+
77
+ static constexpr std::size_t cacheline_size=64;
78
+
79
+ template<typename T,std::size_t N>
80
+ class cache_aligned_array
81
+ {
82
+ public:
83
+ cache_aligned_array(){for(std::size_t n=0;n<N;)::new (data(n++)) T();}
84
+ ~cache_aligned_array(){for(auto n=N;n>0;)data(n--)->~T();}
85
+ cache_aligned_array(const cache_aligned_array&)=delete;
86
+ cache_aligned_array& operator=(const cache_aligned_array&)=delete;
87
+
88
+ T& operator[](std::size_t pos)noexcept{return *data(pos);}
89
+
90
+ private:
91
+ static constexpr std::size_t element_offset=
92
+ (sizeof(T)+cacheline_size-1)/cacheline_size*cacheline_size;
93
+
94
+ BOOST_UNORDERED_STATIC_ASSERT(alignof(T)<=cacheline_size);
95
+
96
+ T* data(std::size_t pos)noexcept
97
+ {
98
+ return reinterpret_cast<T*>(
99
+ (reinterpret_cast<uintptr_t>(&buf)+cacheline_size-1)/
100
+ cacheline_size*cacheline_size
101
+ +pos*element_offset);
102
+ }
103
+
104
+ unsigned char buf[element_offset*N+cacheline_size-1];
105
+ };
106
+
107
+ template<typename Mutex,std::size_t N>
108
+ class multimutex
109
+ {
110
+ public:
111
+ constexpr std::size_t size()const noexcept{return N;}
112
+
113
+ Mutex& operator[](std::size_t pos)noexcept
114
+ {
115
+ BOOST_ASSERT(pos<N);
116
+ return mutexes[pos];
117
+ }
118
+
119
+ void lock()noexcept{for(std::size_t n=0;n<N;)mutexes[n++].lock();}
120
+ void unlock()noexcept{for(auto n=N;n>0;)mutexes[--n].unlock();}
121
+
122
+ private:
123
+ cache_aligned_array<Mutex,N> mutexes;
124
+ };
125
+
126
+ /* std::shared_lock is C++14 */
127
+
128
+ template<typename Mutex>
129
+ class shared_lock
130
+ {
131
+ public:
132
+ shared_lock(Mutex& m_)noexcept:m(m_){m.lock_shared();}
133
+ ~shared_lock()noexcept{if(owns)m.unlock_shared();}
134
+
135
+ /* not used but VS in pre-C++17 mode needs to see it for RVO */
136
+ shared_lock(const shared_lock&);
137
+
138
+ void lock(){BOOST_ASSERT(!owns);m.lock_shared();owns=true;}
139
+ void unlock(){BOOST_ASSERT(owns);m.unlock_shared();owns=false;}
140
+
141
+ private:
142
+ Mutex &m;
143
+ bool owns=true;
144
+ };
145
+
146
+ /* VS in pre-C++17 mode can't implement RVO for std::lock_guard due to
147
+ * its copy constructor being deleted.
148
+ */
149
+
150
+ template<typename Mutex>
151
+ class lock_guard
152
+ {
153
+ public:
154
+ lock_guard(Mutex& m_)noexcept:m(m_){m.lock();}
155
+ ~lock_guard()noexcept{m.unlock();}
156
+
157
+ /* not used but VS in pre-C++17 mode needs to see it for RVO */
158
+ lock_guard(const lock_guard&);
159
+
160
+ private:
161
+ Mutex &m;
162
+ };
163
+
164
+ /* inspired by boost/multi_index/detail/scoped_bilock.hpp */
165
+
166
+ template<typename Mutex>
167
+ class scoped_bilock
168
+ {
169
+ public:
170
+ scoped_bilock(Mutex& m1,Mutex& m2)noexcept
171
+ {
172
+ bool mutex_lt=std::less<Mutex*>{}(&m1,&m2);
173
+
174
+ pm1=mutex_lt?&m1:&m2;
175
+ pm1->lock();
176
+ if(&m1==&m2){
177
+ pm2=nullptr;
178
+ }
179
+ else{
180
+ pm2=mutex_lt?&m2:&m1;
181
+ pm2->lock();
182
+ }
183
+ }
184
+
185
+ /* not used but VS in pre-C++17 mode needs to see it for RVO */
186
+ scoped_bilock(const scoped_bilock&);
187
+
188
+ ~scoped_bilock()noexcept
189
+ {
190
+ if(pm2)pm2->unlock();
191
+ pm1->unlock();
192
+ }
193
+
194
+ private:
195
+ Mutex *pm1,*pm2;
196
+ };
197
+
198
+ /* use atomics for group metadata storage */
199
+
200
+ template<typename Integral>
201
+ struct atomic_integral
202
+ {
203
+ operator Integral()const{return n.load(std::memory_order_relaxed);}
204
+ void operator=(Integral m){n.store(m,std::memory_order_relaxed);}
205
+ void operator|=(Integral m){n.fetch_or(m,std::memory_order_relaxed);}
206
+ void operator&=(Integral m){n.fetch_and(m,std::memory_order_relaxed);}
207
+
208
+ atomic_integral& operator=(atomic_integral const& rhs) {
209
+ n.store(rhs.n.load(std::memory_order_relaxed),std::memory_order_relaxed);
210
+ return *this;
211
+ }
212
+
213
+ std::atomic<Integral> n;
214
+ };
215
+
216
+ /* Group-level concurrency protection. It provides a rw mutex plus an
217
+ * atomic insertion counter for optimistic insertion (see
218
+ * unprotected_norehash_emplace_or_visit).
219
+ */
220
+
221
+ struct group_access
222
+ {
223
+ using mutex_type=rw_spinlock;
224
+ using shared_lock_guard=shared_lock<mutex_type>;
225
+ using exclusive_lock_guard=lock_guard<mutex_type>;
226
+ using insert_counter_type=std::atomic<boost::uint32_t>;
227
+
228
+ shared_lock_guard shared_access(){return shared_lock_guard{m};}
229
+ exclusive_lock_guard exclusive_access(){return exclusive_lock_guard{m};}
230
+ insert_counter_type& insert_counter(){return cnt;}
231
+
232
+ private:
233
+ mutex_type m;
234
+ insert_counter_type cnt{0};
235
+ };
236
+
237
+ template<std::size_t Size>
238
+ group_access* dummy_group_accesses()
239
+ {
240
+ /* Default group_access array to provide to empty containers without
241
+ * incurring dynamic allocation. Mutexes won't actually ever be used,
242
+ * (no successful reduced hash match) and insertion counters won't ever
243
+ * be incremented (insertions won't succeed as capacity()==0).
244
+ */
245
+
246
+ static group_access accesses[Size];
247
+
248
+ return accesses;
249
+ }
250
+
251
+ /* subclasses table_arrays to add an additional group_access array */
252
+
253
+ template<typename Value,typename Group,typename SizePolicy,typename Allocator>
254
+ struct concurrent_table_arrays:table_arrays<Value,Group,SizePolicy,Allocator>
255
+ {
256
+ using group_access_allocator_type=
257
+ typename boost::allocator_rebind<Allocator,group_access>::type;
258
+ using group_access_pointer=
259
+ typename boost::allocator_pointer<group_access_allocator_type>::type;
260
+
261
+ using super=table_arrays<Value,Group,SizePolicy,Allocator>;
262
+ using allocator_type=typename super::allocator_type;
263
+
264
+ concurrent_table_arrays(const super& arrays,group_access_pointer pga):
265
+ super{arrays},group_accesses_{pga}{}
266
+
267
+ group_access* group_accesses()const noexcept{
268
+ return boost::to_address(group_accesses_);
269
+ }
270
+
271
+ static concurrent_table_arrays new_(allocator_type al,std::size_t n)
272
+ {
273
+ super x{super::new_(al,n)};
274
+ BOOST_TRY{
275
+ return new_group_access(group_access_allocator_type(al),x);
276
+ }
277
+ BOOST_CATCH(...){
278
+ super::delete_(al,x);
279
+ BOOST_RETHROW
280
+ }
281
+ BOOST_CATCH_END
282
+ }
283
+
284
+ static void set_group_access(
285
+ group_access_allocator_type al,concurrent_table_arrays& arrays)
286
+ {
287
+ set_group_access(
288
+ al,arrays,std::is_same<group_access*,group_access_pointer>{});
289
+ }
290
+
291
+ static void set_group_access(
292
+ group_access_allocator_type al,
293
+ concurrent_table_arrays& arrays,
294
+ std::false_type /* fancy pointers */)
295
+ {
296
+ arrays.group_accesses_=
297
+ boost::allocator_allocate(al,arrays.groups_size_mask+1);
298
+
299
+ for(std::size_t i=0;i<arrays.groups_size_mask+1;++i){
300
+ ::new (arrays.group_accesses()+i) group_access();
301
+ }
302
+ }
303
+
304
+ static void set_group_access(
305
+ group_access_allocator_type al,
306
+ concurrent_table_arrays& arrays,
307
+ std::true_type /* optimize when elements() is null */)
308
+ {
309
+ if(!arrays.elements()){
310
+ arrays.group_accesses_=
311
+ dummy_group_accesses<SizePolicy::min_size()>();
312
+ } else {
313
+ set_group_access(al,arrays,std::false_type{});
314
+ }
315
+ }
316
+
317
+ static concurrent_table_arrays new_group_access(
318
+ group_access_allocator_type al,const super& x)
319
+ {
320
+ concurrent_table_arrays arrays{x,nullptr};
321
+ set_group_access(al,arrays);
322
+ return arrays;
323
+ }
324
+
325
+ static void delete_(allocator_type al,concurrent_table_arrays& arrays)noexcept
326
+ {
327
+ delete_group_access(group_access_allocator_type(al),arrays);
328
+ super::delete_(al,arrays);
329
+ }
330
+
331
+ static void delete_group_access(
332
+ group_access_allocator_type al,concurrent_table_arrays& arrays)noexcept
333
+ {
334
+ if(arrays.elements()){
335
+ boost::allocator_deallocate(
336
+ al,arrays.group_accesses_,arrays.groups_size_mask+1);
337
+ }
338
+ }
339
+
340
+ group_access_pointer group_accesses_;
341
+ };
342
+
343
+ struct atomic_size_control
344
+ {
345
+ static constexpr auto atomic_size_t_size=sizeof(std::atomic<std::size_t>);
346
+ BOOST_UNORDERED_STATIC_ASSERT(atomic_size_t_size<cacheline_size);
347
+
348
+ atomic_size_control(std::size_t ml_,std::size_t size_):
349
+ pad0_{},ml{ml_},pad1_{},size{size_}{}
350
+ atomic_size_control(const atomic_size_control& x):
351
+ pad0_{},ml{x.ml.load()},pad1_{},size{x.size.load()}{}
352
+
353
+ /* padding to avoid false sharing internally and with sorrounding data */
354
+
355
+ unsigned char pad0_[cacheline_size-atomic_size_t_size];
356
+ std::atomic<std::size_t> ml;
357
+ unsigned char pad1_[cacheline_size-atomic_size_t_size];
358
+ std::atomic<std::size_t> size;
359
+ };
360
+
361
+ /* std::swap can't be used on non-assignable atomics */
362
+
363
+ inline void
364
+ swap_atomic_size_t(std::atomic<std::size_t>& x,std::atomic<std::size_t>& y)
365
+ {
366
+ std::size_t tmp=x;
367
+ x=static_cast<std::size_t>(y);
368
+ y=tmp;
369
+ }
370
+
371
+ inline void swap(atomic_size_control& x,atomic_size_control& y)
372
+ {
373
+ swap_atomic_size_t(x.ml,y.ml);
374
+ swap_atomic_size_t(x.size,y.size);
375
+ }
376
+
377
+ /* foa::concurrent_table serves as the foundation for end-user concurrent
378
+ * hash containers.
379
+ *
380
+ * The exposed interface (completed by the wrapping containers) is not that
381
+ * of a regular container (in fact, it does not model Container as understood
382
+ * by the C++ standard):
383
+ *
384
+ * - Iterators are not provided as they are not suitable for concurrent
385
+ * scenarios.
386
+ * - As a consequence, composite operations with regular containers
387
+ * (like, for instance, looking up an element and modifying it), must
388
+ * be provided natively without any intervening iterator/accesor.
389
+ * Visitation is a core concept in this design, either on its own (eg.
390
+ * visit(k) locates the element with key k *and* accesses it) or as part
391
+ * of a native composite operation (eg. try_emplace_or_visit). Visitation
392
+ * is constant or mutating depending on whether the used table function is
393
+ * const or not.
394
+ * - The API provides member functions for all the meaningful composite
395
+ * operations of the form "X (and|or) Y", where X, Y are one of the
396
+ * primitives FIND, ACCESS, INSERT or ERASE.
397
+ * - Parallel versions of [c]visit_all(f) and erase_if(f) are provided based
398
+ * on C++17 stdlib parallel algorithms.
399
+ *
400
+ * Consult boost::concurrent_flat_(map|set) docs for the full API reference.
401
+ * Heterogeneous lookup is suported by default, that is, without checking for
402
+ * any ::is_transparent typedefs --this checking is done by the wrapping
403
+ * containers.
404
+ *
405
+ * Thread-safe concurrency is implemented using a two-level lock system:
406
+ *
407
+ * - A first container-level lock is implemented with an array of
408
+ * rw spinlocks acting as a single rw mutex with very little
409
+ * cache-coherence traffic on read (each thread is assigned a different
410
+ * spinlock in the array). Container-level write locking is only used for
411
+ * rehashing and other container-wide operations (assignment, swap, etc.)
412
+ * - Each group of slots has an associated rw spinlock. A thread holds
413
+ * at most one group lock at any given time. Lookup is implemented in
414
+ * a (groupwise) lock-free manner until a reduced hash match is found, in
415
+ * which case the relevant group is locked and the slot is double-checked
416
+ * for occupancy and compared with the key.
417
+ * - Each group has also an associated so-called insertion counter used for
418
+ * the following optimistic insertion algorithm:
419
+ * - The value of the insertion counter for the initial group in the probe
420
+ * sequence is locally recorded (let's call this value c0).
421
+ * - Lookup is as described above. If lookup finds no equivalent element,
422
+ * search for an available slot for insertion successively locks/unlocks
423
+ * each group in the probing sequence.
424
+ * - When an available slot is located, it is preemptively occupied (its
425
+ * reduced hash value is set) and the insertion counter is atomically
426
+ * incremented: if no other thread has incremented the counter during the
427
+ * whole operation (which is checked by comparing with c0), then we're
428
+ * good to go and complete the insertion, otherwise we roll back and
429
+ * start over.
430
+ */
431
+
432
+ template<typename,typename,typename,typename>
433
+ class table; /* concurrent/non-concurrent interop */
434
+
435
+ template <typename TypePolicy,typename Hash,typename Pred,typename Allocator>
436
+ using concurrent_table_core_impl=table_core<
437
+ TypePolicy,group15<atomic_integral>,concurrent_table_arrays,
438
+ atomic_size_control,Hash,Pred,Allocator>;
439
+
440
+ #include <boost/unordered/detail/foa/ignore_wshadow.hpp>
441
+
442
+ #if defined(BOOST_MSVC)
443
+ #pragma warning(push)
444
+ #pragma warning(disable:4714) /* marked as __forceinline not inlined */
445
+ #endif
446
+
447
+ template<typename TypePolicy,typename Hash,typename Pred,typename Allocator>
448
+ class concurrent_table:
449
+ concurrent_table_core_impl<TypePolicy,Hash,Pred,Allocator>
450
+ {
451
+ using super=concurrent_table_core_impl<TypePolicy,Hash,Pred,Allocator>;
452
+ using type_policy=typename super::type_policy;
453
+ using group_type=typename super::group_type;
454
+ using super::N;
455
+ using prober=typename super::prober;
456
+ using arrays_type=typename super::arrays_type;
457
+ using size_ctrl_type=typename super::size_ctrl_type;
458
+ using compatible_nonconcurrent_table=table<TypePolicy,Hash,Pred,Allocator>;
459
+ friend compatible_nonconcurrent_table;
460
+
461
+ public:
462
+ using key_type=typename super::key_type;
463
+ using init_type=typename super::init_type;
464
+ using value_type=typename super::value_type;
465
+ using element_type=typename super::element_type;
466
+ using hasher=typename super::hasher;
467
+ using key_equal=typename super::key_equal;
468
+ using allocator_type=typename super::allocator_type;
469
+ using size_type=typename super::size_type;
470
+ static constexpr std::size_t bulk_visit_size=16;
471
+
472
+ private:
473
+ template<typename Value,typename T>
474
+ using enable_if_is_value_type=typename std::enable_if<
475
+ !std::is_same<init_type,value_type>::value&&
476
+ std::is_same<Value,value_type>::value,
477
+ T
478
+ >::type;
479
+
480
+ public:
481
+ concurrent_table(
482
+ std::size_t n=default_bucket_count,const Hash& h_=Hash(),
483
+ const Pred& pred_=Pred(),const Allocator& al_=Allocator()):
484
+ super{n,h_,pred_,al_}
485
+ {}
486
+
487
+ concurrent_table(const concurrent_table& x):
488
+ concurrent_table(x,x.exclusive_access()){}
489
+ concurrent_table(concurrent_table&& x):
490
+ concurrent_table(std::move(x),x.exclusive_access()){}
491
+ concurrent_table(const concurrent_table& x,const Allocator& al_):
492
+ concurrent_table(x,al_,x.exclusive_access()){}
493
+ concurrent_table(concurrent_table&& x,const Allocator& al_):
494
+ concurrent_table(std::move(x),al_,x.exclusive_access()){}
495
+
496
+ template<typename ArraysType>
497
+ concurrent_table(
498
+ compatible_nonconcurrent_table&& x,
499
+ arrays_holder<ArraysType,Allocator>&& ah):
500
+ super{
501
+ std::move(x.h()),std::move(x.pred()),std::move(x.al()),
502
+ [&x]{return arrays_type::new_group_access(
503
+ x.al(),typename arrays_type::super{
504
+ x.arrays.groups_size_index,x.arrays.groups_size_mask,
505
+ to_pointer<typename arrays_type::group_type_pointer>(
506
+ reinterpret_cast<group_type*>(x.arrays.groups())),
507
+ x.arrays.elements_});},
508
+ size_ctrl_type{x.size_ctrl.ml,x.size_ctrl.size}}
509
+ {
510
+ x.arrays=ah.release();
511
+ x.size_ctrl.ml=x.initial_max_load();
512
+ x.size_ctrl.size=0;
513
+ }
514
+
515
+ concurrent_table(compatible_nonconcurrent_table&& x):
516
+ concurrent_table(std::move(x),x.make_empty_arrays())
517
+ {}
518
+
519
+ ~concurrent_table()=default;
520
+
521
+ concurrent_table& operator=(const concurrent_table& x)
522
+ {
523
+ auto lck=exclusive_access(*this,x);
524
+ super::operator=(x);
525
+ return *this;
526
+ }
527
+
528
+ concurrent_table& operator=(concurrent_table&& x)noexcept(
529
+ noexcept(std::declval<super&>() = std::declval<super&&>()))
530
+ {
531
+ auto lck=exclusive_access(*this,x);
532
+ super::operator=(std::move(x));
533
+ return *this;
534
+ }
535
+
536
+ concurrent_table& operator=(std::initializer_list<value_type> il) {
537
+ auto lck=exclusive_access();
538
+ super::clear();
539
+ super::noshrink_reserve(il.size());
540
+ for (auto const& v : il) {
541
+ this->unprotected_emplace(v);
542
+ }
543
+ return *this;
544
+ }
545
+
546
+ allocator_type get_allocator()const noexcept
547
+ {
548
+ auto lck=shared_access();
549
+ return super::get_allocator();
550
+ }
551
+
552
+ template<typename Key,typename F>
553
+ BOOST_FORCEINLINE std::size_t visit(const Key& x,F&& f)
554
+ {
555
+ return visit_impl(group_exclusive{},x,std::forward<F>(f));
556
+ }
557
+
558
+ template<typename Key,typename F>
559
+ BOOST_FORCEINLINE std::size_t visit(const Key& x,F&& f)const
560
+ {
561
+ return visit_impl(group_shared{},x,std::forward<F>(f));
562
+ }
563
+
564
+ template<typename Key,typename F>
565
+ BOOST_FORCEINLINE std::size_t cvisit(const Key& x,F&& f)const
566
+ {
567
+ return visit(x,std::forward<F>(f));
568
+ }
569
+
570
+ template<typename FwdIterator,typename F>
571
+ BOOST_FORCEINLINE
572
+ std::size_t visit(FwdIterator first,FwdIterator last,F&& f)
573
+ {
574
+ return bulk_visit_impl(group_exclusive{},first,last,std::forward<F>(f));
575
+ }
576
+
577
+ template<typename FwdIterator,typename F>
578
+ BOOST_FORCEINLINE
579
+ std::size_t visit(FwdIterator first,FwdIterator last,F&& f)const
580
+ {
581
+ return bulk_visit_impl(group_shared{},first,last,std::forward<F>(f));
582
+ }
583
+
584
+ template<typename FwdIterator,typename F>
585
+ BOOST_FORCEINLINE
586
+ std::size_t cvisit(FwdIterator first,FwdIterator last,F&& f)const
587
+ {
588
+ return visit(first,last,std::forward<F>(f));
589
+ }
590
+
591
+ template<typename F> std::size_t visit_all(F&& f)
592
+ {
593
+ return visit_all_impl(group_exclusive{},std::forward<F>(f));
594
+ }
595
+
596
+ template<typename F> std::size_t visit_all(F&& f)const
597
+ {
598
+ return visit_all_impl(group_shared{},std::forward<F>(f));
599
+ }
600
+
601
+ template<typename F> std::size_t cvisit_all(F&& f)const
602
+ {
603
+ return visit_all(std::forward<F>(f));
604
+ }
605
+
606
+ #if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
607
+ template<typename ExecutionPolicy,typename F>
608
+ void visit_all(ExecutionPolicy&& policy,F&& f)
609
+ {
610
+ visit_all_impl(
611
+ group_exclusive{},
612
+ std::forward<ExecutionPolicy>(policy),std::forward<F>(f));
613
+ }
614
+
615
+ template<typename ExecutionPolicy,typename F>
616
+ void visit_all(ExecutionPolicy&& policy,F&& f)const
617
+ {
618
+ visit_all_impl(
619
+ group_shared{},
620
+ std::forward<ExecutionPolicy>(policy),std::forward<F>(f));
621
+ }
622
+
623
+ template<typename ExecutionPolicy,typename F>
624
+ void cvisit_all(ExecutionPolicy&& policy,F&& f)const
625
+ {
626
+ visit_all(std::forward<ExecutionPolicy>(policy),std::forward<F>(f));
627
+ }
628
+ #endif
629
+
630
+ template<typename F> bool visit_while(F&& f)
631
+ {
632
+ return visit_while_impl(group_exclusive{},std::forward<F>(f));
633
+ }
634
+
635
+ template<typename F> bool visit_while(F&& f)const
636
+ {
637
+ return visit_while_impl(group_shared{},std::forward<F>(f));
638
+ }
639
+
640
+ template<typename F> bool cvisit_while(F&& f)const
641
+ {
642
+ return visit_while(std::forward<F>(f));
643
+ }
644
+
645
+ #if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
646
+ template<typename ExecutionPolicy,typename F>
647
+ bool visit_while(ExecutionPolicy&& policy,F&& f)
648
+ {
649
+ return visit_while_impl(
650
+ group_exclusive{},
651
+ std::forward<ExecutionPolicy>(policy),std::forward<F>(f));
652
+ }
653
+
654
+ template<typename ExecutionPolicy,typename F>
655
+ bool visit_while(ExecutionPolicy&& policy,F&& f)const
656
+ {
657
+ return visit_while_impl(
658
+ group_shared{},
659
+ std::forward<ExecutionPolicy>(policy),std::forward<F>(f));
660
+ }
661
+
662
+ template<typename ExecutionPolicy,typename F>
663
+ bool cvisit_while(ExecutionPolicy&& policy,F&& f)const
664
+ {
665
+ return visit_while(
666
+ std::forward<ExecutionPolicy>(policy),std::forward<F>(f));
667
+ }
668
+ #endif
669
+
670
+ bool empty()const noexcept{return size()==0;}
671
+
672
+ std::size_t size()const noexcept
673
+ {
674
+ auto lck=shared_access();
675
+ return unprotected_size();
676
+ }
677
+
678
+ using super::max_size;
679
+
680
+ template<typename... Args>
681
+ BOOST_FORCEINLINE bool emplace(Args&&... args)
682
+ {
683
+ return construct_and_emplace(std::forward<Args>(args)...);
684
+ }
685
+
686
+ /* Optimization for value_type and init_type, to avoid constructing twice */
687
+ template<typename Value>
688
+ BOOST_FORCEINLINE auto emplace(Value&& x)->typename std::enable_if<
689
+ detail::is_similar_to_any<Value,value_type,init_type>::value,bool>::type
690
+ {
691
+ return emplace_impl(std::forward<Value>(x));
692
+ }
693
+
694
+ /* Optimizations for maps for (k,v) to avoid eagerly constructing value */
695
+ template <typename K, typename V>
696
+ BOOST_FORCEINLINE auto emplace(K&& k, V&& v) ->
697
+ typename std::enable_if<is_emplace_kv_able<concurrent_table, K>::value,
698
+ bool>::type
699
+ {
700
+ alloc_cted_or_fwded_key_type<type_policy, Allocator, K&&> x(
701
+ this->al(), std::forward<K>(k));
702
+ return emplace_impl(
703
+ try_emplace_args_t{}, x.move_or_fwd(), std::forward<V>(v));
704
+ }
705
+
706
+ BOOST_FORCEINLINE bool
707
+ insert(const init_type& x){return emplace_impl(x);}
708
+
709
+ BOOST_FORCEINLINE bool
710
+ insert(init_type&& x){return emplace_impl(std::move(x));}
711
+
712
+ /* template<typename=void> tilts call ambiguities in favor of init_type */
713
+
714
+ template<typename=void>
715
+ BOOST_FORCEINLINE bool
716
+ insert(const value_type& x){return emplace_impl(x);}
717
+
718
+ template<typename=void>
719
+ BOOST_FORCEINLINE bool
720
+ insert(value_type&& x){return emplace_impl(std::move(x));}
721
+
722
+ template<typename Key,typename... Args>
723
+ BOOST_FORCEINLINE bool try_emplace(Key&& x,Args&&... args)
724
+ {
725
+ return emplace_impl(
726
+ try_emplace_args_t{},std::forward<Key>(x),std::forward<Args>(args)...);
727
+ }
728
+
729
+ template<typename Key,typename... Args>
730
+ BOOST_FORCEINLINE bool try_emplace_or_visit(Key&& x,Args&&... args)
731
+ {
732
+ return emplace_or_visit_flast(
733
+ group_exclusive{},
734
+ try_emplace_args_t{},std::forward<Key>(x),std::forward<Args>(args)...);
735
+ }
736
+
737
+ template<typename Key,typename... Args>
738
+ BOOST_FORCEINLINE bool try_emplace_or_cvisit(Key&& x,Args&&... args)
739
+ {
740
+ return emplace_or_visit_flast(
741
+ group_shared{},
742
+ try_emplace_args_t{},std::forward<Key>(x),std::forward<Args>(args)...);
743
+ }
744
+
745
+ template<typename... Args>
746
+ BOOST_FORCEINLINE bool emplace_or_visit(Args&&... args)
747
+ {
748
+ return construct_and_emplace_or_visit_flast(
749
+ group_exclusive{},std::forward<Args>(args)...);
750
+ }
751
+
752
+ template<typename... Args>
753
+ BOOST_FORCEINLINE bool emplace_or_cvisit(Args&&... args)
754
+ {
755
+ return construct_and_emplace_or_visit_flast(
756
+ group_shared{},std::forward<Args>(args)...);
757
+ }
758
+
759
+ template<typename F>
760
+ BOOST_FORCEINLINE bool insert_or_visit(const init_type& x,F&& f)
761
+ {
762
+ return emplace_or_visit_impl(group_exclusive{},std::forward<F>(f),x);
763
+ }
764
+
765
+ template<typename F>
766
+ BOOST_FORCEINLINE bool insert_or_cvisit(const init_type& x,F&& f)
767
+ {
768
+ return emplace_or_visit_impl(group_shared{},std::forward<F>(f),x);
769
+ }
770
+
771
+ template<typename F>
772
+ BOOST_FORCEINLINE bool insert_or_visit(init_type&& x,F&& f)
773
+ {
774
+ return emplace_or_visit_impl(
775
+ group_exclusive{},std::forward<F>(f),std::move(x));
776
+ }
777
+
778
+ template<typename F>
779
+ BOOST_FORCEINLINE bool insert_or_cvisit(init_type&& x,F&& f)
780
+ {
781
+ return emplace_or_visit_impl(
782
+ group_shared{},std::forward<F>(f),std::move(x));
783
+ }
784
+
785
+ /* SFINAE tilts call ambiguities in favor of init_type */
786
+
787
+ template<typename Value,typename F>
788
+ BOOST_FORCEINLINE auto insert_or_visit(const Value& x,F&& f)
789
+ ->enable_if_is_value_type<Value,bool>
790
+ {
791
+ return emplace_or_visit_impl(group_exclusive{},std::forward<F>(f),x);
792
+ }
793
+
794
+ template<typename Value,typename F>
795
+ BOOST_FORCEINLINE auto insert_or_cvisit(const Value& x,F&& f)
796
+ ->enable_if_is_value_type<Value,bool>
797
+ {
798
+ return emplace_or_visit_impl(group_shared{},std::forward<F>(f),x);
799
+ }
800
+
801
+ template<typename Value,typename F>
802
+ BOOST_FORCEINLINE auto insert_or_visit(Value&& x,F&& f)
803
+ ->enable_if_is_value_type<Value,bool>
804
+ {
805
+ return emplace_or_visit_impl(
806
+ group_exclusive{},std::forward<F>(f),std::move(x));
807
+ }
808
+
809
+ template<typename Value,typename F>
810
+ BOOST_FORCEINLINE auto insert_or_cvisit(Value&& x,F&& f)
811
+ ->enable_if_is_value_type<Value,bool>
812
+ {
813
+ return emplace_or_visit_impl(
814
+ group_shared{},std::forward<F>(f),std::move(x));
815
+ }
816
+
817
+ template<typename Key>
818
+ BOOST_FORCEINLINE std::size_t erase(const Key& x)
819
+ {
820
+ return erase_if(x,[](const value_type&){return true;});
821
+ }
822
+
823
+ template<typename Key,typename F>
824
+ BOOST_FORCEINLINE auto erase_if(const Key& x,F&& f)->typename std::enable_if<
825
+ !is_execution_policy<Key>::value,std::size_t>::type
826
+ {
827
+ auto lck=shared_access();
828
+ auto hash=this->hash_for(x);
829
+ std::size_t res=0;
830
+ unprotected_internal_visit(
831
+ group_exclusive{},x,this->position_for(hash),hash,
832
+ [&,this](group_type* pg,unsigned int n,element_type* p)
833
+ {
834
+ if(f(cast_for(group_exclusive{},type_policy::value_from(*p)))){
835
+ super::erase(pg,n,p);
836
+ res=1;
837
+ }
838
+ });
839
+ return res;
840
+ }
841
+
842
+ template<typename F>
843
+ std::size_t erase_if(F&& f)
844
+ {
845
+ auto lck=shared_access();
846
+ std::size_t res=0;
847
+ for_all_elements(
848
+ group_exclusive{},
849
+ [&,this](group_type* pg,unsigned int n,element_type* p){
850
+ if(f(cast_for(group_exclusive{},type_policy::value_from(*p)))){
851
+ super::erase(pg,n,p);
852
+ ++res;
853
+ }
854
+ });
855
+ return res;
856
+ }
857
+
858
+ #if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
859
+ template<typename ExecutionPolicy,typename F>
860
+ auto erase_if(ExecutionPolicy&& policy,F&& f)->typename std::enable_if<
861
+ is_execution_policy<ExecutionPolicy>::value,void>::type
862
+ {
863
+ auto lck=shared_access();
864
+ for_all_elements(
865
+ group_exclusive{},std::forward<ExecutionPolicy>(policy),
866
+ [&,this](group_type* pg,unsigned int n,element_type* p){
867
+ if(f(cast_for(group_exclusive{},type_policy::value_from(*p)))){
868
+ super::erase(pg,n,p);
869
+ }
870
+ });
871
+ }
872
+ #endif
873
+
874
+ void swap(concurrent_table& x)
875
+ noexcept(noexcept(std::declval<super&>().swap(std::declval<super&>())))
876
+ {
877
+ auto lck=exclusive_access(*this,x);
878
+ super::swap(x);
879
+ }
880
+
881
+ void clear()noexcept
882
+ {
883
+ auto lck=exclusive_access();
884
+ super::clear();
885
+ }
886
+
887
+ // TODO: should we accept different allocator too?
888
+ template<typename Hash2,typename Pred2>
889
+ size_type merge(concurrent_table<TypePolicy,Hash2,Pred2,Allocator>& x)
890
+ {
891
+ using merge_table_type=concurrent_table<TypePolicy,Hash2,Pred2,Allocator>;
892
+ using super2=typename merge_table_type::super;
893
+
894
+ // for clang
895
+ boost::ignore_unused<super2>();
896
+
897
+ auto lck=exclusive_access(*this,x);
898
+ size_type s=super::size();
899
+ x.super2::for_all_elements( /* super2::for_all_elements -> unprotected */
900
+ [&,this](group_type* pg,unsigned int n,element_type* p){
901
+ typename merge_table_type::erase_on_exit e{x,pg,n,p};
902
+ if(!unprotected_emplace(type_policy::move(*p)))e.rollback();
903
+ });
904
+ return size_type{super::size()-s};
905
+ }
906
+
907
+ template<typename Hash2,typename Pred2>
908
+ void merge(concurrent_table<TypePolicy,Hash2,Pred2,Allocator>&& x){merge(x);}
909
+
910
+ hasher hash_function()const
911
+ {
912
+ auto lck=shared_access();
913
+ return super::hash_function();
914
+ }
915
+
916
+ key_equal key_eq()const
917
+ {
918
+ auto lck=shared_access();
919
+ return super::key_eq();
920
+ }
921
+
922
+ template<typename Key>
923
+ BOOST_FORCEINLINE std::size_t count(Key&& x)const
924
+ {
925
+ return (std::size_t)contains(std::forward<Key>(x));
926
+ }
927
+
928
+ template<typename Key>
929
+ BOOST_FORCEINLINE bool contains(Key&& x)const
930
+ {
931
+ return visit(std::forward<Key>(x),[](const value_type&){})!=0;
932
+ }
933
+
934
+ std::size_t capacity()const noexcept
935
+ {
936
+ auto lck=shared_access();
937
+ return super::capacity();
938
+ }
939
+
940
+ float load_factor()const noexcept
941
+ {
942
+ auto lck=shared_access();
943
+ if(super::capacity()==0)return 0;
944
+ else return float(unprotected_size())/
945
+ float(super::capacity());
946
+ }
947
+
948
+ using super::max_load_factor;
949
+
950
+ std::size_t max_load()const noexcept
951
+ {
952
+ auto lck=shared_access();
953
+ return super::max_load();
954
+ }
955
+
956
+ void rehash(std::size_t n)
957
+ {
958
+ auto lck=exclusive_access();
959
+ super::rehash(n);
960
+ }
961
+
962
+ void reserve(std::size_t n)
963
+ {
964
+ auto lck=exclusive_access();
965
+ super::reserve(n);
966
+ }
967
+
968
+ template<typename Predicate>
969
+ friend std::size_t erase_if(concurrent_table& x,Predicate&& pr)
970
+ {
971
+ return x.erase_if(std::forward<Predicate>(pr));
972
+ }
973
+
974
+ friend bool operator==(const concurrent_table& x,const concurrent_table& y)
975
+ {
976
+ auto lck=exclusive_access(x,y);
977
+ return static_cast<const super&>(x)==static_cast<const super&>(y);
978
+ }
979
+
980
+ friend bool operator!=(const concurrent_table& x,const concurrent_table& y)
981
+ {
982
+ return !(x==y);
983
+ }
984
+
985
+ private:
986
+ template<typename,typename,typename,typename> friend class concurrent_table;
987
+
988
+ using mutex_type=rw_spinlock;
989
+ using multimutex_type=multimutex<mutex_type,128>; // TODO: adapt 128 to the machine
990
+ using shared_lock_guard=reentrancy_checked<shared_lock<mutex_type>>;
991
+ using exclusive_lock_guard=reentrancy_checked<lock_guard<multimutex_type>>;
992
+ using exclusive_bilock_guard=
993
+ reentrancy_bichecked<scoped_bilock<multimutex_type>>;
994
+ using group_shared_lock_guard=typename group_access::shared_lock_guard;
995
+ using group_exclusive_lock_guard=typename group_access::exclusive_lock_guard;
996
+ using group_insert_counter_type=typename group_access::insert_counter_type;
997
+
998
+ concurrent_table(const concurrent_table& x,exclusive_lock_guard):
999
+ super{x}{}
1000
+ concurrent_table(concurrent_table&& x,exclusive_lock_guard):
1001
+ super{std::move(x)}{}
1002
+ concurrent_table(
1003
+ const concurrent_table& x,const Allocator& al_,exclusive_lock_guard):
1004
+ super{x,al_}{}
1005
+ concurrent_table(
1006
+ concurrent_table&& x,const Allocator& al_,exclusive_lock_guard):
1007
+ super{std::move(x),al_}{}
1008
+
1009
+ inline shared_lock_guard shared_access()const
1010
+ {
1011
+ thread_local auto id=(++thread_counter)%mutexes.size();
1012
+
1013
+ return shared_lock_guard{this,mutexes[id]};
1014
+ }
1015
+
1016
+ inline exclusive_lock_guard exclusive_access()const
1017
+ {
1018
+ return exclusive_lock_guard{this,mutexes};
1019
+ }
1020
+
1021
+ static inline exclusive_bilock_guard exclusive_access(
1022
+ const concurrent_table& x,const concurrent_table& y)
1023
+ {
1024
+ return {&x,&y,x.mutexes,y.mutexes};
1025
+ }
1026
+
1027
+ template<typename Hash2,typename Pred2>
1028
+ static inline exclusive_bilock_guard exclusive_access(
1029
+ const concurrent_table& x,
1030
+ const concurrent_table<TypePolicy,Hash2,Pred2,Allocator>& y)
1031
+ {
1032
+ return {&x,&y,x.mutexes,y.mutexes};
1033
+ }
1034
+
1035
+ /* Tag-dispatched shared/exclusive group access */
1036
+
1037
+ using group_shared=std::false_type;
1038
+ using group_exclusive=std::true_type;
1039
+
1040
+ inline group_shared_lock_guard access(group_shared,std::size_t pos)const
1041
+ {
1042
+ return this->arrays.group_accesses()[pos].shared_access();
1043
+ }
1044
+
1045
+ inline group_exclusive_lock_guard access(
1046
+ group_exclusive,std::size_t pos)const
1047
+ {
1048
+ return this->arrays.group_accesses()[pos].exclusive_access();
1049
+ }
1050
+
1051
+ inline group_insert_counter_type& insert_counter(std::size_t pos)const
1052
+ {
1053
+ return this->arrays.group_accesses()[pos].insert_counter();
1054
+ }
1055
+
1056
+ /* Const casts value_type& according to the level of group access for
1057
+ * safe passing to visitation functions. When type_policy is set-like,
1058
+ * access is always const regardless of group access.
1059
+ */
1060
+
1061
+ static inline const value_type&
1062
+ cast_for(group_shared,value_type& x){return x;}
1063
+
1064
+ static inline typename std::conditional<
1065
+ std::is_same<key_type,value_type>::value,
1066
+ const value_type&,
1067
+ value_type&
1068
+ >::type
1069
+ cast_for(group_exclusive,value_type& x){return x;}
1070
+
1071
+ struct erase_on_exit
1072
+ {
1073
+ erase_on_exit(
1074
+ concurrent_table& x_,
1075
+ group_type* pg_,unsigned int pos_,element_type* p_):
1076
+ x(x_),pg(pg_),pos(pos_),p(p_){}
1077
+ ~erase_on_exit(){if(!rollback_)x.super::erase(pg,pos,p);}
1078
+
1079
+ void rollback(){rollback_=true;}
1080
+
1081
+ concurrent_table &x;
1082
+ group_type *pg;
1083
+ unsigned int pos;
1084
+ element_type *p;
1085
+ bool rollback_=false;
1086
+ };
1087
+
1088
+ template<typename GroupAccessMode,typename Key,typename F>
1089
+ BOOST_FORCEINLINE std::size_t visit_impl(
1090
+ GroupAccessMode access_mode,const Key& x,F&& f)const
1091
+ {
1092
+ auto lck=shared_access();
1093
+ auto hash=this->hash_for(x);
1094
+ return unprotected_visit(
1095
+ access_mode,x,this->position_for(hash),hash,std::forward<F>(f));
1096
+ }
1097
+
1098
+ template<typename GroupAccessMode,typename FwdIterator,typename F>
1099
+ BOOST_FORCEINLINE
1100
+ std::size_t bulk_visit_impl(
1101
+ GroupAccessMode access_mode,FwdIterator first,FwdIterator last,F&& f)const
1102
+ {
1103
+ auto lck=shared_access();
1104
+ std::size_t res=0;
1105
+ auto n=static_cast<std::size_t>(std::distance(first,last));
1106
+ while(n){
1107
+ auto m=n<2*bulk_visit_size?n:bulk_visit_size;
1108
+ res+=unprotected_bulk_visit(access_mode,first,m,std::forward<F>(f));
1109
+ n-=m;
1110
+ std::advance(
1111
+ first,
1112
+ static_cast<
1113
+ typename std::iterator_traits<FwdIterator>::difference_type>(m));
1114
+ }
1115
+ return res;
1116
+ }
1117
+
1118
+ template<typename GroupAccessMode,typename F>
1119
+ std::size_t visit_all_impl(GroupAccessMode access_mode,F&& f)const
1120
+ {
1121
+ auto lck=shared_access();
1122
+ std::size_t res=0;
1123
+ for_all_elements(access_mode,[&](element_type* p){
1124
+ f(cast_for(access_mode,type_policy::value_from(*p)));
1125
+ ++res;
1126
+ });
1127
+ return res;
1128
+ }
1129
+
1130
+ #if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
1131
+ template<typename GroupAccessMode,typename ExecutionPolicy,typename F>
1132
+ void visit_all_impl(
1133
+ GroupAccessMode access_mode,ExecutionPolicy&& policy,F&& f)const
1134
+ {
1135
+ auto lck=shared_access();
1136
+ for_all_elements(
1137
+ access_mode,std::forward<ExecutionPolicy>(policy),
1138
+ [&](element_type* p){
1139
+ f(cast_for(access_mode,type_policy::value_from(*p)));
1140
+ });
1141
+ }
1142
+ #endif
1143
+
1144
+ template<typename GroupAccessMode,typename F>
1145
+ bool visit_while_impl(GroupAccessMode access_mode,F&& f)const
1146
+ {
1147
+ auto lck=shared_access();
1148
+ return for_all_elements_while(access_mode,[&](element_type* p){
1149
+ return f(cast_for(access_mode,type_policy::value_from(*p)));
1150
+ });
1151
+ }
1152
+
1153
+ #if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
1154
+ template<typename GroupAccessMode,typename ExecutionPolicy,typename F>
1155
+ bool visit_while_impl(
1156
+ GroupAccessMode access_mode,ExecutionPolicy&& policy,F&& f)const
1157
+ {
1158
+ auto lck=shared_access();
1159
+ return for_all_elements_while(
1160
+ access_mode,std::forward<ExecutionPolicy>(policy),
1161
+ [&](element_type* p){
1162
+ return f(cast_for(access_mode,type_policy::value_from(*p)));
1163
+ });
1164
+ }
1165
+ #endif
1166
+
1167
+ template<typename GroupAccessMode,typename Key,typename F>
1168
+ BOOST_FORCEINLINE std::size_t unprotected_visit(
1169
+ GroupAccessMode access_mode,
1170
+ const Key& x,std::size_t pos0,std::size_t hash,F&& f)const
1171
+ {
1172
+ return unprotected_internal_visit(
1173
+ access_mode,x,pos0,hash,
1174
+ [&](group_type*,unsigned int,element_type* p)
1175
+ {f(cast_for(access_mode,type_policy::value_from(*p)));});
1176
+ }
1177
+
1178
+ #if defined(BOOST_MSVC)
1179
+ /* warning: forcing value to bool 'true' or 'false' in bool(pred()...) */
1180
+ #pragma warning(push)
1181
+ #pragma warning(disable:4800)
1182
+ #endif
1183
+
1184
+ template<typename GroupAccessMode,typename Key,typename F>
1185
+ BOOST_FORCEINLINE std::size_t unprotected_internal_visit(
1186
+ GroupAccessMode access_mode,
1187
+ const Key& x,std::size_t pos0,std::size_t hash,F&& f)const
1188
+ {
1189
+ prober pb(pos0);
1190
+ do{
1191
+ auto pos=pb.get();
1192
+ auto pg=this->arrays.groups()+pos;
1193
+ auto mask=pg->match(hash);
1194
+ if(mask){
1195
+ auto p=this->arrays.elements()+pos*N;
1196
+ BOOST_UNORDERED_PREFETCH_ELEMENTS(p,N);
1197
+ auto lck=access(access_mode,pos);
1198
+ do{
1199
+ auto n=unchecked_countr_zero(mask);
1200
+ if(BOOST_LIKELY(
1201
+ pg->is_occupied(n)&&bool(this->pred()(x,this->key_from(p[n]))))){
1202
+ f(pg,n,p+n);
1203
+ return 1;
1204
+ }
1205
+ mask&=mask-1;
1206
+ }while(mask);
1207
+ }
1208
+ if(BOOST_LIKELY(pg->is_not_overflowed(hash))){
1209
+ return 0;
1210
+ }
1211
+ }
1212
+ while(BOOST_LIKELY(pb.next(this->arrays.groups_size_mask)));
1213
+ return 0;
1214
+ }
1215
+
1216
+ template<typename GroupAccessMode,typename FwdIterator,typename F>
1217
+ BOOST_FORCEINLINE std::size_t unprotected_bulk_visit(
1218
+ GroupAccessMode access_mode,FwdIterator first,std::size_t m,F&& f)const
1219
+ {
1220
+ BOOST_ASSERT(m<2*bulk_visit_size);
1221
+
1222
+ std::size_t res=0,
1223
+ hashes[2*bulk_visit_size-1],
1224
+ positions[2*bulk_visit_size-1];
1225
+ int masks[2*bulk_visit_size-1];
1226
+ auto it=first;
1227
+
1228
+ for(auto i=m;i--;++it){
1229
+ auto hash=hashes[i]=this->hash_for(*it);
1230
+ auto pos=positions[i]=this->position_for(hash);
1231
+ BOOST_UNORDERED_PREFETCH(this->arrays.groups()+pos);
1232
+ }
1233
+
1234
+ for(auto i=m;i--;){
1235
+ auto hash=hashes[i];
1236
+ auto pos=positions[i];
1237
+ auto mask=masks[i]=(this->arrays.groups()+pos)->match(hash);
1238
+ if(mask){
1239
+ BOOST_UNORDERED_PREFETCH(this->arrays.group_accesses()+pos);
1240
+ BOOST_UNORDERED_PREFETCH(
1241
+ this->arrays.elements()+pos*N+unchecked_countr_zero(mask));
1242
+ }
1243
+ }
1244
+
1245
+ it=first;
1246
+ for(auto i=m;i--;++it){
1247
+ auto pos=positions[i];
1248
+ prober pb(pos);
1249
+ auto pg=this->arrays.groups()+pos;
1250
+ auto mask=masks[i];
1251
+ element_type *p;
1252
+ if(!mask)goto post_mask;
1253
+ p=this->arrays.elements()+pos*N;
1254
+ for(;;){
1255
+ {
1256
+ auto lck=access(access_mode,pos);
1257
+ do{
1258
+ auto n=unchecked_countr_zero(mask);
1259
+ if(BOOST_LIKELY(
1260
+ pg->is_occupied(n)&&
1261
+ bool(this->pred()(*it,this->key_from(p[n]))))){
1262
+ f(cast_for(access_mode,type_policy::value_from(p[n])));
1263
+ ++res;
1264
+ goto next_key;
1265
+ }
1266
+ mask&=mask-1;
1267
+ }while(mask);
1268
+ }
1269
+ post_mask:
1270
+ do{
1271
+ if(BOOST_LIKELY(pg->is_not_overflowed(hashes[i]))||
1272
+ BOOST_UNLIKELY(!pb.next(this->arrays.groups_size_mask))){
1273
+ goto next_key;
1274
+ }
1275
+ pos=pb.get();
1276
+ pg=this->arrays.groups()+pos;
1277
+ mask=pg->match(hashes[i]);
1278
+ }while(!mask);
1279
+ p=this->arrays.elements()+pos*N;
1280
+ BOOST_UNORDERED_PREFETCH_ELEMENTS(p,N);
1281
+ }
1282
+ next_key:;
1283
+ }
1284
+ return res;
1285
+ }
1286
+
1287
+ #if defined(BOOST_MSVC)
1288
+ #pragma warning(pop) /* C4800 */
1289
+ #endif
1290
+
1291
+ std::size_t unprotected_size()const
1292
+ {
1293
+ std::size_t m=this->size_ctrl.ml;
1294
+ std::size_t s=this->size_ctrl.size;
1295
+ return s<=m?s:m;
1296
+ }
1297
+
1298
+ template<typename... Args>
1299
+ BOOST_FORCEINLINE bool construct_and_emplace(Args&&... args)
1300
+ {
1301
+ return construct_and_emplace_or_visit(
1302
+ group_shared{},[](const value_type&){},std::forward<Args>(args)...);
1303
+ }
1304
+
1305
+ struct call_construct_and_emplace_or_visit
1306
+ {
1307
+ template<typename... Args>
1308
+ BOOST_FORCEINLINE bool operator()(
1309
+ concurrent_table* this_,Args&&... args)const
1310
+ {
1311
+ return this_->construct_and_emplace_or_visit(
1312
+ std::forward<Args>(args)...);
1313
+ }
1314
+ };
1315
+
1316
+ template<typename GroupAccessMode,typename... Args>
1317
+ BOOST_FORCEINLINE bool construct_and_emplace_or_visit_flast(
1318
+ GroupAccessMode access_mode,Args&&... args)
1319
+ {
1320
+ return mp11::tuple_apply(
1321
+ call_construct_and_emplace_or_visit{},
1322
+ std::tuple_cat(
1323
+ std::make_tuple(this,access_mode),
1324
+ tuple_rotate_right(std::forward_as_tuple(std::forward<Args>(args)...))
1325
+ )
1326
+ );
1327
+ }
1328
+
1329
+ template<typename GroupAccessMode,typename F,typename... Args>
1330
+ BOOST_FORCEINLINE bool construct_and_emplace_or_visit(
1331
+ GroupAccessMode access_mode,F&& f,Args&&... args)
1332
+ {
1333
+ auto lck=shared_access();
1334
+
1335
+ alloc_cted_insert_type<type_policy,Allocator,Args...> x(
1336
+ this->al(),std::forward<Args>(args)...);
1337
+ int res=unprotected_norehash_emplace_or_visit(
1338
+ access_mode,std::forward<F>(f),type_policy::move(x.value()));
1339
+ if(BOOST_LIKELY(res>=0))return res!=0;
1340
+
1341
+ lck.unlock();
1342
+
1343
+ rehash_if_full();
1344
+ return noinline_emplace_or_visit(
1345
+ access_mode,std::forward<F>(f),type_policy::move(x.value()));
1346
+ }
1347
+
1348
+ template<typename... Args>
1349
+ BOOST_FORCEINLINE bool emplace_impl(Args&&... args)
1350
+ {
1351
+ return emplace_or_visit_impl(
1352
+ group_shared{},[](const value_type&){},std::forward<Args>(args)...);
1353
+ }
1354
+
1355
+ template<typename GroupAccessMode,typename F,typename... Args>
1356
+ BOOST_NOINLINE bool noinline_emplace_or_visit(
1357
+ GroupAccessMode access_mode,F&& f,Args&&... args)
1358
+ {
1359
+ return emplace_or_visit_impl(
1360
+ access_mode,std::forward<F>(f),std::forward<Args>(args)...);
1361
+ }
1362
+
1363
+ struct call_emplace_or_visit_impl
1364
+ {
1365
+ template<typename... Args>
1366
+ BOOST_FORCEINLINE bool operator()(
1367
+ concurrent_table* this_,Args&&... args)const
1368
+ {
1369
+ return this_->emplace_or_visit_impl(std::forward<Args>(args)...);
1370
+ }
1371
+ };
1372
+
1373
+ template<typename GroupAccessMode,typename... Args>
1374
+ BOOST_FORCEINLINE bool emplace_or_visit_flast(
1375
+ GroupAccessMode access_mode,Args&&... args)
1376
+ {
1377
+ return mp11::tuple_apply(
1378
+ call_emplace_or_visit_impl{},
1379
+ std::tuple_cat(
1380
+ std::make_tuple(this,access_mode),
1381
+ tuple_rotate_right(std::forward_as_tuple(std::forward<Args>(args)...))
1382
+ )
1383
+ );
1384
+ }
1385
+
1386
+ template<typename GroupAccessMode,typename F,typename... Args>
1387
+ BOOST_FORCEINLINE bool emplace_or_visit_impl(
1388
+ GroupAccessMode access_mode,F&& f,Args&&... args)
1389
+ {
1390
+ for(;;){
1391
+ {
1392
+ auto lck=shared_access();
1393
+ int res=unprotected_norehash_emplace_or_visit(
1394
+ access_mode,std::forward<F>(f),std::forward<Args>(args)...);
1395
+ if(BOOST_LIKELY(res>=0))return res!=0;
1396
+ }
1397
+ rehash_if_full();
1398
+ }
1399
+ }
1400
+
1401
+ template<typename... Args>
1402
+ BOOST_FORCEINLINE bool unprotected_emplace(Args&&... args)
1403
+ {
1404
+ const auto &k=this->key_from(std::forward<Args>(args)...);
1405
+ auto hash=this->hash_for(k);
1406
+ auto pos0=this->position_for(hash);
1407
+
1408
+ if(this->find(k,pos0,hash))return false;
1409
+
1410
+ if(BOOST_LIKELY(this->size_ctrl.size<this->size_ctrl.ml)){
1411
+ this->unchecked_emplace_at(pos0,hash,std::forward<Args>(args)...);
1412
+ }
1413
+ else{
1414
+ this->unchecked_emplace_with_rehash(hash,std::forward<Args>(args)...);
1415
+ }
1416
+ return true;
1417
+ }
1418
+
1419
+ struct reserve_size
1420
+ {
1421
+ reserve_size(concurrent_table& x_):x(x_)
1422
+ {
1423
+ size_=++x.size_ctrl.size;
1424
+ }
1425
+
1426
+ ~reserve_size()
1427
+ {
1428
+ if(!commit_)--x.size_ctrl.size;
1429
+ }
1430
+
1431
+ bool succeeded()const{return size_<=x.size_ctrl.ml;}
1432
+
1433
+ void commit(){commit_=true;}
1434
+
1435
+ concurrent_table &x;
1436
+ std::size_t size_;
1437
+ bool commit_=false;
1438
+ };
1439
+
1440
+ struct reserve_slot
1441
+ {
1442
+ reserve_slot(group_type* pg_,std::size_t pos_,std::size_t hash):
1443
+ pg{pg_},pos{pos_}
1444
+ {
1445
+ pg->set(pos,hash);
1446
+ }
1447
+
1448
+ ~reserve_slot()
1449
+ {
1450
+ if(!commit_)pg->reset(pos);
1451
+ }
1452
+
1453
+ void commit(){commit_=true;}
1454
+
1455
+ group_type *pg;
1456
+ std::size_t pos;
1457
+ bool commit_=false;
1458
+ };
1459
+
1460
+ template<typename GroupAccessMode,typename F,typename... Args>
1461
+ BOOST_FORCEINLINE int
1462
+ unprotected_norehash_emplace_or_visit(
1463
+ GroupAccessMode access_mode,F&& f,Args&&... args)
1464
+ {
1465
+ const auto &k=this->key_from(std::forward<Args>(args)...);
1466
+ auto hash=this->hash_for(k);
1467
+ auto pos0=this->position_for(hash);
1468
+
1469
+ for(;;){
1470
+ startover:
1471
+ boost::uint32_t counter=insert_counter(pos0);
1472
+ if(unprotected_visit(
1473
+ access_mode,k,pos0,hash,std::forward<F>(f)))return 0;
1474
+
1475
+ reserve_size rsize(*this);
1476
+ if(BOOST_LIKELY(rsize.succeeded())){
1477
+ for(prober pb(pos0);;pb.next(this->arrays.groups_size_mask)){
1478
+ auto pos=pb.get();
1479
+ auto pg=this->arrays.groups()+pos;
1480
+ auto lck=access(group_exclusive{},pos);
1481
+ auto mask=pg->match_available();
1482
+ if(BOOST_LIKELY(mask!=0)){
1483
+ auto n=unchecked_countr_zero(mask);
1484
+ reserve_slot rslot{pg,n,hash};
1485
+ if(BOOST_UNLIKELY(insert_counter(pos0)++!=counter)){
1486
+ /* other thread inserted from pos0, need to start over */
1487
+ goto startover;
1488
+ }
1489
+ auto p=this->arrays.elements()+pos*N+n;
1490
+ this->construct_element(p,std::forward<Args>(args)...);
1491
+ rslot.commit();
1492
+ rsize.commit();
1493
+ return 1;
1494
+ }
1495
+ pg->mark_overflow(hash);
1496
+ }
1497
+ }
1498
+ else return -1;
1499
+ }
1500
+ }
1501
+
1502
+ void rehash_if_full()
1503
+ {
1504
+ auto lck=exclusive_access();
1505
+ if(this->size_ctrl.size==this->size_ctrl.ml){
1506
+ this->unchecked_rehash_for_growth();
1507
+ }
1508
+ }
1509
+
1510
+ template<typename GroupAccessMode,typename F>
1511
+ auto for_all_elements(GroupAccessMode access_mode,F f)const
1512
+ ->decltype(f(nullptr),void())
1513
+ {
1514
+ for_all_elements(
1515
+ access_mode,[&](group_type*,unsigned int,element_type* p){f(p);});
1516
+ }
1517
+
1518
+ template<typename GroupAccessMode,typename F>
1519
+ auto for_all_elements(GroupAccessMode access_mode,F f)const
1520
+ ->decltype(f(nullptr,0,nullptr),void())
1521
+ {
1522
+ for_all_elements_while(
1523
+ access_mode,[&](group_type* pg,unsigned int n,element_type* p)
1524
+ {f(pg,n,p);return true;});
1525
+ }
1526
+
1527
+ template<typename GroupAccessMode,typename F>
1528
+ auto for_all_elements_while(GroupAccessMode access_mode,F f)const
1529
+ ->decltype(f(nullptr),bool())
1530
+ {
1531
+ return for_all_elements_while(
1532
+ access_mode,[&](group_type*,unsigned int,element_type* p){return f(p);});
1533
+ }
1534
+
1535
+ template<typename GroupAccessMode,typename F>
1536
+ auto for_all_elements_while(GroupAccessMode access_mode,F f)const
1537
+ ->decltype(f(nullptr,0,nullptr),bool())
1538
+ {
1539
+ auto p=this->arrays.elements();
1540
+ if(p){
1541
+ for(auto pg=this->arrays.groups(),last=pg+this->arrays.groups_size_mask+1;
1542
+ pg!=last;++pg,p+=N){
1543
+ auto lck=access(access_mode,(std::size_t)(pg-this->arrays.groups()));
1544
+ auto mask=this->match_really_occupied(pg,last);
1545
+ while(mask){
1546
+ auto n=unchecked_countr_zero(mask);
1547
+ if(!f(pg,n,p+n))return false;
1548
+ mask&=mask-1;
1549
+ }
1550
+ }
1551
+ }
1552
+ return true;
1553
+ }
1554
+
1555
+ #if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
1556
+ template<typename GroupAccessMode,typename ExecutionPolicy,typename F>
1557
+ auto for_all_elements(
1558
+ GroupAccessMode access_mode,ExecutionPolicy&& policy,F f)const
1559
+ ->decltype(f(nullptr),void())
1560
+ {
1561
+ for_all_elements(
1562
+ access_mode,std::forward<ExecutionPolicy>(policy),
1563
+ [&](group_type*,unsigned int,element_type* p){f(p);});
1564
+ }
1565
+
1566
+ template<typename GroupAccessMode,typename ExecutionPolicy,typename F>
1567
+ auto for_all_elements(
1568
+ GroupAccessMode access_mode,ExecutionPolicy&& policy,F f)const
1569
+ ->decltype(f(nullptr,0,nullptr),void())
1570
+ {
1571
+ if(!this->arrays.elements())return;
1572
+ auto first=this->arrays.groups(),
1573
+ last=first+this->arrays.groups_size_mask+1;
1574
+ std::for_each(std::forward<ExecutionPolicy>(policy),first,last,
1575
+ [&,this](group_type& g){
1576
+ auto pos=static_cast<std::size_t>(&g-first);
1577
+ auto p=this->arrays.elements()+pos*N;
1578
+ auto lck=access(access_mode,pos);
1579
+ auto mask=this->match_really_occupied(&g,last);
1580
+ while(mask){
1581
+ auto n=unchecked_countr_zero(mask);
1582
+ f(&g,n,p+n);
1583
+ mask&=mask-1;
1584
+ }
1585
+ }
1586
+ );
1587
+ }
1588
+
1589
+ template<typename GroupAccessMode,typename ExecutionPolicy,typename F>
1590
+ bool for_all_elements_while(
1591
+ GroupAccessMode access_mode,ExecutionPolicy&& policy,F f)const
1592
+ {
1593
+ if(!this->arrays.elements())return true;
1594
+ auto first=this->arrays.groups(),
1595
+ last=first+this->arrays.groups_size_mask+1;
1596
+ return std::all_of(std::forward<ExecutionPolicy>(policy),first,last,
1597
+ [&,this](group_type& g){
1598
+ auto pos=static_cast<std::size_t>(&g-first);
1599
+ auto p=this->arrays.elements()+pos*N;
1600
+ auto lck=access(access_mode,pos);
1601
+ auto mask=this->match_really_occupied(&g,last);
1602
+ while(mask){
1603
+ auto n=unchecked_countr_zero(mask);
1604
+ if(!f(p+n))return false;
1605
+ mask&=mask-1;
1606
+ }
1607
+ return true;
1608
+ }
1609
+ );
1610
+ }
1611
+ #endif
1612
+
1613
+ friend class boost::serialization::access;
1614
+
1615
+ template<typename Archive>
1616
+ void serialize(Archive& ar,unsigned int version)
1617
+ {
1618
+ core::split_member(ar,*this,version);
1619
+ }
1620
+
1621
+ template<typename Archive>
1622
+ void save(Archive& ar,unsigned int version)const
1623
+ {
1624
+ save(
1625
+ ar,version,
1626
+ std::integral_constant<bool,std::is_same<key_type,value_type>::value>{});
1627
+ }
1628
+
1629
+ template<typename Archive>
1630
+ void save(Archive& ar,unsigned int,std::true_type /* set */)const
1631
+ {
1632
+ auto lck=exclusive_access();
1633
+ const std::size_t s=super::size();
1634
+ const serialization_version<value_type> value_version;
1635
+
1636
+ ar<<core::make_nvp("count",s);
1637
+ ar<<core::make_nvp("value_version",value_version);
1638
+
1639
+ super::for_all_elements([&,this](element_type* p){
1640
+ auto& x=type_policy::value_from(*p);
1641
+ core::save_construct_data_adl(ar,std::addressof(x),value_version);
1642
+ ar<<serialization::make_nvp("item",x);
1643
+ });
1644
+ }
1645
+
1646
+ template<typename Archive>
1647
+ void save(Archive& ar,unsigned int,std::false_type /* map */)const
1648
+ {
1649
+ using raw_key_type=typename std::remove_const<key_type>::type;
1650
+ using raw_mapped_type=typename std::remove_const<
1651
+ typename TypePolicy::mapped_type>::type;
1652
+
1653
+ auto lck=exclusive_access();
1654
+ const std::size_t s=super::size();
1655
+ const serialization_version<raw_key_type> key_version;
1656
+ const serialization_version<raw_mapped_type> mapped_version;
1657
+
1658
+ ar<<core::make_nvp("count",s);
1659
+ ar<<core::make_nvp("key_version",key_version);
1660
+ ar<<core::make_nvp("mapped_version",mapped_version);
1661
+
1662
+ super::for_all_elements([&,this](element_type* p){
1663
+ /* To remain lib-independent from Boost.Serialization and not rely on
1664
+ * the user having included the serialization code for std::pair
1665
+ * (boost/serialization/utility.hpp), we serialize the key and the
1666
+ * mapped value separately.
1667
+ */
1668
+
1669
+ auto& x=type_policy::value_from(*p);
1670
+ core::save_construct_data_adl(
1671
+ ar,std::addressof(x.first),key_version);
1672
+ ar<<serialization::make_nvp("key",x.first);
1673
+ core::save_construct_data_adl(
1674
+ ar,std::addressof(x.second),mapped_version);
1675
+ ar<<serialization::make_nvp("mapped",x.second);
1676
+ });
1677
+ }
1678
+
1679
+ template<typename Archive>
1680
+ void load(Archive& ar,unsigned int version)
1681
+ {
1682
+ load(
1683
+ ar,version,
1684
+ std::integral_constant<bool,std::is_same<key_type,value_type>::value>{});
1685
+ }
1686
+
1687
+ template<typename Archive>
1688
+ void load(Archive& ar,unsigned int,std::true_type /* set */)
1689
+ {
1690
+ auto lck=exclusive_access();
1691
+ std::size_t s;
1692
+ serialization_version<value_type> value_version;
1693
+
1694
+ ar>>core::make_nvp("count",s);
1695
+ ar>>core::make_nvp("value_version",value_version);
1696
+
1697
+ super::clear();
1698
+ super::reserve(s);
1699
+
1700
+ for(std::size_t n=0;n<s;++n){
1701
+ archive_constructed<value_type> value("item",ar,value_version);
1702
+ auto& x=value.get();
1703
+ auto hash=this->hash_for(x);
1704
+ auto pos0=this->position_for(hash);
1705
+
1706
+ if(this->find(x,pos0,hash))throw_exception(bad_archive_exception());
1707
+ auto loc=this->unchecked_emplace_at(pos0,hash,std::move(x));
1708
+ ar.reset_object_address(std::addressof(*loc.p),std::addressof(x));
1709
+ }
1710
+ }
1711
+
1712
+ template<typename Archive>
1713
+ void load(Archive& ar,unsigned int,std::false_type /* map */)
1714
+ {
1715
+ using raw_key_type=typename std::remove_const<key_type>::type;
1716
+ using raw_mapped_type=typename std::remove_const<
1717
+ typename TypePolicy::mapped_type>::type;
1718
+
1719
+ auto lck=exclusive_access();
1720
+ std::size_t s;
1721
+ serialization_version<raw_key_type> key_version;
1722
+ serialization_version<raw_mapped_type> mapped_version;
1723
+
1724
+ ar>>core::make_nvp("count",s);
1725
+ ar>>core::make_nvp("key_version",key_version);
1726
+ ar>>core::make_nvp("mapped_version",mapped_version);
1727
+
1728
+ super::clear();
1729
+ super::reserve(s);
1730
+
1731
+ for(std::size_t n=0;n<s;++n){
1732
+ archive_constructed<raw_key_type> key("key",ar,key_version);
1733
+ archive_constructed<raw_mapped_type> mapped("mapped",ar,mapped_version);
1734
+ auto& k=key.get();
1735
+ auto& m=mapped.get();
1736
+ auto hash=this->hash_for(k);
1737
+ auto pos0=this->position_for(hash);
1738
+
1739
+ if(this->find(k,pos0,hash))throw_exception(bad_archive_exception());
1740
+ auto loc=this->unchecked_emplace_at(pos0,hash,std::move(k),std::move(m));
1741
+ ar.reset_object_address(std::addressof(loc.p->first),std::addressof(k));
1742
+ ar.reset_object_address(std::addressof(loc.p->second),std::addressof(m));
1743
+ }
1744
+ }
1745
+
1746
+ static std::atomic<std::size_t> thread_counter;
1747
+ mutable multimutex_type mutexes;
1748
+ };
1749
+
1750
+ template<typename T,typename H,typename P,typename A>
1751
+ std::atomic<std::size_t> concurrent_table<T,H,P,A>::thread_counter={};
1752
+
1753
+ #if defined(BOOST_MSVC)
1754
+ #pragma warning(pop) /* C4714 */
1755
+ #endif
1756
+
1757
+ #include <boost/unordered/detail/foa/restore_wshadow.hpp>
1758
+
1759
+ } /* namespace foa */
1760
+ } /* namespace detail */
1761
+ } /* namespace unordered */
1762
+ } /* namespace boost */
1763
+
1764
+ #endif