passenger 6.0.19 → 6.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1293) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +65 -3
  3. data/CONTRIBUTORS +2 -0
  4. data/README.md +2 -2
  5. data/bin/passenger-install-nginx-module +4 -4
  6. data/build/integration_tests.rb +2 -1
  7. data/build/support/cxx_dependency_map.rb +155 -54
  8. data/dev/copy_boost_headers +21 -7
  9. data/dev/nginx_version_sha256 +72 -0
  10. data/package.json +15 -15
  11. data/src/agent/AgentMain.cpp +2 -8
  12. data/src/agent/Core/AdminPanelConnector.h +2 -3
  13. data/src/agent/Core/ApiServer.h +1 -1
  14. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +8 -1
  15. data/src/agent/Core/Config.h +6 -3
  16. data/src/agent/Core/Controller/AppResponse.h +0 -1
  17. data/src/agent/Core/Controller/Config.h +2 -2
  18. data/src/agent/Core/Controller/SendRequest.cpp +2 -2
  19. data/src/agent/Core/CoreMain.cpp +1 -0
  20. data/src/agent/Core/ResponseCache.h +3 -2
  21. data/src/agent/Core/SecurityUpdateChecker.h +1 -1
  22. data/src/agent/Core/SpawningKit/Handshake/Perform.h +4 -4
  23. data/src/agent/Core/SpawningKit/UserSwitchingRules.h +2 -2
  24. data/src/agent/ExecHelper/ExecHelperMain.cpp +10 -12
  25. data/src/agent/FileReadHelper/FileReadHelperMain.cpp +7 -10
  26. data/src/agent/MainFunctions.h +38 -0
  27. data/src/agent/Shared/ApiServerUtils.h +3 -2
  28. data/src/agent/Shared/Fundamentals/Initialization.cpp +1 -1
  29. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +2 -3
  30. data/src/agent/SystemMetrics/SystemMetricsMain.cpp +1 -0
  31. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +6 -4
  32. data/src/agent/Watchdog/ApiServer.h +1 -1
  33. data/src/agent/Watchdog/Config.h +1 -1
  34. data/src/agent/Watchdog/WatchdogMain.cpp +5 -12
  35. data/src/apache2_module/Hooks.cpp +26 -1
  36. data/src/cxx_supportlib/ConfigKit/Common.h +1 -1
  37. data/src/cxx_supportlib/Constants.h +1 -1
  38. data/src/cxx_supportlib/DataStructures/StringKeyTable.h +1 -1
  39. data/src/cxx_supportlib/FileTools/PathManip.cpp +10 -1
  40. data/src/cxx_supportlib/IOTools/IOUtils.cpp +2 -6
  41. data/src/cxx_supportlib/Integrations/LibevJsonUtils.h +3 -3
  42. data/src/cxx_supportlib/JsonTools/CBindings.cpp +0 -2
  43. data/src/cxx_supportlib/JsonTools/JsonUtils.h +4 -4
  44. data/src/cxx_supportlib/LoggingKit/Context.h +16 -21
  45. data/src/cxx_supportlib/LoggingKit/Forward.h +0 -2
  46. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +36 -72
  47. data/src/cxx_supportlib/MemoryKit/mbuf.cpp +12 -4
  48. data/src/cxx_supportlib/MemoryKit/mbuf.h +1 -1
  49. data/src/cxx_supportlib/ProcessManagement/Utils.cpp +1 -1
  50. data/src/cxx_supportlib/ResourceLocator.h +1 -1
  51. data/src/cxx_supportlib/SecurityKit/Crypto.cpp +3 -94
  52. data/src/cxx_supportlib/SecurityKit/Crypto.h +0 -8
  53. data/src/cxx_supportlib/ServerKit/Context.h +6 -0
  54. data/src/cxx_supportlib/ServerKit/Errors.h +3 -2
  55. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +99 -64
  56. data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +4 -1
  57. data/src/cxx_supportlib/ServerKit/HttpRequest.h +2 -2
  58. data/src/cxx_supportlib/ServerKit/HttpServer.h +3 -2
  59. data/src/cxx_supportlib/ServerKit/llerrors.h +84 -0
  60. data/src/cxx_supportlib/ServerKit/llhttp.c +10168 -0
  61. data/src/cxx_supportlib/ServerKit/llhttp.h +903 -0
  62. data/src/cxx_supportlib/ServerKit/llhttp_api.c +510 -0
  63. data/src/cxx_supportlib/ServerKit/llhttp_http.c +170 -0
  64. data/src/cxx_supportlib/ServerKit/llversion.h +12 -0
  65. data/src/cxx_supportlib/ServerKit/url_parser.c +574 -0
  66. data/src/cxx_supportlib/ServerKit/url_parser.h +74 -0
  67. data/src/cxx_supportlib/StaticString.h +3 -1
  68. data/src/cxx_supportlib/StrIntTools/DateParsing.h +1 -1
  69. data/src/cxx_supportlib/StrIntTools/StrIntUtils.cpp +12 -3
  70. data/src/cxx_supportlib/StrIntTools/StrIntUtils.h +5 -0
  71. data/src/cxx_supportlib/SystemTools/SystemMetricsCollector.h +2 -2
  72. data/src/cxx_supportlib/SystemTools/UserDatabase.cpp +14 -14
  73. data/src/cxx_supportlib/SystemTools/UserDatabase.h +6 -10
  74. data/src/cxx_supportlib/Utils/AnsiColorConstants.h +11 -9
  75. data/src/cxx_supportlib/Utils.cpp +1 -1
  76. data/src/cxx_supportlib/oxt/implementation.cpp +1 -2
  77. data/src/cxx_supportlib/oxt/system_calls.cpp +1 -1
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_executor.hpp +26 -32
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_handler.hpp +194 -56
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +34 -42
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/append.hpp +10 -23
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +21 -34
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +26 -45
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +26 -43
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +30 -52
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +282 -0
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +178 -863
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/awaitable.hpp +1 -1
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +64 -98
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +17 -22
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_file.hpp +18 -23
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +4 -8
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +30 -42
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +65 -96
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +20 -29
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +36 -48
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +31 -44
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +73 -23
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +34 -45
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +108 -151
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +6 -82
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +6 -51
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +30 -40
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +50 -76
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +13 -15
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +3 -3
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +23 -32
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +20 -29
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +97 -299
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +97 -288
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +90 -288
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +551 -0
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +365 -290
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +29 -39
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +27 -39
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +1 -1
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +33 -49
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +1 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +27 -39
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +1 -1
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +4 -4
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_signal.hpp +25 -85
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_state.hpp +16 -16
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_type.hpp +8 -25
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/co_spawn.hpp +17 -17
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +1 -1
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +60 -272
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +52 -79
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/connect_pipe.hpp +1 -1
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/consign.hpp +11 -24
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +2 -1
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +1 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +37 -34
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +302 -262
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +12 -20
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +2 -10
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +2 -4
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +1 -1
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +5 -13
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_cancellation_state.hpp +21 -20
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +2 -2
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +129 -563
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/blocking_executor_op.hpp +3 -3
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +1 -1
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +3 -7
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +1 -1
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +2 -23
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +1 -1
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +4 -4
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/composed_work.hpp +21 -97
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +1 -1
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +1 -1
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +1 -1
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +155 -963
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +3 -11
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +1 -5
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +2 -24
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +1 -1
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +4 -4
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +1 -1
  163. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +1 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +41 -3
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +40 -3
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +20 -3
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +20 -3
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +3 -5
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +1 -1
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/exception.hpp +2 -13
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_function.hpp +8 -60
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +6 -6
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +1 -1
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +3 -43
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/functional.hpp +1 -12
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +9 -10
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +3 -5
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +41 -104
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +1 -1
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +3 -3
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +9 -15
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +101 -123
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +1 -1
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +1 -1
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -15
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +2 -2
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +13 -4
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +2 -2
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +17 -8
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +1 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +5 -5
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_descriptor_service.ipp +2 -2
  193. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_file_service.ipp +1 -1
  194. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.hpp +1 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.ipp +69 -35
  196. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_socket_service_base.ipp +2 -2
  197. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +2 -2
  198. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +15 -6
  199. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +1 -1
  200. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +1 -1
  201. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +1 -1
  202. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_serial_port_service.ipp +1 -1
  204. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +1 -1
  205. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +1 -1
  206. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +9 -9
  207. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +26 -18
  208. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +3 -3
  209. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/scheduler.ipp +2 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +2 -2
  211. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +12 -4
  212. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +2 -3
  213. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +1 -1
  214. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +57 -4
  215. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +63 -5
  216. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +47 -68
  218. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +1 -1
  219. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +2 -3
  220. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +1 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/thread_context.ipp +1 -1
  222. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +1 -1
  223. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +12 -12
  224. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +1 -1
  225. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_defer.hpp +209 -0
  226. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_dispatch.hpp +195 -0
  227. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_post.hpp +209 -0
  228. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_object_impl.hpp +6 -10
  230. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_at_op.hpp +6 -3
  231. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_op.hpp +6 -3
  232. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_service.hpp +17 -9
  233. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_at_op.hpp +6 -3
  234. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_op.hpp +6 -3
  235. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_file_service.hpp +2 -3
  236. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_null_buffers_op.hpp +5 -4
  237. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_operation.hpp +1 -1
  238. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_service.hpp +4 -3
  239. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_accept_op.hpp +11 -12
  240. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_connect_op.hpp +5 -4
  241. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recv_op.hpp +6 -3
  242. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvfrom_op.hpp +7 -4
  243. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvmsg_op.hpp +6 -3
  244. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_send_op.hpp +6 -3
  245. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_sendto_op.hpp +6 -3
  246. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service.hpp +11 -13
  247. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service_base.hpp +9 -9
  248. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_wait_op.hpp +5 -4
  249. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +7 -49
  250. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +1 -1
  251. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +1 -1
  252. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +20 -3
  253. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/limits.hpp +1 -6
  254. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +1 -1
  255. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +13 -43
  256. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +3 -5
  257. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/non_const_lvalue.hpp +4 -15
  258. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +1 -1
  259. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +1 -1
  260. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +1 -1
  261. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +1 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +1 -1
  263. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +1 -1
  264. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +1 -1
  265. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +3 -3
  266. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +1 -1
  267. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +1 -1
  268. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +1 -1
  269. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +1 -1
  270. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +1 -1
  271. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +1 -1
  273. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +1 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +1 -1
  275. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +1 -1
  276. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +1 -1
  277. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +1 -1
  278. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_serial_port_service.hpp +1 -1
  279. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +1 -1
  280. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +1 -1
  281. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +1 -1
  282. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +1 -1
  283. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +1 -1
  284. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +61 -25
  285. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +37 -4
  286. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +89 -12
  287. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +41 -4
  288. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +40 -4
  289. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +41 -4
  290. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +41 -4
  291. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +41 -4
  292. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +40 -4
  293. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +20 -20
  294. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +135 -38
  295. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +37 -4
  296. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +1 -1
  297. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +1 -1
  298. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +1 -1
  299. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +2 -2
  300. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +4 -13
  301. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +4 -4
  302. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +1 -1
  303. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +4 -4
  304. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +3 -3
  305. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +1 -1
  306. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler.hpp +1 -1
  307. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_operation.hpp +1 -1
  308. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_task.hpp +1 -1
  309. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_thread_info.hpp +1 -1
  310. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +1 -1
  311. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +1 -1
  312. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +1 -1
  313. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +20 -3
  314. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +2 -3
  315. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +1 -1
  316. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +3 -3
  317. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +1 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +1 -1
  319. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +12 -3
  320. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +1 -1
  321. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +1 -1
  322. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +1 -1
  323. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +1 -1
  324. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +11 -1
  325. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/source_location.hpp +1 -1
  326. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +3 -5
  327. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +1 -6
  328. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +1 -6
  329. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +1 -6
  330. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +1 -6
  331. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +1 -6
  332. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +1 -6
  333. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +13 -13
  334. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +1 -1
  335. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +1 -1
  336. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +3 -5
  337. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +1 -1
  338. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +1 -1
  339. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +12 -22
  340. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +1 -1
  341. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +1 -1
  342. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +1 -1
  343. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +1 -1
  344. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +2 -2
  345. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +1 -1
  346. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +1 -1
  347. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +1 -1
  348. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +1 -1
  349. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +104 -90
  350. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/utility.hpp +4 -4
  351. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +3 -3
  352. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +1 -1
  353. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +2 -2
  354. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +20 -34
  355. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +7 -117
  356. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +36 -34
  357. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +1 -1
  358. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +34 -112
  359. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +268 -991
  360. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bad_executor.hpp +3 -4
  361. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +296 -536
  362. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +232 -409
  363. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +20 -73
  364. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +30 -72
  365. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +24 -170
  366. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/bad_executor.ipp +3 -3
  367. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/invocable_archetype.hpp +2 -30
  368. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +240 -398
  369. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +20 -73
  370. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +149 -296
  371. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/prefer_only.hpp +56 -59
  372. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +149 -296
  373. data/src/cxx_supportlib/vendor-modified/boost/asio/execution.hpp +1 -16
  374. data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +1 -25
  375. data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +59 -43
  376. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +56 -61
  377. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/append.hpp +1 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_single.hpp +20 -24
  379. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_tuple.hpp +1 -1
  380. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/awaitable_operators.hpp +7 -7
  381. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +56 -34
  382. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +56 -34
  383. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/cancellation_condition.hpp +25 -28
  384. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel.hpp +3 -3
  385. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_error.hpp +1 -1
  386. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_traits.hpp +15 -15
  387. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +5 -4
  388. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_spawn.hpp +1 -1
  389. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/concurrent_channel.hpp +3 -3
  390. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +1 -1
  391. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro_traits.hpp +1 -1
  392. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/deferred.hpp +1 -1
  393. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_handler.hpp +10 -13
  394. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_message.hpp +27 -20
  395. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_operation.hpp +193 -38
  396. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_payload.hpp +143 -14
  397. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +24 -9
  398. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +77 -17
  399. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +20 -12
  400. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +50 -50
  401. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_completion_handler.hpp +3 -3
  402. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +1 -1
  403. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/has_signature.hpp +1 -1
  404. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +46 -34
  405. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +1 -1
  406. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +33 -96
  407. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/channel_error.ipp +2 -2
  408. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_composed.hpp +62 -20
  409. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +48 -45
  410. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +56 -60
  411. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +18 -4
  412. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_coro.hpp +5 -5
  413. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_promise.hpp +3 -3
  414. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +27 -31
  415. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/prepend.hpp +1 -1
  416. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +1 -1
  417. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +15 -21
  418. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +13 -13
  419. data/src/cxx_supportlib/vendor-modified/boost/asio/file_base.hpp +1 -1
  420. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +2 -6
  421. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +4 -4
  422. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +1 -1
  423. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +1 -1
  424. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +4 -4
  425. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +4 -4
  426. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +4 -4
  427. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +1 -1
  428. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +1 -6
  429. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_completion_executor.ipp +10 -14
  430. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_io_executor.ipp +10 -17
  431. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +37 -100
  432. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +99 -107
  433. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +66 -25
  434. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +55 -178
  435. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +55 -178
  436. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancellation_signal.ipp +1 -1
  437. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +123 -73
  438. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +84 -234
  439. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.hpp +1 -1
  440. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.ipp +1 -1
  441. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +32 -97
  442. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/deferred.hpp +73 -31
  443. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +5 -58
  444. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +4 -4
  445. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +3 -35
  446. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +1 -1
  447. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +60 -43
  448. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +3 -3
  449. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +39 -56
  450. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +2 -1
  451. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/multiple_exceptions.ipp +4 -8
  452. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +36 -98
  453. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +206 -429
  454. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +60 -206
  455. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +456 -970
  456. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +43 -411
  457. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +1 -1
  458. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +1 -1
  459. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +207 -423
  460. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +1 -3
  461. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +2 -2
  462. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +2 -2
  463. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +19 -25
  464. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +32 -109
  465. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +5 -4
  466. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_awaitable.hpp +2 -2
  467. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +79 -425
  468. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +213 -427
  469. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +58 -194
  470. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +91 -120
  471. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +33 -25
  472. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +1 -1
  473. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +1 -1
  474. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +26 -35
  475. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +28 -36
  476. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +13 -19
  477. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +16 -22
  478. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +33 -42
  479. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +13 -18
  480. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +15 -20
  481. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +13 -3
  482. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +26 -35
  483. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +46 -76
  484. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +1 -1
  485. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +4 -8
  486. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +17 -1
  487. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +9 -13
  488. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +17 -17
  489. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +10 -14
  490. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
  491. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +1 -1
  492. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +7 -7
  493. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +1 -1
  494. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +18 -22
  495. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +1 -1
  496. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +9 -13
  497. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +1 -1
  498. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +24 -32
  499. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +1 -1
  500. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +1 -1
  501. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +1 -1
  502. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +3 -3
  503. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +1 -1
  504. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +3 -3
  505. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +1 -1
  506. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +16 -20
  507. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +14 -18
  508. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +1 -1
  509. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +1 -1
  510. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +7 -7
  511. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +7 -7
  512. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +1 -1
  513. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +1 -1
  514. data/src/cxx_supportlib/vendor-modified/boost/asio/is_applicable_property.hpp +6 -6
  515. data/src/cxx_supportlib/vendor-modified/boost/asio/is_contiguous_iterator.hpp +2 -2
  516. data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +1 -1
  517. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +1 -1
  518. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +1 -1
  519. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +2 -6
  520. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +1 -1
  521. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +4 -4
  522. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +1 -1
  523. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +1 -1
  524. data/src/cxx_supportlib/vendor-modified/boost/asio/local/seq_packet_protocol.hpp +86 -0
  525. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +4 -4
  526. data/src/cxx_supportlib/vendor-modified/boost/asio/multiple_exceptions.hpp +3 -9
  527. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +1 -61
  528. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +29 -105
  529. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +21 -29
  530. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +24 -34
  531. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +1 -1
  532. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +1 -1
  533. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +1 -1
  534. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +36 -34
  535. data/src/cxx_supportlib/vendor-modified/boost/asio/prefer.hpp +176 -333
  536. data/src/cxx_supportlib/vendor-modified/boost/asio/prepend.hpp +11 -23
  537. data/src/cxx_supportlib/vendor-modified/boost/asio/query.hpp +57 -70
  538. data/src/cxx_supportlib/vendor-modified/boost/asio/random_access_file.hpp +1 -1
  539. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +136 -168
  540. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +35 -52
  541. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +256 -298
  542. data/src/cxx_supportlib/vendor-modified/boost/asio/readable_pipe.hpp +1 -1
  543. data/src/cxx_supportlib/vendor-modified/boost/asio/recycling_allocator.hpp +15 -15
  544. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +7 -9
  545. data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +35 -47
  546. data/src/cxx_supportlib/vendor-modified/boost/asio/require.hpp +108 -246
  547. data/src/cxx_supportlib/vendor-modified/boost/asio/require_concept.hpp +70 -79
  548. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +1 -1
  549. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +1 -1
  550. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +1 -1
  551. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_base.hpp +173 -0
  552. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +1 -1
  553. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +127 -161
  554. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +1 -3
  555. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +24 -24
  556. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +3 -3
  557. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +3 -7
  558. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +3 -3
  559. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +3 -7
  560. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
  561. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +16 -75
  562. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +1 -1
  563. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +1 -1
  564. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +1 -1
  565. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +3 -3
  566. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +4 -4
  567. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +15 -19
  568. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +2 -2
  569. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +3 -3
  570. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +1 -1
  571. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/host_name_verification.hpp +1 -1
  572. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +1 -1
  573. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +2 -4
  574. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +3 -3
  575. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/host_name_verification.ipp +1 -1
  576. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +1 -1
  577. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +1 -1
  578. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +1 -1
  579. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +51 -82
  580. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +1 -1
  581. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +1 -1
  582. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +1 -1
  583. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +1 -1
  584. data/src/cxx_supportlib/vendor-modified/boost/asio/static_thread_pool.hpp +1 -1
  585. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +1 -6
  586. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +91 -118
  587. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_file.hpp +1 -1
  588. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +1 -1
  589. data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +3 -3
  590. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +62 -62
  591. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +1 -6
  592. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +35 -48
  593. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +91 -273
  594. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +1 -1
  595. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/equality_comparable.hpp +14 -18
  596. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_member.hpp +16 -20
  597. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_free.hpp +16 -20
  598. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_member.hpp +16 -20
  599. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_free.hpp +16 -20
  600. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_member.hpp +16 -20
  601. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_static_constexpr_member.hpp +15 -22
  602. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_free.hpp +16 -20
  603. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_member.hpp +16 -20
  604. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_free.hpp +16 -20
  605. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_member.hpp +16 -20
  606. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_query.hpp +20 -26
  607. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require.hpp +22 -30
  608. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require_concept.hpp +22 -30
  609. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +1 -1
  610. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +1 -1
  611. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +1 -1
  612. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +1 -1
  613. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +1 -1
  614. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +6 -24
  615. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +1 -1
  616. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +1 -1
  617. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +1 -1
  618. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +15 -21
  619. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +8 -12
  620. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +2 -6
  621. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +2 -2
  622. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +1 -1
  623. data/src/cxx_supportlib/vendor-modified/boost/asio/writable_pipe.hpp +1 -1
  624. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +122 -146
  625. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +34 -50
  626. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +1 -1
  627. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -28
  628. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +8 -3
  629. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +2 -16
  630. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +2 -3
  631. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +5 -3
  632. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +6 -4
  633. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +0 -49
  634. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +107 -40
  635. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +32 -5
  636. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +12 -13
  637. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +7 -8
  638. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +26 -27
  639. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/float_sizes.hpp +122 -35
  640. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +2 -3
  641. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +7 -0
  642. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +42 -0
  643. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +1 -2
  644. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +3 -4
  645. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +2 -3
  646. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +2 -3
  647. data/src/cxx_supportlib/vendor-modified/boost/bind/apply.hpp +2 -60
  648. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +230 -1740
  649. data/src/cxx_supportlib/vendor-modified/boost/bind/{bind_cc.hpp → detail/bind_cc.hpp} +20 -20
  650. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf2_cc.hpp +210 -0
  651. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf_cc.hpp +405 -0
  652. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/integer_sequence.hpp +111 -0
  653. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/result_traits.hpp +1 -0
  654. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/tuple_for_each.hpp +64 -0
  655. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +140 -290
  656. data/src/cxx_supportlib/vendor-modified/boost/bind/placeholders.hpp +3 -16
  657. data/src/cxx_supportlib/vendor-modified/boost/bind/protect.hpp +0 -279
  658. data/src/cxx_supportlib/vendor-modified/boost/bind/std_placeholders.hpp +0 -6
  659. data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +1 -0
  660. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/is_evenly_divisible_by.hpp +1 -7
  661. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/requires_cxx11.hpp +23 -0
  662. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +2 -1
  663. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_get.hpp +1 -1
  664. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +1 -0
  665. data/src/cxx_supportlib/vendor-modified/boost/chrono/io_v1/chrono_io.hpp +3 -3
  666. data/src/cxx_supportlib/vendor-modified/boost/chrono/system_clocks.hpp +1 -0
  667. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +1 -1
  668. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +4 -1
  669. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +1 -1
  670. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +4 -1
  671. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +1 -1
  672. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +41 -0
  673. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +4 -0
  674. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +8 -0
  675. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +8 -2
  676. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +5 -0
  677. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +4 -1
  678. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +1 -0
  679. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +4 -0
  680. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +4 -0
  681. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +4 -2
  682. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +5 -0
  683. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +1 -0
  684. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +4 -0
  685. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +4 -0
  686. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +3 -0
  687. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +4 -0
  688. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +4 -0
  689. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +4 -0
  690. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +13 -3
  691. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +8 -0
  692. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +2 -0
  693. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +16 -1
  694. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +56 -0
  695. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +32 -0
  696. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +16 -1
  697. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +6 -7
  698. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +18 -19
  699. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +27 -29
  700. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +0 -29
  701. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +144 -145
  702. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +4 -5
  703. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +48 -49
  704. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +6 -6
  705. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +14 -15
  706. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +22 -22
  707. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +1 -0
  708. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +71 -69
  709. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +48 -48
  710. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +38 -40
  711. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +165 -153
  712. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +162 -163
  713. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +1 -2
  714. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +48 -12
  715. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +6 -8
  716. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +44 -46
  717. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +10 -11
  718. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +18 -19
  719. data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +0 -8
  720. data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +28 -28
  721. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +83 -84
  722. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +3 -3
  723. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +77 -1
  724. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +81 -85
  725. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +231 -233
  726. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +86 -86
  727. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +33 -33
  728. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +107 -110
  729. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +9 -11
  730. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +10 -11
  731. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +29 -17
  732. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +2 -2
  733. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
  734. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +1 -0
  735. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +1 -1
  736. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +80 -82
  737. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +81 -81
  738. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +24 -26
  739. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +147 -122
  740. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +109 -110
  741. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +32 -32
  742. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +165 -194
  743. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +4 -5
  744. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +263 -199
  745. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_integral.hpp +146 -0
  746. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_mix.hpp +6 -6
  747. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_range.hpp +296 -61
  748. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple_like.hpp +62 -0
  749. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/mulx.hpp +79 -0
  750. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +38 -124
  751. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +1 -0
  752. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_contiguous_range.hpp +27 -20
  753. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_described_class.hpp +4 -5
  754. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_range.hpp +8 -40
  755. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_tuple_like.hpp +36 -0
  756. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_unordered_range.hpp +6 -7
  757. data/src/cxx_supportlib/vendor-modified/boost/core/alignof.hpp +57 -0
  758. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_access.hpp +22 -8
  759. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +362 -31
  760. data/src/cxx_supportlib/vendor-modified/boost/core/checked_delete.hpp +29 -3
  761. data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +46 -0
  762. data/src/cxx_supportlib/vendor-modified/boost/core/detail/is_same.hpp +39 -0
  763. data/src/cxx_supportlib/vendor-modified/boost/core/detail/lwt_unattended.hpp +66 -0
  764. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_pause.hpp +71 -0
  765. data/src/cxx_supportlib/vendor-modified/boost/{smart_ptr → core}/detail/sp_thread_sleep.hpp +39 -21
  766. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_yield.hpp +100 -0
  767. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +7 -7
  768. data/src/cxx_supportlib/vendor-modified/boost/core/fclose_deleter.hpp +7 -0
  769. data/src/cxx_supportlib/vendor-modified/boost/core/functor.hpp +41 -0
  770. data/src/cxx_supportlib/vendor-modified/boost/core/identity.hpp +61 -0
  771. data/src/cxx_supportlib/vendor-modified/boost/core/invoke_swap.hpp +93 -0
  772. data/src/cxx_supportlib/vendor-modified/boost/core/is_same.hpp +10 -15
  773. data/src/cxx_supportlib/vendor-modified/boost/core/launder.hpp +69 -0
  774. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +33 -36
  775. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +3 -3
  776. data/src/cxx_supportlib/vendor-modified/boost/core/make_span.hpp +59 -0
  777. data/src/cxx_supportlib/vendor-modified/boost/core/max_align.hpp +82 -0
  778. data/src/cxx_supportlib/vendor-modified/boost/core/memory_resource.hpp +108 -0
  779. data/src/cxx_supportlib/vendor-modified/boost/core/null_deleter.hpp +7 -0
  780. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +23 -16
  781. data/src/cxx_supportlib/vendor-modified/boost/core/serialization.hpp +131 -0
  782. data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +31 -0
  783. data/src/cxx_supportlib/vendor-modified/boost/core/snprintf.hpp +173 -0
  784. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +17 -17
  785. data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +10 -40
  786. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +29 -5
  787. data/src/cxx_supportlib/vendor-modified/boost/core/yield_primitives.hpp +12 -0
  788. data/src/cxx_supportlib/vendor-modified/boost/describe/members.hpp +2 -0
  789. data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +3 -6
  790. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +6 -97
  791. data/src/cxx_supportlib/vendor-modified/boost/exception/current_exception_cast.hpp +1 -1
  792. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/clone_current_exception.hpp +1 -1
  793. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +1 -1
  794. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +22 -10
  795. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/is_output_streamable.hpp +1 -1
  796. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/object_hex_dump.hpp +1 -1
  797. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +24 -0
  798. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +1 -1
  799. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +4 -4
  800. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +1 -1
  801. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +1 -1
  802. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +1 -1
  803. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string.hpp +2 -2
  804. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string_stub.hpp +1 -1
  805. data/src/cxx_supportlib/vendor-modified/boost/function/function0.hpp +1 -3
  806. data/src/cxx_supportlib/vendor-modified/boost/function/function1.hpp +1 -3
  807. data/src/cxx_supportlib/vendor-modified/boost/function/function10.hpp +1 -3
  808. data/src/cxx_supportlib/vendor-modified/boost/function/function2.hpp +1 -3
  809. data/src/cxx_supportlib/vendor-modified/boost/function/function3.hpp +1 -3
  810. data/src/cxx_supportlib/vendor-modified/boost/function/function4.hpp +1 -3
  811. data/src/cxx_supportlib/vendor-modified/boost/function/function5.hpp +1 -3
  812. data/src/cxx_supportlib/vendor-modified/boost/function/function6.hpp +1 -3
  813. data/src/cxx_supportlib/vendor-modified/boost/function/function7.hpp +1 -3
  814. data/src/cxx_supportlib/vendor-modified/boost/function/function8.hpp +1 -3
  815. data/src/cxx_supportlib/vendor-modified/boost/function/function9.hpp +1 -3
  816. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +49 -198
  817. data/src/cxx_supportlib/vendor-modified/boost/function/function_fwd.hpp +36 -41
  818. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +277 -420
  819. data/src/cxx_supportlib/vendor-modified/boost/function/function_typeof.hpp +1 -31
  820. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +5 -61
  821. data/src/cxx_supportlib/vendor-modified/boost/integer/extended_euclidean.hpp +2 -2
  822. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +24 -25
  823. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +12 -13
  824. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +1 -1
  825. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +24 -25
  826. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +65 -66
  827. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +20 -20
  828. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +7 -7
  829. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +10 -10
  830. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +3 -3
  831. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/array_initializer.hpp +5 -5
  832. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +10 -10
  833. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +3 -3
  834. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +24 -24
  835. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +1 -1
  836. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +1 -1
  837. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +14 -15
  838. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +277 -0
  839. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_combine.hpp +11 -49
  840. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_integral.hpp +119 -0
  841. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_mix.hpp +130 -0
  842. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +41 -41
  843. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +14 -20
  844. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +6 -6
  845. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +12 -12
  846. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +7 -7
  847. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +19 -19
  848. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +6 -0
  849. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +3 -3
  850. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +6 -17
  851. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +1 -1
  852. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +14 -14
  853. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +20 -20
  854. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +22 -22
  855. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +21 -21
  856. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +28 -28
  857. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +58 -1
  858. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +268 -239
  859. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +9 -9
  860. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +57 -58
  861. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +3 -3
  862. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
  863. data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +3 -3
  864. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +12 -13
  865. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +24 -25
  866. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +24 -25
  867. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +14 -15
  868. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +1 -1
  869. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +61 -62
  870. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +24 -25
  871. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +12 -13
  872. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +18 -19
  873. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +4 -0
  874. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +36 -37
  875. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +37 -34
  876. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +11 -11
  877. data/src/cxx_supportlib/vendor-modified/boost/io/ios_state.hpp +2 -2
  878. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +10 -11
  879. data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +148 -0
  880. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +2 -2
  881. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +7 -13
  882. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +59 -0
  883. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +113 -131
  884. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +612 -645
  885. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +85 -79
  886. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +25 -32
  887. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +22 -29
  888. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +73 -0
  889. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
  890. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +21 -16
  891. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +7 -9
  892. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +22 -161
  893. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +9 -12
  894. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/chrono.cpp +4 -2
  895. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/process_cpu_clocks.cpp +3 -1
  896. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/thread_clock.cpp +3 -1
  897. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +10 -18
  898. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +13 -14
  899. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +24 -14
  900. data/src/cxx_supportlib/vendor-modified/boost/limits.hpp +12 -12
  901. data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +5 -5
  902. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +5 -3
  903. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +20 -19
  904. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +41 -56
  905. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +11 -10
  906. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/heap_sort.hpp +3 -2
  907. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +32 -34
  908. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +4 -5
  909. data/src/cxx_supportlib/vendor-modified/boost/move/algo/predicate.hpp +11 -11
  910. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +0 -1
  911. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +3 -3
  912. data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +5 -6
  913. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +3 -3
  914. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +2 -2
  915. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
  916. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +65 -24
  917. data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +28 -28
  918. data/src/cxx_supportlib/vendor-modified/boost/move/detail/to_raw_pointer.hpp +1 -1
  919. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +72 -23
  920. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +81 -1
  921. data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +22 -22
  922. data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +65 -66
  923. data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +2 -2
  924. data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +8 -6
  925. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +97 -17
  926. data/src/cxx_supportlib/vendor-modified/boost/mp11/bind.hpp +9 -0
  927. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/config.hpp +11 -0
  928. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_append.hpp +140 -4
  929. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_defer.hpp +119 -0
  930. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_fold.hpp +108 -4
  931. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_front.hpp +13 -1
  932. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_value_list.hpp +41 -0
  933. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list_v.hpp +27 -0
  934. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +1 -1
  935. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_plus.hpp +4 -1
  936. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_rename.hpp +18 -5
  937. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_value.hpp +25 -0
  938. data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +9 -0
  939. data/src/cxx_supportlib/vendor-modified/boost/mp11/integral.hpp +10 -0
  940. data/src/cxx_supportlib/vendor-modified/boost/mp11/list.hpp +180 -3
  941. data/src/cxx_supportlib/vendor-modified/boost/mp11/utility.hpp +2 -96
  942. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  943. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +3 -3
  944. data/src/cxx_supportlib/vendor-modified/boost/next_prior.hpp +3 -44
  945. data/src/cxx_supportlib/vendor-modified/boost/nondet_random.hpp +22 -0
  946. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +8 -0
  947. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +5 -4
  948. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +3 -3
  949. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +2 -2
  950. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +1 -1
  951. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +6 -6
  952. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +3 -3
  953. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +4 -4
  954. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp +2 -2
  955. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/unmatched_argument.hpp +1 -1
  956. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/overloads.hpp +1 -1
  957. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tag.hpp +4 -4
  958. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/unwrap_cv_reference.hpp +1 -1
  959. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/void.hpp +1 -1
  960. data/src/cxx_supportlib/vendor-modified/boost/parameter/binding.hpp +3 -3
  961. data/src/cxx_supportlib/vendor-modified/boost/parameter/match.hpp +1 -1
  962. data/src/cxx_supportlib/vendor-modified/boost/parameter/template_keyword.hpp +1 -1
  963. data/src/cxx_supportlib/vendor-modified/boost/parameter/value_type.hpp +3 -3
  964. data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +1 -1
  965. data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +13 -0
  966. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/msvc.h +53 -0
  967. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std.h +1 -0
  968. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
  969. data/src/cxx_supportlib/vendor-modified/boost/predef/os/vms.h +1 -1
  970. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  971. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +2 -0
  972. data/src/cxx_supportlib/vendor-modified/boost/random/inversive_congruential.hpp +1 -1
  973. data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +203 -0
  974. data/src/cxx_supportlib/vendor-modified/boost/random/subtract_with_carry.hpp +14 -14
  975. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real_distribution.hpp +2 -2
  976. data/src/cxx_supportlib/vendor-modified/boost/random.hpp +1 -0
  977. data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +4 -82
  978. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/gcd_lcm.hpp +53 -0
  979. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_evenly_divisible_by.hpp +32 -0
  980. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_ratio.hpp +28 -0
  981. data/src/cxx_supportlib/vendor-modified/boost/ratio/include.hpp +1 -3
  982. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio.hpp +5 -249
  983. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_fwd.hpp +30 -56
  984. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_io.hpp +0 -533
  985. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -7
  986. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +9 -9
  987. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +7 -7
  988. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +1 -0
  989. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +23 -0
  990. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +1 -1
  991. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +4 -6
  992. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +1 -0
  993. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +2 -11
  994. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared.hpp +1 -0
  995. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +1 -0
  996. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +1 -0
  997. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_unique.hpp +70 -0
  998. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +1 -0
  999. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +1 -0
  1000. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +2 -0
  1001. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +1 -11
  1002. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +1 -0
  1003. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +4 -8
  1004. data/src/cxx_supportlib/vendor-modified/boost/system/detail/enable_if.hpp +3 -12
  1005. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +14 -50
  1006. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +16 -55
  1007. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +62 -124
  1008. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +29 -52
  1009. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +7 -7
  1010. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +4 -4
  1011. data/src/cxx_supportlib/vendor-modified/boost/system/detail/interop_category.hpp +7 -7
  1012. data/src/cxx_supportlib/vendor-modified/boost/system/detail/is_same.hpp +3 -13
  1013. data/src/cxx_supportlib/vendor-modified/boost/system/detail/mutex.hpp +128 -0
  1014. data/src/cxx_supportlib/vendor-modified/boost/system/detail/snprintf.hpp +1 -46
  1015. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category.hpp +14 -13
  1016. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category_impl.hpp +2 -2
  1017. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category.hpp +7 -7
  1018. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_impl.hpp +3 -3
  1019. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_message.hpp +2 -2
  1020. data/src/cxx_supportlib/vendor-modified/boost/system/errc.hpp +3 -3
  1021. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +1 -1
  1022. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/deque.hpp +1 -24
  1023. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/functional.hpp +1 -14
  1024. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/list.hpp +1 -14
  1025. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_arg.hpp +2 -12
  1026. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_traits.hpp +0 -11
  1027. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/config.hpp +0 -2
  1028. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/default_delete.hpp +0 -16
  1029. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/pointer_traits.hpp +0 -11
  1030. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/scoped_allocator.hpp +0 -11
  1031. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/shared_ptr.hpp +0 -19
  1032. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/unique_ptr.hpp +4 -6
  1033. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/queue.hpp +2 -26
  1034. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/tuple.hpp +1 -18
  1035. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/vector.hpp +1 -14
  1036. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/invoke.hpp +11 -4
  1037. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_to_unsigned.hpp +55 -0
  1038. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_trim.hpp +29 -0
  1039. data/src/cxx_supportlib/vendor-modified/boost/thread/externally_locked.hpp +5 -5
  1040. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +0 -1
  1041. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_any.hpp +3 -2
  1042. data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +4 -4
  1043. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +2 -2
  1044. data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +3 -3
  1045. data/src/cxx_supportlib/vendor-modified/boost/tuple/tuple.hpp +1 -1
  1046. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_swappable_cxx_11.hpp +70 -0
  1047. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_floating_point.hpp +22 -0
  1048. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_integral.hpp +3 -0
  1049. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_swappable.hpp +4 -24
  1050. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_swappable.hpp +92 -0
  1051. data/src/cxx_supportlib/vendor-modified/boost/typeof/decltype.hpp +2 -3
  1052. data/src/cxx_supportlib/vendor-modified/boost/typeof/incr_registration_group.hpp +1 -10
  1053. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +5 -6
  1054. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/bitset.hpp +2 -4
  1055. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/complex.hpp +2 -4
  1056. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/deque.hpp +2 -5
  1057. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/fstream.hpp +2 -15
  1058. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/functional.hpp +4 -51
  1059. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iostream.hpp +2 -6
  1060. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/istream.hpp +2 -9
  1061. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iterator.hpp +2 -46
  1062. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/list.hpp +2 -5
  1063. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/locale.hpp +2 -29
  1064. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/map.hpp +2 -9
  1065. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/memory.hpp +4 -9
  1066. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/ostream.hpp +2 -6
  1067. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/queue.hpp +2 -5
  1068. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/set.hpp +2 -9
  1069. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/sstream.hpp +2 -19
  1070. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/stack.hpp +2 -5
  1071. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/streambuf.hpp +2 -5
  1072. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/string.hpp +2 -12
  1073. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/utility.hpp +2 -4
  1074. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/valarray.hpp +2 -10
  1075. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/vector.hpp +2 -5
  1076. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof.hpp +8 -202
  1077. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +860 -0
  1078. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +51 -0
  1079. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +716 -0
  1080. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +52 -0
  1081. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocator_constructed.hpp +59 -0
  1082. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/archive_constructed.hpp +71 -0
  1083. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/bad_archive_exception.hpp +27 -0
  1084. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/concurrent_static_asserts.hpp +105 -0
  1085. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +120 -85
  1086. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +1764 -0
  1087. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2271 -0
  1088. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/element_type.hpp +64 -0
  1089. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_map_types.hpp +86 -0
  1090. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_set_types.hpp +44 -0
  1091. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/ignore_wshadow.hpp +35 -0
  1092. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_handle.hpp +204 -0
  1093. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_map_types.hpp +139 -0
  1094. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_set_types.hpp +92 -0
  1095. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/reentrancy_check.hpp +138 -0
  1096. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/restore_wshadow.hpp +11 -0
  1097. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/rw_spinlock.hpp +179 -0
  1098. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +651 -0
  1099. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/tuple_rotate_right.hpp +52 -0
  1100. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +356 -1118
  1101. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +2 -0
  1102. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/mulx.hpp +129 -0
  1103. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/narrow_cast.hpp +44 -0
  1104. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/opt_storage.hpp +30 -0
  1105. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +96 -150
  1106. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialization_version.hpp +74 -0
  1107. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_container.hpp +204 -0
  1108. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_fca_container.hpp +156 -0
  1109. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_tracked_address.hpp +104 -0
  1110. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/static_assert.hpp +16 -0
  1111. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/throw_exception.hpp +30 -0
  1112. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +136 -19
  1113. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +4 -5
  1114. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +171 -103
  1115. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +1 -6
  1116. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +70 -46
  1117. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +1 -6
  1118. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +406 -899
  1119. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +7 -13
  1120. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +895 -0
  1121. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +44 -0
  1122. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +699 -0
  1123. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +44 -0
  1124. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +253 -618
  1125. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +8 -14
  1126. data/src/cxx_supportlib/vendor-modified/boost/utility/swap.hpp +4 -1
  1127. data/src/cxx_supportlib/vendor-modified/boost/utility/value_init.hpp +8 -8
  1128. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  1129. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +2 -9
  1130. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/frame.hpp +0 -11
  1131. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi13.hpp +14 -20
  1132. data/src/helper-scripts/wsgi-loader.py +2 -2
  1133. data/src/nginx_module/ConfigGeneral/ManifestGeneration.c +2 -2
  1134. data/src/ruby_supportlib/phusion_passenger/common_library.rb +16 -5
  1135. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +1 -1
  1136. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +3 -1
  1137. data/src/ruby_supportlib/phusion_passenger/native_support.rb +10 -7
  1138. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +8 -10
  1139. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +14 -0
  1140. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +4 -1
  1141. data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/libs.rb +6 -6
  1142. data/src/ruby_supportlib/phusion_passenger/platform_info/pcre.rb +11 -12
  1143. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/app.rb +1 -1
  1144. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +4 -0
  1145. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/lldb_controller.rb +5 -1
  1146. data/src/ruby_supportlib/phusion_passenger.rb +8 -8
  1147. metadata +109 -150
  1148. data/src/cxx_supportlib/ServerKit/http_parser.cpp +0 -2265
  1149. data/src/cxx_supportlib/ServerKit/http_parser.h +0 -330
  1150. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +0 -456
  1151. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bulk_executor_op.hpp +0 -90
  1152. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +0 -93
  1153. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +0 -70
  1154. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +0 -67
  1155. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +0 -101
  1156. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +0 -80
  1157. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +0 -64
  1158. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +0 -216
  1159. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +0 -64
  1160. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +0 -294
  1161. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +0 -406
  1162. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +0 -1254
  1163. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +0 -498
  1164. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_invocable.hpp +0 -154
  1165. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +0 -111
  1166. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_receiver.hpp +0 -130
  1167. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/bulk_sender.hpp +0 -263
  1168. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/submit_receiver.hpp +0 -235
  1169. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/void_receiver.hpp +0 -92
  1170. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +0 -296
  1171. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/receiver_invocation_error.ipp +0 -38
  1172. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +0 -101
  1173. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +0 -287
  1174. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver_invocation_error.hpp +0 -50
  1175. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +0 -296
  1176. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +0 -93
  1177. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +0 -318
  1178. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +0 -259
  1179. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +0 -259
  1180. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +0 -492
  1181. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +0 -256
  1182. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +0 -459
  1183. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +0 -106
  1184. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +0 -113
  1185. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +0 -300
  1186. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +0 -275
  1187. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +0 -64
  1188. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +0 -300
  1189. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_free.hpp +0 -116
  1190. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_member.hpp +0 -116
  1191. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_free.hpp +0 -114
  1192. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_member.hpp +0 -114
  1193. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_free.hpp +0 -110
  1194. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_free.hpp +0 -110
  1195. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_member.hpp +0 -110
  1196. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_free.hpp +0 -110
  1197. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_member.hpp +0 -110
  1198. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_free.hpp +0 -114
  1199. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_member.hpp +0 -114
  1200. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_free.hpp +0 -236
  1201. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_member.hpp +0 -236
  1202. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_free.hpp +0 -110
  1203. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_member.hpp +0 -110
  1204. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_free.hpp +0 -114
  1205. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_member.hpp +0 -114
  1206. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +0 -495
  1207. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +0 -462
  1208. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +0 -581
  1209. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +0 -563
  1210. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +0 -40
  1211. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +0 -41
  1212. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +0 -147
  1213. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +0 -39
  1214. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +0 -39
  1215. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_windows.hpp +0 -201
  1216. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_windows.hpp +0 -67
  1217. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_windows.hpp +0 -57
  1218. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_windows.hpp +0 -179
  1219. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf2_cc.hpp +0 -228
  1220. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf_cc.hpp +0 -441
  1221. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_template.hpp +0 -345
  1222. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_cc.hpp +0 -103
  1223. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_template.hpp +0 -1047
  1224. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_vw.hpp +0 -130
  1225. data/src/cxx_supportlib/vendor-modified/boost/bind/storage.hpp +0 -475
  1226. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +0 -71
  1227. data/src/cxx_supportlib/vendor-modified/boost/container/detail/hash_table.hpp +0 -1278
  1228. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple.hpp +0 -133
  1229. data/src/cxx_supportlib/vendor-modified/boost/detail/atomic_count.hpp +0 -21
  1230. data/src/cxx_supportlib/vendor-modified/boost/function/detail/function_iterate.hpp +0 -16
  1231. data/src/cxx_supportlib/vendor-modified/boost/function/detail/gen_maybe_include.pl +0 -39
  1232. data/src/cxx_supportlib/vendor-modified/boost/function/detail/maybe_include.hpp +0 -369
  1233. data/src/cxx_supportlib/vendor-modified/boost/function/detail/prologue.hpp +0 -26
  1234. data/src/cxx_supportlib/vendor-modified/boost/function/gen_function_N.pl +0 -26
  1235. data/src/cxx_supportlib/vendor-modified/boost/functional/hash_fwd.hpp +0 -6
  1236. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/abs.hpp +0 -89
  1237. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/gcd.hpp +0 -124
  1238. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/lcm.hpp +0 -126
  1239. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/sign.hpp +0 -89
  1240. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/overflow_helpers.hpp +0 -367
  1241. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/ratio_io.hpp +0 -1342
  1242. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/abs.hpp +0 -30
  1243. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/arithmetic.hpp +0 -22
  1244. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/comparison.hpp +0 -19
  1245. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/divides.hpp +0 -30
  1246. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/equal_to.hpp +0 -30
  1247. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/gcd.hpp +0 -30
  1248. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater.hpp +0 -30
  1249. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater_equal.hpp +0 -30
  1250. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/lcm.hpp +0 -30
  1251. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less.hpp +0 -30
  1252. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less_equal.hpp +0 -30
  1253. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/minus.hpp +0 -30
  1254. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/negate.hpp +0 -30
  1255. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/not_equal_to.hpp +0 -30
  1256. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/numeric_cast.hpp +0 -31
  1257. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/plus.hpp +0 -30
  1258. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_c_tag.hpp +0 -25
  1259. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_constant.hpp +0 -15
  1260. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/sign.hpp +0 -30
  1261. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/times.hpp +0 -30
  1262. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_thread_pause.hpp +0 -51
  1263. data/src/cxx_supportlib/vendor-modified/boost/swap.hpp +0 -17
  1264. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +0 -278
  1265. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +0 -297
  1266. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +0 -265
  1267. data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +0 -100
  1268. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -58
  1269. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +0 -34
  1270. data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +0 -118
  1271. data/src/cxx_supportlib/vendor-modified/boost/typeof/integral_template_param.hpp +0 -80
  1272. data/src/cxx_supportlib/vendor-modified/boost/typeof/message.hpp +0 -8
  1273. data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +0 -121
  1274. data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +0 -60
  1275. data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +0 -38
  1276. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions.hpp +0 -50
  1277. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +0 -135
  1278. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +0 -61
  1279. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +0 -32
  1280. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +0 -160
  1281. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +0 -149
  1282. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +0 -27
  1283. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_template_param.hpp +0 -37
  1284. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +0 -187
  1285. data/src/cxx_supportlib/vendor-modified/boost/typeof/unsupported.hpp +0 -29
  1286. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +0 -166
  1287. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +0 -321
  1288. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +0 -471
  1289. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +0 -621
  1290. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +0 -171
  1291. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa.hpp +0 -1921
  1292. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +0 -64
  1293. /data/dev/{webpacketpp.patch → websocketpp.patch} +0 -0
@@ -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