passenger 6.0.19 → 6.0.21

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,1921 +0,0 @@
1
- /* Fast open-addressing hash table.
2
- *
3
- * Copyright 2022 Joaquin M Lopez Munoz.
4
- * Distributed under the Boost Software License, Version 1.0.
5
- * (See accompanying file LICENSE_1_0.txt or copy at
6
- * http://www.boost.org/LICENSE_1_0.txt)
7
- *
8
- * See https://www.boost.org/libs/unordered for library home page.
9
- */
10
-
11
- #ifndef BOOST_UNORDERED_DETAIL_FOA_HPP
12
- #define BOOST_UNORDERED_DETAIL_FOA_HPP
13
-
14
- #include <boost/assert.hpp>
15
- #include <boost/config.hpp>
16
- #include <boost/config/workaround.hpp>
17
- #include <boost/core/allocator_traits.hpp>
18
- #include <boost/core/bit.hpp>
19
- #include <boost/core/empty_value.hpp>
20
- #include <boost/core/no_exceptions_support.hpp>
21
- #include <boost/core/pointer_traits.hpp>
22
- #include <boost/cstdint.hpp>
23
- #include <boost/predef.h>
24
- #include <boost/type_traits/is_nothrow_swappable.hpp>
25
- #include <boost/unordered/detail/xmx.hpp>
26
- #include <boost/unordered/hash_traits.hpp>
27
- #include <climits>
28
- #include <cmath>
29
- #include <cstddef>
30
- #include <cstring>
31
- #include <iterator>
32
- #include <limits>
33
- #include <tuple>
34
- #include <type_traits>
35
- #include <utility>
36
-
37
- #if defined(__SSE2__)||\
38
- defined(_M_X64)||(defined(_M_IX86_FP)&&_M_IX86_FP>=2)
39
- #define BOOST_UNORDERED_SSE2
40
- #include <emmintrin.h>
41
- #elif defined(__ARM_NEON)&&!defined(__ARM_BIG_ENDIAN)
42
- #define BOOST_UNORDERED_LITTLE_ENDIAN_NEON
43
- #include <arm_neon.h>
44
- #endif
45
-
46
- #ifdef __has_builtin
47
- #define BOOST_UNORDERED_HAS_BUILTIN(x) __has_builtin(x)
48
- #else
49
- #define BOOST_UNORDERED_HAS_BUILTIN(x) 0
50
- #endif
51
-
52
- #if !defined(NDEBUG)
53
- #define BOOST_UNORDERED_ASSUME(cond) BOOST_ASSERT(cond)
54
- #elif BOOST_UNORDERED_HAS_BUILTIN(__builtin_assume)
55
- #define BOOST_UNORDERED_ASSUME(cond) __builtin_assume(cond)
56
- #elif defined(__GNUC__) || BOOST_UNORDERED_HAS_BUILTIN(__builtin_unreachable)
57
- #define BOOST_UNORDERED_ASSUME(cond) \
58
- do{ \
59
- if(!(cond))__builtin_unreachable(); \
60
- }while(0)
61
- #elif defined(_MSC_VER)
62
- #define BOOST_UNORDERED_ASSUME(cond) __assume(cond)
63
- #else
64
- #define BOOST_UNORDERED_ASSUME(cond) \
65
- do{ \
66
- static_cast<void>(false&&(cond)); \
67
- }while(0)
68
- #endif
69
-
70
- namespace boost{
71
- namespace unordered{
72
- namespace detail{
73
- namespace foa{
74
-
75
- static const std::size_t default_bucket_count = 0;
76
-
77
- /* foa::table is an open-addressing hash table serving as the foundational core
78
- * of boost::unordered_flat_[map|set]. Its main internal design aspects are:
79
- *
80
- * - Element slots are logically split into groups of size N=15. The number
81
- * of groups is always a power of two, so the number of allocated slots
82
- is of the form (N*2^n)-1 (final slot reserved for a sentinel mark).
83
- * - Positioning is done at the group level rather than the slot level, that
84
- * is, for any given element its hash value is used to locate a group and
85
- * insertion is performed on the first available element of that group;
86
- * if the group is full (overflow), further groups are tried using
87
- * quadratic probing.
88
- * - Each group has an associated 16B metadata word holding reduced hash
89
- * values and overflow information. Reduced hash values are used to
90
- * accelerate lookup within the group by using 128-bit SIMD or 64-bit word
91
- * operations.
92
- */
93
-
94
- /* group15 controls metadata information of a group of N=15 element slots.
95
- * The 16B metadata word is organized as follows (LSB depicted rightmost):
96
- *
97
- * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
98
- * |ofw|h14|h13|h13|h11|h10|h09|h08|h07|h06|h05|h04|h03|h02|h01|h00|
99
- * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
100
- *
101
- * hi is 0 if the i-th element slot is avalaible, 1 to mark a sentinel and,
102
- * when the slot is occupied, a value in the range [2,255] obtained from the
103
- * element's original hash value.
104
- * ofw is the so-called overflow byte. If insertion of an element with hash
105
- * value h is tried on a full group, then the (h%8)-th bit of the overflow
106
- * byte is set to 1 and a further group is probed. Having an overflow byte
107
- * brings two advantages:
108
- *
109
- * - There's no need to reserve a special value of hi to mark tombstone
110
- * slots; each reduced hash value keeps then log2(254)=7.99 bits of the
111
- * original hash (alternative approaches reserve one full bit to mark
112
- * if the slot is available/deleted, so their reduced hash values are 7 bit
113
- * strong only).
114
- * - When doing an unsuccessful lookup (i.e. the element is not present in
115
- * the table), probing stops at the first non-overflowed group. Having 8
116
- * bits for signalling overflow makes it very likely that we stop at the
117
- * current group (this happens when no element with the same (h%8) value
118
- * has overflowed in the group), saving us an additional group check even
119
- * under high-load/high-erase conditions. It is critical that hash
120
- * reduction is invariant under modulo 8 (see maybe_caused_overflow).
121
- *
122
- * When looking for an element with hash value h, match(h) returns a bitmask
123
- * signalling which slots have the same reduced hash value. If available,
124
- * match uses SSE2 or (little endian) Neon 128-bit SIMD operations. On non-SIMD
125
- * scenarios, the logical layout described above is physically mapped to two
126
- * 64-bit words with *bit interleaving*, i.e. the least significant 16 bits of
127
- * the first 64-bit word contain the least significant bits of each byte in the
128
- * "logical" 128-bit word, and so forth. With this layout, match can be
129
- * implemented with 4 ANDs, 3 shifts, 2 XORs, 1 OR and 1 NOT.
130
- *
131
- * group15 has no user-defined ctor so that it's a trivial type and can be
132
- * initialized via memset etc. Where needed, group15::initialize sets the
133
- * metadata to all zeros.
134
- */
135
-
136
- #if defined(BOOST_UNORDERED_SSE2)
137
-
138
- struct group15
139
- {
140
- static constexpr int N=15;
141
-
142
- struct dummy_group_type
143
- {
144
- alignas(16) unsigned char storage[N+1]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0};
145
- };
146
-
147
- inline void initialize(){m=_mm_setzero_si128();}
148
-
149
- inline void set(std::size_t pos,std::size_t hash)
150
- {
151
- BOOST_ASSERT(pos<N);
152
- at(pos)=reduced_hash(hash);
153
- }
154
-
155
- inline void set_sentinel()
156
- {
157
- at(N-1)=sentinel_;
158
- }
159
-
160
- inline bool is_sentinel(std::size_t pos)const
161
- {
162
- BOOST_ASSERT(pos<N);
163
- return at(pos)==sentinel_;
164
- }
165
-
166
- inline void reset(std::size_t pos)
167
- {
168
- BOOST_ASSERT(pos<N);
169
- at(pos)=available_;
170
- }
171
-
172
- static inline void reset(unsigned char* pc)
173
- {
174
- *pc=available_;
175
- }
176
-
177
- inline int match(std::size_t hash)const
178
- {
179
- return _mm_movemask_epi8(
180
- _mm_cmpeq_epi8(m,_mm_set1_epi32(match_word(hash))))&0x7FFF;
181
- }
182
-
183
- inline bool is_not_overflowed(std::size_t hash)const
184
- {
185
- static constexpr unsigned char shift[]={1,2,4,8,16,32,64,128};
186
-
187
- return !(overflow()&shift[hash%8]);
188
- }
189
-
190
- inline void mark_overflow(std::size_t hash)
191
- {
192
- #if BOOST_WORKAROUND(BOOST_GCC, >= 50000 && BOOST_GCC < 60000)
193
- overflow() = static_cast<unsigned char>( overflow() | static_cast<unsigned char>(1<<(hash%8)) );
194
- #else
195
- overflow()|=static_cast<unsigned char>(1<<(hash%8));
196
- #endif
197
- }
198
-
199
- static inline bool maybe_caused_overflow(unsigned char* pc)
200
- {
201
- std::size_t pos=reinterpret_cast<uintptr_t>(pc)%sizeof(group15);
202
- group15 *pg=reinterpret_cast<group15*>(pc-pos);
203
- return !pg->is_not_overflowed(*pc);
204
- };
205
-
206
- inline int match_available()const
207
- {
208
- return _mm_movemask_epi8(
209
- _mm_cmpeq_epi8(m,_mm_setzero_si128()))&0x7FFF;
210
- }
211
-
212
- inline int match_occupied()const
213
- {
214
- return (~match_available())&0x7FFF;
215
- }
216
-
217
- inline int match_really_occupied()const /* excluding sentinel */
218
- {
219
- return at(N-1)==sentinel_?match_occupied()&0x3FFF:match_occupied();
220
- }
221
-
222
- private:
223
- static constexpr unsigned char available_=0,
224
- sentinel_=1;
225
-
226
- inline static int match_word(std::size_t hash)
227
- {
228
- static constexpr boost::uint32_t word[]=
229
- {
230
- 0x08080808u,0x09090909u,0x02020202u,0x03030303u,0x04040404u,0x05050505u,0x06060606u,0x07070707u,
231
- 0x08080808u,0x09090909u,0x0A0A0A0Au,0x0B0B0B0Bu,0x0C0C0C0Cu,0x0D0D0D0Du,0x0E0E0E0Eu,0x0F0F0F0Fu,
232
- 0x10101010u,0x11111111u,0x12121212u,0x13131313u,0x14141414u,0x15151515u,0x16161616u,0x17171717u,
233
- 0x18181818u,0x19191919u,0x1A1A1A1Au,0x1B1B1B1Bu,0x1C1C1C1Cu,0x1D1D1D1Du,0x1E1E1E1Eu,0x1F1F1F1Fu,
234
- 0x20202020u,0x21212121u,0x22222222u,0x23232323u,0x24242424u,0x25252525u,0x26262626u,0x27272727u,
235
- 0x28282828u,0x29292929u,0x2A2A2A2Au,0x2B2B2B2Bu,0x2C2C2C2Cu,0x2D2D2D2Du,0x2E2E2E2Eu,0x2F2F2F2Fu,
236
- 0x30303030u,0x31313131u,0x32323232u,0x33333333u,0x34343434u,0x35353535u,0x36363636u,0x37373737u,
237
- 0x38383838u,0x39393939u,0x3A3A3A3Au,0x3B3B3B3Bu,0x3C3C3C3Cu,0x3D3D3D3Du,0x3E3E3E3Eu,0x3F3F3F3Fu,
238
- 0x40404040u,0x41414141u,0x42424242u,0x43434343u,0x44444444u,0x45454545u,0x46464646u,0x47474747u,
239
- 0x48484848u,0x49494949u,0x4A4A4A4Au,0x4B4B4B4Bu,0x4C4C4C4Cu,0x4D4D4D4Du,0x4E4E4E4Eu,0x4F4F4F4Fu,
240
- 0x50505050u,0x51515151u,0x52525252u,0x53535353u,0x54545454u,0x55555555u,0x56565656u,0x57575757u,
241
- 0x58585858u,0x59595959u,0x5A5A5A5Au,0x5B5B5B5Bu,0x5C5C5C5Cu,0x5D5D5D5Du,0x5E5E5E5Eu,0x5F5F5F5Fu,
242
- 0x60606060u,0x61616161u,0x62626262u,0x63636363u,0x64646464u,0x65656565u,0x66666666u,0x67676767u,
243
- 0x68686868u,0x69696969u,0x6A6A6A6Au,0x6B6B6B6Bu,0x6C6C6C6Cu,0x6D6D6D6Du,0x6E6E6E6Eu,0x6F6F6F6Fu,
244
- 0x70707070u,0x71717171u,0x72727272u,0x73737373u,0x74747474u,0x75757575u,0x76767676u,0x77777777u,
245
- 0x78787878u,0x79797979u,0x7A7A7A7Au,0x7B7B7B7Bu,0x7C7C7C7Cu,0x7D7D7D7Du,0x7E7E7E7Eu,0x7F7F7F7Fu,
246
- 0x80808080u,0x81818181u,0x82828282u,0x83838383u,0x84848484u,0x85858585u,0x86868686u,0x87878787u,
247
- 0x88888888u,0x89898989u,0x8A8A8A8Au,0x8B8B8B8Bu,0x8C8C8C8Cu,0x8D8D8D8Du,0x8E8E8E8Eu,0x8F8F8F8Fu,
248
- 0x90909090u,0x91919191u,0x92929292u,0x93939393u,0x94949494u,0x95959595u,0x96969696u,0x97979797u,
249
- 0x98989898u,0x99999999u,0x9A9A9A9Au,0x9B9B9B9Bu,0x9C9C9C9Cu,0x9D9D9D9Du,0x9E9E9E9Eu,0x9F9F9F9Fu,
250
- 0xA0A0A0A0u,0xA1A1A1A1u,0xA2A2A2A2u,0xA3A3A3A3u,0xA4A4A4A4u,0xA5A5A5A5u,0xA6A6A6A6u,0xA7A7A7A7u,
251
- 0xA8A8A8A8u,0xA9A9A9A9u,0xAAAAAAAAu,0xABABABABu,0xACACACACu,0xADADADADu,0xAEAEAEAEu,0xAFAFAFAFu,
252
- 0xB0B0B0B0u,0xB1B1B1B1u,0xB2B2B2B2u,0xB3B3B3B3u,0xB4B4B4B4u,0xB5B5B5B5u,0xB6B6B6B6u,0xB7B7B7B7u,
253
- 0xB8B8B8B8u,0xB9B9B9B9u,0xBABABABAu,0xBBBBBBBBu,0xBCBCBCBCu,0xBDBDBDBDu,0xBEBEBEBEu,0xBFBFBFBFu,
254
- 0xC0C0C0C0u,0xC1C1C1C1u,0xC2C2C2C2u,0xC3C3C3C3u,0xC4C4C4C4u,0xC5C5C5C5u,0xC6C6C6C6u,0xC7C7C7C7u,
255
- 0xC8C8C8C8u,0xC9C9C9C9u,0xCACACACAu,0xCBCBCBCBu,0xCCCCCCCCu,0xCDCDCDCDu,0xCECECECEu,0xCFCFCFCFu,
256
- 0xD0D0D0D0u,0xD1D1D1D1u,0xD2D2D2D2u,0xD3D3D3D3u,0xD4D4D4D4u,0xD5D5D5D5u,0xD6D6D6D6u,0xD7D7D7D7u,
257
- 0xD8D8D8D8u,0xD9D9D9D9u,0xDADADADAu,0xDBDBDBDBu,0xDCDCDCDCu,0xDDDDDDDDu,0xDEDEDEDEu,0xDFDFDFDFu,
258
- 0xE0E0E0E0u,0xE1E1E1E1u,0xE2E2E2E2u,0xE3E3E3E3u,0xE4E4E4E4u,0xE5E5E5E5u,0xE6E6E6E6u,0xE7E7E7E7u,
259
- 0xE8E8E8E8u,0xE9E9E9E9u,0xEAEAEAEAu,0xEBEBEBEBu,0xECECECECu,0xEDEDEDEDu,0xEEEEEEEEu,0xEFEFEFEFu,
260
- 0xF0F0F0F0u,0xF1F1F1F1u,0xF2F2F2F2u,0xF3F3F3F3u,0xF4F4F4F4u,0xF5F5F5F5u,0xF6F6F6F6u,0xF7F7F7F7u,
261
- 0xF8F8F8F8u,0xF9F9F9F9u,0xFAFAFAFAu,0xFBFBFBFBu,0xFCFCFCFCu,0xFDFDFDFDu,0xFEFEFEFEu,0xFFFFFFFFu,
262
- };
263
-
264
- #if defined(__MSVC_RUNTIME_CHECKS)
265
- return (int)word[hash&0xffu];
266
- #else
267
- return (int)word[(unsigned char)hash];
268
- #endif
269
- }
270
-
271
- inline static unsigned char reduced_hash(std::size_t hash)
272
- {
273
- #if defined(__MSVC_RUNTIME_CHECKS)
274
- return match_word(hash)&0xffu;
275
- #else
276
- return (unsigned char)match_word(hash);
277
- #endif
278
- }
279
-
280
- inline unsigned char& at(std::size_t pos)
281
- {
282
- return reinterpret_cast<unsigned char*>(&m)[pos];
283
- }
284
-
285
- inline unsigned char at(std::size_t pos)const
286
- {
287
- return reinterpret_cast<const unsigned char*>(&m)[pos];
288
- }
289
-
290
- inline unsigned char& overflow()
291
- {
292
- return at(N);
293
- }
294
-
295
- inline unsigned char overflow()const
296
- {
297
- return at(N);
298
- }
299
-
300
- alignas(16) __m128i m;
301
- };
302
-
303
- #elif defined(BOOST_UNORDERED_LITTLE_ENDIAN_NEON)
304
-
305
- struct group15
306
- {
307
- static constexpr int N=15;
308
-
309
- struct dummy_group_type
310
- {
311
- alignas(16) unsigned char storage[N+1]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0};
312
- };
313
-
314
- inline void initialize(){m=vdupq_n_s8(0);}
315
-
316
- inline void set(std::size_t pos,std::size_t hash)
317
- {
318
- BOOST_ASSERT(pos<N);
319
- at(pos)=reduced_hash(hash);
320
- }
321
-
322
- inline void set_sentinel()
323
- {
324
- at(N-1)=sentinel_;
325
- }
326
-
327
- inline bool is_sentinel(std::size_t pos)const
328
- {
329
- BOOST_ASSERT(pos<N);
330
- return pos==N-1&&at(N-1)==sentinel_;
331
- }
332
-
333
- inline void reset(std::size_t pos)
334
- {
335
- BOOST_ASSERT(pos<N);
336
- at(pos)=available_;
337
- }
338
-
339
- static inline void reset(unsigned char* pc)
340
- {
341
- *pc=available_;
342
- }
343
-
344
- inline int match(std::size_t hash)const
345
- {
346
- return simde_mm_movemask_epi8(
347
- vceqq_s8(m,vdupq_n_s8(reduced_hash(hash))))&0x7FFF;
348
- }
349
-
350
- inline bool is_not_overflowed(std::size_t hash)const
351
- {
352
- static constexpr unsigned char shift[]={1,2,4,8,16,32,64,128};
353
-
354
- return !(overflow()&shift[hash%8]);
355
- }
356
-
357
- inline void mark_overflow(std::size_t hash)
358
- {
359
- overflow()|=static_cast<unsigned char>(1<<(hash%8));
360
- }
361
-
362
- static inline bool maybe_caused_overflow(unsigned char* pc)
363
- {
364
- std::size_t pos=reinterpret_cast<uintptr_t>(pc)%sizeof(group15);
365
- group15 *pg=reinterpret_cast<group15*>(pc-pos);
366
- return !pg->is_not_overflowed(*pc);
367
- };
368
-
369
- inline int match_available()const
370
- {
371
- return simde_mm_movemask_epi8(vceqq_s8(m,vdupq_n_s8(0)))&0x7FFF;
372
- }
373
-
374
- inline int match_occupied()const
375
- {
376
- return simde_mm_movemask_epi8(
377
- vcgtq_u8(vreinterpretq_u8_s8(m),vdupq_n_u8(0)))&0x7FFF;
378
- }
379
-
380
- inline int match_really_occupied()const /* excluding sentinel */
381
- {
382
- return at(N-1)==sentinel_?match_occupied()&0x3FFF:match_occupied();
383
- }
384
-
385
- private:
386
- static constexpr unsigned char available_=0,
387
- sentinel_=1;
388
-
389
- inline static unsigned char reduced_hash(std::size_t hash)
390
- {
391
- static constexpr unsigned char table[]={
392
- 8,9,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
393
- 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
394
- 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
395
- 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
396
- 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
397
- 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
398
- 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
399
- 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
400
- 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
401
- 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
402
- 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
403
- 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
404
- 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
405
- 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
406
- 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
407
- 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
408
- };
409
-
410
- return table[(unsigned char)hash];
411
- }
412
-
413
- /* Copied from
414
- * https://github.com/simd-everywhere/simde/blob/master/simde/x86/sse2.h#L3763
415
- */
416
-
417
- static inline int simde_mm_movemask_epi8(uint8x16_t a)
418
- {
419
- static constexpr uint8_t md[16]={
420
- 1 << 0, 1 << 1, 1 << 2, 1 << 3,
421
- 1 << 4, 1 << 5, 1 << 6, 1 << 7,
422
- 1 << 0, 1 << 1, 1 << 2, 1 << 3,
423
- 1 << 4, 1 << 5, 1 << 6, 1 << 7,
424
- };
425
-
426
- uint8x16_t masked=vandq_u8(vld1q_u8(md),a);
427
- uint8x8x2_t tmp=vzip_u8(vget_low_u8(masked),vget_high_u8(masked));
428
- uint16x8_t x=vreinterpretq_u16_u8(vcombine_u8(tmp.val[0],tmp.val[1]));
429
-
430
- #if defined(__ARM_ARCH_ISA_A64)
431
- return vaddvq_u16(x);
432
- #else
433
- uint64x2_t t64=vpaddlq_u32(vpaddlq_u16(x));
434
- return int(vgetq_lane_u64(t64,0))+int(vgetq_lane_u64(t64,1));
435
- #endif
436
- }
437
-
438
- inline unsigned char& at(std::size_t pos)
439
- {
440
- return reinterpret_cast<unsigned char*>(&m)[pos];
441
- }
442
-
443
- inline unsigned char at(std::size_t pos)const
444
- {
445
- return reinterpret_cast<const unsigned char*>(&m)[pos];
446
- }
447
-
448
- inline unsigned char& overflow()
449
- {
450
- return at(N);
451
- }
452
-
453
- inline unsigned char overflow()const
454
- {
455
- return at(N);
456
- }
457
-
458
- alignas(16) int8x16_t m;
459
- };
460
-
461
- #else /* non-SIMD */
462
-
463
- struct group15
464
- {
465
- static constexpr int N=15;
466
-
467
- struct dummy_group_type
468
- {
469
- alignas(16) boost::uint64_t m[2]=
470
- {0x0000000000004000ull,0x0000000000000000ull};
471
- };
472
-
473
- inline void initialize(){m[0]=0;m[1]=0;}
474
-
475
- inline void set(std::size_t pos,std::size_t hash)
476
- {
477
- BOOST_ASSERT(pos<N);
478
- set_impl(pos,reduced_hash(hash));
479
- }
480
-
481
- inline void set_sentinel()
482
- {
483
- set_impl(N-1,sentinel_);
484
- }
485
-
486
- inline bool is_sentinel(std::size_t pos)const
487
- {
488
- BOOST_ASSERT(pos<N);
489
- return
490
- pos==N-1&&
491
- (m[0] & boost::uint64_t(0x4000400040004000ull))==boost::uint64_t(0x4000ull)&&
492
- (m[1] & boost::uint64_t(0x4000400040004000ull))==0;
493
- }
494
-
495
- inline void reset(std::size_t pos)
496
- {
497
- BOOST_ASSERT(pos<N);
498
- set_impl(pos,available_);
499
- }
500
-
501
- static inline void reset(unsigned char* pc)
502
- {
503
- std::size_t pos=reinterpret_cast<uintptr_t>(pc)%sizeof(group15);
504
- pc-=pos;
505
- reinterpret_cast<group15*>(pc)->reset(pos);
506
- }
507
-
508
- inline int match(std::size_t hash)const
509
- {
510
- return match_impl(reduced_hash(hash));
511
- }
512
-
513
- inline bool is_not_overflowed(std::size_t hash)const
514
- {
515
- return !(reinterpret_cast<const boost::uint16_t*>(m)[hash%8] & 0x8000u);
516
- }
517
-
518
- inline void mark_overflow(std::size_t hash)
519
- {
520
- reinterpret_cast<boost::uint16_t*>(m)[hash%8]|=0x8000u;
521
- }
522
-
523
- static inline bool maybe_caused_overflow(unsigned char* pc)
524
- {
525
- std::size_t pos=reinterpret_cast<uintptr_t>(pc)%sizeof(group15);
526
- group15 *pg=reinterpret_cast<group15*>(pc-pos);
527
- boost::uint64_t x=((pg->m[0])>>pos)&0x000100010001ull;
528
- #if defined(__MSVC_RUNTIME_CHECKS)
529
- boost::uint32_t y=(x|(x>>15)|(x>>30))&0xffffffffu;
530
- #else
531
- boost::uint32_t y=static_cast<boost::uint32_t>(x|(x>>15)|(x>>30));
532
- #endif
533
- return !pg->is_not_overflowed(y);
534
- };
535
-
536
- inline int match_available()const
537
- {
538
- boost::uint64_t x=~(m[0]|m[1]);
539
- boost::uint32_t y=static_cast<boost::uint32_t>(x&(x>>32));
540
- y&=y>>16;
541
- return y&0x7FFF;
542
- }
543
-
544
- inline int match_occupied()const
545
- {
546
- boost::uint64_t x=m[0]|m[1];
547
- #if defined(__MSVC_RUNTIME_CHECKS)
548
- boost::uint32_t y=(x|(x>>32))&0xffffffffu;
549
- #else
550
- boost::uint32_t y=static_cast<boost::uint32_t>(x|(x>>32));
551
- #endif
552
- y|=y>>16;
553
- return y&0x7FFF;
554
- }
555
-
556
- inline int match_really_occupied()const /* excluding sentinel */
557
- {
558
- return ~(match_impl(0)|match_impl(1))&0x7FFF;
559
- }
560
-
561
- private:
562
- static constexpr unsigned char available_=0,
563
- sentinel_=1;
564
-
565
- inline static unsigned char reduced_hash(std::size_t hash)
566
- {
567
- static constexpr unsigned char table[]={
568
- 8,9,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
569
- 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
570
- 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
571
- 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
572
- 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
573
- 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
574
- 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
575
- 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
576
- 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
577
- 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
578
- 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
579
- 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
580
- 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
581
- 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
582
- 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
583
- 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
584
- };
585
-
586
- #if defined(__MSVC_RUNTIME_CHECKS)
587
- return table[hash&0xffu];
588
- #else
589
- return table[(unsigned char)hash];
590
- #endif
591
- }
592
-
593
- inline void set_impl(std::size_t pos,std::size_t n)
594
- {
595
- BOOST_ASSERT(n<256);
596
- set_impl(m[0],pos,n&0xFu);
597
- set_impl(m[1],pos,n>>4);
598
- }
599
-
600
- static inline void set_impl(boost::uint64_t& x,std::size_t pos,std::size_t n)
601
- {
602
- static constexpr boost::uint64_t mask[]=
603
- {
604
- 0x0000000000000000ull,0x0000000000000001ull,0x0000000000010000ull,
605
- 0x0000000000010001ull,0x0000000100000000ull,0x0000000100000001ull,
606
- 0x0000000100010000ull,0x0000000100010001ull,0x0001000000000000ull,
607
- 0x0001000000000001ull,0x0001000000010000ull,0x0001000000010001ull,
608
- 0x0001000100000000ull,0x0001000100000001ull,0x0001000100010000ull,
609
- 0x0001000100010001ull,
610
- };
611
- static constexpr boost::uint64_t imask[]=
612
- {
613
- 0x0001000100010001ull,0x0001000100010000ull,0x0001000100000001ull,
614
- 0x0001000100000000ull,0x0001000000010001ull,0x0001000000010000ull,
615
- 0x0001000000000001ull,0x0001000000000000ull,0x0000000100010001ull,
616
- 0x0000000100010000ull,0x0000000100000001ull,0x0000000100000000ull,
617
- 0x0000000000010001ull,0x0000000000010000ull,0x0000000000000001ull,
618
- 0x0000000000000000ull,
619
- };
620
-
621
- BOOST_ASSERT(pos<16&&n<16);
622
- x|= mask[n]<<pos;
623
- x&=~(imask[n]<<pos);
624
- }
625
-
626
- inline int match_impl(std::size_t n)const
627
- {
628
- static constexpr boost::uint64_t mask[]=
629
- {
630
- 0x0000000000000000ull,0x000000000000ffffull,0x00000000ffff0000ull,
631
- 0x00000000ffffffffull,0x0000ffff00000000ull,0x0000ffff0000ffffull,
632
- 0x0000ffffffff0000ull,0x0000ffffffffffffull,0xffff000000000000ull,
633
- 0xffff00000000ffffull,0xffff0000ffff0000ull,0xffff0000ffffffffull,
634
- 0xffffffff00000000ull,0xffffffff0000ffffull,0xffffffffffff0000ull,
635
- 0xffffffffffffffffull,
636
- };
637
-
638
- BOOST_ASSERT(n<256);
639
- boost::uint64_t x=m[0]^mask[n&0xFu];
640
- x=~((m[1]^mask[n>>4])|x);
641
- boost::uint32_t y=static_cast<boost::uint32_t>(x&(x>>32));
642
- y&=y>>16;
643
- return y&0x7FFF;
644
- }
645
-
646
- alignas(16) boost::uint64_t m[2];
647
- };
648
-
649
- #endif
650
-
651
- /* foa::table uses a size policy to obtain the permissible sizes of the group
652
- * array (and, by implication, the element array) and to do the hash->group
653
- * mapping.
654
- *
655
- * - size_index(n) returns an unspecified "index" number used in other policy
656
- * operations.
657
- * - size(size_index_) returns the number of groups for the given index. It is
658
- * guaranteed that size(size_index(n)) >= n.
659
- * - min_size() is the minimum number of groups permissible, i.e.
660
- * size(size_index(0)).
661
- * - position(hash,size_index_) maps hash to a position in the range
662
- * [0,size(size_index_)).
663
- *
664
- * The reason we're introducing the intermediate index value for calculating
665
- * sizes and positions is that it allows us to optimize the implementation of
666
- * position, which is in the hot path of lookup and insertion operations:
667
- * pow2_size_policy, the actual size policy used by foa::table, returns 2^n
668
- * (n>0) as permissible sizes and returns the n most significant bits
669
- * of the hash value as the position in the group array; using a size index
670
- * defined as i = (bits in std::size_t) - n, we have an unbeatable
671
- * implementation of position(hash) as hash>>i.
672
- * There's a twofold reason for choosing the high bits of hash for positioning:
673
- * - Multiplication-based mixing tends to yield better entropy in the high
674
- * part of its result.
675
- * - group15 reduced-hash values take the *low* bits of hash, and we want
676
- * these values and positioning to be as uncorrelated as possible.
677
- */
678
-
679
- struct pow2_size_policy
680
- {
681
- static inline std::size_t size_index(std::size_t n)
682
- {
683
- // TODO: min size is 2, see if we can bring it down to 1 without loss
684
- // of performance
685
-
686
- return sizeof(std::size_t)*CHAR_BIT-
687
- (n<=2?1:((std::size_t)(boost::core::bit_width(n-1))));
688
- }
689
-
690
- static inline std::size_t size(std::size_t size_index_)
691
- {
692
- return std::size_t(1)<<(sizeof(std::size_t)*CHAR_BIT-size_index_);
693
- }
694
-
695
- static constexpr std::size_t min_size(){return 2;}
696
-
697
- static inline std::size_t position(std::size_t hash,std::size_t size_index_)
698
- {
699
- return hash>>size_index_;
700
- }
701
- };
702
-
703
- /* size index of a group array for a given *element* capacity */
704
-
705
- template<typename Group,typename SizePolicy>
706
- static inline std::size_t size_index_for(std::size_t n)
707
- {
708
- /* n/N+1 == ceil((n+1)/N) (extra +1 for the sentinel) */
709
- return SizePolicy::size_index(n/Group::N+1);
710
- }
711
-
712
- /* Quadratic prober over a power-of-two range using triangular numbers.
713
- * mask in next(mask) must be the range size minus one (and since size is 2^n,
714
- * mask has exactly its n first bits set to 1).
715
- */
716
-
717
- struct pow2_quadratic_prober
718
- {
719
- pow2_quadratic_prober(std::size_t pos_):pos{pos_}{}
720
-
721
- inline std::size_t get()const{return pos;}
722
-
723
- /* next returns false when the whole array has been traversed, which ends
724
- * probing (in practice, full-table probing will only happen with very small
725
- * arrays).
726
- */
727
-
728
- inline bool next(std::size_t mask)
729
- {
730
- step+=1;
731
- pos=(pos+step)&mask;
732
- return step<=mask;
733
- }
734
-
735
- private:
736
- std::size_t pos,step=0;
737
- };
738
-
739
- /* Mixing policies: no_mix is the identity function and xmx_mix uses the
740
- * xmx function defined in <boost/unordered/detail/xmx.hpp>.
741
- * foa::table mixes hash results with xmx_mix unless the hash is marked as
742
- * avalanching, i.e. of good quality (see <boost/unordered/hash_traits.hpp>).
743
- */
744
-
745
- struct no_mix
746
- {
747
- template<typename Hash,typename T>
748
- static inline std::size_t mix(const Hash& h,const T& x)
749
- {
750
- return h(x);
751
- }
752
- };
753
-
754
- struct xmx_mix
755
- {
756
- template<typename Hash,typename T>
757
- static inline std::size_t mix(const Hash& h,const T& x)
758
- {
759
- return xmx(h(x));
760
- }
761
- };
762
-
763
- /* boost::core::countr_zero has a potentially costly check for
764
- * the case x==0.
765
- */
766
-
767
- inline unsigned int unchecked_countr_zero(int x)
768
- {
769
- #if defined(BOOST_MSVC)
770
- unsigned long r;
771
- _BitScanForward(&r,(unsigned long)x);
772
- return (unsigned int)r;
773
- #else
774
- BOOST_UNORDERED_ASSUME(x!=0);
775
- return (unsigned int)boost::core::countr_zero((unsigned int)x);
776
- #endif
777
- }
778
-
779
- template<typename,typename,typename,typename>
780
- class table;
781
-
782
- /* table_iterator keeps two pointers:
783
- *
784
- * - A pointer p to the element slot.
785
- * - A pointer pc to the n-th byte of the associated group metadata, where n
786
- * is the position of the element in the group.
787
- *
788
- * A simpler solution would have been to keep a pointer p to the element, a
789
- * pointer pg to the group, and the position n, but that would increase
790
- * sizeof(table_iterator) by 4/8 bytes. In order to make this compact
791
- * representation feasible, it is required that group objects are aligned
792
- * to their size, so that we can recover pg and n as
793
- *
794
- * - n = pc%sizeof(group)
795
- * - pg = pc-n
796
- *
797
- * (for explanatory purposes pg and pc are treated above as if they were memory
798
- * addresses rather than pointers).The main drawback of this two-pointer
799
- * representation is that iterator increment is relatively slow.
800
- *
801
- * p = nullptr is conventionally used to mark end() iterators.
802
- */
803
-
804
- /* internal conversion from const_iterator to iterator */
805
- class const_iterator_cast_tag {};
806
-
807
- template<typename Value,typename Group,bool Const>
808
- class table_iterator
809
- {
810
- public:
811
- using difference_type=std::ptrdiff_t;
812
- using value_type=Value;
813
- using pointer=
814
- typename std::conditional<Const,value_type const*,value_type*>::type;
815
- using reference=
816
- typename std::conditional<Const,value_type const&,value_type&>::type;
817
- using iterator_category=std::forward_iterator_tag;
818
- using element_type=
819
- typename std::conditional<Const,value_type const,value_type>::type;
820
-
821
- table_iterator()=default;
822
- template<bool Const2,typename std::enable_if<!Const2>::type* =nullptr>
823
- table_iterator(const table_iterator<Value,Group,Const2>& x):
824
- pc{x.pc},p{x.p}{}
825
- table_iterator(
826
- const_iterator_cast_tag, const table_iterator<Value,Group,true>& x):
827
- pc{x.pc},p{x.p}{}
828
-
829
- inline reference operator*()const noexcept{return *p;}
830
- inline pointer operator->()const noexcept{return p;}
831
- inline table_iterator& operator++()noexcept{increment();return *this;}
832
- inline table_iterator operator++(int)noexcept
833
- {auto x=*this;increment();return x;}
834
- friend inline bool operator==(
835
- const table_iterator& x,const table_iterator& y)
836
- {return x.p==y.p;}
837
- friend inline bool operator!=(
838
- const table_iterator& x,const table_iterator& y)
839
- {return !(x==y);}
840
-
841
- private:
842
- template<typename,typename,bool> friend class table_iterator;
843
- template<typename,typename,typename,typename> friend class table;
844
-
845
- table_iterator(Group* pg,std::size_t n,const Value* p_):
846
- pc{reinterpret_cast<unsigned char*>(const_cast<Group*>(pg))+n},
847
- p{const_cast<Value*>(p_)}
848
- {}
849
-
850
- inline std::size_t rebase() noexcept
851
- {
852
- std::size_t off=reinterpret_cast<uintptr_t>(pc)%sizeof(Group);
853
- pc-=off;
854
- return off;
855
- }
856
-
857
- inline void increment()noexcept
858
- {
859
- std::size_t n0=rebase();
860
-
861
- int mask=(reinterpret_cast<Group*>(pc)->match_occupied()>>(n0+1))<<(n0+1);
862
- if(!mask){
863
- do{
864
- pc+=sizeof(Group);
865
- p+=Group::N;
866
- }
867
- while((mask=reinterpret_cast<Group*>(pc)->match_occupied())==0);
868
- }
869
-
870
- auto n=unchecked_countr_zero(mask);
871
- if(BOOST_UNLIKELY(reinterpret_cast<Group*>(pc)->is_sentinel(n))){
872
- p=nullptr;
873
- }
874
- else{
875
- pc+=n;
876
- p-=n0;
877
- p+=n;
878
- }
879
- }
880
-
881
- unsigned char *pc=nullptr;
882
- Value *p=nullptr;
883
- };
884
-
885
- /* table_arrays controls allocation, initialization and deallocation of
886
- * paired arrays of groups and element slots. Only one chunk of memory is
887
- * allocated to place both arrays: this is not done for efficiency reasons,
888
- * but in order to be able to properly align the group array without storing
889
- * additional offset information --the alignment required (16B) is usually
890
- * greater than alignof(std::max_align_t) and thus not guaranteed by
891
- * allocators.
892
- */
893
-
894
- template<typename Group,std::size_t Size>
895
- Group* dummy_groups()
896
- {
897
- /* Dummy storage initialized as if in an empty container (actually, each
898
- * of its groups is initialized like a separate empty container).
899
- * We make table_arrays::groups point to this when capacity()==0, so that
900
- * we are not allocating any dynamic memory and yet lookup can be implemented
901
- * without checking for groups==nullptr. This space won't ever be used for
902
- * insertion as the container's capacity is precisely zero.
903
- */
904
-
905
- static constexpr typename Group::dummy_group_type
906
- storage[Size]={typename Group::dummy_group_type(),};
907
-
908
- return reinterpret_cast<Group*>(
909
- const_cast<typename Group::dummy_group_type*>(storage));
910
- }
911
-
912
- template<typename Value,typename Group,typename SizePolicy>
913
- struct table_arrays
914
- {
915
- using value_type=Value;
916
- using group_type=Group;
917
- static constexpr auto N=group_type::N;
918
- using size_policy=SizePolicy;
919
-
920
- template<typename Allocator>
921
- static table_arrays new_(Allocator& al,std::size_t n)
922
- {
923
- using alloc_traits=boost::allocator_traits<Allocator>;
924
-
925
- auto groups_size_index=size_index_for<group_type,size_policy>(n);
926
- auto groups_size=size_policy::size(groups_size_index);
927
- table_arrays arrays{groups_size_index,groups_size-1,nullptr,nullptr};
928
-
929
- if(!n){
930
- arrays.groups=dummy_groups<group_type,size_policy::min_size()>();
931
- }
932
- else{
933
- arrays.elements=
934
- boost::to_address(alloc_traits::allocate(al,buffer_size(groups_size)));
935
-
936
- /* Align arrays.groups to sizeof(group_type). table_iterator critically
937
- * depends on such alignment for its increment operation.
938
- */
939
-
940
- auto p=reinterpret_cast<unsigned char*>(arrays.elements+groups_size*N-1);
941
- p+=(uintptr_t(sizeof(group_type))-
942
- reinterpret_cast<uintptr_t>(p))%sizeof(group_type);
943
- arrays.groups=reinterpret_cast<group_type*>(p);
944
-
945
- /* memset is faster/not slower than initializing groups individually.
946
- * This assumes all zeros is group_type's default layout.
947
- */
948
-
949
- std::memset(arrays.groups,0,sizeof(group_type)*groups_size);
950
- arrays.groups[groups_size-1].set_sentinel();
951
- }
952
- return arrays;
953
- }
954
-
955
- template<typename Allocator>
956
- static void delete_(Allocator& al,table_arrays& arrays)noexcept
957
- {
958
- using alloc_traits=boost::allocator_traits<Allocator>;
959
- using pointer=typename alloc_traits::pointer;
960
- using pointer_traits=boost::pointer_traits<pointer>;
961
-
962
- if(arrays.elements){
963
- alloc_traits::deallocate(
964
- al,pointer_traits::pointer_to(*arrays.elements),
965
- buffer_size(arrays.groups_size_mask+1));
966
- }
967
- }
968
-
969
- /* combined space for elements and groups measured in sizeof(value_type)s */
970
-
971
- static std::size_t buffer_size(std::size_t groups_size)
972
- {
973
- auto buffer_bytes=
974
- /* space for elements (we subtract 1 because of the sentinel) */
975
- sizeof(value_type)*(groups_size*N-1)+
976
- /* space for groups + padding for group alignment */
977
- sizeof(group_type)*(groups_size+1)-1;
978
-
979
- /* ceil(buffer_bytes/sizeof(value_type)) */
980
- return (buffer_bytes+sizeof(value_type)-1)/sizeof(value_type);
981
- }
982
-
983
- std::size_t groups_size_index;
984
- std::size_t groups_size_mask;
985
- group_type *groups;
986
- value_type *elements;
987
- };
988
-
989
- struct if_constexpr_void_else{void operator()()const{}};
990
-
991
- template<bool B,typename F,typename G=if_constexpr_void_else>
992
- void if_constexpr(F f,G g={})
993
- {
994
- std::get<B?0:1>(std::forward_as_tuple(f,g))();
995
- }
996
-
997
- template<bool B,typename T,typename std::enable_if<B>::type* =nullptr>
998
- void copy_assign_if(T& x,const T& y){x=y;}
999
-
1000
- template<bool B,typename T,typename std::enable_if<!B>::type* =nullptr>
1001
- void copy_assign_if(T&,const T&){}
1002
-
1003
- template<bool B,typename T,typename std::enable_if<B>::type* =nullptr>
1004
- void move_assign_if(T& x,T& y){x=std::move(y);}
1005
-
1006
- template<bool B,typename T,typename std::enable_if<!B>::type* =nullptr>
1007
- void move_assign_if(T&,T&){}
1008
-
1009
- template<bool B,typename T,typename std::enable_if<B>::type* =nullptr>
1010
- void swap_if(T& x,T& y){using std::swap; swap(x,y);}
1011
-
1012
- template<bool B,typename T,typename std::enable_if<!B>::type* =nullptr>
1013
- void swap_if(T&,T&){}
1014
-
1015
- inline void prefetch(const void* p)
1016
- {
1017
- (void) p;
1018
- #if defined(BOOST_GCC)||defined(BOOST_CLANG)
1019
- __builtin_prefetch((const char*)p);
1020
- #elif defined(BOOST_UNORDERED_SSE2)
1021
- _mm_prefetch((const char*)p,_MM_HINT_T0);
1022
- #endif
1023
- }
1024
-
1025
- #if defined(BOOST_GCC)
1026
- /* GCC's -Wshadow triggers at scenarios like this:
1027
- *
1028
- * struct foo{};
1029
- * template<typename Base>
1030
- * struct derived:Base
1031
- * {
1032
- * void f(){int foo;}
1033
- * };
1034
- *
1035
- * derived<foo>x;
1036
- * x.f(); // declaration of "foo" in derived::f shadows base type "foo"
1037
- *
1038
- * This makes shadowing warnings unavoidable in general when a class template
1039
- * derives from user-provided classes, as is the case with table and
1040
- * empty_value's below.
1041
- */
1042
-
1043
- #pragma GCC diagnostic push
1044
- #pragma GCC diagnostic ignored "-Wshadow"
1045
- #endif
1046
-
1047
- #if defined(BOOST_MSVC)
1048
- #pragma warning(push)
1049
- #pragma warning(disable:4714) /* marked as __forceinline not inlined */
1050
- #endif
1051
-
1052
- #if BOOST_WORKAROUND(BOOST_MSVC,<=1900)
1053
- /* VS2015 marks as unreachable generic catch clauses around non-throwing
1054
- * code.
1055
- */
1056
- #pragma warning(push)
1057
- #pragma warning(disable:4702)
1058
- #endif
1059
-
1060
- /* foa::table interface departs in a number of ways from that of C++ unordered
1061
- * associative containers because it's not for end-user consumption
1062
- * (boost::unordered_flat_[map|set] wrappers complete it as appropriate) and,
1063
- * more importantly, because of fundamental restrictions imposed by open
1064
- * addressing:
1065
- *
1066
- * - value_type must be moveable.
1067
- * - Pointer stability is not kept under rehashing.
1068
- * - begin() is not O(1).
1069
- * - No bucket API.
1070
- * - Load factor is fixed and can't be set by the user.
1071
- * - No extract API.
1072
- *
1073
- * The TypePolicy template parameter is used to generate instantiations
1074
- * suitable for either maps or sets, and introduces non-standard init_type:
1075
- *
1076
- * - TypePolicy::key_type and TypePolicy::value_type have the obvious
1077
- * meaning.
1078
- * - TypePolicy::init_type is the type implicitly converted to when
1079
- * writing x.insert({...}). For maps, this is std::pair<Key,T> rather
1080
- * than std::pair<const Key,T> so that, for instance, x.insert({"hello",0})
1081
- * produces a cheaply moveable std::string&& ("hello") rather than
1082
- * a copyable const std::string&&. foa::table::insert is extended to accept
1083
- * both init_type and value_type references.
1084
- * - TypePolicy::move(value_type&) returns a temporary object for value
1085
- * transfer on rehashing, move copy/assignment, and merge. For maps, this
1086
- * object is a std::pair<Key&&,T&&>, which is generally cheaper to move
1087
- * than std::pair<const Key,T>&& because of the constness in Key.
1088
- * - TypePolicy::extract returns a const reference to the key part of
1089
- * a value of type value_type, init_type or
1090
- * decltype(TypePolicy::move(...)).
1091
- *
1092
- * try_emplace, erase and find support heterogenous lookup by default, that is,
1093
- * without checking for any ::is_transparent typedefs --the checking is done by
1094
- * boost::unordered_flat_[map|set].
1095
- *
1096
- * At the moment, we're not supporting allocators with fancy pointers.
1097
- * Allocator::pointer must be convertible to/from regular pointers.
1098
- */
1099
-
1100
- /* We pull this out so the tests don't have to rely on a magic constant or
1101
- * instantiate the table class template as it can be quite gory.
1102
- */
1103
- constexpr static float const mlf = 0.875f;
1104
-
1105
- template<typename TypePolicy,typename Hash,typename Pred,typename Allocator>
1106
- class
1107
-
1108
- #if defined(_MSC_VER)&&_MSC_FULL_VER>=190023918
1109
- __declspec(empty_bases) /* activate EBO with multiple inheritance */
1110
- #endif
1111
-
1112
- table:empty_value<Hash,0>,empty_value<Pred,1>,empty_value<Allocator,2>
1113
- {
1114
- using hash_base=empty_value<Hash,0>;
1115
- using pred_base=empty_value<Pred,1>;
1116
- using allocator_base=empty_value<Allocator,2>;
1117
- using type_policy=TypePolicy;
1118
- using group_type=group15;
1119
- static constexpr auto N=group_type::N;
1120
- using size_policy=pow2_size_policy;
1121
- using prober=pow2_quadratic_prober;
1122
- using mix_policy=typename std::conditional<
1123
- hash_is_avalanching<Hash>::value,
1124
- no_mix,
1125
- xmx_mix
1126
- >::type;
1127
- using alloc_traits=boost::allocator_traits<Allocator>;
1128
-
1129
- public:
1130
- using key_type=typename type_policy::key_type;
1131
- using init_type=typename type_policy::init_type;
1132
- using value_type=typename type_policy::value_type;
1133
-
1134
- private:
1135
- static constexpr bool has_mutable_iterator=
1136
- !std::is_same<key_type,value_type>::value;
1137
-
1138
- public:
1139
- using hasher=Hash;
1140
- using key_equal=Pred;
1141
- using allocator_type=Allocator;
1142
- using pointer=value_type*;
1143
- using const_pointer=const value_type*;
1144
- using reference=value_type&;
1145
- using const_reference=const value_type&;
1146
- using size_type=std::size_t;
1147
- using difference_type=std::ptrdiff_t;
1148
- using const_iterator=table_iterator<value_type,group_type,true>;
1149
- using iterator=typename std::conditional<
1150
- has_mutable_iterator,
1151
- table_iterator<value_type,group_type,false>,
1152
- const_iterator>::type;
1153
-
1154
- table(
1155
- std::size_t n=0,const Hash& h_=Hash(),const Pred& pred_=Pred(),
1156
- const Allocator& al_=Allocator()):
1157
- hash_base{empty_init,h_},pred_base{empty_init,pred_},
1158
- allocator_base{empty_init,al_},size_{0},arrays(new_arrays(n)),
1159
- ml{initial_max_load()}
1160
- {}
1161
-
1162
- table(const table& x):
1163
- table{x,alloc_traits::select_on_container_copy_construction(x.al())}{}
1164
-
1165
- table(table&& x)
1166
- noexcept(
1167
- std::is_nothrow_move_constructible<Hash>::value&&
1168
- std::is_nothrow_move_constructible<Pred>::value&&
1169
- std::is_nothrow_move_constructible<Allocator>::value):
1170
- hash_base{empty_init,std::move(x.h())},
1171
- pred_base{empty_init,std::move(x.pred())},
1172
- allocator_base{empty_init,std::move(x.al())},
1173
- size_{x.size_},arrays(x.arrays),ml{x.ml}
1174
- {
1175
- x.size_=0;
1176
- x.arrays=x.new_arrays(0);
1177
- x.ml=x.initial_max_load();
1178
- }
1179
-
1180
- table(const table& x,const Allocator& al_):
1181
- table{std::size_t(std::ceil(float(x.size())/mlf)),x.h(),x.pred(),al_}
1182
- {
1183
- x.for_all_elements([this](value_type* p){
1184
- unchecked_insert(*p);
1185
- });
1186
- }
1187
-
1188
- table(table&& x,const Allocator& al_):
1189
- table{0,std::move(x.h()),std::move(x.pred()),al_}
1190
- {
1191
- if(al()==x.al()){
1192
- std::swap(size_,x.size_);
1193
- std::swap(arrays,x.arrays);
1194
- std::swap(ml,x.ml);
1195
- }
1196
- else{
1197
- reserve(x.size());
1198
- clear_on_exit c{x};
1199
- (void)c; /* unused var warning */
1200
-
1201
- /* This works because subsequent x.clear() does not depend on the
1202
- * elements' values.
1203
- */
1204
- x.for_all_elements([this](value_type* p){
1205
- unchecked_insert(type_policy::move(*p));
1206
- });
1207
- }
1208
- }
1209
-
1210
- ~table()noexcept
1211
- {
1212
- for_all_elements([this](value_type* p){
1213
- destroy_element(p);
1214
- });
1215
- delete_arrays(arrays);
1216
- }
1217
-
1218
- table& operator=(const table& x)
1219
- {
1220
- static constexpr auto pocca=
1221
- alloc_traits::propagate_on_container_copy_assignment::value;
1222
-
1223
- if(this!=std::addressof(x)){
1224
- clear();
1225
- h()=x.h();
1226
- pred()=x.pred();
1227
- if_constexpr<pocca>([&,this]{
1228
- if(al()!=x.al())reserve(0);
1229
- copy_assign_if<pocca>(al(),x.al());
1230
- });
1231
- /* noshrink: favor memory reuse over tightness */
1232
- noshrink_reserve(x.size());
1233
- x.for_all_elements([this](value_type* p){
1234
- unchecked_insert(*p);
1235
- });
1236
- }
1237
- return *this;
1238
- }
1239
-
1240
- #if defined(BOOST_MSVC)
1241
- #pragma warning(push)
1242
- #pragma warning(disable:4127) /* conditional expression is constant */
1243
- #endif
1244
-
1245
- table& operator=(table&& x)
1246
- noexcept(
1247
- alloc_traits::is_always_equal::value&&
1248
- std::is_nothrow_move_assignable<Hash>::value&&
1249
- std::is_nothrow_move_assignable<Pred>::value)
1250
- {
1251
- static constexpr auto pocma=
1252
- alloc_traits::propagate_on_container_move_assignment::value;
1253
-
1254
- if(this!=std::addressof(x)){
1255
- clear();
1256
- h()=std::move(x.h());
1257
- pred()=std::move(x.pred());
1258
- if(pocma||al()==x.al()){
1259
- using std::swap;
1260
- reserve(0);
1261
- move_assign_if<pocma>(al(),x.al());
1262
- swap(size_,x.size_);
1263
- swap(arrays,x.arrays);
1264
- swap(ml,x.ml);
1265
- }
1266
- else{
1267
- /* noshrink: favor memory reuse over tightness */
1268
- noshrink_reserve(x.size());
1269
- clear_on_exit c{x};
1270
- (void)c; /* unused var warning */
1271
-
1272
- /* This works because subsequent x.clear() does not depend on the
1273
- * elements' values.
1274
- */
1275
- x.for_all_elements([this](value_type* p){
1276
- unchecked_insert(type_policy::move(*p));
1277
- });
1278
- }
1279
- }
1280
- return *this;
1281
- }
1282
-
1283
- #if defined(BOOST_MSVC)
1284
- #pragma warning(pop) /* C4127 */
1285
- #endif
1286
-
1287
- allocator_type get_allocator()const noexcept{return al();}
1288
-
1289
- iterator begin()noexcept
1290
- {
1291
- iterator it{arrays.groups,0,arrays.elements};
1292
- if(!(arrays.groups[0].match_occupied()&0x1))++it;
1293
- return it;
1294
- }
1295
-
1296
- const_iterator begin()const noexcept
1297
- {return const_cast<table*>(this)->begin();}
1298
- iterator end()noexcept{return {};}
1299
- const_iterator end()const noexcept{return const_cast<table*>(this)->end();}
1300
- const_iterator cbegin()const noexcept{return begin();}
1301
- const_iterator cend()const noexcept{return end();}
1302
-
1303
- bool empty()const noexcept{return size()==0;}
1304
- std::size_t size()const noexcept{return size_;}
1305
- std::size_t max_size()const noexcept{return SIZE_MAX;}
1306
-
1307
- template<typename... Args>
1308
- BOOST_FORCEINLINE std::pair<iterator,bool> emplace(Args&&... args)
1309
- {
1310
- using emplace_type = typename std::conditional<
1311
- std::is_constructible<
1312
- init_type, Args...
1313
- >::value,
1314
- init_type,
1315
- value_type
1316
- >::type;
1317
- return emplace_impl(emplace_type(std::forward<Args>(args)...));
1318
- }
1319
-
1320
- template<typename Key,typename... Args>
1321
- BOOST_FORCEINLINE std::pair<iterator,bool> try_emplace(
1322
- Key&& k,Args&&... args)
1323
- {
1324
- return emplace_impl(
1325
- std::piecewise_construct,
1326
- std::forward_as_tuple(std::forward<Key>(k)),
1327
- std::forward_as_tuple(std::forward<Args>(args)...));
1328
- }
1329
-
1330
- BOOST_FORCEINLINE std::pair<iterator,bool>
1331
- insert(const init_type& x){return emplace_impl(x);}
1332
-
1333
- BOOST_FORCEINLINE std::pair<iterator,bool>
1334
- insert(init_type&& x){return emplace_impl(std::move(x));}
1335
-
1336
- /* template<typename=void> tilts call ambiguities in favor of init_type */
1337
-
1338
- template<typename=void>
1339
- BOOST_FORCEINLINE std::pair<iterator,bool>
1340
- insert(const value_type& x){return emplace_impl(x);}
1341
-
1342
- template<typename=void>
1343
- BOOST_FORCEINLINE std::pair<iterator,bool>
1344
- insert(value_type&& x){return emplace_impl(std::move(x));}
1345
-
1346
- template<
1347
- bool dependent_value=false,
1348
- typename std::enable_if<
1349
- has_mutable_iterator||dependent_value>::type* =nullptr
1350
- >
1351
- void erase(iterator pos)noexcept{return erase(const_iterator(pos));}
1352
-
1353
- BOOST_FORCEINLINE
1354
- void erase(const_iterator pos)noexcept
1355
- {
1356
- destroy_element(pos.p);
1357
- recover_slot(pos.pc);
1358
- }
1359
-
1360
- template<typename Key>
1361
- BOOST_FORCEINLINE
1362
- auto erase(Key&& x) -> typename std::enable_if<
1363
- !std::is_convertible<Key,iterator>::value&&
1364
- !std::is_convertible<Key,const_iterator>::value, std::size_t>::type
1365
- {
1366
- auto it=find(x);
1367
- if(it!=end()){
1368
- erase(it);
1369
- return 1;
1370
- }
1371
- else return 0;
1372
- }
1373
-
1374
- void swap(table& x)
1375
- noexcept(
1376
- alloc_traits::is_always_equal::value&&
1377
- boost::is_nothrow_swappable<Hash>::value&&
1378
- boost::is_nothrow_swappable<Pred>::value)
1379
- {
1380
- static constexpr auto pocs=
1381
- alloc_traits::propagate_on_container_swap::value;
1382
-
1383
- using std::swap;
1384
- swap(h(),x.h());
1385
- swap(pred(),x.pred());
1386
- if_constexpr<pocs>([&,this]{
1387
- swap_if<pocs>(al(),x.al());
1388
- },
1389
- [&,this]{ /* else */
1390
- BOOST_ASSERT(al()==x.al());
1391
- (void)this; /* makes sure captured this is used */
1392
- });
1393
- swap(size_,x.size_);
1394
- swap(arrays,x.arrays);
1395
- swap(ml,x.ml);
1396
- }
1397
-
1398
- void clear()noexcept
1399
- {
1400
- auto p=arrays.elements;
1401
- if(p){
1402
- for(auto pg=arrays.groups,last=pg+arrays.groups_size_mask+1;
1403
- pg!=last;++pg,p+=N){
1404
- auto mask=pg->match_really_occupied();
1405
- while(mask){
1406
- destroy_element(p+unchecked_countr_zero(mask));
1407
- mask&=mask-1;
1408
- }
1409
- /* we wipe the entire metadata to reset the overflow byte as well */
1410
- pg->initialize();
1411
- }
1412
- arrays.groups[arrays.groups_size_mask].set_sentinel();
1413
- size_=0;
1414
- ml=initial_max_load();
1415
- }
1416
- }
1417
-
1418
- // TODO: should we accept different allocator too?
1419
- template<typename Hash2,typename Pred2>
1420
- void merge(table<TypePolicy,Hash2,Pred2,Allocator>& x)
1421
- {
1422
- x.for_all_elements([&,this](group_type* pg,unsigned int n,value_type* p){
1423
- if(emplace_impl(type_policy::move(*p)).second){
1424
- x.erase(iterator{pg,n,p});
1425
- }
1426
- });
1427
- }
1428
-
1429
- template<typename Hash2,typename Pred2>
1430
- void merge(table<TypePolicy,Hash2,Pred2,Allocator>&& x){merge(x);}
1431
-
1432
- hasher hash_function()const{return h();}
1433
- key_equal key_eq()const{return pred();}
1434
-
1435
- template<typename Key>
1436
- BOOST_FORCEINLINE iterator find(const Key& x)
1437
- {
1438
- auto hash=hash_for(x);
1439
- return find_impl(x,position_for(hash),hash);
1440
- }
1441
-
1442
- template<typename Key>
1443
- BOOST_FORCEINLINE const_iterator find(const Key& x)const
1444
- {
1445
- return const_cast<table*>(this)->find(x);
1446
- }
1447
-
1448
- std::size_t capacity()const noexcept
1449
- {
1450
- return arrays.elements?(arrays.groups_size_mask+1)*N-1:0;
1451
- }
1452
-
1453
- float load_factor()const noexcept
1454
- {
1455
- if (capacity() == 0) { return 0; }
1456
- return float(size())/float(capacity());
1457
- }
1458
-
1459
- float max_load_factor()const noexcept{return mlf;}
1460
-
1461
- std::size_t max_load()const noexcept{return ml;}
1462
-
1463
- void rehash(std::size_t n)
1464
- {
1465
- auto m=size_t(std::ceil(float(size())/mlf));
1466
- if(m>n)n=m;
1467
- if(n)n=capacity_for(n); /* exact resulting capacity */
1468
-
1469
- if(n!=capacity())unchecked_rehash(n);
1470
- }
1471
-
1472
- void reserve(std::size_t n)
1473
- {
1474
- rehash(std::size_t(std::ceil(float(n)/mlf)));
1475
- }
1476
-
1477
- template<typename Predicate>
1478
- friend std::size_t erase_if(table& x,Predicate pr)
1479
- {
1480
- return x.erase_if_impl(pr);
1481
- }
1482
-
1483
- private:
1484
- template<typename,typename,typename,typename> friend class table;
1485
- using arrays_type=table_arrays<value_type,group_type,size_policy>;
1486
-
1487
- struct clear_on_exit
1488
- {
1489
- ~clear_on_exit(){x.clear();}
1490
- table& x;
1491
- };
1492
-
1493
- Hash& h(){return hash_base::get();}
1494
- const Hash& h()const{return hash_base::get();}
1495
- Pred& pred(){return pred_base::get();}
1496
- const Pred& pred()const{return pred_base::get();}
1497
- Allocator& al(){return allocator_base::get();}
1498
- const Allocator& al()const{return allocator_base::get();}
1499
-
1500
- arrays_type new_arrays(std::size_t n)
1501
- {
1502
- return arrays_type::new_(al(),n);
1503
- }
1504
-
1505
- void delete_arrays(arrays_type& arrays_)noexcept
1506
- {
1507
- arrays_type::delete_(al(),arrays_);
1508
- }
1509
-
1510
- template<typename... Args>
1511
- void construct_element(value_type* p,Args&&... args)
1512
- {
1513
- alloc_traits::construct(al(),p,std::forward<Args>(args)...);
1514
- }
1515
-
1516
- void destroy_element(value_type* p)noexcept
1517
- {
1518
- alloc_traits::destroy(al(),p);
1519
- }
1520
-
1521
- struct destroy_element_on_exit
1522
- {
1523
- ~destroy_element_on_exit(){this_->destroy_element(p);}
1524
- table *this_;
1525
- value_type *p;
1526
- };
1527
-
1528
- void recover_slot(unsigned char* pc)
1529
- {
1530
- /* If this slot potentially caused overflow, we decrease the maximum load so
1531
- * that average probe length won't increase unboundedly in repeated
1532
- * insert/erase cycles (drift).
1533
- */
1534
- ml-=group_type::maybe_caused_overflow(pc);
1535
- group_type::reset(pc);
1536
- --size_;
1537
- }
1538
-
1539
- void recover_slot(group_type* pg,std::size_t pos)
1540
- {
1541
- recover_slot(reinterpret_cast<unsigned char*>(pg)+pos);
1542
- }
1543
-
1544
- std::size_t initial_max_load()const
1545
- {
1546
- static constexpr std::size_t small_capacity=2*N-1;
1547
-
1548
- auto capacity_=capacity();
1549
- if(capacity_<=small_capacity){
1550
- return capacity_; /* we allow 100% usage */
1551
- }
1552
- else{
1553
- return (std::size_t)(mlf*(float)(capacity_));
1554
- }
1555
- }
1556
-
1557
- template<typename T>
1558
- static inline auto key_from(const T& x)
1559
- ->decltype(type_policy::extract(x))
1560
- {
1561
- return type_policy::extract(x);
1562
- }
1563
-
1564
- template<typename Arg1,typename Arg2>
1565
- static inline auto key_from(
1566
- std::piecewise_construct_t,const Arg1& k,const Arg2&)
1567
- ->decltype(std::get<0>(k))
1568
- {
1569
- return std::get<0>(k);
1570
- }
1571
-
1572
- template<typename Key>
1573
- inline std::size_t hash_for(const Key& x)const
1574
- {
1575
- return mix_policy::mix(h(),x);
1576
- }
1577
-
1578
- inline std::size_t position_for(std::size_t hash)const
1579
- {
1580
- return position_for(hash,arrays);
1581
- }
1582
-
1583
- static inline std::size_t position_for(
1584
- std::size_t hash,const arrays_type& arrays_)
1585
- {
1586
- return size_policy::position(hash,arrays_.groups_size_index);
1587
- }
1588
-
1589
- static inline void prefetch_elements(const value_type* p)
1590
- {
1591
- /* We have experimentally confirmed that ARM architectures get a higher
1592
- * speedup when around the first half of the element slots in a group are
1593
- * prefetched, whereas for Intel just the first cache line is best.
1594
- * Please report back if you find better tunings for some particular
1595
- * architectures.
1596
- */
1597
-
1598
- #if BOOST_ARCH_ARM
1599
- /* Cache line size can't be known at compile time, so we settle on
1600
- * the very frequent value of 64B.
1601
- */
1602
- constexpr int cache_line=64;
1603
- const char *p0=reinterpret_cast<const char*>(p),
1604
- *p1=p0+sizeof(value_type)*N/2;
1605
- for(;p0<p1;p0+=cache_line)prefetch(p0);
1606
- #else
1607
- prefetch(p);
1608
- #endif
1609
- }
1610
-
1611
- #if defined(BOOST_MSVC)
1612
- /* warning: forcing value to bool 'true' or 'false' in bool(pred()...) */
1613
- #pragma warning(push)
1614
- #pragma warning(disable:4800)
1615
- #endif
1616
-
1617
- template<typename Key>
1618
- BOOST_FORCEINLINE iterator find_impl(
1619
- const Key& x,std::size_t pos0,std::size_t hash)const
1620
- {
1621
- prober pb(pos0);
1622
- do{
1623
- auto pos=pb.get();
1624
- auto pg=arrays.groups+pos;
1625
- auto mask=pg->match(hash);
1626
- if(mask){
1627
- auto p=arrays.elements+pos*N;
1628
- prefetch_elements(p);
1629
- do{
1630
- auto n=unchecked_countr_zero(mask);
1631
- if(BOOST_LIKELY(bool(pred()(x,key_from(p[n]))))){
1632
- return {pg,n,p+n};
1633
- }
1634
- mask&=mask-1;
1635
- }while(mask);
1636
- }
1637
- if(BOOST_LIKELY(pg->is_not_overflowed(hash))){
1638
- return {}; /* end() */
1639
- }
1640
- }
1641
- while(BOOST_LIKELY(pb.next(arrays.groups_size_mask)));
1642
- return {}; /* end() */
1643
- }
1644
-
1645
- #if defined(BOOST_MSVC)
1646
- #pragma warning(pop) /* C4800 */
1647
- #endif
1648
-
1649
- template<typename... Args>
1650
- BOOST_FORCEINLINE std::pair<iterator,bool> emplace_impl(Args&&... args)
1651
- {
1652
- const auto &k=key_from(std::forward<Args>(args)...);
1653
- auto hash=hash_for(k);
1654
- auto pos0=position_for(hash);
1655
- auto it=find_impl(k,pos0,hash);
1656
-
1657
- if(it!=end()){
1658
- return {it,false};
1659
- }
1660
- if(BOOST_LIKELY(size_<ml)){
1661
- return {
1662
- unchecked_emplace_at(pos0,hash,std::forward<Args>(args)...),
1663
- true
1664
- };
1665
- }
1666
- else{
1667
- return {
1668
- unchecked_emplace_with_rehash(hash,std::forward<Args>(args)...),
1669
- true
1670
- };
1671
- }
1672
- }
1673
-
1674
- static std::size_t capacity_for(std::size_t n)
1675
- {
1676
- return size_policy::size(size_index_for<group_type,size_policy>(n))*N-1;
1677
- }
1678
-
1679
- template<typename... Args>
1680
- BOOST_NOINLINE iterator
1681
- unchecked_emplace_with_rehash(std::size_t hash,Args&&... args)
1682
- {
1683
- /* Due to the anti-drift mechanism (see recover_slot), new_arrays_ may be
1684
- * of the same size as the old arrays; in the limit, erasing one element at
1685
- * full load and then inserting could bring us back to the same capacity
1686
- * after a costly rehash. To avoid this, we jump to the next capacity level
1687
- * when the number of erased elements is <= 10% of total elements at full
1688
- * load, which is implemented by requesting additional F*size elements,
1689
- * with F = P * 10% / (1 - P * 10%), where P is the probability of an
1690
- * element having caused overflow; P has been measured as ~0.162 under
1691
- * ideal conditions, yielding F ~ 0.0165 ~ 1/61.
1692
- */
1693
- auto new_arrays_=new_arrays(std::size_t(
1694
- std::ceil(static_cast<float>(size_+size_/61+1)/mlf)));
1695
- iterator it;
1696
- BOOST_TRY{
1697
- /* strong exception guarantee -> try insertion before rehash */
1698
- it=nosize_unchecked_emplace_at(
1699
- new_arrays_,position_for(hash,new_arrays_),
1700
- hash,std::forward<Args>(args)...);
1701
- }
1702
- BOOST_CATCH(...){
1703
- delete_arrays(new_arrays_);
1704
- BOOST_RETHROW
1705
- }
1706
- BOOST_CATCH_END
1707
-
1708
- /* new_arrays_ lifetime taken care of by unchecked_rehash */
1709
- unchecked_rehash(new_arrays_);
1710
- ++size_;
1711
- return it;
1712
- }
1713
-
1714
- BOOST_NOINLINE void unchecked_rehash(std::size_t n)
1715
- {
1716
- auto new_arrays_=new_arrays(n);
1717
- unchecked_rehash(new_arrays_);
1718
- }
1719
-
1720
- BOOST_NOINLINE void unchecked_rehash(arrays_type& new_arrays_)
1721
- {
1722
- std::size_t num_destroyed=0;
1723
- BOOST_TRY{
1724
- for_all_elements([&,this](value_type* p){
1725
- nosize_transfer_element(p,new_arrays_,num_destroyed);
1726
- });
1727
- }
1728
- BOOST_CATCH(...){
1729
- if(num_destroyed){
1730
- for(auto pg=arrays.groups;;++pg){
1731
- auto mask=pg->match_occupied();
1732
- while(mask){
1733
- auto nz=unchecked_countr_zero(mask);
1734
- recover_slot(pg,nz);
1735
- if(!(--num_destroyed))goto continue_;
1736
- mask&=mask-1;
1737
- }
1738
- }
1739
- }
1740
- continue_:
1741
- for_all_elements(new_arrays_,[this](value_type* p){
1742
- destroy_element(p);
1743
- });
1744
- delete_arrays(new_arrays_);
1745
- BOOST_RETHROW
1746
- }
1747
- BOOST_CATCH_END
1748
-
1749
- /* either all moved and destroyed or all copied */
1750
- BOOST_ASSERT(num_destroyed==size()||num_destroyed==0);
1751
- if(num_destroyed!=size()){
1752
- for_all_elements([this](value_type* p){
1753
- destroy_element(p);
1754
- });
1755
- }
1756
- delete_arrays(arrays);
1757
- arrays=new_arrays_;
1758
- ml=initial_max_load();
1759
- }
1760
-
1761
- void noshrink_reserve(std::size_t n)
1762
- {
1763
- /* used only on assignment after element clearance */
1764
- BOOST_ASSERT(empty());
1765
-
1766
- if(n){
1767
- n=std::size_t(std::ceil(float(n)/mlf)); /* elements -> slots */
1768
- n=capacity_for(n); /* exact resulting capacity */
1769
-
1770
- if(n>capacity()){
1771
- auto new_arrays_=new_arrays(n);
1772
- delete_arrays(arrays);
1773
- arrays=new_arrays_;
1774
- ml=initial_max_load();
1775
- }
1776
- }
1777
- }
1778
-
1779
- template<typename Value>
1780
- void unchecked_insert(Value&& x)
1781
- {
1782
- auto hash=hash_for(key_from(x));
1783
- unchecked_emplace_at(position_for(hash),hash,std::forward<Value>(x));
1784
- }
1785
-
1786
- void nosize_transfer_element(
1787
- value_type* p,const arrays_type& arrays_,std::size_t& num_destroyed)
1788
- {
1789
- nosize_transfer_element(
1790
- p,hash_for(key_from(*p)),arrays_,num_destroyed,
1791
- std::integral_constant< /* std::move_if_noexcept semantics */
1792
- bool,
1793
- std::is_nothrow_move_constructible<init_type>::value||
1794
- !std::is_copy_constructible<init_type>::value>{});
1795
- }
1796
-
1797
- void nosize_transfer_element(
1798
- value_type* p,std::size_t hash,const arrays_type& arrays_,
1799
- std::size_t& num_destroyed,std::true_type /* ->move */)
1800
- {
1801
- /* Destroy p even if an an exception is thrown in the middle of move
1802
- * construction, which could leave the source half-moved.
1803
- */
1804
- ++num_destroyed;
1805
- destroy_element_on_exit d{this,p};
1806
- (void)d; /* unused var warning */
1807
- nosize_unchecked_emplace_at(
1808
- arrays_,position_for(hash,arrays_),hash,type_policy::move(*p));
1809
- }
1810
-
1811
- void nosize_transfer_element(
1812
- value_type* p,std::size_t hash,const arrays_type& arrays_,
1813
- std::size_t& /*num_destroyed*/,std::false_type /* ->copy */)
1814
- {
1815
- nosize_unchecked_emplace_at(
1816
- arrays_,position_for(hash,arrays_),hash,
1817
- const_cast<const value_type&>(*p));
1818
- }
1819
-
1820
- template<typename... Args>
1821
- iterator unchecked_emplace_at(
1822
- std::size_t pos0,std::size_t hash,Args&&... args)
1823
- {
1824
- auto res=nosize_unchecked_emplace_at(
1825
- arrays,pos0,hash,std::forward<Args>(args)...);
1826
- ++size_;
1827
- return res;
1828
- }
1829
-
1830
- template<typename... Args>
1831
- iterator nosize_unchecked_emplace_at(
1832
- const arrays_type& arrays_,std::size_t pos0,std::size_t hash,
1833
- Args&&... args)
1834
- {
1835
- for(prober pb(pos0);;pb.next(arrays_.groups_size_mask)){
1836
- auto pos=pb.get();
1837
- auto pg=arrays_.groups+pos;
1838
- auto mask=pg->match_available();
1839
- if(BOOST_LIKELY(mask!=0)){
1840
- auto n=unchecked_countr_zero(mask);
1841
- auto p=arrays_.elements+pos*N+n;
1842
- construct_element(p,std::forward<Args>(args)...);
1843
- pg->set(n,hash);
1844
- return {pg,n,p};
1845
- }
1846
- else pg->mark_overflow(hash);
1847
- }
1848
- }
1849
-
1850
- template<typename Predicate>
1851
- std::size_t erase_if_impl(Predicate pr)
1852
- {
1853
- std::size_t s=size();
1854
- for_all_elements([&,this](group_type* pg,unsigned int n,value_type* p){
1855
- if(pr(*p)) erase(iterator{pg,n,p});
1856
- });
1857
- return std::size_t(s-size());
1858
- }
1859
-
1860
- template<typename F>
1861
- void for_all_elements(F f)const
1862
- {
1863
- for_all_elements(arrays,f);
1864
- }
1865
-
1866
- template<typename F>
1867
- static auto for_all_elements(const arrays_type& arrays_,F f)
1868
- ->decltype(f(nullptr),void())
1869
- {
1870
- for_all_elements(
1871
- arrays_,[&](group_type*,unsigned int,value_type* p){return f(p);});
1872
- }
1873
-
1874
- template<typename F>
1875
- static auto for_all_elements(const arrays_type& arrays_,F f)
1876
- ->decltype(f(nullptr,0,nullptr),void())
1877
- {
1878
- auto p=arrays_.elements;
1879
- if(!p){return;}
1880
- for(auto pg=arrays_.groups,last=pg+arrays_.groups_size_mask+1;
1881
- pg!=last;++pg,p+=N){
1882
- auto mask=pg->match_really_occupied();
1883
- while(mask){
1884
- auto n=unchecked_countr_zero(mask);
1885
- f(pg,n,p+n);
1886
- mask&=mask-1;
1887
- }
1888
- }
1889
- }
1890
-
1891
- std::size_t size_;
1892
- arrays_type arrays;
1893
- std::size_t ml;
1894
- };
1895
-
1896
- #if BOOST_WORKAROUND(BOOST_MSVC,<=1900)
1897
- #pragma warning(pop) /* C4702 */
1898
- #endif
1899
-
1900
- #if defined(BOOST_MSVC)
1901
- #pragma warning(pop) /* C4714 */
1902
- #endif
1903
-
1904
- #if defined(BOOST_GCC)
1905
- #pragma GCC diagnostic pop /* ignored "-Wshadow" */
1906
- #endif
1907
-
1908
- } /* namespace foa */
1909
- } /* namespace detail */
1910
- } /* namespace unordered */
1911
- } /* namespace boost */
1912
-
1913
- #undef BOOST_UNORDERED_ASSUME
1914
- #undef BOOST_UNORDERED_HAS_BUILTIN
1915
- #ifdef BOOST_UNORDERED_LITTLE_ENDIAN_NEON
1916
- #undef BOOST_UNORDERED_LITTLE_ENDIAN_NEON
1917
- #endif
1918
- #ifdef BOOST_UNORDERED_SSE2
1919
- #undef BOOST_UNORDERED_SSE2
1920
- #endif
1921
- #endif