passenger 6.0.2 → 6.0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2529) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +356 -19
  3. data/CONTRIBUTING.md +1 -1
  4. data/CONTRIBUTORS +17 -0
  5. data/README.md +2 -9
  6. data/bin/passenger-install-nginx-module +2 -1
  7. data/bin/passenger-memory-stats +65 -12
  8. data/bin/passenger-status +29 -4
  9. data/build/common_library.rb +6 -5
  10. data/build/packaging.rb +4 -2
  11. data/build/support/cxx_dependency_map.rb +1 -0
  12. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +56 -3
  13. data/build/test_basics.rb +2 -2
  14. data/dev/copy_boost_headers +50 -17
  15. data/dev/index_cxx_dependencies.rb +1 -1
  16. data/dev/webpacketpp.patch +39 -0
  17. data/doc/templates/markdown.html.erb +2 -6
  18. data/package.json +20 -18
  19. data/passenger.gemspec +9 -1
  20. data/resources/mime.types +1 -0
  21. data/resources/release.txt +1 -0
  22. data/resources/templates/config/installation_utils/user_support_binaries_dir_not_writable.txt.erb +1 -0
  23. data/resources/templates/error_renderer/with_details/dist/bundle.js +2 -33
  24. data/resources/templates/error_renderer/with_details/dist/styles.css +2 -2
  25. data/resources/templates/error_renderer/with_details/src/GetHelpView.jsx +1 -1
  26. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.css +0 -0
  27. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.js +0 -0
  28. data/resources/templates/error_renderer/with_details/src/bootstrap/config.json +0 -0
  29. data/resources/templates/error_renderer/with_details/src/index.html.template +0 -2
  30. data/resources/templates/error_renderer/with_details/webpack.config.js +13 -16
  31. data/resources/templates/error_renderer/without_details/dist/bundle.js +0 -1
  32. data/resources/templates/error_renderer/without_details/dist/styles.css +1 -1
  33. data/resources/templates/error_renderer/without_details/webpack.config.js +13 -16
  34. data/resources/templates/standalone/global.erb +4 -0
  35. data/resources/templates/standalone/http.erb +1 -0
  36. data/resources/templates/standalone/rails_asset_pipeline.erb +1 -1
  37. data/resources/templates/standalone/server.erb +2 -0
  38. data/src/agent/Core/AdminPanelConnector.h +1 -1
  39. data/src/agent/Core/ApiServer.h +35 -0
  40. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +2 -2
  41. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +1 -1
  42. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +1 -1
  43. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +3 -0
  44. data/src/agent/Core/ApplicationPool/Group.h +1 -1
  45. data/src/agent/Core/ApplicationPool/Implementation.cpp +0 -1
  46. data/src/agent/Core/ApplicationPool/Options.h +26 -2
  47. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +1 -1
  48. data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +1 -1
  49. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +1 -1
  50. data/src/agent/Core/ApplicationPool/Pool.h +10 -2
  51. data/src/agent/Core/Config.h +17 -2
  52. data/src/agent/Core/Controller/CheckoutSession.cpp +24 -13
  53. data/src/agent/Core/Controller/Config.h +15 -3
  54. data/src/agent/Core/Controller/ForwardResponse.cpp +13 -0
  55. data/src/agent/Core/Controller/InitRequest.cpp +7 -0
  56. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +1 -0
  57. data/src/agent/Core/Controller/InternalUtils.cpp +32 -6
  58. data/src/agent/Core/Controller.h +5 -1
  59. data/src/agent/Core/CoreMain.cpp +1 -0
  60. data/src/agent/Core/OptionParser.h +7 -0
  61. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h +20 -0
  62. data/src/agent/Core/SpawningKit/Config.h +24 -0
  63. data/src/agent/Core/SpawningKit/Context.h +1 -0
  64. data/src/agent/Core/SpawningKit/Handshake/BackgroundIOCapturer.h +1 -1
  65. data/src/agent/Core/SpawningKit/Handshake/Perform.h +1 -1
  66. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +5 -1
  67. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
  68. data/src/agent/Core/SpawningKit/PipeWatcher.h +1 -1
  69. data/src/agent/Core/SpawningKit/SmartSpawner.h +1 -1
  70. data/src/agent/Core/SpawningKit/Spawner.h +3 -0
  71. data/src/agent/Core/TelemetryCollector.h +1 -1
  72. data/src/agent/Shared/ApiServerUtils.h +1 -1
  73. data/src/agent/Shared/ApplicationPoolApiKey.h +2 -0
  74. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +27 -1
  75. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +2 -0
  76. data/src/agent/Watchdog/Config.h +17 -1
  77. data/src/agent/Watchdog/InstanceDirToucher.cpp +1 -1
  78. data/src/agent/Watchdog/WatchdogMain.cpp +12 -1
  79. data/src/apache2_module/Config.cpp +1 -1
  80. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +46 -26
  81. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +20 -0
  82. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +59 -1
  83. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +13 -0
  84. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +9 -0
  85. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +37 -0
  86. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +21 -0
  87. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +53 -2
  88. data/src/apache2_module/Hooks.cpp +6 -0
  89. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +11 -0
  90. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +31 -18
  91. data/src/cxx_supportlib/BackgroundEventLoop.cpp +5 -1
  92. data/src/cxx_supportlib/ConfigKit/Schema.h +1 -1
  93. data/src/cxx_supportlib/ConfigKit/Translator.h +1 -1
  94. data/src/cxx_supportlib/Constants.h +5 -3
  95. data/src/cxx_supportlib/DataStructures/HashedStaticString.h +2 -0
  96. data/src/cxx_supportlib/FileDescriptor.h +8 -0
  97. data/src/cxx_supportlib/FileTools/FileManip.cpp +10 -1
  98. data/src/cxx_supportlib/FileTools/FileManip.h +16 -0
  99. data/src/cxx_supportlib/Hooks.h +1 -0
  100. data/src/cxx_supportlib/IOTools/BufferedIO.h +1 -1
  101. data/src/cxx_supportlib/IOTools/IOUtils.cpp +4 -4
  102. data/src/cxx_supportlib/IOTools/MessageIO.h +1 -1
  103. data/src/cxx_supportlib/LoggingKit/Config.h +1 -0
  104. data/src/cxx_supportlib/LoggingKit/Context.h +1 -1
  105. data/src/cxx_supportlib/SafeLibev.h +3 -1
  106. data/src/cxx_supportlib/ServerKit/AcceptLoadBalancer.h +1 -1
  107. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParser.h +1 -1
  108. data/src/cxx_supportlib/StaticString.h +2 -0
  109. data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +2 -2
  110. data/src/cxx_supportlib/SystemTools/ProcessMetricsCollector.h +1 -1
  111. data/src/cxx_supportlib/Utils/HttpConstants.h +1 -1
  112. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +20 -19
  113. data/src/cxx_supportlib/oxt/dynamic_thread_group.hpp +5 -1
  114. data/src/cxx_supportlib/oxt/system_calls.cpp +10 -10
  115. data/src/cxx_supportlib/oxt/thread.hpp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/compare.hpp +3 -3
  117. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/case_conv.hpp +5 -2
  118. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/classification.hpp +3 -1
  119. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_format_all.hpp +2 -0
  120. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_iterator.hpp +11 -3
  121. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/finder.hpp +15 -15
  122. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/formatter.hpp +1 -1
  123. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/trim.hpp +3 -3
  124. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/find_format.hpp +1 -2
  125. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/find_iterator.hpp +27 -1
  126. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/finder.hpp +0 -4
  127. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/formatter.hpp +0 -1
  128. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/iter_find.hpp +8 -0
  129. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/predicate.hpp +4 -3
  130. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/split.hpp +12 -0
  131. data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +19 -0
  132. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +47 -0
  133. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of.hpp +54 -0
  134. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of_forward.hpp +20 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +21 -0
  136. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc.hpp +52 -0
  137. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_posix.hpp +41 -0
  138. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_sunos.hpp +34 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of.hpp +31 -0
  140. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of_cxx11.hpp +23 -0
  141. data/src/cxx_supportlib/vendor-modified/boost/align/detail/element_type.hpp +91 -0
  142. data/src/cxx_supportlib/vendor-modified/boost/align/detail/integral_constant.hpp +53 -0
  143. data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +28 -0
  144. data/src/cxx_supportlib/vendor-modified/boost/align/detail/min_size.hpp +26 -0
  145. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +2 -3
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +305 -0
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/append.hpp +80 -0
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +141 -0
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +54 -8
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +180 -0
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +96 -23
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +37 -0
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +1478 -72
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/awaitable.hpp +144 -0
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +665 -309
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +206 -119
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_file.hpp +831 -0
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +1 -1
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +703 -0
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +668 -311
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +637 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +380 -163
  163. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +420 -108
  164. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +273 -66
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +427 -237
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +1266 -501
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +21 -44
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +15 -35
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +756 -0
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +501 -233
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +1 -1
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +1 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +250 -122
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +633 -0
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +724 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +726 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +212 -53
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +680 -164
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +330 -0
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +55 -27
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +1 -1
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +60 -30
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +1 -1
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +55 -27
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +1 -1
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +1 -1
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_signal.hpp +307 -0
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_state.hpp +237 -0
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_type.hpp +176 -0
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/co_spawn.hpp +525 -0
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +1 -1
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +808 -0
  193. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +307 -159
  194. data/src/cxx_supportlib/vendor-modified/boost/asio/connect_pipe.hpp +85 -0
  195. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -3
  196. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +150 -41
  198. data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +677 -0
  199. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +115 -0
  200. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +1 -1
  201. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +1 -1
  202. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +23 -1
  204. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_cancellation_state.hpp +165 -0
  205. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +4 -3
  206. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +354 -99
  207. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/blocking_executor_op.hpp +109 -0
  208. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +1 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +298 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bulk_executor_op.hpp +90 -0
  212. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +1 -1
  213. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +1 -1
  214. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +1 -1
  215. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +11 -6
  216. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +1 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +9 -1
  218. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +1 -1
  219. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +938 -212
  220. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +38 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +1 -1
  222. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +3 -1
  223. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +1 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +69 -12
  225. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +1 -1
  226. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +65 -7
  227. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +38 -16
  228. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +38 -16
  229. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +18 -6
  230. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +18 -6
  231. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +1 -1
  232. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +2 -2
  233. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/exception.hpp +42 -0
  234. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_function.hpp +206 -0
  235. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +1 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +1 -1
  237. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +1 -1
  238. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/functional.hpp +7 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +33 -0
  240. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +1 -1
  241. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +1 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +1 -1
  243. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +2 -2
  244. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +1 -1
  245. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +63 -10
  246. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +1 -1
  247. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +24 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +27 -1
  249. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +22 -19
  250. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +465 -35
  251. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +1 -1
  252. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +1 -1
  253. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +543 -84
  254. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +21 -1
  255. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +15 -1
  256. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +21 -1
  257. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +31 -1
  258. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +20 -14
  259. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +40 -2
  260. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_descriptor_service.ipp +207 -0
  261. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_file_service.ipp +142 -0
  262. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.hpp +114 -0
  263. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.ipp +882 -0
  264. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_socket_service_base.ipp +251 -0
  265. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +21 -1
  266. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +35 -2
  267. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +1 -1
  268. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +11 -6
  269. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +8 -4
  270. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +1 -1
  271. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/{reactive_serial_port_service.ipp → posix_serial_port_service.ipp} +52 -36
  272. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +1 -1
  273. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +1 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +13 -5
  275. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +9 -7
  276. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +37 -33
  277. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/scheduler.ipp +109 -6
  278. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +25 -1
  279. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +62 -3
  280. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +1 -1
  281. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +1 -1
  282. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +129 -25
  283. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +746 -348
  284. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +18 -9
  285. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +200 -25
  286. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +25 -1
  287. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +7 -38
  288. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +34 -9
  289. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/thread_context.ipp +37 -0
  290. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +10 -6
  291. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +7 -1
  292. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +1 -1
  293. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +1 -1
  294. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_object_impl.hpp +183 -0
  295. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_at_op.hpp +194 -0
  296. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_op.hpp +189 -0
  297. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_service.hpp +681 -0
  298. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_at_op.hpp +188 -0
  299. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_op.hpp +184 -0
  300. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_file_service.hpp +264 -0
  301. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_null_buffers_op.hpp +115 -0
  302. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_operation.hpp +86 -0
  303. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_service.hpp +320 -0
  304. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_accept_op.hpp +283 -0
  305. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_connect_op.hpp +141 -0
  306. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recv_op.hpp +204 -0
  307. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvfrom_op.hpp +205 -0
  308. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvmsg_op.hpp +191 -0
  309. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_send_op.hpp +190 -0
  310. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_sendto_op.hpp +193 -0
  311. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service.hpp +633 -0
  312. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service_base.hpp +665 -0
  313. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_wait_op.hpp +113 -0
  314. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +117 -18
  315. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +1 -1
  316. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +1 -1
  317. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +19 -7
  318. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +1 -1
  319. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +1 -1
  320. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +80 -1
  321. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +1 -1
  322. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/non_const_lvalue.hpp +56 -0
  323. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +1 -1
  324. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +7 -1
  325. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +1 -1
  326. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +1 -1
  327. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +1 -5
  328. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +19 -4
  329. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +1 -1
  330. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +63 -52
  331. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +1 -1
  332. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +1 -1
  333. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +1 -1
  334. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +1 -1
  335. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +1 -1
  336. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +1 -1
  337. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +1 -1
  338. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +2 -2
  339. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +30 -8
  340. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +15 -2
  341. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +1 -1
  342. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +1 -1
  343. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +1 -1
  344. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{reactive_serial_port_service.hpp → posix_serial_port_service.hpp} +42 -29
  345. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +1 -1
  346. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +1 -1
  347. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +1 -1
  348. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +1 -1
  349. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +60 -7
  350. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +179 -37
  351. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +15 -7
  352. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +57 -28
  353. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +22 -10
  354. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +45 -19
  355. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +44 -16
  356. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +28 -13
  357. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +50 -20
  358. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +45 -17
  359. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +189 -82
  360. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +191 -49
  361. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +15 -7
  362. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +29 -5
  363. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +8 -2
  364. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +45 -1
  365. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +17 -16
  366. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +11 -2
  367. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +33 -15
  368. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +1 -1
  369. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +32 -16
  370. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +24 -22
  371. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +37 -19
  372. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler.hpp +36 -8
  373. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_operation.hpp +1 -1
  374. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_task.hpp +51 -0
  375. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_thread_info.hpp +1 -1
  376. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +1 -1
  377. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +1 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +1 -1
  379. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +41 -5
  380. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +1 -1
  381. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +1 -1
  382. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +11 -7
  383. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +1 -1
  384. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +5 -1
  385. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +80 -14
  386. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +1 -1
  387. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +71 -33
  388. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +1 -1
  389. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +2 -2
  390. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +2 -1
  391. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +1 -1
  392. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/source_location.hpp +47 -0
  393. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +1 -1
  394. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +13 -1
  395. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +1 -1
  396. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +1 -1
  397. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +1 -1
  398. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +1 -1
  399. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +1 -1
  400. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +33 -2
  401. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +8 -6
  402. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +1 -1
  403. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +5 -5
  404. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +10 -1
  405. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +11 -1
  406. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +164 -25
  407. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +18 -9
  408. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +7 -3
  409. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +33 -2
  410. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +1 -1
  411. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +5 -1
  412. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +1 -1
  413. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +3 -1
  414. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +3 -1
  415. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +1 -1
  416. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +81 -3
  417. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/utility.hpp +86 -0
  418. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +177 -2
  419. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +13 -8
  420. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +6 -2
  421. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +1 -1
  422. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +90 -9
  423. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +46 -10
  424. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +144 -47
  425. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +30 -1
  426. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +339 -0
  427. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +2353 -0
  428. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bad_executor.hpp +49 -0
  429. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1553 -0
  430. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1214 -0
  431. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +401 -0
  432. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +1217 -0
  433. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +493 -0
  434. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +235 -0
  435. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +223 -0
  436. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_invocable.hpp +154 -0
  437. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +107 -0
  438. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_receiver.hpp +130 -0
  439. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/bulk_sender.hpp +263 -0
  440. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/submit_receiver.hpp +235 -0
  441. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/void_receiver.hpp +92 -0
  442. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +289 -0
  443. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +254 -0
  444. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/bad_executor.ipp +42 -0
  445. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/receiver_invocation_error.ipp +38 -0
  446. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/invocable_archetype.hpp +73 -0
  447. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1118 -0
  448. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +228 -0
  449. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +96 -0
  450. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +869 -0
  451. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/prefer_only.hpp +333 -0
  452. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +282 -0
  453. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver_invocation_error.hpp +50 -0
  454. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +867 -0
  455. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +291 -0
  456. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +88 -0
  457. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +313 -0
  458. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +254 -0
  459. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +254 -0
  460. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +487 -0
  461. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +251 -0
  462. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +454 -0
  463. data/src/cxx_supportlib/vendor-modified/boost/asio/execution.hpp +48 -0
  464. data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +3 -2
  465. data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +8 -2
  466. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +235 -35
  467. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/append.hpp +38 -0
  468. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_single.hpp +138 -0
  469. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_tuple.hpp +38 -0
  470. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/awaitable_operators.hpp +538 -0
  471. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +493 -0
  472. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +493 -0
  473. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/cancellation_condition.hpp +157 -0
  474. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel.hpp +72 -0
  475. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_error.hpp +88 -0
  476. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_traits.hpp +233 -0
  477. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_spawn.hpp +138 -177
  478. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/concurrent_channel.hpp +72 -0
  479. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +265 -0
  480. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro_traits.hpp +230 -0
  481. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/deferred.hpp +38 -0
  482. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_handler.hpp +72 -0
  483. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_message.hpp +124 -0
  484. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_operation.hpp +201 -0
  485. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_payload.hpp +95 -0
  486. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +114 -0
  487. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +134 -0
  488. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +142 -0
  489. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +499 -0
  490. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/completion_handler_erasure.hpp +196 -0
  491. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +120 -0
  492. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/has_signature.hpp +56 -0
  493. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +611 -0
  494. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +180 -0
  495. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +231 -0
  496. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/channel_error.ipp +63 -0
  497. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1197 -0
  498. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +420 -0
  499. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +104 -0
  500. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_coro.hpp +270 -0
  501. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +207 -0
  502. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/prepend.hpp +38 -0
  503. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +230 -0
  504. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +171 -0
  505. data/src/cxx_supportlib/vendor-modified/boost/asio/file_base.hpp +168 -0
  506. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +2 -2
  507. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +4 -4
  508. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +1 -1
  509. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +1 -1
  510. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +4 -4
  511. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +4 -4
  512. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +4 -4
  513. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +29 -6
  514. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +1 -1
  515. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +30 -4
  516. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +1 -1
  517. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_io_executor.ipp +131 -0
  518. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +218 -0
  519. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +246 -0
  520. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +1157 -0
  521. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +187 -108
  522. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +181 -104
  523. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancellation_signal.ipp +98 -0
  524. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +412 -0
  525. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/compose.hpp +709 -0
  526. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +394 -317
  527. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.hpp +75 -0
  528. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.ipp +151 -0
  529. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +219 -30
  530. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/deferred.hpp +97 -0
  531. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +132 -0
  532. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +214 -31
  533. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +1 -1
  534. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +8 -6
  535. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +1 -1
  536. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +16 -102
  537. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +6 -1
  538. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +19 -9
  539. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +220 -115
  540. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +4 -3
  541. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/multiple_exceptions.ipp +51 -0
  542. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +219 -30
  543. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +218 -0
  544. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +766 -236
  545. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +286 -173
  546. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +2420 -545
  547. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +611 -0
  548. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +1 -1
  549. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +1 -1
  550. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1319 -293
  551. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +15 -2
  552. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +1 -1
  553. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +25 -6
  554. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +114 -14
  555. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +266 -39
  556. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +73 -8
  557. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_awaitable.hpp +303 -0
  558. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +131 -41
  559. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +703 -232
  560. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +256 -162
  561. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +727 -56
  562. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +58 -54
  563. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +1 -1
  564. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +1 -1
  565. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +57 -27
  566. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +126 -26
  567. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +1 -1
  568. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +1 -1
  569. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +119 -39
  570. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +1 -1
  571. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +1 -1
  572. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +7 -2
  573. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +51 -23
  574. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +347 -223
  575. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +1 -1
  576. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +1 -1
  577. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +1 -1
  578. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +5 -5
  579. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +21 -19
  580. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +10 -10
  581. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
  582. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +1 -1
  583. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +7 -7
  584. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +1 -1
  585. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +23 -18
  586. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +1 -1
  587. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +11 -11
  588. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +1 -1
  589. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +27 -27
  590. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +1 -1
  591. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +1 -1
  592. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +1 -1
  593. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +1 -1
  594. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +1 -1
  595. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +1 -1
  596. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +8 -8
  597. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +2 -2
  598. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +1 -1
  599. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +1 -1
  600. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +1 -1
  601. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +9 -9
  602. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +7 -7
  603. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +3 -3
  604. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +4 -4
  605. data/src/cxx_supportlib/vendor-modified/boost/asio/is_applicable_property.hpp +63 -0
  606. data/src/cxx_supportlib/vendor-modified/boost/asio/is_contiguous_iterator.hpp +47 -0
  607. data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +1 -1
  608. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +1 -1
  609. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +1 -1
  610. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +10 -2
  611. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +14 -19
  612. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +4 -4
  613. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +7 -1
  614. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +10 -8
  615. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +4 -4
  616. data/src/cxx_supportlib/vendor-modified/boost/asio/multiple_exceptions.hpp +60 -0
  617. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +4 -4
  618. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +1 -1
  619. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +278 -79
  620. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +287 -80
  621. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +5 -612
  622. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +2 -2
  623. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +3 -326
  624. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +146 -41
  625. data/src/cxx_supportlib/vendor-modified/boost/asio/prefer.hpp +738 -0
  626. data/src/cxx_supportlib/vendor-modified/boost/asio/prepend.hpp +80 -0
  627. data/src/cxx_supportlib/vendor-modified/boost/asio/query.hpp +328 -0
  628. data/src/cxx_supportlib/vendor-modified/boost/asio/random_access_file.hpp +37 -0
  629. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +696 -163
  630. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +184 -60
  631. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +1795 -453
  632. data/src/cxx_supportlib/vendor-modified/boost/asio/readable_pipe.hpp +37 -0
  633. data/src/cxx_supportlib/vendor-modified/boost/asio/recycling_allocator.hpp +140 -0
  634. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/redirect_error.hpp → redirect_error.hpp} +11 -12
  635. data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +358 -0
  636. data/src/cxx_supportlib/vendor-modified/boost/asio/require.hpp +575 -0
  637. data/src/cxx_supportlib/vendor-modified/boost/asio/require_concept.hpp +356 -0
  638. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +3 -736
  639. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +1 -1
  640. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +3 -422
  641. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +26 -26
  642. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +661 -93
  643. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +7 -1
  644. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +18 -1
  645. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +7 -2
  646. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +14 -1
  647. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +7 -2
  648. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +69 -10
  649. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +6 -2
  650. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +87 -34
  651. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +1 -1
  652. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +5 -1
  653. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +1 -1
  654. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +7 -2
  655. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +17 -2
  656. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +93 -6
  657. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +1 -1
  658. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +12 -3
  659. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +21 -7
  660. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/host_name_verification.hpp +92 -0
  661. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +1 -1
  662. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +237 -75
  663. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +27 -3
  664. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/host_name_verification.ipp +75 -0
  665. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +5 -1
  666. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +2 -1
  667. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +7 -3
  668. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +437 -125
  669. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +1 -1
  670. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +1 -1
  671. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +1 -1
  672. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +2 -1
  673. data/src/cxx_supportlib/vendor-modified/boost/asio/static_thread_pool.hpp +33 -0
  674. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +1 -1
  675. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +307 -13
  676. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_file.hpp +37 -0
  677. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +1 -1
  678. data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +16 -4
  679. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +580 -25
  680. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +1 -1
  681. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +282 -0
  682. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +946 -38
  683. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +1 -1
  684. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_free.hpp +116 -0
  685. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_member.hpp +116 -0
  686. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_free.hpp +114 -0
  687. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_member.hpp +114 -0
  688. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/equality_comparable.hpp +106 -0
  689. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_free.hpp +110 -0
  690. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_member.hpp +110 -0
  691. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_free.hpp +110 -0
  692. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_member.hpp +110 -0
  693. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_free.hpp +110 -0
  694. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_member.hpp +110 -0
  695. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_static_constexpr_member.hpp +110 -0
  696. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_free.hpp +110 -0
  697. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_member.hpp +110 -0
  698. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_free.hpp +110 -0
  699. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_member.hpp +110 -0
  700. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_free.hpp +110 -0
  701. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_member.hpp +110 -0
  702. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_free.hpp +110 -0
  703. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_member.hpp +110 -0
  704. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_free.hpp +114 -0
  705. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_member.hpp +114 -0
  706. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_free.hpp +236 -0
  707. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_member.hpp +236 -0
  708. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_free.hpp +110 -0
  709. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_member.hpp +110 -0
  710. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_query.hpp +110 -0
  711. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require.hpp +125 -0
  712. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require_concept.hpp +126 -0
  713. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_free.hpp +114 -0
  714. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_member.hpp +114 -0
  715. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +1 -1
  716. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +2 -2
  717. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +1 -1
  718. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +1 -1
  719. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +1 -1
  720. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +93 -36
  721. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +1 -1
  722. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +1 -1
  723. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +1 -1
  724. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +169 -0
  725. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +13 -9
  726. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
  727. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +2 -2
  728. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +1 -1
  729. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +357 -46
  730. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +462 -0
  731. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +287 -84
  732. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +287 -85
  733. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +3 -346
  734. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +4 -296
  735. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +38 -9
  736. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +3 -344
  737. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +3 -328
  738. data/src/cxx_supportlib/vendor-modified/boost/asio/writable_pipe.hpp +37 -0
  739. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +670 -159
  740. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +187 -59
  741. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +1 -1
  742. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +73 -17
  743. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +189 -0
  744. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +184 -11
  745. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_flag.hpp +12 -3
  746. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +98 -0
  747. data/src/cxx_supportlib/vendor-modified/boost/atomic/capabilities.hpp +2 -191
  748. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +8 -1
  749. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/aligned_variable.hpp +57 -0
  750. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag_impl.hpp +129 -0
  751. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{atomic_template.hpp → atomic_impl.hpp} +473 -456
  752. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +1226 -0
  753. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +99 -11
  754. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +43 -11
  755. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/capabilities.hpp +217 -0
  756. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_aarch32.hpp +53 -0
  757. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_aarch64.hpp +65 -0
  758. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{caps_gcc_alpha.hpp → caps_arch_gcc_alpha.hpp} +4 -4
  759. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{hwcaps_gcc_arm.hpp → caps_arch_gcc_arm.hpp} +44 -8
  760. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{hwcaps_gcc_ppc.hpp → caps_arch_gcc_ppc.hpp} +19 -6
  761. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{caps_gcc_sparc.hpp → caps_arch_gcc_sparc.hpp} +4 -4
  762. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{hwcaps_gcc_x86.hpp → caps_arch_gcc_x86.hpp} +22 -6
  763. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{caps_msvc_arm.hpp → caps_arch_msvc_arm.hpp} +4 -4
  764. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{caps_msvc_x86.hpp → caps_arch_msvc_x86.hpp} +12 -6
  765. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_atomic.hpp +100 -75
  766. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_sync.hpp +0 -7
  767. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/cas_based_exchange.hpp +50 -0
  768. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/classify.hpp +90 -0
  769. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +64 -22
  770. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_operations.hpp +50 -0
  771. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_operations_fwd.hpp +38 -0
  772. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch32.hpp +1121 -0
  773. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch64.hpp +1909 -0
  774. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{ops_gcc_alpha.hpp → core_arch_ops_gcc_alpha.hpp} +280 -289
  775. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{ops_gcc_arm.hpp → core_arch_ops_gcc_arm.hpp} +467 -447
  776. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{ops_gcc_ppc.hpp → core_arch_ops_gcc_ppc.hpp} +180 -194
  777. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{ops_gcc_sparc.hpp → core_arch_ops_gcc_sparc.hpp} +33 -58
  778. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{ops_gcc_x86_dcas.hpp → core_arch_ops_gcc_x86.hpp} +520 -32
  779. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{ops_msvc_arm.hpp → core_arch_ops_msvc_arm.hpp} +62 -58
  780. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{ops_msvc_x86.hpp → core_arch_ops_msvc_x86.hpp} +69 -101
  781. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations.hpp +49 -0
  782. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +195 -0
  783. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated_fwd.hpp +38 -0
  784. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_fwd.hpp +38 -0
  785. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{ops_cas_based.hpp → core_ops_cas_based.hpp} +9 -22
  786. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_atomic.hpp +306 -0
  787. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{ops_gcc_sync.hpp → core_ops_gcc_sync.hpp} +75 -52
  788. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{ops_linux_arm.hpp → core_ops_linux_arm.hpp} +32 -43
  789. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_windows.hpp +201 -0
  790. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{ops_extending_cas_based.hpp → extending_cas_based_arithmetic.hpp} +12 -9
  791. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_operations_fwd.hpp +4 -1
  792. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +23 -12
  793. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +13 -10
  794. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_operations_fwd.hpp +4 -1
  795. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +60 -40
  796. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch32.hpp +1060 -0
  797. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch64.hpp +1330 -0
  798. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_arm.hpp +363 -355
  799. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +167 -163
  800. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_x86.hpp +232 -102
  801. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_generic.hpp +9 -17
  802. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_arm.hpp +6 -4
  803. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_x86.hpp +119 -92
  804. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_operations.hpp +41 -0
  805. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch32.hpp +60 -0
  806. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch64.hpp +58 -0
  807. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_alpha.hpp +53 -0
  808. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp +90 -0
  809. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_ppc.hpp +68 -0
  810. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_sparc.hpp +70 -0
  811. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_x86.hpp +69 -0
  812. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_arm.hpp +66 -0
  813. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_x86.hpp +66 -0
  814. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations.hpp +41 -0
  815. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations_emulated.hpp +50 -0
  816. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_atomic.hpp +75 -0
  817. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_sync.hpp +53 -0
  818. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_linux_arm.hpp +64 -0
  819. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_windows.hpp +67 -0
  820. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/footer.hpp +24 -0
  821. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_operations_fwd.hpp +4 -1
  822. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +14 -8
  823. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_generic.hpp +6 -3
  824. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +154 -0
  825. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_arm_asm_common.hpp +79 -0
  826. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_atomic_memory_order_utils.hpp +66 -0
  827. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_ppc_asm_common.hpp +33 -0
  828. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/header.hpp +72 -0
  829. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +25 -1
  830. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/{integral_extend.hpp → integral_conversions.hpp} +8 -5
  831. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +35 -11
  832. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/intptr.hpp +46 -0
  833. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lock_pool.hpp +151 -0
  834. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/memory_order_utils.hpp +47 -0
  835. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/once_flag.hpp +43 -0
  836. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_aarch32_common.hpp +53 -0
  837. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_aarch64_common.hpp +53 -0
  838. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm_common.hpp +8 -79
  839. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc_common.hpp +4 -1
  840. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_common.hpp +7 -2
  841. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +23 -5
  842. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +80 -34
  843. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_traits.hpp +187 -0
  844. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/alignment_of.hpp +51 -0
  845. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/has_unique_object_representations.hpp +143 -0
  846. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_enum.hpp +42 -0
  847. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_floating_point.hpp +3 -2
  848. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp +46 -0
  849. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_copyable.hpp +45 -0
  850. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_capabilities.hpp +363 -0
  851. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_darwin_ulock.hpp +58 -0
  852. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_dragonfly_umtx.hpp +30 -0
  853. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_freebsd_umtx.hpp +40 -0
  854. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_futex.hpp +31 -0
  855. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_windows.hpp +57 -0
  856. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +65 -0
  857. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_operations.hpp +28 -0
  858. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_operations_fwd.hpp +43 -0
  859. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_darwin_ulock.hpp +158 -0
  860. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_dragonfly_umtx.hpp +75 -0
  861. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +97 -0
  862. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_freebsd_umtx.hpp +119 -0
  863. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_futex.hpp +111 -0
  864. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_generic.hpp +143 -0
  865. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_windows.hpp +179 -0
  866. data/src/cxx_supportlib/vendor-modified/boost/atomic/fences.hpp +7 -18
  867. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +91 -0
  868. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_flag.hpp +40 -0
  869. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +98 -0
  870. data/src/cxx_supportlib/vendor-modified/boost/atomic.hpp +9 -0
  871. data/src/cxx_supportlib/vendor-modified/boost/bind/apply.hpp +13 -0
  872. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -35
  873. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf2_cc.hpp +18 -18
  874. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_template.hpp +1 -1
  875. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/result_traits.hpp +164 -0
  876. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +25 -11
  877. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_cc.hpp +18 -18
  878. data/src/cxx_supportlib/vendor-modified/boost/bind/placeholders.hpp +13 -1
  879. data/src/cxx_supportlib/vendor-modified/boost/bind/protect.hpp +52 -8
  880. data/src/cxx_supportlib/vendor-modified/boost/bind/std_placeholders.hpp +39 -0
  881. data/src/cxx_supportlib/vendor-modified/boost/bind/storage.hpp +1 -1
  882. data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +4 -320
  883. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +10 -10
  884. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp +34 -34
  885. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/thread_clock.hpp +4 -4
  886. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/chrono.hpp +34 -14
  887. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp +27 -27
  888. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/thread_clock.hpp +4 -4
  889. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/system.hpp +5 -4
  890. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +6 -3
  891. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +1 -1
  892. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_style.hpp +1 -1
  893. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +2 -2
  894. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/timezone.hpp +2 -1
  895. data/src/cxx_supportlib/vendor-modified/boost/chrono/system_clocks.hpp +2 -2
  896. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +178 -167
  897. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +34 -46
  898. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/space_optimized.hpp +32 -38
  899. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer.hpp +12 -9
  900. data/src/cxx_supportlib/vendor-modified/boost/concept/assert.hpp +2 -2
  901. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/general.hpp +24 -3
  902. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/has_constraints.hpp +3 -3
  903. data/src/cxx_supportlib/vendor-modified/boost/concept/usage.hpp +8 -1
  904. data/src/cxx_supportlib/vendor-modified/boost/concept_check.hpp +20 -20
  905. data/src/cxx_supportlib/vendor-modified/boost/config/abi_prefix.hpp +1 -1
  906. data/src/cxx_supportlib/vendor-modified/boost/config/abi_suffix.hpp +1 -3
  907. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +211 -0
  908. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +209 -0
  909. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +47 -0
  910. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +62 -0
  911. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +59 -0
  912. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx98.hpp +23 -0
  913. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +78 -19
  914. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +9 -3
  915. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +20 -1
  916. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +77 -0
  917. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +159 -10
  918. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/comeau.hpp +1 -1
  919. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +37 -11
  920. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +373 -52
  921. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +6 -1
  922. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +28 -8
  923. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +5 -0
  924. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/greenhills.hpp +1 -1
  925. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +2 -1
  926. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +13 -1
  927. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/kai.hpp +1 -1
  928. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +6 -1
  929. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +6 -1
  930. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +6 -3
  931. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +5 -0
  932. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +5 -0
  933. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +6 -1
  934. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +35 -9
  935. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +10 -0
  936. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +3 -0
  937. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +203 -0
  938. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_compiler_config.hpp +1 -2
  939. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_platform_config.hpp +5 -0
  940. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_stdlib_config.hpp +13 -2
  941. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +214 -5
  942. data/src/cxx_supportlib/vendor-modified/boost/config/platform/bsd.hpp +5 -8
  943. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +3 -0
  944. data/src/cxx_supportlib/vendor-modified/boost/config/platform/vxworks.hpp +63 -74
  945. data/src/cxx_supportlib/vendor-modified/boost/config/platform/wasm.hpp +23 -0
  946. data/src/cxx_supportlib/vendor-modified/boost/config/requires_threads.hpp +1 -1
  947. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +44 -10
  948. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcomo.hpp +1 -0
  949. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +42 -4
  950. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +125 -9
  951. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/modena.hpp +1 -0
  952. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/msl.hpp +1 -0
  953. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/roguewave.hpp +2 -1
  954. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/sgi.hpp +1 -0
  955. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/stlport.hpp +6 -5
  956. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/vacpp.hpp +1 -0
  957. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/xlcpp_zos.hpp +1 -0
  958. data/src/cxx_supportlib/vendor-modified/boost/config/user.hpp +2 -2
  959. data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +26 -0
  960. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +284 -10
  961. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +31 -22
  962. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +29 -4
  963. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +121 -29
  964. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +384 -272
  965. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +24 -21
  966. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +836 -460
  967. data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -10
  968. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +146 -65
  969. data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +28 -0
  970. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +6 -6
  971. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +4 -4
  972. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +2 -1
  973. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -1
  974. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -1
  975. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +73 -13
  976. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +0 -3
  977. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +17 -15
  978. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_or_allocator_rebind.hpp +4 -0
  979. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +21 -116
  980. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +250 -113
  981. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +149 -53
  982. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +41 -39
  983. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +318 -159
  984. data/src/cxx_supportlib/vendor-modified/boost/container/detail/guards_dended.hpp +198 -0
  985. data/src/cxx_supportlib/vendor-modified/boost/container/detail/hash_table.hpp +1278 -0
  986. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +17 -0
  987. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +35 -0
  988. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +91 -0
  989. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +22 -0
  990. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +182 -147
  991. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +54 -0
  992. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +60 -2
  993. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +40 -31
  994. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +4 -15
  995. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +24 -3
  996. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +331 -144
  997. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +2 -2
  998. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +2 -1
  999. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +142 -94
  1000. data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +2 -0
  1001. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +1 -1
  1002. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +3 -7
  1003. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +6 -0
  1004. data/src/cxx_supportlib/vendor-modified/boost/container/detail/thread_mutex.hpp +181 -0
  1005. data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +28 -28
  1006. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +409 -329
  1007. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +5 -0
  1008. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_functors.hpp +9 -13
  1009. data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +1 -1
  1010. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +3 -12
  1011. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +50 -3
  1012. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +3028 -0
  1013. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +665 -186
  1014. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +311 -46
  1015. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +142 -120
  1016. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +524 -158
  1017. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +27 -5
  1018. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +4 -4
  1019. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +3 -3
  1020. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +336 -2
  1021. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/devector.hpp +51 -0
  1022. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_set.hpp +3 -3
  1023. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/global_resource.hpp +1 -4
  1024. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +35 -1
  1025. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +9 -6
  1026. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +8 -9
  1027. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +92 -8
  1028. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/synchronized_pool_resource.hpp +7 -6
  1029. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/unsynchronized_pool_resource.hpp +4 -4
  1030. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +80 -80
  1031. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +371 -106
  1032. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +136 -112
  1033. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +220 -185
  1034. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +371 -225
  1035. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +218 -134
  1036. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +535 -378
  1037. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +156 -41
  1038. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +706 -659
  1039. data/src/cxx_supportlib/vendor-modified/boost/container_hash/extensions.hpp +1 -54
  1040. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +45 -39
  1041. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +1 -1
  1042. data/src/cxx_supportlib/vendor-modified/boost/core/addressof.hpp +2 -2
  1043. data/src/cxx_supportlib/vendor-modified/boost/core/alloc_construct.hpp +95 -0
  1044. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_access.hpp +820 -0
  1045. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_traits.hpp +112 -0
  1046. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +595 -0
  1047. data/src/cxx_supportlib/vendor-modified/boost/core/checked_delete.hpp +6 -4
  1048. data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +298 -0
  1049. data/src/cxx_supportlib/vendor-modified/boost/core/default_allocator.hpp +158 -0
  1050. data/src/cxx_supportlib/vendor-modified/boost/core/detail/splitmix64.hpp +54 -0
  1051. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +1256 -0
  1052. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +155 -0
  1053. data/src/cxx_supportlib/vendor-modified/boost/core/exchange.hpp +49 -0
  1054. data/src/cxx_supportlib/vendor-modified/boost/core/explicit_operator_bool.hpp +9 -0
  1055. data/src/cxx_supportlib/vendor-modified/boost/core/first_scalar.hpp +45 -0
  1056. data/src/cxx_supportlib/vendor-modified/boost/core/ignore_unused.hpp +32 -2
  1057. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +272 -146
  1058. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +43 -8
  1059. data/src/cxx_supportlib/vendor-modified/boost/core/no_exceptions_support.hpp +14 -2
  1060. data/src/cxx_supportlib/vendor-modified/boost/core/noinit_adaptor.hpp +90 -0
  1061. data/src/cxx_supportlib/vendor-modified/boost/core/noncopyable.hpp +16 -1
  1062. data/src/cxx_supportlib/vendor-modified/boost/core/nvp.hpp +57 -0
  1063. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_traits.hpp +112 -60
  1064. data/src/cxx_supportlib/vendor-modified/boost/core/quick_exit.hpp +59 -0
  1065. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +39 -2
  1066. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +399 -0
  1067. data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +14 -4
  1068. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +1157 -0
  1069. data/src/cxx_supportlib/vendor-modified/boost/core/typeinfo.hpp +26 -10
  1070. data/src/cxx_supportlib/vendor-modified/boost/core/uncaught_exceptions.hpp +155 -0
  1071. data/src/cxx_supportlib/vendor-modified/boost/core/use_default.hpp +17 -0
  1072. data/src/cxx_supportlib/vendor-modified/boost/core/verbose_terminate_handler.hpp +88 -0
  1073. data/src/cxx_supportlib/vendor-modified/boost/cregex.hpp +4 -0
  1074. data/src/cxx_supportlib/vendor-modified/boost/cstdint.hpp +5 -5
  1075. data/src/cxx_supportlib/vendor-modified/boost/current_function.hpp +3 -3
  1076. data/src/cxx_supportlib/vendor-modified/boost/date_time/c_time.hpp +9 -4
  1077. data/src/cxx_supportlib/vendor-modified/boost/date_time/compiler_config.hpp +9 -41
  1078. data/src/cxx_supportlib/vendor-modified/boost/date_time/constrained_value.hpp +19 -11
  1079. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +23 -23
  1080. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration.hpp +17 -22
  1081. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration_types.hpp +44 -49
  1082. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_facet.hpp +5 -6
  1083. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_generators.hpp +24 -19
  1084. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_iterator.hpp +8 -8
  1085. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_parsing.hpp +51 -25
  1086. data/src/cxx_supportlib/vendor-modified/boost/date_time/dst_rules.hpp +56 -56
  1087. data/src/cxx_supportlib/vendor-modified/boost/date_time/dst_transition_generators.hpp +2 -2
  1088. data/src/cxx_supportlib/vendor-modified/boost/date_time/find_match.hpp +42 -0
  1089. data/src/cxx_supportlib/vendor-modified/boost/date_time/format_date_parser.hpp +98 -98
  1090. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +22 -14
  1091. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day.hpp +4 -4
  1092. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration.hpp +44 -32
  1093. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration_types.hpp +2 -2
  1094. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_month.hpp +51 -23
  1095. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_serialize.hpp +29 -27
  1096. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_weekday.hpp +43 -9
  1097. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_year.hpp +3 -3
  1098. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/parsers.hpp +32 -13
  1099. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.hpp +15 -17
  1100. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.ipp +28 -23
  1101. data/src/cxx_supportlib/vendor-modified/boost/date_time/int_adapter.hpp +57 -37
  1102. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_time_io.hpp +3 -0
  1103. data/src/cxx_supportlib/vendor-modified/boost/date_time/locale_config.hpp +3 -3
  1104. data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +44 -47
  1105. data/src/cxx_supportlib/vendor-modified/boost/date_time/period_formatter.hpp +34 -31
  1106. data/src/cxx_supportlib/vendor-modified/boost/date_time/period_parser.hpp +27 -28
  1107. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/conversion.hpp +1 -1
  1108. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/date_duration_operators.hpp +8 -8
  1109. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_config.hpp +13 -26
  1110. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +7 -7
  1111. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_io.hpp +1 -1
  1112. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/ptime.hpp +22 -4
  1113. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_parsers.hpp +4 -0
  1114. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_serialize.hpp +28 -12
  1115. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_formatter.hpp +1 -0
  1116. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +0 -5
  1117. data/src/cxx_supportlib/vendor-modified/boost/date_time/string_parse_tree.hpp +5 -3
  1118. data/src/cxx_supportlib/vendor-modified/boost/date_time/strings_from_facet.hpp +4 -2
  1119. data/src/cxx_supportlib/vendor-modified/boost/date_time/time.hpp +24 -3
  1120. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +56 -44
  1121. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +8 -11
  1122. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_iterator.hpp +8 -8
  1123. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +3 -8
  1124. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_resolution_traits.hpp +18 -18
  1125. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_system_counted.hpp +65 -50
  1126. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_system_split.hpp +43 -30
  1127. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_base.hpp +1 -1
  1128. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_names.hpp +1 -1
  1129. data/src/cxx_supportlib/vendor-modified/boost/date_time/tz_db_base.hpp +0 -1
  1130. data/src/cxx_supportlib/vendor-modified/boost/date_time/wrapping_int.hpp +16 -15
  1131. data/src/cxx_supportlib/vendor-modified/boost/date_time/year_month_day.hpp +7 -5
  1132. data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +4 -5
  1133. data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +38 -47
  1134. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +5 -5
  1135. data/src/cxx_supportlib/vendor-modified/boost/detail/reference_content.hpp +7 -7
  1136. data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +3 -3
  1137. data/src/cxx_supportlib/vendor-modified/boost/exception/current_exception_cast.hpp +10 -4
  1138. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/clone_current_exception.hpp +10 -4
  1139. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +12 -7
  1140. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +122 -33
  1141. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/is_output_streamable.hpp +9 -4
  1142. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/object_hex_dump.hpp +9 -4
  1143. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/shared_ptr.hpp +2 -2
  1144. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +11 -5
  1145. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +15 -6
  1146. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +118 -70
  1147. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +9 -4
  1148. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +12 -10
  1149. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string.hpp +9 -4
  1150. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string_stub.hpp +9 -4
  1151. data/src/cxx_supportlib/vendor-modified/boost/exception_ptr.hpp +2 -2
  1152. data/src/cxx_supportlib/vendor-modified/boost/foreach.hpp +16 -9
  1153. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +42 -41
  1154. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +76 -44
  1155. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +1 -1
  1156. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor.hpp +2 -2
  1157. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_ct.hpp +3 -3
  1158. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +35 -33
  1159. data/src/cxx_supportlib/vendor-modified/boost/integer/extended_euclidean.hpp +83 -0
  1160. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_log2.hpp +86 -81
  1161. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_mask.hpp +2 -2
  1162. data/src/cxx_supportlib/vendor-modified/boost/integer/mod_inverse.hpp +53 -0
  1163. data/src/cxx_supportlib/vendor-modified/boost/integer/static_log2.hpp +4 -5
  1164. data/src/cxx_supportlib/vendor-modified/boost/integer/static_min_max.hpp +3 -2
  1165. data/src/cxx_supportlib/vendor-modified/boost/integer.hpp +4 -4
  1166. data/src/cxx_supportlib/vendor-modified/boost/integer_fwd.hpp +2 -2
  1167. data/src/cxx_supportlib/vendor-modified/boost/integer_traits.hpp +3 -3
  1168. data/src/cxx_supportlib/vendor-modified/boost/intrusive/any_hook.hpp +4 -4
  1169. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +97 -97
  1170. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +50 -50
  1171. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +79 -79
  1172. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +99 -99
  1173. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +108 -116
  1174. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +118 -112
  1175. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +31 -23
  1176. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +88 -19
  1177. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +5 -5
  1178. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +39 -39
  1179. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/array_initializer.hpp +5 -3
  1180. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +23 -23
  1181. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +5 -6
  1182. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +80 -11
  1183. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +1 -0
  1184. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +1 -1
  1185. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +3 -3
  1186. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/empty_node_checker.hpp +1 -1
  1187. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +0 -31
  1188. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +12 -12
  1189. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_combine.hpp +92 -0
  1190. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +196 -107
  1191. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +20 -12
  1192. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +111 -81
  1193. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +1 -1
  1194. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +18 -6
  1195. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +6 -6
  1196. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/math.hpp +11 -64
  1197. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +2 -1
  1198. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +4 -4
  1199. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_to_value.hpp +1 -1
  1200. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +24 -24
  1201. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/reverse_iterator.hpp +3 -140
  1202. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +3 -1
  1203. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +25 -6
  1204. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +3 -3
  1205. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +25 -13
  1206. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +9 -9
  1207. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +33 -14
  1208. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/twin.hpp +49 -0
  1209. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/value_functors.hpp +52 -0
  1210. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +9 -4
  1211. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +1588 -948
  1212. data/src/cxx_supportlib/vendor-modified/boost/intrusive/intrusive_fwd.hpp +5 -0
  1213. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +97 -17
  1214. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +103 -100
  1215. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list_hook.hpp +10 -10
  1216. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +4 -4
  1217. data/src/cxx_supportlib/vendor-modified/boost/intrusive/options.hpp +26 -4
  1218. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +16 -8
  1219. data/src/cxx_supportlib/vendor-modified/boost/intrusive/parent_from_member.hpp +2 -2
  1220. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +7 -4
  1221. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +31 -23
  1222. data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +11 -4
  1223. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +50 -50
  1224. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +72 -72
  1225. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +99 -99
  1226. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set_hook.hpp +12 -12
  1227. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +107 -107
  1228. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +65 -73
  1229. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +80 -80
  1230. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +163 -170
  1231. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist_hook.hpp +8 -6
  1232. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +105 -105
  1233. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +53 -53
  1234. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +95 -95
  1235. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +140 -113
  1236. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +82 -81
  1237. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +156 -149
  1238. data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +6 -4
  1239. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +96 -85
  1240. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +17 -17
  1241. data/src/cxx_supportlib/vendor-modified/boost/io/ios_state.hpp +361 -315
  1242. data/src/cxx_supportlib/vendor-modified/boost/io_fwd.hpp +45 -49
  1243. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +12 -1
  1244. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +10 -10
  1245. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +1 -1
  1246. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +5 -5
  1247. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +3 -2
  1248. data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +65 -0
  1249. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +3 -3
  1250. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +1 -1
  1251. data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +8 -4
  1252. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +24 -19
  1253. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +65 -65
  1254. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +42 -42
  1255. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +17 -14
  1256. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +13 -16
  1257. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +7 -6
  1258. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +2 -2
  1259. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +14 -14
  1260. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +5 -2
  1261. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +22 -17
  1262. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +2 -2
  1263. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +1 -1
  1264. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +10 -7
  1265. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +13 -122
  1266. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/static_mutex.cpp +8 -2
  1267. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +11 -8
  1268. data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +16 -5
  1269. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/future.cpp +1 -1
  1270. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once.cpp +0 -1
  1271. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +4 -3
  1272. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +26 -15
  1273. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/tss_null.cpp +2 -2
  1274. data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +6 -12
  1275. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +102 -59
  1276. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +102 -70
  1277. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +296 -450
  1278. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/heap_sort.hpp +19 -9
  1279. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +9 -0
  1280. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +457 -112
  1281. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +87 -10
  1282. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +14 -4
  1283. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/search.hpp +79 -0
  1284. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/set_difference.hpp +9 -3
  1285. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +5 -1
  1286. data/src/cxx_supportlib/vendor-modified/boost/move/algo/predicate.hpp +23 -8
  1287. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +1 -1
  1288. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +29 -8
  1289. data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +30 -3
  1290. data/src/cxx_supportlib/vendor-modified/boost/move/detail/addressof.hpp +61 -0
  1291. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +1 -0
  1292. data/src/cxx_supportlib/vendor-modified/boost/move/detail/force_ptr.hpp +36 -0
  1293. data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +12 -0
  1294. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +3 -3
  1295. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +109 -9
  1296. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +10 -32
  1297. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils_core.hpp +11 -6
  1298. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +227 -0
  1299. data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +40 -33
  1300. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +5 -1
  1301. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_end.hpp +2 -0
  1302. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +257 -47
  1303. data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +1 -27
  1304. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +5 -3
  1305. data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +1 -1
  1306. data/src/cxx_supportlib/vendor-modified/boost/move/make_unique.hpp +10 -0
  1307. data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +5 -5
  1308. data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +31 -28
  1309. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +1306 -0
  1310. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/config.hpp +138 -0
  1311. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_append.hpp +185 -0
  1312. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_copy_if.hpp +48 -0
  1313. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_count.hpp +147 -0
  1314. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_fold.hpp +62 -0
  1315. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_front.hpp +38 -0
  1316. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_list.hpp +39 -0
  1317. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list.hpp +24 -0
  1318. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +87 -0
  1319. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_min_element.hpp +51 -0
  1320. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_plus.hpp +81 -0
  1321. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_remove_if.hpp +48 -0
  1322. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_rename.hpp +41 -0
  1323. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_void.hpp +32 -0
  1324. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_with_index.hpp +385 -0
  1325. data/src/cxx_supportlib/vendor-modified/boost/mp11/function.hpp +222 -0
  1326. data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +112 -0
  1327. data/src/cxx_supportlib/vendor-modified/boost/mp11/integral.hpp +41 -0
  1328. data/src/cxx_supportlib/vendor-modified/boost/mp11/list.hpp +304 -0
  1329. data/src/cxx_supportlib/vendor-modified/boost/mp11/set.hpp +188 -0
  1330. data/src/cxx_supportlib/vendor-modified/boost/mp11/utility.hpp +263 -0
  1331. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +16 -0
  1332. data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +1 -1
  1333. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +28 -8
  1334. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/common_name_wknd.hpp +2 -2
  1335. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/adl.hpp +1 -1
  1336. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/arrays.hpp +1 -1
  1337. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/bcc.hpp +2 -2
  1338. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/bind.hpp +1 -1
  1339. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/compiler.hpp +2 -2
  1340. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/ctps.hpp +1 -1
  1341. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/dtp.hpp +3 -3
  1342. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/forwarding.hpp +1 -1
  1343. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/integral.hpp +1 -1
  1344. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/operators.hpp +1 -1
  1345. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/overload_resolution.hpp +1 -1
  1346. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/preprocessor.hpp +1 -1
  1347. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/ttp.hpp +2 -2
  1348. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/count_impl.hpp +1 -1
  1349. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/fold_impl_body.hpp +3 -3
  1350. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/has_rebind.hpp +4 -4
  1351. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +1 -1
  1352. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/lambda_support.hpp +3 -3
  1353. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/nested_type_wknd.hpp +1 -1
  1354. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +1 -1
  1355. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/enum.hpp +12 -0
  1356. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/params.hpp +12 -0
  1357. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/size_impl.hpp +1 -1
  1358. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/static_cast.hpp +1 -1
  1359. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/template_arity.hpp +1 -1
  1360. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/yes_no.hpp +2 -1
  1361. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +1 -1
  1362. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +1 -1
  1363. data/src/cxx_supportlib/vendor-modified/boost/mpl/has_xxx.hpp +4 -4
  1364. data/src/cxx_supportlib/vendor-modified/boost/mpl/if.hpp +1 -1
  1365. data/src/cxx_supportlib/vendor-modified/boost/mpl/integral_c.hpp +1 -1
  1366. data/src/cxx_supportlib/vendor-modified/boost/mpl/lower_bound.hpp +1 -1
  1367. data/src/cxx_supportlib/vendor-modified/boost/mpl/numeric_cast.hpp +1 -1
  1368. data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +1 -1
  1369. data/src/cxx_supportlib/vendor-modified/boost/mpl/string.hpp +6 -6
  1370. data/src/cxx_supportlib/vendor-modified/boost/mpl/upper_bound.hpp +1 -1
  1371. data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/at.hpp +1 -1
  1372. data/src/cxx_supportlib/vendor-modified/boost/none.hpp +5 -5
  1373. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +3 -1
  1374. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/cast.hpp +1 -1
  1375. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/converter_policies.hpp +5 -5
  1376. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/converter.hpp +1 -1
  1377. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/meta.hpp +1 -1
  1378. data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +33 -24
  1379. data/src/cxx_supportlib/vendor-modified/boost/optional/bad_optional_access.hpp +9 -0
  1380. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/experimental_traits.hpp +9 -3
  1381. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +12 -13
  1382. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +1 -1
  1383. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +1 -1
  1384. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_hash.hpp +49 -0
  1385. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +28 -2
  1386. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +38 -27
  1387. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +300 -124
  1388. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +3 -2
  1389. data/src/cxx_supportlib/vendor-modified/boost/parameter/are_tagged_arguments.hpp +125 -0
  1390. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/always_true_predicate.hpp +42 -0
  1391. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/arg_list.hpp +1253 -359
  1392. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/as_lvalue.hpp +25 -0
  1393. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/augment_predicate.hpp +198 -0
  1394. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/cast.hpp +7 -136
  1395. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/default.hpp +101 -59
  1396. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/has_nested_template_fn.hpp +111 -0
  1397. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/is_maybe.hpp +42 -16
  1398. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/is_placeholder.hpp +64 -0
  1399. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/is_tagged_argument.hpp +95 -0
  1400. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/lambda_tag.hpp +16 -0
  1401. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/maybe.hpp +128 -97
  1402. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/name.hpp +93 -0
  1403. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/as_parameter_requirements.hpp +32 -0
  1404. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/deduce_tag.hpp +217 -0
  1405. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/deduced_item.hpp +34 -0
  1406. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/insert_tagged.hpp +23 -0
  1407. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/is_named_argument.hpp +43 -0
  1408. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/item.hpp +47 -0
  1409. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_arg_list.hpp +438 -0
  1410. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_deduced_items.hpp +53 -0
  1411. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_items.hpp +45 -0
  1412. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_parameter_spec_items.hpp +244 -0
  1413. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/parameter_requirements.hpp +25 -0
  1414. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/predicate.hpp +87 -0
  1415. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/satisfies.hpp +142 -0
  1416. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_deduced.hpp +59 -0
  1417. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_keyword_arg.hpp +30 -0
  1418. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp +67 -0
  1419. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_template_keyword_arg.hpp +30 -0
  1420. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_type.hpp +89 -0
  1421. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/unmatched_argument.hpp +41 -0
  1422. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/parameter_requirements.hpp +7 -20
  1423. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/parenthesized_type.hpp +8 -31
  1424. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pp_impl/argument_pack.hpp +91 -0
  1425. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pp_impl/match.hpp +55 -0
  1426. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pp_impl/unwrap_predicate.hpp +97 -0
  1427. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/binary_seq_for_each.hpp +1638 -0
  1428. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/binary_seq_for_each_inc.hpp +1796 -0
  1429. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/binary_seq_to_args.hpp +65 -0
  1430. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/convert_binary_seq.hpp +57 -0
  1431. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/flatten.hpp +7 -110
  1432. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/for_each.hpp +7 -98
  1433. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/for_each_pred.hpp +1029 -0
  1434. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/argument_specs.hpp +24 -0
  1435. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/arity_range.hpp +42 -0
  1436. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/flatten.hpp +143 -0
  1437. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/for_each.hpp +152 -0
  1438. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/forwarding_overloads.hpp +509 -0
  1439. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_cast.hpp +730 -0
  1440. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_dispatch_layer.hpp +474 -0
  1441. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_dispatch_tuple.hpp +33 -0
  1442. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_forward_match.hpp +43 -0
  1443. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_name.hpp +152 -0
  1444. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/no_spec_overloads.hpp +331 -0
  1445. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/parenthesized_return_type.hpp +122 -0
  1446. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/parenthesized_type.hpp +34 -0
  1447. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/specification.hpp +109 -0
  1448. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/split_args.hpp +71 -0
  1449. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/inc_binary_seq.hpp +78 -0
  1450. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/is_binary.hpp +31 -0
  1451. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/is_nullary.hpp +32 -0
  1452. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/no_perfect_forwarding_begin.hpp +165 -0
  1453. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/no_perfect_forwarding_end.hpp +24 -0
  1454. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/nullptr.hpp +18 -0
  1455. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/overloads.hpp +92 -0
  1456. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/qualifier.hpp +88 -0
  1457. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/seq_enum.hpp +26 -0
  1458. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/seq_merge.hpp +1807 -0
  1459. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/result_of0.hpp +46 -29
  1460. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/set.hpp +94 -42
  1461. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tag.hpp +152 -30
  1462. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tagged_argument.hpp +874 -159
  1463. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tagged_argument_fwd.hpp +38 -0
  1464. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/template_keyword.hpp +76 -34
  1465. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/unwrap_cv_reference.hpp +161 -78
  1466. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/use_default.hpp +17 -0
  1467. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/use_default_tag.hpp +29 -0
  1468. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/void.hpp +25 -16
  1469. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/yesno.hpp +30 -14
  1470. data/src/cxx_supportlib/vendor-modified/boost/parameter/binding.hpp +154 -70
  1471. data/src/cxx_supportlib/vendor-modified/boost/parameter/compose.hpp +210 -0
  1472. data/src/cxx_supportlib/vendor-modified/boost/parameter/config.hpp +75 -6
  1473. data/src/cxx_supportlib/vendor-modified/boost/parameter/deduced.hpp +132 -0
  1474. data/src/cxx_supportlib/vendor-modified/boost/parameter/is_argument_pack.hpp +29 -0
  1475. data/src/cxx_supportlib/vendor-modified/boost/parameter/keyword.hpp +724 -102
  1476. data/src/cxx_supportlib/vendor-modified/boost/parameter/keyword_fwd.hpp +23 -0
  1477. data/src/cxx_supportlib/vendor-modified/boost/parameter/macros.hpp +205 -72
  1478. data/src/cxx_supportlib/vendor-modified/boost/parameter/match.hpp +37 -44
  1479. data/src/cxx_supportlib/vendor-modified/boost/parameter/name.hpp +100 -126
  1480. data/src/cxx_supportlib/vendor-modified/boost/parameter/nested_keyword.hpp +111 -0
  1481. data/src/cxx_supportlib/vendor-modified/boost/parameter/optional.hpp +67 -0
  1482. data/src/cxx_supportlib/vendor-modified/boost/parameter/parameters.hpp +556 -887
  1483. data/src/cxx_supportlib/vendor-modified/boost/parameter/preprocessor.hpp +156 -1016
  1484. data/src/cxx_supportlib/vendor-modified/boost/parameter/preprocessor_no_spec.hpp +74 -0
  1485. data/src/cxx_supportlib/vendor-modified/boost/parameter/python.hpp +5 -6
  1486. data/src/cxx_supportlib/vendor-modified/boost/parameter/required.hpp +66 -0
  1487. data/src/cxx_supportlib/vendor-modified/boost/parameter/template_keyword.hpp +87 -0
  1488. data/src/cxx_supportlib/vendor-modified/boost/parameter/value_type.hpp +152 -70
  1489. data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +119 -25
  1490. data/src/cxx_supportlib/vendor-modified/boost/pool/object_pool.hpp +2 -2
  1491. data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +22 -9
  1492. data/src/cxx_supportlib/vendor-modified/boost/pool/pool_alloc.hpp +1 -1
  1493. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/alpha.h +19 -13
  1494. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +97 -28
  1495. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/blackfin.h +16 -10
  1496. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/convex.h +19 -13
  1497. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/e2k.h +54 -0
  1498. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ia64.h +19 -13
  1499. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/loongarch.h +41 -0
  1500. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/m68k.h +33 -27
  1501. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/mips.h +31 -20
  1502. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/parisc.h +24 -18
  1503. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ppc.h +82 -30
  1504. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ptx.h +50 -0
  1505. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/pyramid.h +13 -7
  1506. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/riscv.h +48 -0
  1507. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/rs6k.h +23 -12
  1508. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sparc.h +26 -13
  1509. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/superh.h +29 -15
  1510. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sys370.h +15 -9
  1511. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sys390.h +15 -9
  1512. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86/32.h +31 -25
  1513. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86/64.h +19 -13
  1514. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86.h +4 -4
  1515. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/z.h +14 -8
  1516. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +4 -1
  1517. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/borland.h +12 -11
  1518. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/clang.h +10 -9
  1519. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/comeau.h +10 -9
  1520. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/compaq.h +13 -12
  1521. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/diab.h +10 -9
  1522. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/digitalmars.h +10 -9
  1523. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/dignus.h +10 -9
  1524. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/edg.h +10 -9
  1525. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/ekopath.h +10 -9
  1526. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/gcc.h +11 -10
  1527. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/gcc_xml.h +9 -8
  1528. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/greenhills.h +12 -11
  1529. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/hp_acc.h +10 -9
  1530. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/iar.h +10 -9
  1531. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/ibm.h +15 -14
  1532. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/intel.h +18 -17
  1533. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/kai.h +10 -9
  1534. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/llvm.h +9 -8
  1535. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/metaware.h +9 -8
  1536. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/metrowerks.h +14 -13
  1537. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/microtec.h +9 -8
  1538. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/mpw.h +12 -11
  1539. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/nvcc.h +74 -0
  1540. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/palm.h +10 -9
  1541. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/pgi.h +10 -9
  1542. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/sgi_mipspro.h +12 -11
  1543. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/sunpro.h +14 -13
  1544. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/tendra.h +9 -8
  1545. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/visualc.h +13 -12
  1546. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/watcom.h +10 -9
  1547. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler.h +1 -0
  1548. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/arm/versions.h +16 -10
  1549. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/arm.h +21 -19
  1550. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/ppc/versions.h +27 -21
  1551. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/ppc.h +21 -19
  1552. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86/versions.h +73 -67
  1553. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86.h +39 -37
  1554. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd/versions.h +24 -19
  1555. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd.h +25 -23
  1556. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd.h +95 -46
  1557. data/src/cxx_supportlib/vendor-modified/boost/predef/language/cuda.h +53 -0
  1558. data/src/cxx_supportlib/vendor-modified/boost/predef/language/objc.h +9 -8
  1559. data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdc.h +11 -10
  1560. data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdcpp.h +41 -34
  1561. data/src/cxx_supportlib/vendor-modified/boost/predef/language.h +1 -0
  1562. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/cloudabi.h +10 -9
  1563. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/gnu.h +12 -11
  1564. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/uc.h +10 -9
  1565. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/vms.h +9 -8
  1566. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/zos.h +10 -9
  1567. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/cxx.h +11 -10
  1568. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/dinkumware.h +11 -10
  1569. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/libcomo.h +10 -9
  1570. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/modena.h +10 -9
  1571. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/msl.h +12 -11
  1572. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/roguewave.h +11 -10
  1573. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/sgi.h +10 -9
  1574. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/stdcpp3.h +12 -11
  1575. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/stlport.h +13 -12
  1576. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/vacpp.h +9 -8
  1577. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +103 -33
  1578. data/src/cxx_supportlib/vendor-modified/boost/predef/os/aix.h +14 -13
  1579. data/src/cxx_supportlib/vendor-modified/boost/predef/os/amigaos.h +10 -9
  1580. data/src/cxx_supportlib/vendor-modified/boost/predef/os/beos.h +9 -8
  1581. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/bsdi.h +10 -8
  1582. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/dragonfly.h +10 -8
  1583. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/free.h +11 -9
  1584. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/net.h +17 -15
  1585. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/open.h +60 -58
  1586. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd.h +22 -23
  1587. data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +15 -9
  1588. data/src/cxx_supportlib/vendor-modified/boost/predef/os/haiku.h +9 -8
  1589. data/src/cxx_supportlib/vendor-modified/boost/predef/os/hpux.h +11 -10
  1590. data/src/cxx_supportlib/vendor-modified/boost/predef/os/ios.h +12 -11
  1591. data/src/cxx_supportlib/vendor-modified/boost/predef/os/irix.h +10 -9
  1592. data/src/cxx_supportlib/vendor-modified/boost/predef/os/linux.h +14 -10
  1593. data/src/cxx_supportlib/vendor-modified/boost/predef/os/macos.h +14 -13
  1594. data/src/cxx_supportlib/vendor-modified/boost/predef/os/os400.h +9 -8
  1595. data/src/cxx_supportlib/vendor-modified/boost/predef/os/qnxnto.h +12 -11
  1596. data/src/cxx_supportlib/vendor-modified/boost/predef/os/solaris.h +10 -9
  1597. data/src/cxx_supportlib/vendor-modified/boost/predef/os/unix.h +24 -22
  1598. data/src/cxx_supportlib/vendor-modified/boost/predef/os/vms.h +11 -10
  1599. data/src/cxx_supportlib/vendor-modified/boost/predef/os/windows.h +16 -15
  1600. data/src/cxx_supportlib/vendor-modified/boost/predef/os.h +0 -1
  1601. data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +19 -21
  1602. data/src/cxx_supportlib/vendor-modified/boost/predef/other/wordsize.h +73 -0
  1603. data/src/cxx_supportlib/vendor-modified/boost/predef/other/workaround.h +22 -14
  1604. data/src/cxx_supportlib/vendor-modified/boost/predef/other.h +3 -2
  1605. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/android.h +44 -0
  1606. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/cloudabi.h +9 -8
  1607. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/ios.h +14 -9
  1608. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw.h +12 -11
  1609. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw32.h +10 -9
  1610. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw64.h +10 -9
  1611. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_desktop.h +10 -9
  1612. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_phone.h +9 -8
  1613. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_runtime.h +10 -9
  1614. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_server.h +9 -8
  1615. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_store.h +10 -9
  1616. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_system.h +9 -8
  1617. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_uwp.h +12 -11
  1618. data/src/cxx_supportlib/vendor-modified/boost/predef/platform.h +1 -1
  1619. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  1620. data/src/cxx_supportlib/vendor-modified/boost/predef/version_number.h +16 -14
  1621. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/add.hpp +54 -1
  1622. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/dec.hpp +33 -0
  1623. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/is_1_number.hpp +21 -0
  1624. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/is_maximum_number.hpp +22 -0
  1625. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/is_minimum_number.hpp +21 -0
  1626. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/maximum_number.hpp +19 -0
  1627. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/div.hpp +37 -1
  1628. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/inc.hpp +33 -0
  1629. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/dec_1024.hpp +531 -0
  1630. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/dec_256.hpp +276 -0
  1631. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/dec_512.hpp +275 -0
  1632. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/inc_1024.hpp +536 -0
  1633. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/inc_256.hpp +275 -0
  1634. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/inc_512.hpp +280 -0
  1635. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/mod.hpp +37 -1
  1636. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/mul.hpp +60 -1
  1637. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/sub.hpp +51 -1
  1638. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/detail/get_data.hpp +21 -21
  1639. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/enum.hpp +17 -1
  1640. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/insert.hpp +71 -0
  1641. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/remove.hpp +66 -0
  1642. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/replace.hpp +58 -0
  1643. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/to_list.hpp +7 -7
  1644. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/to_seq.hpp +7 -7
  1645. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/to_tuple.hpp +7 -7
  1646. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/limits/not_equal_1024.hpp +1044 -0
  1647. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/limits/not_equal_256.hpp +793 -0
  1648. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/limits/not_equal_512.hpp +532 -0
  1649. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/not_equal.hpp +44 -1
  1650. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +26 -34
  1651. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/limits.hpp +136 -3
  1652. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/deduce_d.hpp +27 -0
  1653. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/dmc/while.hpp +2 -3
  1654. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/limits/while_1024.hpp +1044 -0
  1655. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/limits/while_256.hpp +533 -0
  1656. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/limits/while_512.hpp +532 -0
  1657. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/while.hpp +27 -0
  1658. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/limits/while_1024.hpp +1044 -0
  1659. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/limits/while_256.hpp +533 -0
  1660. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/limits/while_512.hpp +532 -0
  1661. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/while.hpp +27 -0
  1662. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/limits/while_1024.hpp +531 -0
  1663. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/limits/while_256.hpp +275 -0
  1664. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/limits/while_512.hpp +275 -0
  1665. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/while.hpp +75 -0
  1666. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/auto_rec.hpp +41 -0
  1667. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/dmc/auto_rec.hpp +2 -2
  1668. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/limits/auto_rec_1024.hpp +532 -0
  1669. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/limits/auto_rec_256.hpp +280 -0
  1670. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/limits/auto_rec_512.hpp +276 -0
  1671. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/check_empty.hpp +19 -0
  1672. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/detail/is_empty.hpp +3 -3
  1673. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/intercept.hpp +29 -0
  1674. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/is_empty.hpp +0 -37
  1675. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/is_empty_variadic.hpp +28 -5
  1676. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/limits/intercept_1024.hpp +530 -0
  1677. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/limits/intercept_256.hpp +273 -0
  1678. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/limits/intercept_512.hpp +274 -0
  1679. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/overload.hpp +1 -3
  1680. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/va_opt.hpp +34 -0
  1681. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities.hpp +2 -0
  1682. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward1.hpp +27 -0
  1683. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward2.hpp +27 -0
  1684. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward3.hpp +27 -0
  1685. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward4.hpp +27 -0
  1686. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward5.hpp +27 -0
  1687. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward1_1024.hpp +2573 -0
  1688. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward1_256.hpp +1296 -0
  1689. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward1_512.hpp +1293 -0
  1690. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward2_1024.hpp +2573 -0
  1691. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward2_256.hpp +1296 -0
  1692. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward2_512.hpp +1293 -0
  1693. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward3_1024.hpp +2573 -0
  1694. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward3_256.hpp +1296 -0
  1695. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward3_512.hpp +1293 -0
  1696. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward4_1024.hpp +2573 -0
  1697. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward4_256.hpp +1296 -0
  1698. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward4_512.hpp +1293 -0
  1699. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward5_1024.hpp +2573 -0
  1700. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward5_256.hpp +1296 -0
  1701. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward5_512.hpp +1293 -0
  1702. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse1_1024.hpp +2571 -0
  1703. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse1_256.hpp +1296 -0
  1704. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse1_512.hpp +1291 -0
  1705. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse2_1024.hpp +2571 -0
  1706. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse2_256.hpp +1296 -0
  1707. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse2_512.hpp +1293 -0
  1708. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse3_1024.hpp +2571 -0
  1709. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse3_256.hpp +1296 -0
  1710. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse3_512.hpp +1293 -0
  1711. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse4_1024.hpp +2571 -0
  1712. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse4_256.hpp +1296 -0
  1713. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse4_512.hpp +1293 -0
  1714. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse5_1024.hpp +2571 -0
  1715. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse5_256.hpp +1296 -0
  1716. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse5_512.hpp +1293 -0
  1717. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse1.hpp +25 -0
  1718. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse2.hpp +25 -0
  1719. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse3.hpp +25 -0
  1720. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse4.hpp +25 -0
  1721. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse5.hpp +25 -0
  1722. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/local_1024.hpp +1549 -0
  1723. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/local_256.hpp +782 -0
  1724. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/local_512.hpp +781 -0
  1725. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/rlocal_1024.hpp +1549 -0
  1726. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/rlocal_256.hpp +782 -0
  1727. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/rlocal_512.hpp +781 -0
  1728. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/local.hpp +27 -0
  1729. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/rlocal.hpp +25 -0
  1730. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/dmc/fold_left.hpp +3 -2
  1731. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/fold_left.hpp +28 -0
  1732. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/fold_right.hpp +29 -0
  1733. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_left_1024.hpp +1044 -0
  1734. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_left_256.hpp +533 -0
  1735. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_left_512.hpp +532 -0
  1736. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_right_1024.hpp +1557 -0
  1737. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_right_256.hpp +791 -0
  1738. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_right_512.hpp +789 -0
  1739. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/fold_left.hpp +28 -0
  1740. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/fold_right.hpp +26 -0
  1741. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_left_1024.hpp +532 -0
  1742. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_left_256.hpp +275 -0
  1743. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_left_512.hpp +276 -0
  1744. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_right_1024.hpp +532 -0
  1745. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_right_256.hpp +275 -0
  1746. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_right_512.hpp +276 -0
  1747. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/enum.hpp +13 -1
  1748. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/fold_left.hpp +60 -0
  1749. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/fold_right.hpp +44 -0
  1750. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/for_each_product.hpp +25 -6
  1751. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/limits/fold_left_1024.hpp +531 -0
  1752. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/limits/fold_left_256.hpp +275 -0
  1753. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/limits/fold_left_512.hpp +275 -0
  1754. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/reverse.hpp +35 -0
  1755. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/size.hpp +56 -1
  1756. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/to_array.hpp +21 -88
  1757. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/to_tuple.hpp +14 -14
  1758. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/bool.hpp +22 -0
  1759. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/limits/bool_1024.hpp +531 -0
  1760. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/limits/bool_256.hpp +275 -0
  1761. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/limits/bool_512.hpp +275 -0
  1762. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/punctuation/is_begin_parens.hpp +1 -5
  1763. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/punctuation/remove_parens.hpp +0 -4
  1764. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/deduce_r.hpp +27 -0
  1765. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/dmc/for.hpp +3 -2
  1766. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/for.hpp +26 -0
  1767. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/limits/for_1024.hpp +1044 -0
  1768. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/limits/for_256.hpp +533 -0
  1769. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/limits/for_512.hpp +532 -0
  1770. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/for.hpp +28 -0
  1771. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/limits/for_1024.hpp +1044 -0
  1772. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/limits/for_256.hpp +533 -0
  1773. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/limits/for_512.hpp +532 -0
  1774. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/msvc/for.hpp +1 -0
  1775. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/for.hpp +121 -7
  1776. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/for_1024.hpp +531 -0
  1777. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/for_256.hpp +275 -0
  1778. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/for_512.hpp +275 -0
  1779. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/repeat_1024.hpp +1557 -0
  1780. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/repeat_256.hpp +791 -0
  1781. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/repeat_512.hpp +789 -0
  1782. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/repeat.hpp +22 -0
  1783. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/repeat_from_to.hpp +27 -0
  1784. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/binary_transform.hpp +6 -11
  1785. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/is_empty.hpp +11 -11
  1786. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/limits/split_1024.hpp +530 -0
  1787. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/limits/split_256.hpp +272 -0
  1788. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/limits/split_512.hpp +274 -0
  1789. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/split.hpp +23 -0
  1790. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/elem.hpp +23 -0
  1791. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/enum.hpp +23 -0
  1792. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/fold_left.hpp +52 -0
  1793. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/fold_right.hpp +37 -0
  1794. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/for_each.hpp +27 -27
  1795. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/for_each_i.hpp +28 -28
  1796. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/elem_1024.hpp +530 -0
  1797. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/elem_256.hpp +272 -0
  1798. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/elem_512.hpp +274 -0
  1799. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/enum_1024.hpp +530 -0
  1800. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/enum_256.hpp +272 -0
  1801. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/enum_512.hpp +274 -0
  1802. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_left_1024.hpp +1556 -0
  1803. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_left_256.hpp +1053 -0
  1804. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_left_512.hpp +788 -0
  1805. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_right_1024.hpp +530 -0
  1806. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_right_256.hpp +273 -0
  1807. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_right_512.hpp +274 -0
  1808. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/size_1024.hpp +1043 -0
  1809. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/size_256.hpp +532 -0
  1810. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/size_512.hpp +531 -0
  1811. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/replace.hpp +7 -7
  1812. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/rest_n.hpp +16 -10
  1813. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/size.hpp +23 -0
  1814. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/variadic_seq_to_seq.hpp +0 -2
  1815. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/stringize.hpp +1 -1
  1816. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/detail/is_single_return.hpp +5 -5
  1817. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/eat.hpp +4 -18
  1818. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/elem.hpp +11 -157
  1819. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/insert.hpp +2 -7
  1820. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/reverse_128.hpp +403 -0
  1821. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/reverse_256.hpp +1171 -0
  1822. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/reverse_64.hpp +83 -0
  1823. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_list_128.hpp +595 -0
  1824. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_list_256.hpp +1747 -0
  1825. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_list_64.hpp +83 -0
  1826. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_128.hpp +403 -0
  1827. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_256.hpp +1171 -0
  1828. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_64.hpp +84 -0
  1829. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/pop_back.hpp +16 -21
  1830. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/pop_front.hpp +16 -21
  1831. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/push_back.hpp +1 -6
  1832. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/push_front.hpp +1 -7
  1833. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/rem.hpp +21 -43
  1834. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/remove.hpp +16 -21
  1835. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/replace.hpp +2 -7
  1836. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/reverse.hpp +38 -25
  1837. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/size.hpp +13 -6
  1838. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_array.hpp +15 -12
  1839. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_list.hpp +37 -25
  1840. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_seq.hpp +38 -24
  1841. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/detail/has_opt.hpp +39 -0
  1842. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/detail/is_single_return.hpp +5 -5
  1843. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/elem.hpp +93 -71
  1844. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +28 -0
  1845. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/elem_128.hpp +275 -0
  1846. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/elem_256.hpp +723 -0
  1847. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/elem_64.hpp +81 -0
  1848. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/size_128.hpp +47 -0
  1849. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/size_256.hpp +53 -0
  1850. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/size_64.hpp +23 -0
  1851. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/size.hpp +39 -4
  1852. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_array.hpp +15 -9
  1853. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_list.hpp +9 -2
  1854. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_seq.hpp +1 -3
  1855. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_tuple.hpp +1 -3
  1856. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic.hpp +1 -0
  1857. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/wstringize.hpp +1 -1
  1858. data/src/cxx_supportlib/vendor-modified/boost/random/additive_combine.hpp +2 -2
  1859. data/src/cxx_supportlib/vendor-modified/boost/random/detail/gray_coded_qrng.hpp +190 -0
  1860. data/src/cxx_supportlib/vendor-modified/boost/random/detail/int_float_pair.hpp +3 -4
  1861. data/src/cxx_supportlib/vendor-modified/boost/random/detail/integer_log2.hpp +1 -1
  1862. data/src/cxx_supportlib/vendor-modified/boost/random/detail/mixmax_skip_N17.ipp +287 -0
  1863. data/src/cxx_supportlib/vendor-modified/boost/random/detail/niederreiter_base2_table.hpp +514 -0
  1864. data/src/cxx_supportlib/vendor-modified/boost/random/detail/operators.hpp +1 -1
  1865. data/src/cxx_supportlib/vendor-modified/boost/random/detail/qrng_base.hpp +291 -0
  1866. data/src/cxx_supportlib/vendor-modified/boost/random/detail/seed.hpp +9 -11
  1867. data/src/cxx_supportlib/vendor-modified/boost/random/detail/seed_impl.hpp +13 -14
  1868. data/src/cxx_supportlib/vendor-modified/boost/random/detail/sobol_table.hpp +4107 -0
  1869. data/src/cxx_supportlib/vendor-modified/boost/random/discard_block.hpp +2 -2
  1870. data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +4 -0
  1871. data/src/cxx_supportlib/vendor-modified/boost/random/faure.hpp +367 -0
  1872. data/src/cxx_supportlib/vendor-modified/boost/random/generate_canonical.hpp +2 -3
  1873. data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +3 -3
  1874. data/src/cxx_supportlib/vendor-modified/boost/random/independent_bits.hpp +3 -3
  1875. data/src/cxx_supportlib/vendor-modified/boost/random/inversive_congruential.hpp +2 -3
  1876. data/src/cxx_supportlib/vendor-modified/boost/random/lagged_fibonacci.hpp +4 -4
  1877. data/src/cxx_supportlib/vendor-modified/boost/random/linear_congruential.hpp +5 -7
  1878. data/src/cxx_supportlib/vendor-modified/boost/random/linear_feedback_shift.hpp +3 -3
  1879. data/src/cxx_supportlib/vendor-modified/boost/random/mersenne_twister.hpp +2 -2
  1880. data/src/cxx_supportlib/vendor-modified/boost/random/mixmax.hpp +313 -0
  1881. data/src/cxx_supportlib/vendor-modified/boost/random/niederreiter_base2.hpp +360 -0
  1882. data/src/cxx_supportlib/vendor-modified/boost/random/random_device.hpp +2 -2
  1883. data/src/cxx_supportlib/vendor-modified/boost/random/shuffle_order.hpp +2 -2
  1884. data/src/cxx_supportlib/vendor-modified/boost/random/sobol.hpp +238 -0
  1885. data/src/cxx_supportlib/vendor-modified/boost/random/subtract_with_carry.hpp +4 -4
  1886. data/src/cxx_supportlib/vendor-modified/boost/random/traits.hpp +3 -3
  1887. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int_distribution.hpp +7 -7
  1888. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real_distribution.hpp +2 -3
  1889. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_smallint.hpp +4 -5
  1890. data/src/cxx_supportlib/vendor-modified/boost/random/xor_combine.hpp +4 -2
  1891. data/src/cxx_supportlib/vendor-modified/boost/random.hpp +1 -0
  1892. data/src/cxx_supportlib/vendor-modified/boost/range/as_literal.hpp +43 -6
  1893. data/src/cxx_supportlib/vendor-modified/boost/range/begin.hpp +17 -15
  1894. data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +2 -2
  1895. data/src/cxx_supportlib/vendor-modified/boost/range/config.hpp +1 -1
  1896. data/src/cxx_supportlib/vendor-modified/boost/range/detail/common.hpp +1 -3
  1897. data/src/cxx_supportlib/vendor-modified/boost/range/detail/implementation_help.hpp +2 -2
  1898. data/src/cxx_supportlib/vendor-modified/boost/range/distance.hpp +11 -5
  1899. data/src/cxx_supportlib/vendor-modified/boost/range/end.hpp +18 -16
  1900. data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +3 -3
  1901. data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +0 -32
  1902. data/src/cxx_supportlib/vendor-modified/boost/range/rbegin.hpp +0 -13
  1903. data/src/cxx_supportlib/vendor-modified/boost/range/rend.hpp +0 -13
  1904. data/src/cxx_supportlib/vendor-modified/boost/range/size.hpp +1 -1
  1905. data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +6 -2
  1906. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +95 -51
  1907. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +82 -76
  1908. data/src/cxx_supportlib/vendor-modified/boost/regex/config/borland.hpp +1 -1
  1909. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +104 -101
  1910. data/src/cxx_supportlib/vendor-modified/boost/regex/pattern_except.hpp +4 -72
  1911. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +4 -140
  1912. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +8 -761
  1913. data/src/cxx_supportlib/vendor-modified/boost/regex/regex_traits.hpp +4 -0
  1914. data/src/cxx_supportlib/vendor-modified/boost/regex/user.hpp +2 -0
  1915. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +32 -16
  1916. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +50 -25
  1917. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +64 -30
  1918. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/c_regex_traits.hpp +342 -42
  1919. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +111 -28
  1920. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cregex.hpp +0 -117
  1921. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +1516 -0
  1922. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/indexed_bit_flag.hpp +54 -0
  1923. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +18 -7
  1924. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +21 -12
  1925. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +39 -1
  1926. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/object_cache.hpp +171 -0
  1927. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +128 -0
  1928. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +42 -18
  1929. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +24 -10
  1930. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +57 -54
  1931. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +12 -12
  1932. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/primary_transform.hpp +1 -1
  1933. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/protected_call.hpp +3 -1
  1934. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex.hpp +0 -36
  1935. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +10 -8
  1936. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +2 -8
  1937. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +38 -7
  1938. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +3 -1
  1939. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +9 -15
  1940. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +1 -1
  1941. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +653 -36
  1942. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -4
  1943. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/states.hpp +1 -1
  1944. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/sub_match.hpp +1 -1
  1945. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +1 -9
  1946. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +3 -11
  1947. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/unicode_iterator.hpp +871 -0
  1948. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +526 -40
  1949. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex.hpp +734 -0
  1950. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +1576 -0
  1951. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +3130 -0
  1952. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/c_regex_traits.hpp +474 -0
  1953. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/char_regex_traits.hpp +59 -0
  1954. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cpp_regex_traits.hpp +1040 -0
  1955. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cregex.hpp +195 -0
  1956. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/error_type.hpp +59 -0
  1957. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +1402 -0
  1958. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_category.hpp +84 -0
  1959. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_traits.hpp +32 -0
  1960. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_flags.hpp +156 -0
  1961. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_results.hpp +667 -0
  1962. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +173 -0
  1963. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/object_cache.hpp +160 -0
  1964. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +106 -0
  1965. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher.hpp +576 -0
  1966. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +921 -0
  1967. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +1874 -0
  1968. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/primary_transform.hpp +120 -0
  1969. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regbase.hpp +158 -0
  1970. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex.hpp +106 -0
  1971. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_format.hpp +1124 -0
  1972. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_fwd.hpp +73 -0
  1973. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_grep.hpp +98 -0
  1974. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_iterator.hpp +173 -0
  1975. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_match.hpp +92 -0
  1976. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_merge.hpp +71 -0
  1977. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_raw_buffer.hpp +213 -0
  1978. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_replace.hpp +77 -0
  1979. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_search.hpp +103 -0
  1980. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_split.hpp +152 -0
  1981. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_token_iterator.hpp +255 -0
  1982. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits.hpp +130 -0
  1983. data/src/cxx_supportlib/vendor-modified/boost/{libs/regex/src/regex_traits_defaults.cpp → regex/v5/regex_traits_defaults.hpp} +719 -415
  1984. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +159 -0
  1985. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/states.hpp +299 -0
  1986. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/sub_match.hpp +382 -0
  1987. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/syntax_type.hpp +105 -0
  1988. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_iterator.hpp +177 -0
  1989. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_token_iterator.hpp +312 -0
  1990. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/unicode_iterator.hpp +862 -0
  1991. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +1311 -0
  1992. data/src/cxx_supportlib/vendor-modified/boost/regex.hpp +4 -0
  1993. data/src/cxx_supportlib/vendor-modified/boost/regex_fwd.hpp +4 -0
  1994. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +93 -444
  1995. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +5 -5
  1996. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +8 -4
  1997. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc.hpp +7 -0
  1998. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +63 -0
  1999. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +11 -0
  2000. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_nt.hpp +7 -0
  2001. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_pt.hpp +7 -0
  2002. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_spin.hpp +7 -0
  2003. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_std_atomic.hpp +8 -1
  2004. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_sync.hpp +13 -2
  2005. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +9 -9
  2006. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_sp_deleter.hpp +3 -3
  2007. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +88 -48
  2008. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_convertible.hpp +1 -1
  2009. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +12 -16
  2010. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +15 -4
  2011. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +12 -4
  2012. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +17 -4
  2013. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +148 -0
  2014. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +15 -4
  2015. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +15 -4
  2016. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +15 -4
  2017. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +15 -4
  2018. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +15 -4
  2019. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +27 -17
  2020. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +18 -9
  2021. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +16 -5
  2022. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +12 -4
  2023. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +27 -18
  2024. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +12 -4
  2025. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +15 -4
  2026. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +48 -31
  2027. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +27 -0
  2028. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +69 -0
  2029. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_thread_pause.hpp +51 -0
  2030. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_thread_sleep.hpp +104 -0
  2031. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_typeinfo_.hpp +58 -0
  2032. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +7 -9
  2033. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +7 -0
  2034. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_atomic.hpp +85 -0
  2035. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_nt.hpp +7 -0
  2036. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_pt.hpp +7 -0
  2037. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_std_atomic.hpp +13 -5
  2038. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_sync.hpp +8 -1
  2039. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +14 -140
  2040. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +47 -1
  2041. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +22 -22
  2042. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +1 -1
  2043. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +2 -2
  2044. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +2 -2
  2045. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +4 -4
  2046. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +119 -29
  2047. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +79 -8
  2048. data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +5 -4
  2049. data/src/cxx_supportlib/vendor-modified/boost/system/config.hpp +4 -24
  2050. data/src/cxx_supportlib/vendor-modified/boost/system/detail/append_int.hpp +32 -0
  2051. data/src/cxx_supportlib/vendor-modified/boost/system/detail/cerrno.hpp +329 -0
  2052. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +81 -0
  2053. data/src/cxx_supportlib/vendor-modified/boost/system/detail/enable_if.hpp +32 -0
  2054. data/src/cxx_supportlib/vendor-modified/boost/system/detail/errc.hpp +126 -0
  2055. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +219 -0
  2056. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +196 -0
  2057. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +726 -0
  2058. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +297 -0
  2059. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +123 -0
  2060. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +108 -0
  2061. data/src/cxx_supportlib/vendor-modified/boost/system/detail/interop_category.hpp +107 -0
  2062. data/src/cxx_supportlib/vendor-modified/boost/system/detail/is_same.hpp +33 -0
  2063. data/src/cxx_supportlib/vendor-modified/boost/system/detail/snprintf.hpp +73 -0
  2064. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category.hpp +83 -0
  2065. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category_impl.hpp +97 -0
  2066. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category.hpp +110 -0
  2067. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_impl.hpp +61 -0
  2068. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_message.hpp +71 -0
  2069. data/src/cxx_supportlib/vendor-modified/boost/system/detail/throws.hpp +59 -0
  2070. data/src/cxx_supportlib/vendor-modified/boost/system/errc.hpp +57 -0
  2071. data/src/cxx_supportlib/vendor-modified/boost/system/error_category.hpp +13 -0
  2072. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +12 -760
  2073. data/src/cxx_supportlib/vendor-modified/boost/system/error_condition.hpp +13 -0
  2074. data/src/cxx_supportlib/vendor-modified/boost/system/generic_category.hpp +13 -0
  2075. data/src/cxx_supportlib/vendor-modified/boost/system/is_error_code_enum.hpp +30 -0
  2076. data/src/cxx_supportlib/vendor-modified/boost/system/is_error_condition_enum.hpp +30 -0
  2077. data/src/cxx_supportlib/vendor-modified/boost/system/system_category.hpp +14 -0
  2078. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +30 -59
  2079. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/deque_adaptor.hpp +1 -1
  2080. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/deque_base.hpp +1 -1
  2081. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +9 -21
  2082. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +9 -21
  2083. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_adaptor.hpp +1 -1
  2084. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_base.hpp +1 -1
  2085. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_op_status.hpp +3 -1
  2086. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_bounded_queue.hpp +1 -1
  2087. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_deque.hpp +3 -3
  2088. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_priority_queue.hpp +4 -4
  2089. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_queue.hpp +3 -3
  2090. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_timed_queue.hpp +80 -14
  2091. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/queue.hpp +2 -1
  2092. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +18 -3
  2093. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/invoke.hpp +16 -17
  2094. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/move.hpp +13 -6
  2095. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/nullary_function.hpp +8 -3
  2096. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/platform_time.hpp +8 -8
  2097. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +33 -12
  2098. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread_safety.hpp +160 -0
  2099. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/tss_hooks.hpp +2 -2
  2100. data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +3 -3
  2101. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/basic_thread_pool.hpp +27 -1
  2102. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor.hpp +2 -0
  2103. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor_adaptor.hpp +2 -0
  2104. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/generic_executor_ref.hpp +2 -0
  2105. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/inline_executor.hpp +8 -0
  2106. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/loop_executor.hpp +4 -0
  2107. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduled_thread_pool.hpp +4 -0
  2108. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduler.hpp +2 -0
  2109. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduling_adaptor.hpp +3 -0
  2110. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/serial_executor.hpp +4 -0
  2111. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/serial_executor_cont.hpp +9 -2
  2112. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/thread_executor.hpp +6 -0
  2113. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/work.hpp +3 -1
  2114. data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v2/task_region.hpp +6 -2
  2115. data/src/cxx_supportlib/vendor-modified/boost/thread/externally_locked.hpp +1 -0
  2116. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +12 -2
  2117. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_any.hpp +1 -0
  2118. data/src/cxx_supportlib/vendor-modified/boost/thread/interruption.hpp +22 -0
  2119. data/src/cxx_supportlib/vendor-modified/boost/thread/lock_guard.hpp +4 -4
  2120. data/src/cxx_supportlib/vendor-modified/boost/thread/lockable_traits.hpp +31 -0
  2121. data/src/cxx_supportlib/vendor-modified/boost/thread/poly_lockable.hpp +7 -2
  2122. data/src/cxx_supportlib/vendor-modified/boost/thread/poly_shared_lockable.hpp +16 -12
  2123. data/src/cxx_supportlib/vendor-modified/boost/thread/poly_shared_lockable_adapter.hpp +3 -4
  2124. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +20 -26
  2125. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +8 -15
  2126. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/mutex.hpp +17 -88
  2127. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once.hpp +29 -28
  2128. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once_atomic.hpp +1 -1
  2129. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_helpers.hpp +163 -18
  2130. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +5 -4
  2131. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/recursive_mutex.hpp +25 -25
  2132. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +1 -1
  2133. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +21 -13
  2134. data/src/cxx_supportlib/vendor-modified/boost/thread/scoped_thread.hpp +9 -0
  2135. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_guard.hpp +5 -0
  2136. data/src/cxx_supportlib/vendor-modified/boost/thread/tss.hpp +23 -41
  2137. data/src/cxx_supportlib/vendor-modified/boost/thread/user_scheduler.hpp +3 -0
  2138. data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +1 -1
  2139. data/src/cxx_supportlib/vendor-modified/boost/thread/xtime.hpp +6 -6
  2140. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +232 -56
  2141. data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +3 -2
  2142. data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +32 -27
  2143. data/src/cxx_supportlib/vendor-modified/boost/tuple/tuple.hpp +51 -0
  2144. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +22 -20
  2145. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +1 -1
  2146. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +1 -1
  2147. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_pointer.hpp +1 -1
  2148. data/src/cxx_supportlib/vendor-modified/boost/type_traits/aligned_storage.hpp +1 -1
  2149. data/src/cxx_supportlib/vendor-modified/boost/type_traits/alignment_of.hpp +3 -3
  2150. data/src/cxx_supportlib/vendor-modified/boost/type_traits/conjunction.hpp +40 -0
  2151. data/src/cxx_supportlib/vendor-modified/boost/type_traits/copy_cv_ref.hpp +31 -0
  2152. data/src/cxx_supportlib/vendor-modified/boost/type_traits/copy_reference.hpp +35 -0
  2153. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +3 -1
  2154. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +36 -3
  2155. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/detector.hpp +1 -1
  2156. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_binary_operator.hpp +6 -6
  2157. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_postfix_operator.hpp +55 -0
  2158. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_prefix_operator.hpp +72 -0
  2159. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_03.hpp +108 -0
  2160. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_11.hpp +676 -0
  2161. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_msvc10_fix.hpp +30 -0
  2162. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_tester.hpp +415 -255
  2163. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_likely_lambda.hpp +4 -3
  2164. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp +1345 -1542
  2165. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_03.hpp +117 -0
  2166. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_11.hpp +697 -0
  2167. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_rvalue_reference_msvc10_fix.hpp +43 -0
  2168. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected.hpp +1 -1
  2169. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected_or.hpp +1 -1
  2170. data/src/cxx_supportlib/vendor-modified/boost/type_traits/disjunction.hpp +40 -0
  2171. data/src/cxx_supportlib/vendor-modified/boost/type_traits/enable_if.hpp +37 -0
  2172. data/src/cxx_supportlib/vendor-modified/boost/type_traits/extent.hpp +2 -2
  2173. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_dereference.hpp +344 -0
  2174. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus.hpp +11 -6
  2175. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus_assign.hpp +11 -6
  2176. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_copy.hpp +1 -1
  2177. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus_assign.hpp +11 -6
  2178. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_decrement.hpp +21 -0
  2179. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_increment.hpp +21 -0
  2180. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_decrement.hpp +21 -0
  2181. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_increment.hpp +22 -0
  2182. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +1 -1
  2183. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +2 -1
  2184. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +6 -16
  2185. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_promotion.hpp +2 -2
  2186. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +18 -8
  2187. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_array.hpp +2 -2
  2188. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_base_and_derived.hpp +2 -2
  2189. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_bounded_array.hpp +42 -0
  2190. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +6 -3
  2191. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_compound.hpp +1 -1
  2192. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_const.hpp +1 -1
  2193. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_constructible.hpp +1 -1
  2194. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_convertible.hpp +4 -4
  2195. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_assignable.hpp +3 -4
  2196. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_constructible.hpp +4 -6
  2197. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_default_constructible.hpp +1 -1
  2198. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_destructible.hpp +1 -1
  2199. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected.hpp +1 -1
  2200. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_convertible.hpp +1 -1
  2201. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_exact.hpp +1 -1
  2202. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_empty.hpp +4 -4
  2203. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_enum.hpp +4 -4
  2204. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_final.hpp +1 -1
  2205. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_function.hpp +4 -79
  2206. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_fundamental.hpp +1 -1
  2207. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_integral.hpp +3 -3
  2208. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_lvalue_reference.hpp +1 -1
  2209. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_function_pointer.hpp +3 -97
  2210. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_pointer.hpp +1 -1
  2211. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_noncopyable.hpp +39 -0
  2212. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +2 -2
  2213. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +2 -2
  2214. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_pointer.hpp +1 -1
  2215. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +4 -0
  2216. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_same.hpp +1 -1
  2217. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_scoped_enum.hpp +26 -0
  2218. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_signed.hpp +2 -2
  2219. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_trivially_copyable.hpp +31 -0
  2220. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_unbounded_array.hpp +41 -0
  2221. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_unscoped_enum.hpp +25 -0
  2222. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_unsigned.hpp +2 -2
  2223. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +105 -64
  2224. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_volatile.hpp +1 -1
  2225. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_void.hpp +1 -1
  2226. data/src/cxx_supportlib/vendor-modified/boost/type_traits/negation.hpp +23 -0
  2227. data/src/cxx_supportlib/vendor-modified/boost/type_traits/nonesuch.hpp +1 -1
  2228. data/src/cxx_supportlib/vendor-modified/boost/type_traits/rank.hpp +4 -4
  2229. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_all_extents.hpp +1 -1
  2230. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_const.hpp +1 -1
  2231. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv.hpp +1 -1
  2232. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_extent.hpp +1 -1
  2233. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_volatile.hpp +1 -1
  2234. data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +3 -3
  2235. data/src/cxx_supportlib/vendor-modified/boost/typeof/constant.hpp +26 -0
  2236. data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +4 -4
  2237. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -3
  2238. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +1 -1
  2239. data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +5 -5
  2240. data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +8 -8
  2241. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +9 -9
  2242. data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +3 -3
  2243. data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +2 -2
  2244. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +6 -6
  2245. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +2 -2
  2246. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +1 -1
  2247. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/string.hpp +1 -1
  2248. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +5 -5
  2249. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +3 -3
  2250. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +2 -2
  2251. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof.hpp +4 -4
  2252. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +18 -17
  2253. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +5 -5
  2254. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +201 -201
  2255. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +301 -301
  2256. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +401 -401
  2257. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +101 -101
  2258. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +819 -0
  2259. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +2 -1
  2260. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +1647 -2909
  2261. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +8 -14
  2262. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +262 -0
  2263. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +8 -13
  2264. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +309 -150
  2265. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +10 -1
  2266. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +207 -84
  2267. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +10 -1
  2268. data/src/cxx_supportlib/vendor-modified/boost/utility/base_from_member.hpp +2 -1
  2269. data/src/cxx_supportlib/vendor-modified/boost/utility/binary.hpp +3 -2
  2270. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +3 -0
  2271. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/result_of_iterate.hpp +3 -3
  2272. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/result_of_variadic.hpp +190 -0
  2273. data/src/cxx_supportlib/vendor-modified/boost/utility/in_place_factory.hpp +6 -0
  2274. data/src/cxx_supportlib/vendor-modified/boost/utility/result_of.hpp +33 -11
  2275. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +11 -44
  2276. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +56 -52
  2277. data/src/cxx_supportlib/vendor-modified/boost/utility/typed_in_place_factory.hpp +6 -1
  2278. data/src/cxx_supportlib/vendor-modified/boost/utility/value_init.hpp +34 -68
  2279. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  2280. data/src/cxx_supportlib/vendor-modified/jsoncpp/json-forwards.h +261 -143
  2281. data/src/cxx_supportlib/vendor-modified/jsoncpp/json.h +947 -763
  2282. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +1487 -1477
  2283. data/src/cxx_supportlib/vendor-modified/modp_b64_data.h +0 -4
  2284. data/src/cxx_supportlib/vendor-modified/modp_b64_strict_aliasing.cpp +5 -1
  2285. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/changelog.md +107 -5
  2286. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/readme.md +2 -2
  2287. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/close.hpp +12 -1
  2288. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/asio.hpp +13 -3
  2289. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/functional.hpp +2 -7
  2290. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/memory.hpp +0 -1
  2291. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/thread.hpp +6 -2
  2292. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/core.hpp +13 -1
  2293. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/connection.hpp +6 -15
  2294. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/endpoint.hpp +24 -24
  2295. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp +1 -0
  2296. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/extensions/permessage_deflate/enabled.hpp +84 -19
  2297. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/frame.hpp +3 -0
  2298. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/impl/parser.hpp +4 -0
  2299. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/parser.hpp +10 -0
  2300. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/impl/connection_impl.hpp +150 -147
  2301. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/impl/endpoint_impl.hpp +4 -4
  2302. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/base.hpp +1 -1
  2303. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/hybi13.hpp +47 -25
  2304. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/roles/client_endpoint.hpp +3 -3
  2305. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/roles/server_endpoint.hpp +14 -9
  2306. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/sha1/sha1.hpp +189 -189
  2307. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/asio/connection.hpp +59 -66
  2308. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/asio/endpoint.hpp +73 -38
  2309. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/asio/security/none.hpp +9 -7
  2310. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/asio/security/tls.hpp +12 -22
  2311. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/base/endpoint.hpp +1 -1
  2312. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/debug/connection.hpp +11 -11
  2313. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/debug/endpoint.hpp +1 -1
  2314. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/iostream/connection.hpp +13 -13
  2315. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/iostream/endpoint.hpp +3 -3
  2316. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/stub/connection.hpp +8 -8
  2317. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/uri.hpp +1 -0
  2318. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/utilities.hpp +2 -4
  2319. data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/version.hpp +3 -3
  2320. data/src/helper-scripts/node-loader.js +1 -1
  2321. data/src/helper-scripts/prespawn +1 -0
  2322. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +56 -0
  2323. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +39 -0
  2324. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +72 -0
  2325. data/src/nginx_module/Configuration.c +14 -1
  2326. data/src/nginx_module/ContentHandler.c +5 -1
  2327. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +31 -0
  2328. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +69 -0
  2329. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +68 -0
  2330. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +15 -0
  2331. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +23 -0
  2332. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +6 -0
  2333. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +12 -0
  2334. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +4 -0
  2335. data/src/nginx_module/config +2 -0
  2336. data/src/nginx_module/ngx_http_passenger_module.c +4 -2
  2337. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/common.js +50 -29
  2338. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/cli-config.js +20 -20
  2339. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/npm-config.js +11 -11
  2340. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/syslog-config.js +3 -3
  2341. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config.js +8 -2
  2342. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/container.js +2 -1
  2343. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/logger.js +174 -146
  2344. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/console.js +4 -2
  2345. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/file.js +15 -5
  2346. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/http.js +14 -4
  2347. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports.js +26 -24
  2348. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston.js +5 -5
  2349. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/async/package.json +4 -13
  2350. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/package.json +19 -33
  2351. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/cycle/package.json +11 -29
  2352. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/eyes/package.json +12 -40
  2353. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/isstream/package.json +3 -12
  2354. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/stack-trace/lib/stack-trace.js +49 -24
  2355. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/stack-trace/package.json +4 -16
  2356. data/src/nodejs_supportlib/vendor-copy/winston/package.json +11 -55
  2357. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +5 -1
  2358. data/src/ruby_supportlib/phusion_passenger/admin_tools/memory_stats.rb +1 -1
  2359. data/src/ruby_supportlib/phusion_passenger/admin_tools.rb +1 -1
  2360. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +28 -0
  2361. data/src/ruby_supportlib/phusion_passenger/common_library.rb +2 -0
  2362. data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +1 -1
  2363. data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +1 -1
  2364. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +3 -2
  2365. data/src/ruby_supportlib/phusion_passenger/config/restart_app_command.rb +16 -12
  2366. data/src/ruby_supportlib/phusion_passenger/console_text_template.rb +7 -2
  2367. data/src/ruby_supportlib/phusion_passenger/constants.rb +4 -2
  2368. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +26 -9
  2369. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +47 -0
  2370. data/src/ruby_supportlib/phusion_passenger/packaging.rb +2 -1
  2371. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +2 -4
  2372. data/src/ruby_supportlib/phusion_passenger/platform_info/binary_compatibility.rb +23 -19
  2373. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +1 -1
  2374. data/src/ruby_supportlib/phusion_passenger/platform_info/curl.rb +3 -0
  2375. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +4 -1
  2376. data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/libs.rb +6 -2
  2377. data/src/ruby_supportlib/phusion_passenger/platform_info/linux.rb +2 -1
  2378. data/src/ruby_supportlib/phusion_passenger/platform_info/openssl.rb +5 -0
  2379. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +46 -27
  2380. data/src/ruby_supportlib/phusion_passenger/platform_info/pcre.rb +65 -0
  2381. data/src/ruby_supportlib/phusion_passenger/platform_info/ruby.rb +2 -2
  2382. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +19 -0
  2383. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +23 -18
  2384. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +11 -7
  2385. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +20 -1
  2386. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +5 -2
  2387. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +29 -18
  2388. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +1 -1
  2389. data/src/ruby_supportlib/phusion_passenger/utils/unseekable_socket.rb +15 -11
  2390. data/src/ruby_supportlib/phusion_passenger.rb +8 -8
  2391. metadata +820 -201
  2392. data/src/cxx_supportlib/vendor-modified/boost/asio/datagram_socket_service.hpp +0 -468
  2393. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer_service.hpp +0 -175
  2394. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_fwd.hpp +0 -42
  2395. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detached.hpp +0 -67
  2396. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_spawn.hpp +0 -878
  2397. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/detached.hpp +0 -93
  2398. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/redirect_error.hpp +0 -296
  2399. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental.hpp +0 -22
  2400. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_type.hpp +0 -52
  2401. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.cpp +0 -25
  2402. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_service.hpp +0 -202
  2403. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor_service.hpp +0 -281
  2404. data/src/cxx_supportlib/vendor-modified/boost/asio/raw_socket_service.hpp +0 -468
  2405. data/src/cxx_supportlib/vendor-modified/boost/asio/seq_packet_socket_service.hpp +0 -418
  2406. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_service.hpp +0 -251
  2407. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_service.hpp +0 -144
  2408. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_acceptor_service.hpp +0 -374
  2409. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_socket_service.hpp +0 -414
  2410. data/src/cxx_supportlib/vendor-modified/boost/asio/waitable_timer_service.hpp +0 -212
  2411. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_handle.hpp +0 -275
  2412. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle_service.hpp +0 -185
  2413. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle_service.hpp +0 -216
  2414. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle_service.hpp +0 -212
  2415. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag.hpp +0 -71
  2416. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_arm.hpp +0 -39
  2417. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_ppc.hpp +0 -37
  2418. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_x86.hpp +0 -40
  2419. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lockpool.hpp +0 -51
  2420. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations.hpp +0 -24
  2421. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations_fwd.hpp +0 -35
  2422. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations_lockfree.hpp +0 -30
  2423. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_emulated.hpp +0 -162
  2424. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_atomic.hpp +0 -392
  2425. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86.hpp +0 -563
  2426. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_type.hpp +0 -207
  2427. data/src/cxx_supportlib/vendor-modified/boost/bind.hpp +0 -41
  2428. data/src/cxx_supportlib/vendor-modified/boost/call_traits.hpp +0 -20
  2429. data/src/cxx_supportlib/vendor-modified/boost/checked_delete.hpp +0 -17
  2430. data/src/cxx_supportlib/vendor-modified/boost/detail/call_traits.hpp +0 -172
  2431. data/src/cxx_supportlib/vendor-modified/boost/detail/endian.hpp +0 -11
  2432. data/src/cxx_supportlib/vendor-modified/boost/detail/iterator.hpp +0 -39
  2433. data/src/cxx_supportlib/vendor-modified/boost/detail/no_exceptions_support.hpp +0 -17
  2434. data/src/cxx_supportlib/vendor-modified/boost/detail/sp_typeinfo.hpp +0 -36
  2435. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/c_regex_traits.cpp +0 -206
  2436. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cpp_regex_traits.cpp +0 -117
  2437. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cregex.cpp +0 -660
  2438. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/instances.cpp +0 -32
  2439. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_raw_buffer.cpp +0 -72
  2440. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wc_regex_traits.cpp +0 -314
  2441. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/winstances.cpp +0 -35
  2442. data/src/cxx_supportlib/vendor-modified/boost/math/policies/policy.hpp +0 -1040
  2443. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +0 -581
  2444. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/round_fwd.hpp +0 -93
  2445. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/fpclassify.hpp +0 -640
  2446. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +0 -1651
  2447. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/sign.hpp +0 -194
  2448. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +0 -469
  2449. data/src/cxx_supportlib/vendor-modified/boost/math/tools/promotion.hpp +0 -182
  2450. data/src/cxx_supportlib/vendor-modified/boost/math/tools/real_cast.hpp +0 -31
  2451. data/src/cxx_supportlib/vendor-modified/boost/math/tools/user.hpp +0 -105
  2452. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/overloads.hpp +0 -88
  2453. data/src/cxx_supportlib/vendor-modified/boost/pointer_to_other.hpp +0 -55
  2454. data/src/cxx_supportlib/vendor-modified/boost/predef/detail/endian_compat.h +0 -26
  2455. data/src/cxx_supportlib/vendor-modified/boost/predef/os/android.h +0 -45
  2456. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +0 -455
  2457. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +0 -225
  2458. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_solaris.hpp +0 -59
  2459. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +0 -150
  2460. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +0 -160
  2461. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +0 -115
  2462. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync.hpp +0 -69
  2463. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.ipp +0 -496
  2464. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/daily-rotate-file.js +0 -601
  2465. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/webhook.js +0 -146
  2466. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/LICENSE +0 -19
  2467. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/lib/pkginfo.js +0 -136
  2468. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/package.json +0 -56
  2469. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/COPYING +0 -0
  2470. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/base64/base64.hpp +0 -0
  2471. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/client.hpp +0 -0
  2472. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/asio_ssl.hpp +0 -0
  2473. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/chrono.hpp +0 -0
  2474. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/connection_hdl.hpp +0 -0
  2475. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/cpp11.hpp +0 -0
  2476. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/md5.hpp +0 -0
  2477. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/network.hpp +0 -0
  2478. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/platforms.hpp +0 -0
  2479. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/random.hpp +0 -0
  2480. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/regex.hpp +0 -0
  2481. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/stdint.hpp +0 -0
  2482. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/system_error.hpp +0 -0
  2483. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/time.hpp +0 -0
  2484. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/type_traits.hpp +0 -0
  2485. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/concurrency/basic.hpp +0 -0
  2486. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/concurrency/none.hpp +0 -0
  2487. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/asio.hpp +0 -0
  2488. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/asio_client.hpp +0 -0
  2489. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/asio_no_tls.hpp +0 -0
  2490. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/asio_no_tls_client.hpp +0 -0
  2491. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/boost_config.hpp +0 -0
  2492. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/core_client.hpp +0 -0
  2493. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/debug.hpp +0 -0
  2494. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/debug_asio.hpp +0 -0
  2495. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/debug_asio_no_tls.hpp +0 -0
  2496. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/minimal_client.hpp +0 -0
  2497. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/minimal_server.hpp +0 -0
  2498. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/connection_base.hpp +0 -0
  2499. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/endpoint_base.hpp +0 -0
  2500. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/error.hpp +0 -0
  2501. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/extensions/extension.hpp +0 -0
  2502. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/constants.hpp +0 -0
  2503. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/impl/request.hpp +0 -0
  2504. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/impl/response.hpp +0 -0
  2505. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/request.hpp +0 -0
  2506. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/response.hpp +0 -0
  2507. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/impl/utilities_impl.hpp +0 -0
  2508. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/logger/basic.hpp +0 -0
  2509. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/logger/levels.hpp +0 -0
  2510. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/logger/stub.hpp +0 -0
  2511. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/logger/syslog.hpp +0 -0
  2512. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/message_buffer/alloc.hpp +0 -0
  2513. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/message_buffer/message.hpp +0 -0
  2514. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/message_buffer/pool.hpp +0 -0
  2515. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/hybi00.hpp +0 -0
  2516. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/hybi07.hpp +0 -0
  2517. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/hybi08.hpp +0 -0
  2518. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/processor.hpp +0 -0
  2519. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/random/none.hpp +0 -0
  2520. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/random/random_device.hpp +0 -0
  2521. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/server.hpp +0 -0
  2522. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/asio/base.hpp +0 -0
  2523. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/asio/security/base.hpp +0 -0
  2524. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/base/connection.hpp +0 -0
  2525. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/debug/base.hpp +0 -0
  2526. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/iostream/base.hpp +0 -0
  2527. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/stub/base.hpp +0 -0
  2528. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/stub/endpoint.hpp +0 -0
  2529. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/utf8_validator.hpp +0 -0
@@ -1,6 +1,7 @@
1
1
  /////////////////////////////////////////////////////////////////////////////
2
2
  //
3
- // (C) Copyright Ion Gaztanaga 2006-2015
3
+ // (C) Copyright Ion Gaztanaga 2006-2022
4
+ // (C) Copyright 2022 Joaquin M Lopez Munoz.
4
5
  //
5
6
  // Distributed under the Boost Software License, Version 1.0.
6
7
  // (See accompanying file LICENSE_1_0.txt or copy at
@@ -9,6 +10,21 @@
9
10
  // See http://www.boost.org/libs/intrusive for documentation.
10
11
  //
11
12
  /////////////////////////////////////////////////////////////////////////////
13
+
14
+ // fastmod_buckets option is implemented reusing parts of Joaquin M. Lopez
15
+ // Munoz's "fxa_unordered" library (proof of concept of closed- and
16
+ // open-addressing unordered associative containers), released under
17
+ // Boost Software License:
18
+ //
19
+ // https://github.com/joaquintides/fxa_unordered/
20
+ //
21
+ // On cases and systems that can't take advantage of Daniel Lemire's
22
+ // "fastmod" (https://github.com/lemire/fastmod) approach,
23
+ // precomputed divisions are used.
24
+ //
25
+ // As always, thanks Joaquin for your great work!
26
+
27
+
12
28
  #ifndef BOOST_INTRUSIVE_HASHTABLE_HPP
13
29
  #define BOOST_INTRUSIVE_HASHTABLE_HPP
14
30
 
@@ -27,41 +43,323 @@
27
43
  #include <boost/intrusive/detail/simple_disposers.hpp>
28
44
  #include <boost/intrusive/detail/size_holder.hpp>
29
45
  #include <boost/intrusive/detail/iterator.hpp>
46
+ #include <boost/intrusive/detail/get_value_traits.hpp>
47
+ #include <boost/intrusive/detail/algorithm.hpp>
48
+ #include <boost/intrusive/detail/value_functors.hpp>
30
49
 
31
50
  //Implementation utilities
32
51
  #include <boost/intrusive/unordered_set_hook.hpp>
33
- #include <boost/intrusive/slist.hpp>
52
+ #include <boost/intrusive/detail/slist_iterator.hpp>
34
53
  #include <boost/intrusive/pointer_traits.hpp>
35
54
  #include <boost/intrusive/detail/mpl.hpp>
55
+ #include <boost/intrusive/circular_slist_algorithms.hpp>
56
+ #include <boost/intrusive/linear_slist_algorithms.hpp>
36
57
 
37
58
  //boost
38
- #include <boost/functional/hash.hpp>
59
+ #include <boost/container_hash/hash.hpp>
39
60
  #include <boost/intrusive/detail/assert.hpp>
40
61
  #include <boost/static_assert.hpp>
41
62
  #include <boost/move/utility_core.hpp>
42
63
  #include <boost/move/adl_move_swap.hpp>
64
+ #include <boost/move/algo/detail/search.hpp>
43
65
 
44
66
  //std C++
45
- #include <boost/intrusive/detail/minimal_less_equal_header.hpp> //std::equal_to
46
67
  #include <boost/intrusive/detail/minimal_pair_header.hpp> //std::pair
47
- #include <algorithm> //std::lower_bound, std::upper_bound
48
68
  #include <cstddef> //std::size_t
69
+ #include <boost/cstdint.hpp> //std::uint64_t
49
70
 
50
71
  #if defined(BOOST_HAS_PRAGMA_ONCE)
51
72
  # pragma once
52
73
  #endif
53
74
 
75
+ #ifdef _MSC_VER
76
+ #include <intrin.h>
77
+ #endif
78
+
79
+
54
80
  namespace boost {
55
81
  namespace intrusive {
56
82
 
83
+ #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
84
+
57
85
  /// @cond
58
86
 
87
+ #if !defined(BOOST_NO_INT64_T)&&\
88
+ (defined(BOOST_HAS_INT128) || (defined(_MSC_VER) && defined(_WIN64)))
89
+ #define BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT
90
+ #endif
91
+
92
+ //We only support LLP64(Win64) or LP64(most Unix) data models
93
+ #ifdef _WIN64 //In 64 bit windows sizeof(size_t) == sizeof(unsigned long long)
94
+ # define BOOST_INTRUSIVE_SIZE_C(NUMBER) NUMBER##ULL
95
+ # define BOOST_INTRUSIVE_64_BIT_SIZE_T 1
96
+ #else //In 32 bit windows and 32/64 bit unixes sizeof(size_t) == sizeof(unsigned long)
97
+ # define BOOST_INTRUSIVE_SIZE_C(NUMBER) NUMBER##UL
98
+ # define BOOST_INTRUSIVE_64_BIT_SIZE_T (((((ULONG_MAX>>16)>>16)>>16)>>15) != 0)
99
+ #endif
100
+
101
+
102
+ template<int Dummy = 0>
103
+ struct prime_list_holder
104
+ {
105
+ private:
106
+
107
+ template <class SizeType> // sizeof(SizeType) < sizeof(std::size_t)
108
+ static BOOST_INTRUSIVE_FORCEINLINE SizeType truncate_size_type(std::size_t n, detail::true_)
109
+ { return n < std::size_t(SizeType(-1)) ? static_cast<SizeType>(n) : SizeType(-1); }
110
+
111
+ template <class SizeType> // sizeof(SizeType) == sizeof(std::size_t)
112
+ static BOOST_INTRUSIVE_FORCEINLINE SizeType truncate_size_type(std::size_t n, detail::false_)
113
+ { return static_cast<SizeType>(n); }
114
+
115
+ static const std::size_t prime_list[];
116
+ static const std::size_t prime_list_size;
117
+
118
+ static const std::size_t *suggested_lower_bucket_count_ptr(std::size_t n)
119
+ {
120
+ const std::size_t *primes = &prime_list[0];
121
+ const std::size_t *primes_end = primes + prime_list_size;
122
+ std::size_t const* bound =
123
+ boost::movelib::lower_bound(primes, primes_end, n, value_less<std::size_t>());
124
+ bound -= std::size_t(bound == primes_end);
125
+ return bound;
126
+ }
127
+
128
+ static const std::size_t *suggested_upper_bucket_count_ptr(std::size_t n)
129
+ {
130
+ const std::size_t *primes = &prime_list[0];
131
+ const std::size_t *primes_end = primes + prime_list_size;
132
+ std::size_t const* bound =
133
+ boost::movelib::upper_bound(primes, primes_end, n, value_less<std::size_t>());
134
+ bound -= std::size_t(bound == primes_end);
135
+ return bound;
136
+ }
137
+
138
+ static std::size_t suggested_lower_bucket_count_impl(std::size_t n)
139
+ { return *suggested_lower_bucket_count_ptr(n); }
140
+
141
+ static std::size_t suggested_upper_bucket_count_impl(std::size_t n)
142
+ { return *suggested_upper_bucket_count_ptr(n); }
143
+
144
+ public:
145
+
146
+ template <class SizeType>
147
+ static BOOST_INTRUSIVE_FORCEINLINE SizeType suggested_upper_bucket_count(SizeType n)
148
+ {
149
+ std::size_t const c = suggested_upper_bucket_count_impl(static_cast<std::size_t>(n));
150
+ return truncate_size_type<SizeType>(c, detail::bool_<(sizeof(SizeType) < sizeof(std::size_t))>());
151
+ }
152
+
153
+ template <class SizeType>
154
+ static BOOST_INTRUSIVE_FORCEINLINE SizeType suggested_lower_bucket_count(SizeType n)
155
+ {
156
+ std::size_t const c = suggested_lower_bucket_count_impl(static_cast<std::size_t>(n));
157
+ return truncate_size_type<SizeType>(c, detail::bool_<(sizeof(SizeType) < sizeof(std::size_t))>());
158
+ }
159
+
160
+ static BOOST_INTRUSIVE_FORCEINLINE std::size_t suggested_lower_bucket_count_idx(std::size_t n)
161
+ { return static_cast<std::size_t>(suggested_lower_bucket_count_ptr(n) - &prime_list[0]); }
162
+
163
+ static BOOST_INTRUSIVE_FORCEINLINE std::size_t suggested_upper_bucket_count_idx(std::size_t n)
164
+ { return static_cast<std::size_t>(suggested_upper_bucket_count_ptr(n) - &prime_list[0]); }
165
+
166
+ static BOOST_INTRUSIVE_FORCEINLINE std::size_t size_from_index(std::size_t n)
167
+ { return prime_list[std::ptrdiff_t(n)]; }
168
+
169
+ template<std::size_t SizeIndex>
170
+ BOOST_INTRUSIVE_FORCEINLINE static std::size_t modfunc(std::size_t hash) { return hash % prime_list[SizeIndex]; }
171
+
172
+ static std::size_t(*const positions[])(std::size_t);
173
+
174
+ #if defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
175
+ static const uint64_t inv_sizes32[];
176
+ static const std::size_t inv_sizes32_size;
177
+ #endif
178
+
179
+ BOOST_INTRUSIVE_FORCEINLINE static std::size_t lower_size_index(std::size_t n)
180
+ { return prime_list_holder<>::suggested_lower_bucket_count_idx(n); }
181
+
182
+ BOOST_INTRUSIVE_FORCEINLINE static std::size_t upper_size_index(std::size_t n)
183
+ { return prime_list_holder<>::suggested_upper_bucket_count_idx(n); }
184
+
185
+ BOOST_INTRUSIVE_FORCEINLINE static std::size_t size(std::size_t size_index)
186
+ { return prime_list_holder<>::size_from_index(size_index); }
187
+
188
+ #if defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
189
+ // https://github.com/lemire/fastmod
190
+
191
+
192
+ BOOST_INTRUSIVE_FORCEINLINE static uint64_t mul128_u32(uint64_t lowbits, uint32_t d)
193
+ {
194
+ #if defined(_MSC_VER)
195
+ return __umulh(lowbits, d);
196
+ #else
197
+ __extension__ typedef unsigned __int128 ext_uint128_t;
198
+ return (ext_uint128_t(lowbits) * d) >> 64;
199
+ #endif
200
+ }
201
+
202
+ BOOST_INTRUSIVE_FORCEINLINE static uint32_t fastmod_u32(uint32_t a, uint64_t M, uint32_t d)
203
+ {
204
+ uint64_t lowbits = M * a;
205
+ return (uint32_t)(mul128_u32(lowbits, d));
206
+ }
207
+ #endif // defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
208
+
209
+ BOOST_INTRUSIVE_FORCEINLINE static std::size_t position(std::size_t hash,std::size_t size_index)
210
+ {
211
+ #if defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT) && BOOST_INTRUSIVE_64_BIT_SIZE_T
212
+ const std::size_t sizes_under_32bit = sizeof(inv_sizes32)/sizeof(inv_sizes32[0]);
213
+ if(BOOST_LIKELY(size_index < sizes_under_32bit)){
214
+ return fastmod_u32( uint32_t(hash)+uint32_t(hash>>32)
215
+ , inv_sizes32[size_index]
216
+ , uint32_t(prime_list[size_index]) );
217
+ }
218
+ else{
219
+ return positions[size_index-sizes_under_32bit](hash);
220
+ }
221
+ #elif defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
222
+ return fastmod_u32(hash, inv_sizes32[size_index], uint32_t(sizes[size_index]));
223
+ #else
224
+ return positions[size_index](hash);
225
+ #endif // defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
226
+ }
227
+ };
228
+
229
+ template<int Dummy>
230
+ std::size_t(* const prime_list_holder<Dummy>::positions[])(std::size_t) =
231
+ {
232
+ #if !defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
233
+ modfunc< 0>,modfunc< 1>,modfunc< 2>,modfunc< 3>,modfunc< 4>,
234
+ modfunc< 5>,modfunc< 6>,modfunc< 7>,modfunc< 8>,modfunc< 9>,
235
+ modfunc<10>,modfunc<11>,modfunc<12>,modfunc<13>,modfunc<14>,
236
+ modfunc<15>,modfunc<16>,modfunc<17>,modfunc<18>,modfunc<19>,
237
+ modfunc<20>,modfunc<21>,modfunc<22>,modfunc<23>,modfunc<24>,
238
+ modfunc<25>,modfunc<26>,modfunc<27>,modfunc<28>,modfunc<29>,
239
+ modfunc<30>,
240
+ #endif
241
+ # if BOOST_INTRUSIVE_64_BIT_SIZE_T
242
+ modfunc<31>,modfunc<32>,modfunc<33>,modfunc<34>,
243
+ modfunc<35>,modfunc<36>,modfunc<37>,modfunc<38>,modfunc<39>,
244
+ modfunc<40>,modfunc<41>,modfunc<42>,modfunc<43>,modfunc<44>,
245
+ modfunc<45>,modfunc<46>,modfunc<47>,modfunc<48>,modfunc<49>,
246
+ modfunc<50>,modfunc<51>,modfunc<52>,modfunc<53>,modfunc<54>,
247
+ modfunc<55>,modfunc<56>,modfunc<57>,modfunc<58>,modfunc<59>,
248
+ modfunc<60>,modfunc<61>,modfunc<62>,modfunc<63>
249
+ # else
250
+ modfunc<31>
251
+ # endif
252
+ };
253
+
254
+ template<int Dummy>
255
+ const std::size_t prime_list_holder<Dummy>::prime_list[] = {
256
+ BOOST_INTRUSIVE_SIZE_C(3), BOOST_INTRUSIVE_SIZE_C(7),
257
+ BOOST_INTRUSIVE_SIZE_C(11), BOOST_INTRUSIVE_SIZE_C(17),
258
+ BOOST_INTRUSIVE_SIZE_C(29), BOOST_INTRUSIVE_SIZE_C(53),
259
+ BOOST_INTRUSIVE_SIZE_C(97), BOOST_INTRUSIVE_SIZE_C(193),
260
+ BOOST_INTRUSIVE_SIZE_C(389), BOOST_INTRUSIVE_SIZE_C(769),
261
+ BOOST_INTRUSIVE_SIZE_C(1543), BOOST_INTRUSIVE_SIZE_C(3079),
262
+ BOOST_INTRUSIVE_SIZE_C(6151), BOOST_INTRUSIVE_SIZE_C(12289),
263
+ BOOST_INTRUSIVE_SIZE_C(24593), BOOST_INTRUSIVE_SIZE_C(49157),
264
+ BOOST_INTRUSIVE_SIZE_C(98317), BOOST_INTRUSIVE_SIZE_C(196613),
265
+ BOOST_INTRUSIVE_SIZE_C(393241), BOOST_INTRUSIVE_SIZE_C(786433),
266
+ BOOST_INTRUSIVE_SIZE_C(1572869), BOOST_INTRUSIVE_SIZE_C(3145739),
267
+ BOOST_INTRUSIVE_SIZE_C(6291469), BOOST_INTRUSIVE_SIZE_C(12582917),
268
+ BOOST_INTRUSIVE_SIZE_C(25165843), BOOST_INTRUSIVE_SIZE_C(50331653),
269
+ BOOST_INTRUSIVE_SIZE_C(100663319), BOOST_INTRUSIVE_SIZE_C(201326611),
270
+ BOOST_INTRUSIVE_SIZE_C(402653189), BOOST_INTRUSIVE_SIZE_C(805306457),
271
+ BOOST_INTRUSIVE_SIZE_C(1610612741), //0-30 indexes
272
+ #if BOOST_INTRUSIVE_64_BIT_SIZE_T
273
+ //Taken from Boost.MultiIndex code, thanks to Joaquin M. Lopez Munoz.
274
+ BOOST_INTRUSIVE_SIZE_C(3221225473), //<- 32 bit values stop here (index 31)
275
+ BOOST_INTRUSIVE_SIZE_C(6442450939), BOOST_INTRUSIVE_SIZE_C(12884901893),
276
+ BOOST_INTRUSIVE_SIZE_C(25769803751), BOOST_INTRUSIVE_SIZE_C(51539607551),
277
+ BOOST_INTRUSIVE_SIZE_C(103079215111), BOOST_INTRUSIVE_SIZE_C(206158430209),
278
+ BOOST_INTRUSIVE_SIZE_C(412316860441), BOOST_INTRUSIVE_SIZE_C(824633720831),
279
+ BOOST_INTRUSIVE_SIZE_C(1649267441651), BOOST_INTRUSIVE_SIZE_C(3298534883309),
280
+ BOOST_INTRUSIVE_SIZE_C(6597069766657), BOOST_INTRUSIVE_SIZE_C(13194139533299),
281
+ BOOST_INTRUSIVE_SIZE_C(26388279066623), BOOST_INTRUSIVE_SIZE_C(52776558133303),
282
+ BOOST_INTRUSIVE_SIZE_C(105553116266489), BOOST_INTRUSIVE_SIZE_C(211106232532969),
283
+ BOOST_INTRUSIVE_SIZE_C(422212465066001), BOOST_INTRUSIVE_SIZE_C(844424930131963),
284
+ BOOST_INTRUSIVE_SIZE_C(1688849860263953), BOOST_INTRUSIVE_SIZE_C(3377699720527861),
285
+ BOOST_INTRUSIVE_SIZE_C(6755399441055731), BOOST_INTRUSIVE_SIZE_C(13510798882111483),
286
+ BOOST_INTRUSIVE_SIZE_C(27021597764222939), BOOST_INTRUSIVE_SIZE_C(54043195528445957),
287
+ BOOST_INTRUSIVE_SIZE_C(108086391056891903), BOOST_INTRUSIVE_SIZE_C(216172782113783843),
288
+ BOOST_INTRUSIVE_SIZE_C(432345564227567621), BOOST_INTRUSIVE_SIZE_C(864691128455135207),
289
+ BOOST_INTRUSIVE_SIZE_C(1729382256910270481), BOOST_INTRUSIVE_SIZE_C(3458764513820540933),
290
+ BOOST_INTRUSIVE_SIZE_C(6917529027641081903), BOOST_INTRUSIVE_SIZE_C(9223372036854775783) //(index 63)
291
+ #else
292
+ BOOST_INTRUSIVE_SIZE_C(2147483647) //<- 32 bit stops here (index 31) as ptrdiff_t is signed
293
+ #endif
294
+ };
295
+
296
+ template<int Dummy>
297
+ const std::size_t prime_list_holder<Dummy>::prime_list_size
298
+ = sizeof(prime_list) / sizeof(std::size_t);
299
+
300
+
301
+ #if defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
302
+
303
+ template<int Dummy>
304
+ const uint64_t prime_list_holder<Dummy>::inv_sizes32[] = {
305
+ BOOST_INTRUSIVE_SIZE_C(6148914691236517206), //3
306
+ BOOST_INTRUSIVE_SIZE_C(2635249153387078803), //7
307
+ BOOST_INTRUSIVE_SIZE_C(1676976733973595602), //11
308
+ BOOST_INTRUSIVE_SIZE_C(1085102592571150096), //17
309
+ BOOST_INTRUSIVE_SIZE_C(636094623231363849), //29
310
+ BOOST_INTRUSIVE_SIZE_C(348051774975651918), //53
311
+ BOOST_INTRUSIVE_SIZE_C(190172619316593316), //97
312
+ BOOST_INTRUSIVE_SIZE_C(95578984837873325), //193
313
+ BOOST_INTRUSIVE_SIZE_C(47420935922132524), //389
314
+ BOOST_INTRUSIVE_SIZE_C(23987963684927896), //769
315
+ BOOST_INTRUSIVE_SIZE_C(11955116055547344), //1543
316
+ BOOST_INTRUSIVE_SIZE_C(5991147799191151), //3079
317
+ BOOST_INTRUSIVE_SIZE_C(2998982941588287), //6151
318
+ BOOST_INTRUSIVE_SIZE_C(1501077717772769), //12289
319
+ BOOST_INTRUSIVE_SIZE_C(750081082979285), //24593
320
+ BOOST_INTRUSIVE_SIZE_C(375261795343686), //49157
321
+ BOOST_INTRUSIVE_SIZE_C(187625172388393), //98317
322
+ BOOST_INTRUSIVE_SIZE_C(93822606204624), //196613
323
+ BOOST_INTRUSIVE_SIZE_C(46909513691883), //393241
324
+ BOOST_INTRUSIVE_SIZE_C(23456218233098), //786433
325
+ BOOST_INTRUSIVE_SIZE_C(11728086747027), //1572869
326
+ BOOST_INTRUSIVE_SIZE_C(5864041509391), //3145739
327
+ BOOST_INTRUSIVE_SIZE_C(2932024948977), //6291469
328
+ BOOST_INTRUSIVE_SIZE_C(1466014921160), //12582917
329
+ BOOST_INTRUSIVE_SIZE_C(733007198436), //25165843
330
+ BOOST_INTRUSIVE_SIZE_C(366503839517), //50331653
331
+ BOOST_INTRUSIVE_SIZE_C(183251896093), //100663319
332
+ BOOST_INTRUSIVE_SIZE_C(91625960335), //201326611
333
+ BOOST_INTRUSIVE_SIZE_C(45812983922), //402653189
334
+ BOOST_INTRUSIVE_SIZE_C(22906489714), //805306457
335
+ BOOST_INTRUSIVE_SIZE_C(11453246088), //1610612741
336
+ BOOST_INTRUSIVE_SIZE_C(5726623060) //3221225473
337
+ };
338
+
339
+ template<int Dummy>
340
+ const std::size_t prime_list_holder<Dummy>::inv_sizes32_size
341
+ = sizeof(inv_sizes32) / sizeof(uint64_t);
342
+
343
+ #endif // defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
344
+
345
+ struct prime_fmod_size : prime_list_holder<>
346
+ {
347
+ };
348
+
349
+
350
+ #undef BOOST_INTRUSIVE_SIZE_C
351
+ #undef BOOST_INTRUSIVE_64_BIT_SIZE_T
352
+
353
+ #endif //#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
354
+
355
+
356
+
59
357
  template<class InputIt, class T>
60
358
  InputIt priv_algo_find(InputIt first, InputIt last, const T& value)
61
359
  {
62
360
  for (; first != last; ++first) {
63
361
  if (*first == value) {
64
- return first;
362
+ return first;
65
363
  }
66
364
  }
67
365
  return last;
@@ -105,234 +403,173 @@ bool priv_algo_is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, F
105
403
  continue; //We've seen this one before.
106
404
  }
107
405
  distance_type matches = (priv_algo_count)(first2, last2, *scan);
108
- if (0 == matches || (priv_algo_count)(scan, last1, *scan != matches)){
406
+ if (0 == matches || (priv_algo_count)(scan, last1, *scan) != matches){
109
407
  return false;
110
408
  }
111
409
  }
112
410
  return true;
113
411
  }
114
412
 
115
- template<int Dummy = 0>
116
- struct prime_list_holder
413
+ struct hash_bool_flags
117
414
  {
118
- private:
119
-
120
- template <class SizeType> // sizeof(SizeType) < sizeof(std::size_t)
121
- static BOOST_INTRUSIVE_FORCEINLINE SizeType truncate_size_type(std::size_t n, detail::true_)
122
- {
123
- return n < std::size_t(SizeType(-1)) ? static_cast<SizeType>(n) : SizeType(-1);
124
- }
415
+ static const std::size_t unique_keys_pos = 1u;
416
+ static const std::size_t constant_time_size_pos = 2u;
417
+ static const std::size_t power_2_buckets_pos = 4u;
418
+ static const std::size_t cache_begin_pos = 8u;
419
+ static const std::size_t compare_hash_pos = 16u;
420
+ static const std::size_t incremental_pos = 32u;
421
+ static const std::size_t linear_buckets_pos = 64u;
422
+ static const std::size_t fastmod_buckets_pos = 128u;
423
+ };
125
424
 
126
- template <class SizeType> // sizeof(SizeType) == sizeof(std::size_t)
127
- static BOOST_INTRUSIVE_FORCEINLINE SizeType truncate_size_type(std::size_t n, detail::false_)
128
- {
129
- return static_cast<SizeType>(n);
130
- }
425
+ template<class Bucket, class Algo, class Disposer, class SizeType>
426
+ class exception_bucket_disposer
427
+ {
428
+ Bucket *cont_;
429
+ Disposer &disp_;
430
+ const SizeType &constructed_;
131
431
 
132
- template <class SizeType> //sizeof(SizeType) > sizeof(std::size_t)
133
- static BOOST_INTRUSIVE_FORCEINLINE SizeType suggested_upper_bucket_count_dispatch(SizeType n, detail::true_)
134
- {
135
- std::size_t const c = n > std::size_t(-1)
136
- ? std::size_t(-1)
137
- : suggested_upper_bucket_count_impl(static_cast<std::size_t>(n));
138
- return static_cast<SizeType>(c);
139
- }
432
+ exception_bucket_disposer(const exception_bucket_disposer&);
433
+ exception_bucket_disposer &operator=(const exception_bucket_disposer&);
140
434
 
141
- template <class SizeType> //sizeof(SizeType) > sizeof(std::size_t)
142
- static BOOST_INTRUSIVE_FORCEINLINE SizeType suggested_lower_bucket_count_dispatch(SizeType n, detail::true_)
143
- {
144
- std::size_t const c = n > std::size_t(-1)
145
- ? std::size_t(-1)
146
- : suggested_lower_bucket_count_impl(static_cast<std::size_t>(n));
147
- return static_cast<SizeType>(c);
148
- }
435
+ public:
149
436
 
150
- template <class SizeType>
151
- static BOOST_INTRUSIVE_FORCEINLINE SizeType suggested_upper_bucket_count_dispatch(SizeType n, detail::false_)
152
- {
153
- std::size_t const c = suggested_upper_bucket_count_impl(static_cast<std::size_t>(n));
154
- return truncate_size_type<SizeType>(c, detail::bool_<(sizeof(SizeType) < sizeof(std::size_t))>());
437
+ exception_bucket_disposer
438
+ (Bucket &cont, Disposer &disp, const SizeType &constructed)
439
+ : cont_(&cont), disp_(disp), constructed_(constructed)
440
+ {}
155
441
 
156
- }
442
+ BOOST_INTRUSIVE_FORCEINLINE void release()
443
+ { cont_ = 0; }
157
444
 
158
- template <class SizeType>
159
- static BOOST_INTRUSIVE_FORCEINLINE SizeType suggested_lower_bucket_count_dispatch(SizeType n, detail::false_)
445
+ ~exception_bucket_disposer()
160
446
  {
161
- std::size_t const c = suggested_lower_bucket_count_impl(static_cast<std::size_t>(n));
162
- return truncate_size_type<SizeType>(c, detail::bool_<(sizeof(SizeType) < sizeof(std::size_t))>());
447
+ SizeType n = constructed_;
448
+ if(cont_){
449
+ while(n--){
450
+ Algo::detach_and_dispose(cont_[n].get_node_ptr(), disp_);
451
+ }
452
+ }
163
453
  }
454
+ };
164
455
 
165
- static const std::size_t prime_list[];
166
- static const std::size_t prime_list_size;
456
+ template<class SupposedValueTraits>
457
+ struct unordered_bucket_impl
458
+ {
459
+ typedef typename detail::get_node_traits
460
+ <SupposedValueTraits>::type node_traits;
461
+ typedef typename reduced_slist_node_traits
462
+ <node_traits>::type reduced_node_traits;
463
+ typedef bucket_impl<reduced_node_traits> type;
167
464
 
168
- static std::size_t suggested_lower_bucket_count_impl(std::size_t n)
169
- {
170
- const std::size_t *primes = &prime_list_holder<0>::prime_list[0];
171
- const std::size_t *primes_end = primes + prime_list_holder<0>::prime_list_size;
172
- std::size_t const* bound = std::lower_bound(primes, primes_end, n);
173
- //Tables have upper SIZE_MAX, so we must always found an entry
174
- BOOST_INTRUSIVE_INVARIANT_ASSERT(bound != primes_end);
175
- bound -= std::size_t(bound != primes);
176
- return *bound;
177
- }
465
+ typedef typename pointer_traits
466
+ <typename reduced_node_traits::node_ptr>
467
+ ::template rebind_pointer<type>::type pointer;
468
+ };
178
469
 
179
- static std::size_t suggested_upper_bucket_count_impl(std::size_t n)
180
- {
181
- const std::size_t *primes = &prime_list_holder<0>::prime_list[0];
182
- const std::size_t *primes_end = primes + prime_list_holder<0>::prime_list_size;
183
- std::size_t const* bound = std::upper_bound(primes, primes_end, n);
184
- bound -= std::size_t(bound == primes_end);
185
- return *bound;
186
- }
470
+ template<class SupposedValueTraits>
471
+ struct unordered_bucket_ptr_impl
472
+ {
473
+ typedef typename unordered_bucket_impl<SupposedValueTraits>::pointer type;
474
+ };
187
475
 
188
- public:
189
476
 
190
- template <class SizeType>
191
- static BOOST_INTRUSIVE_FORCEINLINE SizeType suggested_upper_bucket_count(SizeType n)
192
- {
193
- return (suggested_upper_bucket_count_dispatch)(n, detail::bool_<(sizeof(SizeType) > sizeof(std::size_t))>());
194
- }
477
+ template <class BucketPtr, class SizeType>
478
+ struct bucket_traits_impl
479
+ {
480
+ private:
481
+ BOOST_COPYABLE_AND_MOVABLE(bucket_traits_impl)
195
482
 
196
- template <class SizeType>
197
- static BOOST_INTRUSIVE_FORCEINLINE SizeType suggested_lower_bucket_count(SizeType n)
198
- {
199
- return (suggested_lower_bucket_count_dispatch)(n, detail::bool_<(sizeof(SizeType) > sizeof(std::size_t))>());
200
- }
201
- };
483
+ public:
484
+ /// @cond
202
485
 
203
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
486
+ typedef BucketPtr bucket_ptr;
487
+ typedef SizeType size_type;
204
488
 
205
- //We only support LLP64(Win64) or LP64(most Unix) data models
206
- #ifdef _WIN64 //In 64 bit windows sizeof(size_t) == sizeof(unsigned long long)
207
- #define BOOST_INTRUSIVE_PRIME_C(NUMBER) NUMBER##ULL
208
- #define BOOST_INTRUSIVE_64_BIT_SIZE_T 1
209
- #else //In 32 bit windows and 32/64 bit unixes sizeof(size_t) == sizeof(unsigned long)
210
- #define BOOST_INTRUSIVE_PRIME_C(NUMBER) NUMBER##UL
211
- #define BOOST_INTRUSIVE_64_BIT_SIZE_T (((((ULONG_MAX>>16)>>16)>>16)>>15) != 0)
212
- #endif
489
+ /// @endcond
213
490
 
214
- template<int Dummy>
215
- const std::size_t prime_list_holder<Dummy>::prime_list[] = {
216
- BOOST_INTRUSIVE_PRIME_C(3), BOOST_INTRUSIVE_PRIME_C(7),
217
- BOOST_INTRUSIVE_PRIME_C(11), BOOST_INTRUSIVE_PRIME_C(17),
218
- BOOST_INTRUSIVE_PRIME_C(29), BOOST_INTRUSIVE_PRIME_C(53),
219
- BOOST_INTRUSIVE_PRIME_C(97), BOOST_INTRUSIVE_PRIME_C(193),
220
- BOOST_INTRUSIVE_PRIME_C(389), BOOST_INTRUSIVE_PRIME_C(769),
221
- BOOST_INTRUSIVE_PRIME_C(1543), BOOST_INTRUSIVE_PRIME_C(3079),
222
- BOOST_INTRUSIVE_PRIME_C(6151), BOOST_INTRUSIVE_PRIME_C(12289),
223
- BOOST_INTRUSIVE_PRIME_C(24593), BOOST_INTRUSIVE_PRIME_C(49157),
224
- BOOST_INTRUSIVE_PRIME_C(98317), BOOST_INTRUSIVE_PRIME_C(196613),
225
- BOOST_INTRUSIVE_PRIME_C(393241), BOOST_INTRUSIVE_PRIME_C(786433),
226
- BOOST_INTRUSIVE_PRIME_C(1572869), BOOST_INTRUSIVE_PRIME_C(3145739),
227
- BOOST_INTRUSIVE_PRIME_C(6291469), BOOST_INTRUSIVE_PRIME_C(12582917),
228
- BOOST_INTRUSIVE_PRIME_C(25165843), BOOST_INTRUSIVE_PRIME_C(50331653),
229
- BOOST_INTRUSIVE_PRIME_C(100663319), BOOST_INTRUSIVE_PRIME_C(201326611),
230
- BOOST_INTRUSIVE_PRIME_C(402653189), BOOST_INTRUSIVE_PRIME_C(805306457),
231
- BOOST_INTRUSIVE_PRIME_C(1610612741), BOOST_INTRUSIVE_PRIME_C(3221225473),
232
- #if BOOST_INTRUSIVE_64_BIT_SIZE_T
233
- //Taken from Boost.MultiIndex code, thanks to Joaquin M Lopez Munoz.
234
- BOOST_INTRUSIVE_PRIME_C(6442450939), BOOST_INTRUSIVE_PRIME_C(12884901893),
235
- BOOST_INTRUSIVE_PRIME_C(25769803751), BOOST_INTRUSIVE_PRIME_C(51539607551),
236
- BOOST_INTRUSIVE_PRIME_C(103079215111), BOOST_INTRUSIVE_PRIME_C(206158430209),
237
- BOOST_INTRUSIVE_PRIME_C(412316860441), BOOST_INTRUSIVE_PRIME_C(824633720831),
238
- BOOST_INTRUSIVE_PRIME_C(1649267441651), BOOST_INTRUSIVE_PRIME_C(3298534883309),
239
- BOOST_INTRUSIVE_PRIME_C(6597069766657), BOOST_INTRUSIVE_PRIME_C(13194139533299),
240
- BOOST_INTRUSIVE_PRIME_C(26388279066623), BOOST_INTRUSIVE_PRIME_C(52776558133303),
241
- BOOST_INTRUSIVE_PRIME_C(105553116266489), BOOST_INTRUSIVE_PRIME_C(211106232532969),
242
- BOOST_INTRUSIVE_PRIME_C(422212465066001), BOOST_INTRUSIVE_PRIME_C(844424930131963),
243
- BOOST_INTRUSIVE_PRIME_C(1688849860263953), BOOST_INTRUSIVE_PRIME_C(3377699720527861),
244
- BOOST_INTRUSIVE_PRIME_C(6755399441055731), BOOST_INTRUSIVE_PRIME_C(13510798882111483),
245
- BOOST_INTRUSIVE_PRIME_C(27021597764222939), BOOST_INTRUSIVE_PRIME_C(54043195528445957),
246
- BOOST_INTRUSIVE_PRIME_C(108086391056891903), BOOST_INTRUSIVE_PRIME_C(216172782113783843),
247
- BOOST_INTRUSIVE_PRIME_C(432345564227567621), BOOST_INTRUSIVE_PRIME_C(864691128455135207),
248
- BOOST_INTRUSIVE_PRIME_C(1729382256910270481), BOOST_INTRUSIVE_PRIME_C(3458764513820540933),
249
- BOOST_INTRUSIVE_PRIME_C(6917529027641081903), BOOST_INTRUSIVE_PRIME_C(13835058055282163729),
250
- BOOST_INTRUSIVE_PRIME_C(18446744073709551557), BOOST_INTRUSIVE_PRIME_C(18446744073709551615) //Upper limit, just in case
251
- #else
252
- BOOST_INTRUSIVE_PRIME_C(4294967291), BOOST_INTRUSIVE_PRIME_C(4294967295) //Upper limit, just in case
253
- #endif
254
- };
491
+ BOOST_INTRUSIVE_FORCEINLINE bucket_traits_impl(bucket_ptr buckets, size_type len)
492
+ : buckets_(buckets), buckets_len_(len)
493
+ {}
255
494
 
256
- #undef BOOST_INTRUSIVE_PRIME_C
257
- #undef BOOST_INTRUSIVE_64_BIT_SIZE_T
495
+ BOOST_INTRUSIVE_FORCEINLINE bucket_traits_impl(const bucket_traits_impl& x)
496
+ : buckets_(x.buckets_), buckets_len_(x.buckets_len_)
497
+ {}
258
498
 
259
- #endif //#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
499
+ BOOST_INTRUSIVE_FORCEINLINE bucket_traits_impl(BOOST_RV_REF(bucket_traits_impl) x)
500
+ : buckets_(x.buckets_), buckets_len_(x.buckets_len_)
501
+ {
502
+ x.buckets_ = bucket_ptr(); x.buckets_len_ = 0u;
503
+ }
260
504
 
261
- template<int Dummy>
262
- const std::size_t prime_list_holder<Dummy>::prime_list_size
263
- = sizeof(prime_list)/sizeof(std::size_t);
505
+ BOOST_INTRUSIVE_FORCEINLINE bucket_traits_impl& operator=(BOOST_RV_REF(bucket_traits_impl) x)
506
+ {
507
+ buckets_ = x.buckets_; buckets_len_ = x.buckets_len_;
508
+ x.buckets_ = bucket_ptr(); x.buckets_len_ = 0u; return *this;
509
+ }
264
510
 
265
- struct hash_bool_flags
266
- {
267
- static const std::size_t unique_keys_pos = 1u;
268
- static const std::size_t constant_time_size_pos = 2u;
269
- static const std::size_t power_2_buckets_pos = 4u;
270
- static const std::size_t cache_begin_pos = 8u;
271
- static const std::size_t compare_hash_pos = 16u;
272
- static const std::size_t incremental_pos = 32u;
273
- };
511
+ BOOST_INTRUSIVE_FORCEINLINE bucket_traits_impl& operator=(BOOST_COPY_ASSIGN_REF(bucket_traits_impl) x)
512
+ {
513
+ buckets_ = x.buckets_; buckets_len_ = x.buckets_len_; return *this;
514
+ }
274
515
 
275
- namespace detail {
516
+ BOOST_INTRUSIVE_FORCEINLINE bucket_ptr bucket_begin() const
517
+ {
518
+ return buckets_;
519
+ }
276
520
 
277
- template<class SupposedValueTraits>
278
- struct get_slist_impl_from_supposed_value_traits
279
- {
280
- typedef SupposedValueTraits value_traits;
281
- typedef typename detail::get_node_traits
282
- <value_traits>::type node_traits;
283
- typedef typename get_slist_impl
284
- <typename reduced_slist_node_traits
285
- <node_traits>::type
286
- >::type type;
287
- };
521
+ BOOST_INTRUSIVE_FORCEINLINE size_type bucket_count() const BOOST_NOEXCEPT
522
+ {
523
+ return buckets_len_;
524
+ }
288
525
 
289
- template<class SupposedValueTraits>
290
- struct unordered_bucket_impl
291
- {
292
- typedef typename
293
- get_slist_impl_from_supposed_value_traits
294
- <SupposedValueTraits>::type slist_impl;
295
- typedef detail::bucket_impl<slist_impl> implementation_defined;
296
- typedef implementation_defined type;
526
+ private:
527
+ bucket_ptr buckets_;
528
+ size_type buckets_len_;
297
529
  };
298
530
 
299
- template<class SupposedValueTraits>
300
- struct unordered_bucket_ptr_impl
301
- {
302
- typedef typename detail::get_node_traits
303
- <SupposedValueTraits>::type::node_ptr node_ptr;
304
- typedef typename unordered_bucket_impl
305
- <SupposedValueTraits>::type bucket_type;
306
-
307
- typedef typename pointer_traits
308
- <node_ptr>::template rebind_pointer
309
- < bucket_type >::type implementation_defined;
310
- typedef implementation_defined type;
311
- };
312
531
 
313
532
  template <class T>
314
533
  struct store_hash_is_true
315
534
  {
316
535
  template<bool Add>
317
- struct two_or_three {yes_type _[2 + Add];};
318
- template <class U> static yes_type test(...);
536
+ struct two_or_three {detail::yes_type _[2u + (unsigned)Add];};
537
+ template <class U> static detail::yes_type test(...);
319
538
  template <class U> static two_or_three<U::store_hash> test (int);
320
- static const bool value = sizeof(test<T>(0)) > sizeof(yes_type)*2;
539
+ static const bool value = sizeof(test<T>(0)) > sizeof(detail::yes_type)*2u;
321
540
  };
322
541
 
323
542
  template <class T>
324
543
  struct optimize_multikey_is_true
325
544
  {
326
545
  template<bool Add>
327
- struct two_or_three {yes_type _[2 + Add];};
328
- template <class U> static yes_type test(...);
546
+ struct two_or_three { detail::yes_type _[2u + (unsigned)Add];};
547
+ template <class U> static detail::yes_type test(...);
329
548
  template <class U> static two_or_three<U::optimize_multikey> test (int);
330
- static const bool value = sizeof(test<T>(0)) > sizeof(yes_type)*2;
549
+ static const bool value = sizeof(test<T>(0)) > sizeof(detail::yes_type)*2u;
331
550
  };
332
551
 
552
+ template<bool StoreHash>
333
553
  struct insert_commit_data_impl
334
554
  {
335
555
  std::size_t hash;
556
+ std::size_t bucket_idx;
557
+ BOOST_INTRUSIVE_FORCEINLINE std::size_t get_hash() const
558
+ { return hash; }
559
+
560
+ BOOST_INTRUSIVE_FORCEINLINE void set_hash(std::size_t h)
561
+ { hash = h; }
562
+ };
563
+
564
+ template<>
565
+ struct insert_commit_data_impl<false>
566
+ {
567
+ std::size_t bucket_idx;
568
+ BOOST_INTRUSIVE_FORCEINLINE std::size_t get_hash() const
569
+ { return 0U; }
570
+
571
+ BOOST_INTRUSIVE_FORCEINLINE void set_hash(std::size_t)
572
+ {}
336
573
  };
337
574
 
338
575
  template<class Node, class SlistNodePtr>
@@ -375,21 +612,22 @@ struct group_functions
375
612
  typedef circular_slist_algorithms<node_traits> node_algorithms;
376
613
 
377
614
  static slist_node_ptr get_bucket_before_begin
378
- (const slist_node_ptr &bucket_beg, const slist_node_ptr &bucket_end, const node_ptr &p)
615
+ (slist_node_ptr bucket_beg, slist_node_ptr bucket_last, slist_node_ptr sp, detail::true_)
379
616
  {
380
617
  //First find the last node of p's group.
381
618
  //This requires checking the first node of the next group or
382
619
  //the bucket node.
620
+ node_ptr p = dcast_bucket_ptr<node>(sp);
383
621
  node_ptr prev_node = p;
384
622
  node_ptr nxt(node_traits::get_next(p));
385
- while(!(bucket_beg <= nxt && nxt <= bucket_end) &&
623
+ while(!(bucket_beg <= nxt && nxt <= bucket_last) &&
386
624
  (group_traits::get_next(nxt) == prev_node)){
387
625
  prev_node = nxt;
388
626
  nxt = node_traits::get_next(nxt);
389
627
  }
390
628
 
391
629
  //If we've reached the bucket node just return it.
392
- if(bucket_beg <= nxt && nxt <= bucket_end){
630
+ if(bucket_beg <= nxt && nxt <= bucket_last){
393
631
  return nxt;
394
632
  }
395
633
 
@@ -398,17 +636,28 @@ struct group_functions
398
636
  node_ptr last_node_group = group_traits::get_next(first_node_of_group);
399
637
  slist_node_ptr possible_end = node_traits::get_next(last_node_group);
400
638
 
401
- while(!(bucket_beg <= possible_end && possible_end <= bucket_end)){
402
- first_node_of_group = detail::dcast_bucket_ptr<node>(possible_end);
639
+ while(!(bucket_beg <= possible_end && possible_end <= bucket_last)){
640
+ first_node_of_group = dcast_bucket_ptr<node>(possible_end);
403
641
  last_node_group = group_traits::get_next(first_node_of_group);
404
642
  possible_end = node_traits::get_next(last_node_group);
405
643
  }
406
644
  return possible_end;
407
645
  }
408
646
 
409
- static node_ptr get_prev_to_first_in_group(const slist_node_ptr &bucket_node, const node_ptr &first_in_group)
647
+ static slist_node_ptr get_bucket_before_begin
648
+ (slist_node_ptr bucket_beg, slist_node_ptr bucket_last, slist_node_ptr sp, detail::false_)
410
649
  {
411
- node_ptr nb = detail::dcast_bucket_ptr<node>(bucket_node);
650
+ //The end node is embedded in the singly linked list:
651
+ //iterate until we reach it.
652
+ while (!(bucket_beg <= sp && sp <= bucket_last)){
653
+ sp = reduced_node_traits::get_next(sp);
654
+ }
655
+ return sp;
656
+ }
657
+
658
+ static node_ptr get_prev_to_first_in_group(slist_node_ptr bucket_node, node_ptr first_in_group)
659
+ {
660
+ node_ptr nb = dcast_bucket_ptr<node>(bucket_node);
412
661
  node_ptr n;
413
662
  while((n = node_traits::get_next(nb)) != first_in_group){
414
663
  nb = group_traits::get_next(n); //go to last in group
@@ -416,7 +665,7 @@ struct group_functions
416
665
  return nb;
417
666
  }
418
667
 
419
- static void erase_from_group(const slist_node_ptr &end_ptr, const node_ptr &to_erase_ptr, detail::true_)
668
+ static void erase_from_group(slist_node_ptr end_ptr, node_ptr to_erase_ptr, detail::true_)
420
669
  {
421
670
  node_ptr const nxt_ptr(node_traits::get_next(to_erase_ptr));
422
671
  //Check if the next node is in the group (not end node) and reverse linked to
@@ -426,10 +675,10 @@ struct group_functions
426
675
  }
427
676
  }
428
677
 
429
- BOOST_INTRUSIVE_FORCEINLINE static void erase_from_group(const slist_node_ptr&, const node_ptr&, detail::false_)
678
+ BOOST_INTRUSIVE_FORCEINLINE static void erase_from_group(slist_node_ptr, node_ptr, detail::false_)
430
679
  {}
431
680
 
432
- BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_last_in_group(const node_ptr &first_in_group, detail::true_)
681
+ BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_last_in_group(node_ptr first_in_group, detail::true_)
433
682
  { return group_traits::get_next(first_in_group); }
434
683
 
435
684
  BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_last_in_group(node_ptr n, detail::false_)
@@ -444,33 +693,35 @@ struct group_functions
444
693
  return n;
445
694
  }
446
695
 
447
- BOOST_INTRUSIVE_FORCEINLINE static node_ptr next_group_if_first_in_group(node_ptr ptr)
448
- {
449
- return node_traits::get_next(group_traits::get_next(ptr));
450
- }
451
-
452
- BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_first_in_group(const node_ptr &n, detail::false_)
696
+ BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_first_in_group(node_ptr n, detail::false_)
453
697
  { return n; }
454
698
 
455
- BOOST_INTRUSIVE_FORCEINLINE static void insert_in_group(const node_ptr &first_in_group, const node_ptr &n, true_)
699
+ BOOST_INTRUSIVE_FORCEINLINE static bool is_first_in_group(node_ptr ptr)
700
+ { return node_traits::get_next(group_traits::get_next(ptr)) != ptr; }
701
+
702
+
703
+ BOOST_INTRUSIVE_FORCEINLINE static void insert_in_group(node_ptr first_in_group, node_ptr n, detail::true_)
456
704
  { group_algorithms::link_after(first_in_group, n); }
457
705
 
458
- static void insert_in_group(const node_ptr&, const node_ptr&, false_)
706
+ BOOST_INTRUSIVE_FORCEINLINE static void insert_in_group(node_ptr, node_ptr, detail::false_)
459
707
  {}
460
708
 
461
- BOOST_INTRUSIVE_FORCEINLINE static node_ptr split_group(node_ptr const new_first_in_group)
709
+ //Splits a group in two groups, and makes "new_first" the first node in the second group.
710
+ //Returns the first element of the first group
711
+ static node_ptr split_group(node_ptr const new_first)
462
712
  {
463
- node_ptr const first((get_first_in_group)(new_first_in_group, detail::true_()));
464
- if(first != new_first_in_group){
465
- node_ptr const last = group_traits::get_next(first);
466
- group_traits::set_next(first, group_traits::get_next(new_first_in_group));
467
- group_traits::set_next(new_first_in_group, last);
713
+ node_ptr const old_first((get_first_in_group)(new_first, detail::true_()));
714
+ //Check new_first was not the first in group
715
+ if(old_first != new_first){
716
+ node_ptr const last = group_traits::get_next(old_first);
717
+ group_traits::set_next(old_first, group_traits::get_next(new_first));
718
+ group_traits::set_next(new_first, last);
468
719
  }
469
- return first;
720
+ return old_first;
470
721
  }
471
722
  };
472
723
 
473
- template<class BucketType, class SplitTraits>
724
+ template<class BucketType, class SplitTraits, class SlistNodeAlgorithms>
474
725
  class incremental_rehash_rollback
475
726
  {
476
727
  private:
@@ -483,9 +734,9 @@ class incremental_rehash_rollback
483
734
 
484
735
  public:
485
736
  incremental_rehash_rollback
486
- (bucket_type &source_bucket, bucket_type &destiny_bucket, split_traits &split_traits)
737
+ (bucket_type &source_bucket, bucket_type &destiny_bucket, split_traits &split_tr)
487
738
  : source_bucket_(source_bucket), destiny_bucket_(destiny_bucket)
488
- , split_traits_(split_traits), released_(false)
739
+ , split_traits_(split_tr), released_(false)
489
740
  {}
490
741
 
491
742
  BOOST_INTRUSIVE_FORCEINLINE void release()
@@ -496,7 +747,7 @@ class incremental_rehash_rollback
496
747
  if(!released_){
497
748
  //If an exception is thrown, just put all moved nodes back in the old bucket
498
749
  //and move back the split mark.
499
- destiny_bucket_.splice_after(destiny_bucket_.before_begin(), source_bucket_);
750
+ SlistNodeAlgorithms::transfer_after(destiny_bucket_.get_node_ptr(), source_bucket_.get_node_ptr());
500
751
  split_traits_.decrement();
501
752
  }
502
753
  }
@@ -511,10 +762,10 @@ class incremental_rehash_rollback
511
762
  template<class NodeTraits>
512
763
  struct node_functions
513
764
  {
514
- BOOST_INTRUSIVE_FORCEINLINE static void store_hash(typename NodeTraits::node_ptr p, std::size_t h, true_)
765
+ BOOST_INTRUSIVE_FORCEINLINE static void store_hash(typename NodeTraits::node_ptr p, std::size_t h, detail::true_)
515
766
  { return NodeTraits::set_hash(p, h); }
516
767
 
517
- BOOST_INTRUSIVE_FORCEINLINE static void store_hash(typename NodeTraits::node_ptr, std::size_t, false_)
768
+ BOOST_INTRUSIVE_FORCEINLINE static void store_hash(typename NodeTraits::node_ptr, std::size_t, detail::false_)
518
769
  {}
519
770
  };
520
771
 
@@ -524,26 +775,29 @@ BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket(std::size_t hash_value, s
524
775
  BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket(std::size_t hash_value, std::size_t bucket_cnt, detail::true_)
525
776
  { return hash_value & (bucket_cnt - 1); }
526
777
 
527
- template<bool Power2Buckets, bool Incremental>
528
- BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket_split(std::size_t hash_value, std::size_t bucket_cnt, std::size_t split)
778
+ template<bool Power2Buckets, bool Incremental> //!fastmod_buckets
779
+ BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket_split(std::size_t hash_value, std::size_t bucket_cnt, std::size_t split, detail::false_)
529
780
  {
530
- std::size_t bucket_number = detail::hash_to_bucket(hash_value, bucket_cnt, detail::bool_<Power2Buckets>());
531
- if(Incremental)
781
+ std::size_t bucket_number = hash_to_bucket(hash_value, bucket_cnt, detail::bool_<Power2Buckets>());
782
+ BOOST_IF_CONSTEXPR(Incremental)
532
783
  bucket_number -= static_cast<std::size_t>(bucket_number >= split)*(bucket_cnt/2);
533
784
  return bucket_number;
534
785
  }
535
786
 
536
- } //namespace detail {
787
+ template<bool Power2Buckets, bool Incremental> //fastmod_buckets
788
+ BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket_split(std::size_t hash_value, std::size_t bucket_cnt, std::size_t split, detail::true_)
789
+ {
790
+ return prime_fmod_size::position(hash_value, split); (void)bucket_cnt;
791
+ }
537
792
 
538
793
  //!This metafunction will obtain the type of a bucket
539
794
  //!from the value_traits or hook option to be used with
540
795
  //!a hash container.
541
796
  template<class ValueTraitsOrHookOption>
542
797
  struct unordered_bucket
543
- : public detail::unordered_bucket_impl
544
- <typename ValueTraitsOrHookOption::
545
- template pack<empty>::proto_value_traits
546
- >
798
+ : public unordered_bucket_impl
799
+ < typename ValueTraitsOrHookOption::
800
+ template pack<empty>::proto_value_traits>
547
801
  {};
548
802
 
549
803
  //!This metafunction will obtain the type of a bucket pointer
@@ -551,10 +805,9 @@ struct unordered_bucket
551
805
  //!a hash container.
552
806
  template<class ValueTraitsOrHookOption>
553
807
  struct unordered_bucket_ptr
554
- : public detail::unordered_bucket_ptr_impl
555
- <typename ValueTraitsOrHookOption::
556
- template pack<empty>::proto_value_traits
557
- >
808
+ : public unordered_bucket_ptr_impl
809
+ < typename ValueTraitsOrHookOption::
810
+ template pack<empty>::proto_value_traits>
558
811
  {};
559
812
 
560
813
  //!This metafunction will obtain the type of the default bucket traits
@@ -565,13 +818,12 @@ template<class ValueTraitsOrHookOption>
565
818
  struct unordered_default_bucket_traits
566
819
  {
567
820
  typedef typename ValueTraitsOrHookOption::
568
- template pack<empty>::proto_value_traits supposed_value_traits;
569
- typedef typename detail::
570
- get_slist_impl_from_supposed_value_traits
571
- <supposed_value_traits>::type slist_impl;
572
- typedef detail::bucket_traits_impl
573
- <slist_impl> implementation_defined;
574
- typedef implementation_defined type;
821
+ template pack<empty>::proto_value_traits supposed_value_traits;
822
+
823
+ typedef bucket_traits_impl
824
+ < typename unordered_bucket_ptr_impl
825
+ <supposed_value_traits>::type
826
+ , std::size_t> type;
575
827
  };
576
828
 
577
829
  struct default_bucket_traits;
@@ -597,30 +849,30 @@ struct hashtable_defaults
597
849
  static const bool cache_begin = false;
598
850
  static const bool compare_hash = false;
599
851
  static const bool incremental = false;
852
+ static const bool linear_buckets = false;
853
+ static const bool fastmod_buckets = false;
600
854
  };
601
855
 
602
856
  template<class ValueTraits, bool IsConst>
603
857
  struct downcast_node_to_value_t
604
858
  : public detail::node_to_value<ValueTraits, IsConst>
605
859
  {
606
- typedef detail::node_to_value<ValueTraits, IsConst> base_t;
607
- typedef typename base_t::result_type result_type;
608
- typedef ValueTraits value_traits;
609
- typedef typename detail::get_slist_impl
610
- <typename detail::reduced_slist_node_traits
611
- <typename value_traits::node_traits>::type
612
- >::type slist_impl;
860
+ typedef detail::node_to_value<ValueTraits, IsConst> base_t;
861
+ typedef typename base_t::result_type result_type;
862
+ typedef ValueTraits value_traits;
863
+ typedef typename unordered_bucket_impl
864
+ <value_traits>::type::node_traits::node node;
613
865
  typedef typename detail::add_const_if_c
614
- <typename slist_impl::node, IsConst>::type & first_argument_type;
866
+ <node, IsConst>::type &first_argument_type;
615
867
  typedef typename detail::add_const_if_c
616
868
  < typename ValueTraits::node_traits::node
617
- , IsConst>::type & intermediate_argument_type;
869
+ , IsConst>::type &intermediate_argument_type;
618
870
  typedef typename pointer_traits
619
871
  <typename ValueTraits::pointer>::
620
872
  template rebind_pointer
621
873
  <const ValueTraits>::type const_value_traits_ptr;
622
874
 
623
- BOOST_INTRUSIVE_FORCEINLINE downcast_node_to_value_t(const const_value_traits_ptr &ptr)
875
+ BOOST_INTRUSIVE_FORCEINLINE downcast_node_to_value_t(const_value_traits_ptr ptr)
624
876
  : base_t(ptr)
625
877
  {}
626
878
 
@@ -655,25 +907,58 @@ struct node_cast_adaptor
655
907
  //bucket_plus_vtraits stores ValueTraits + BucketTraits
656
908
  //this data is needed by iterators to obtain the
657
909
  //value from the iterator and detect the bucket
658
- template<class ValueTraits, class BucketTraits>
910
+ template<class ValueTraits, class BucketTraits, bool LinearBuckets>
659
911
  struct bucket_plus_vtraits
660
912
  {
913
+ private:
914
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bucket_plus_vtraits)
915
+
916
+
917
+ struct data_type
918
+ : public ValueTraits, BucketTraits
919
+ {
920
+ private:
921
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(data_type)
922
+
923
+ public:
924
+ BOOST_INTRUSIVE_FORCEINLINE data_type(const ValueTraits& val_traits, const BucketTraits& b_traits)
925
+ : ValueTraits(val_traits), BucketTraits(b_traits)
926
+ {}
927
+
928
+ BOOST_INTRUSIVE_FORCEINLINE data_type(BOOST_RV_REF(data_type) other)
929
+ : ValueTraits (BOOST_MOVE_BASE(ValueTraits, other))
930
+ , BucketTraits(BOOST_MOVE_BASE(BucketTraits, other))
931
+ {}
932
+ } m_data;
933
+
934
+ public:
661
935
  typedef BucketTraits bucket_traits;
662
936
  typedef ValueTraits value_traits;
663
937
 
664
938
  static const bool safemode_or_autounlink = is_safe_autounlink<value_traits::link_mode>::value;
665
939
 
666
- typedef typename
667
- detail::get_slist_impl_from_supposed_value_traits
668
- <value_traits>::type slist_impl;
940
+ typedef typename unordered_bucket_impl
941
+ <value_traits>::type bucket_type;
942
+ typedef typename unordered_bucket_ptr_impl
943
+ <value_traits>::type bucket_ptr;
669
944
  typedef typename value_traits::node_traits node_traits;
945
+ typedef typename bucket_type::node_traits slist_node_traits;
670
946
  typedef unordered_group_adapter<node_traits> group_traits;
671
- typedef typename slist_impl::iterator siterator;
672
- typedef detail::bucket_impl<slist_impl> bucket_type;
673
- typedef detail::group_functions<node_traits> group_functions_t;
674
- typedef typename slist_impl::node_algorithms node_algorithms;
675
- typedef typename slist_impl::node_ptr slist_node_ptr;
947
+ typedef group_functions<node_traits> group_functions_t;
948
+ typedef typename detail::if_c
949
+ < LinearBuckets
950
+ , linear_slist_algorithms<slist_node_traits>
951
+ , circular_slist_algorithms<slist_node_traits>
952
+ >::type slist_node_algorithms;
953
+
954
+ typedef typename slist_node_traits::node_ptr slist_node_ptr;
955
+ typedef trivial_value_traits
956
+ <slist_node_traits, normal_link> slist_value_traits;
957
+ typedef slist_iterator<slist_value_traits, false> siterator;
958
+ typedef slist_iterator<slist_value_traits, true> const_siterator;
959
+
676
960
  typedef typename node_traits::node_ptr node_ptr;
961
+ typedef typename node_traits::const_node_ptr const_node_ptr;
677
962
  typedef typename node_traits::node node;
678
963
  typedef typename value_traits::value_type value_type;
679
964
  typedef typename value_traits::pointer pointer;
@@ -690,16 +975,18 @@ struct bucket_plus_vtraits
690
975
  <typename value_traits::pointer>::
691
976
  template rebind_pointer
692
977
  <const bucket_plus_vtraits>::type const_bucket_value_traits_ptr;
693
- typedef typename detail::unordered_bucket_ptr_impl
694
- <value_traits>::type bucket_ptr;
978
+ typedef detail::bool_<LinearBuckets> linear_buckets_t;
979
+ typedef bucket_plus_vtraits& this_ref;
695
980
 
696
- template<class BucketTraitsType>
697
- BOOST_INTRUSIVE_FORCEINLINE bucket_plus_vtraits(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits)
698
- : data(val_traits, ::boost::forward<BucketTraitsType>(b_traits))
981
+ static const std::size_t bucket_overhead = LinearBuckets ? 1u : 0u;
982
+
983
+ BOOST_INTRUSIVE_FORCEINLINE bucket_plus_vtraits(const ValueTraits &val_traits, const bucket_traits &b_traits)
984
+ : m_data(val_traits, b_traits)
699
985
  {}
700
986
 
701
- BOOST_INTRUSIVE_FORCEINLINE bucket_plus_vtraits & operator =(const bucket_plus_vtraits &x)
702
- { data.bucket_traits_ = x.data.bucket_traits_; return *this; }
987
+ BOOST_INTRUSIVE_FORCEINLINE bucket_plus_vtraits(BOOST_RV_REF(bucket_plus_vtraits) other)
988
+ : m_data(boost::move(((bucket_plus_vtraits&)other).m_data))
989
+ {}
703
990
 
704
991
  BOOST_INTRUSIVE_FORCEINLINE const_value_traits_ptr priv_value_traits_ptr() const
705
992
  { return pointer_traits<const_value_traits_ptr>::pointer_to(this->priv_value_traits()); }
@@ -718,47 +1005,129 @@ struct bucket_plus_vtraits
718
1005
  //value traits
719
1006
  //
720
1007
  BOOST_INTRUSIVE_FORCEINLINE const value_traits &priv_value_traits() const
721
- { return this->data; }
1008
+ { return static_cast<const value_traits &>(this->m_data); }
722
1009
 
723
1010
  BOOST_INTRUSIVE_FORCEINLINE value_traits &priv_value_traits()
724
- { return this->data; }
1011
+ { return static_cast<value_traits &>(this->m_data); }
725
1012
 
726
- //bucket_traits
1013
+ //value traits
727
1014
  //
728
1015
  BOOST_INTRUSIVE_FORCEINLINE const bucket_traits &priv_bucket_traits() const
729
- { return this->data.bucket_traits_; }
1016
+ { return static_cast<const bucket_traits &>(this->m_data); }
730
1017
 
731
- BOOST_INTRUSIVE_FORCEINLINE bucket_traits &priv_bucket_traits()
732
- { return this->data.bucket_traits_; }
1018
+ BOOST_INTRUSIVE_FORCEINLINE bucket_traits& priv_bucket_traits()
1019
+ { return static_cast<bucket_traits&>(this->m_data); }
733
1020
 
734
1021
  //bucket operations
735
- BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_bucket_pointer() const
1022
+ BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_bucket_pointer() const BOOST_NOEXCEPT
736
1023
  { return this->priv_bucket_traits().bucket_begin(); }
737
1024
 
738
- std::size_t priv_bucket_count() const
739
- { return this->priv_bucket_traits().bucket_count(); }
1025
+ BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_usable_bucket_count() const BOOST_NOEXCEPT
1026
+ {
1027
+ BOOST_IF_CONSTEXPR(bucket_overhead){
1028
+ const std::size_t n = this->priv_bucket_traits().bucket_count();
1029
+ return n - std::size_t(n != 0)*bucket_overhead;
1030
+ }
1031
+ else{
1032
+ return this->priv_bucket_traits().bucket_count();
1033
+ }
1034
+ }
740
1035
 
741
- BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_invalid_bucket() const
1036
+ BOOST_INTRUSIVE_FORCEINLINE bucket_type &priv_bucket(std::size_t n) const BOOST_NOEXCEPT
742
1037
  {
743
- const bucket_traits &rbt = this->priv_bucket_traits();
744
- return rbt.bucket_begin() + rbt.bucket_count();
1038
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(n < this->priv_usable_bucket_count());
1039
+ return this->priv_bucket_pointer()[std::ptrdiff_t(n)];
745
1040
  }
746
1041
 
747
- BOOST_INTRUSIVE_FORCEINLINE siterator priv_invalid_local_it() const
748
- { return this->priv_bucket_traits().bucket_begin()->before_begin(); }
1042
+ BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_bucket_ptr(std::size_t n) const BOOST_NOEXCEPT
1043
+ { return pointer_traits<bucket_ptr>::pointer_to(this->priv_bucket(n)); }
1044
+
1045
+ BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_past_usable_bucket_ptr() const
1046
+ { return this->priv_bucket_pointer() + std::ptrdiff_t(priv_usable_bucket_count()); }
1047
+
1048
+ BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_invalid_bucket_ptr() const
1049
+ {
1050
+ BOOST_IF_CONSTEXPR(LinearBuckets) {
1051
+ return bucket_ptr();
1052
+ }
1053
+ else{
1054
+ return this->priv_past_usable_bucket_ptr();
1055
+ }
1056
+ }
1057
+
1058
+ BOOST_INTRUSIVE_FORCEINLINE void priv_set_sentinel_bucket() const
1059
+ {
1060
+ BOOST_IF_CONSTEXPR(LinearBuckets) {
1061
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(this->priv_bucket_traits().bucket_count() > 1);
1062
+ bucket_type &b = this->priv_bucket_pointer()[std::ptrdiff_t(this->priv_usable_bucket_count())];
1063
+ slist_node_algorithms::set_sentinel(b.get_node_ptr());
1064
+ }
1065
+ }
1066
+
1067
+ BOOST_INTRUSIVE_FORCEINLINE void priv_unset_sentinel_bucket() const
1068
+ {
1069
+ BOOST_IF_CONSTEXPR(LinearBuckets) {
1070
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(this->priv_bucket_traits().bucket_count() > 1);
1071
+ bucket_type& b = this->priv_bucket_pointer()[std::ptrdiff_t(this->priv_usable_bucket_count())];
1072
+ slist_node_algorithms::init_header(b.get_node_ptr());
1073
+ }
1074
+ }
1075
+
1076
+ BOOST_INTRUSIVE_FORCEINLINE siterator priv_end_sit() const
1077
+ { return priv_end_sit(linear_buckets_t()); }
1078
+
1079
+ BOOST_INTRUSIVE_FORCEINLINE siterator priv_end_sit(detail::true_) const
1080
+ { return siterator(this->priv_bucket_pointer() + std::ptrdiff_t(this->priv_bucket_traits().bucket_count() - bucket_overhead)); }
1081
+
1082
+ BOOST_INTRUSIVE_FORCEINLINE siterator priv_end_sit(detail::false_) const
1083
+ { return siterator(this->priv_bucket_pointer()->get_node_ptr()); }
1084
+
1085
+ BOOST_INTRUSIVE_FORCEINLINE siterator priv_bucket_lbegin(std::size_t n) const
1086
+ { siterator s(this->priv_bucket_lbbegin(n)); return ++s; }
1087
+
1088
+ BOOST_INTRUSIVE_FORCEINLINE siterator priv_bucket_lbbegin(std::size_t n) const
1089
+ { return this->sit_bbegin(this->priv_bucket(n)); }
1090
+
1091
+ BOOST_INTRUSIVE_FORCEINLINE siterator priv_bucket_lend(std::size_t n) const
1092
+ { return this->sit_end(this->priv_bucket(n)); }
1093
+
1094
+ BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_bucket_size(std::size_t n) const
1095
+ { return slist_node_algorithms::count(this->priv_bucket(n).get_node_ptr())-1u; }
1096
+
1097
+ BOOST_INTRUSIVE_FORCEINLINE bool priv_bucket_empty(std::size_t n) const
1098
+ { return slist_node_algorithms::is_empty(this->priv_bucket(n).get_node_ptr()); }
1099
+
1100
+ BOOST_INTRUSIVE_FORCEINLINE bool priv_bucket_empty(bucket_ptr p) const
1101
+ { return slist_node_algorithms::is_empty(p->get_node_ptr()); }
1102
+
1103
+ static BOOST_INTRUSIVE_FORCEINLINE siterator priv_bucket_lbegin(bucket_type &b)
1104
+ { return siterator(slist_node_traits::get_next(b.get_node_ptr())); }
1105
+
1106
+ static BOOST_INTRUSIVE_FORCEINLINE siterator priv_bucket_lbbegin(bucket_type& b)
1107
+ { return siterator(b.get_node_ptr()); }
1108
+
1109
+ static BOOST_INTRUSIVE_FORCEINLINE siterator priv_bucket_lend(bucket_type& b)
1110
+ { return siterator(slist_node_algorithms::end_node(b.get_node_ptr())); }
1111
+
1112
+ static BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_bucket_size(const bucket_type& b)
1113
+ { return slist_node_algorithms::count(b.get_node_ptr())-1u; }
1114
+
1115
+ static BOOST_INTRUSIVE_FORCEINLINE bool priv_bucket_empty(const bucket_type& b)
1116
+ { return slist_node_algorithms::is_empty(b.get_node_ptr()); }
749
1117
 
750
1118
  template<class NodeDisposer>
751
- static std::size_t priv_erase_from_single_bucket(bucket_type &b, siterator sbefore_first, siterator slast, NodeDisposer node_disposer, detail::true_) //optimize multikey
1119
+ static std::size_t priv_erase_from_single_bucket
1120
+ (bucket_type &b, siterator sbefore_first, siterator slast, NodeDisposer node_disposer, detail::true_) //optimize multikey
752
1121
  {
753
1122
  std::size_t n = 0;
754
1123
  siterator const sfirst(++siterator(sbefore_first));
755
1124
  if(sfirst != slast){
756
- node_ptr const nf = detail::dcast_bucket_ptr<node>(sfirst.pointed_node());
757
- node_ptr const nl = detail::dcast_bucket_ptr<node>(slast.pointed_node());
758
- node_ptr const ne = detail::dcast_bucket_ptr<node>(b.end().pointed_node());
1125
+ node_ptr const nf = dcast_bucket_ptr<node>(sfirst.pointed_node());
1126
+ node_ptr const nl = dcast_bucket_ptr<node>(slast.pointed_node());
1127
+ slist_node_ptr const ne = (priv_bucket_lend(b)).pointed_node();
759
1128
 
760
- if(group_functions_t::next_group_if_first_in_group(nf) != nf) {
761
- // The node is at the beginning of a group.
1129
+ if(group_functions_t::is_first_in_group(nf)) {
1130
+ // The first node is at the beginning of a group.
762
1131
  if(nl != ne){
763
1132
  group_functions_t::split_group(nl);
764
1133
  }
@@ -766,52 +1135,42 @@ struct bucket_plus_vtraits
766
1135
  else {
767
1136
  node_ptr const group1 = group_functions_t::split_group(nf);
768
1137
  if(nl != ne) {
769
- node_ptr const group2 = group_functions_t::split_group(ne);
1138
+ node_ptr const group2 = group_functions_t::split_group(nl);
770
1139
  if(nf == group2) { //Both first and last in the same group
771
1140
  //so join group1 and group2
772
1141
  node_ptr const end1 = group_traits::get_next(group1);
773
1142
  node_ptr const end2 = group_traits::get_next(group2);
774
1143
  group_traits::set_next(group1, end2);
775
- group_traits::set_next(group2, end1);
1144
+ group_traits::set_next(nl, end1);
776
1145
  }
777
1146
  }
778
1147
  }
779
1148
 
780
- siterator it(++siterator(sbefore_first));
781
- while(it != slast){
782
- node_disposer((it++).pointed_node());
783
- ++n;
784
- }
785
- b.erase_after(sbefore_first, slast);
1149
+ n = slist_node_algorithms::unlink_after_and_dispose(sbefore_first.pointed_node(), slast.pointed_node(), node_disposer);
786
1150
  }
787
1151
  return n;
788
1152
  }
789
1153
 
790
1154
  template<class NodeDisposer>
791
- static std::size_t priv_erase_from_single_bucket(bucket_type &b, siterator sbefore_first, siterator slast, NodeDisposer node_disposer, detail::false_) //optimize multikey
1155
+ static std::size_t priv_erase_from_single_bucket
1156
+ (bucket_type &, siterator sbefore_first, siterator slast, NodeDisposer node_disposer, detail::false_) //optimize multikey
792
1157
  {
793
- std::size_t n = 0;
794
- siterator it(++siterator(sbefore_first));
795
- while(it != slast){
796
- node_disposer((it++).pointed_node());
797
- ++n;
798
- }
799
- b.erase_after(sbefore_first, slast);
800
- return n;
1158
+ return slist_node_algorithms::unlink_after_and_dispose(sbefore_first.pointed_node(), slast.pointed_node(), node_disposer);
801
1159
  }
802
1160
 
803
1161
  template<class NodeDisposer>
804
1162
  static void priv_erase_node(bucket_type &b, siterator i, NodeDisposer node_disposer, detail::true_) //optimize multikey
805
1163
  {
806
- node_ptr const ne(detail::dcast_bucket_ptr<node>(b.end().pointed_node()));
807
- node_ptr n(detail::dcast_bucket_ptr<node>(i.pointed_node()));
1164
+ slist_node_ptr const ne(priv_bucket_lend(b).pointed_node());
1165
+ slist_node_ptr const nbb(priv_bucket_lbbegin(b).pointed_node());
1166
+ node_ptr n(dcast_bucket_ptr<node>(i.pointed_node()));
808
1167
  node_ptr pos = node_traits::get_next(group_traits::get_next(n));
809
1168
  node_ptr bn;
810
1169
  node_ptr nn(node_traits::get_next(n));
811
1170
 
812
1171
  if(pos != n) {
813
1172
  //Node is the first of the group
814
- bn = group_functions_t::get_prev_to_first_in_group(ne, n);
1173
+ bn = group_functions_t::get_prev_to_first_in_group(nbb, n);
815
1174
 
816
1175
  //Unlink the rest of the group if it's not the last node of its group
817
1176
  if(nn != ne && group_traits::get_next(nn) == n){
@@ -829,12 +1188,15 @@ struct bucket_plus_vtraits
829
1188
  node_ptr const x(group_algorithms::get_previous_node(n));
830
1189
  group_algorithms::unlink_after(x);
831
1190
  }
832
- b.erase_after_and_dispose(bucket_type::s_iterator_to(*bn), node_disposer);
1191
+ slist_node_algorithms::unlink_after_and_dispose(bn, node_disposer);
833
1192
  }
834
1193
 
835
1194
  template<class NodeDisposer>
836
- BOOST_INTRUSIVE_FORCEINLINE static void priv_erase_node(bucket_type &b, siterator i, NodeDisposer node_disposer, detail::false_) //optimize multikey
837
- { b.erase_after_and_dispose(b.previous(i), node_disposer); }
1195
+ BOOST_INTRUSIVE_FORCEINLINE static void priv_erase_node(bucket_type &b, siterator i, NodeDisposer node_disposer, detail::false_) //!optimize multikey
1196
+ {
1197
+ slist_node_ptr bi = slist_node_algorithms::get_previous_node(b.get_node_ptr(), i.pointed_node());
1198
+ slist_node_algorithms::unlink_after_and_dispose(bi, node_disposer);
1199
+ }
838
1200
 
839
1201
  template<class NodeDisposer, bool OptimizeMultikey>
840
1202
  std::size_t priv_erase_node_range( siterator const &before_first_it, std::size_t const first_bucket
@@ -844,19 +1206,19 @@ struct bucket_plus_vtraits
844
1206
  std::size_t num_erased(0);
845
1207
  siterator last_step_before_it;
846
1208
  if(first_bucket != last_bucket){
847
- bucket_type *b = (&this->priv_bucket_pointer()[0]);
1209
+ bucket_type *b = &this->priv_bucket(0);
848
1210
  num_erased += this->priv_erase_from_single_bucket
849
- (b[first_bucket], before_first_it, b[first_bucket].end(), node_disposer, optimize_multikey_tag);
1211
+ (b[first_bucket], before_first_it, this->priv_bucket_lend(first_bucket), node_disposer, optimize_multikey_tag);
850
1212
  for(std::size_t i = 0, n = (last_bucket - first_bucket - 1); i != n; ++i){
851
1213
  num_erased += this->priv_erase_whole_bucket(b[first_bucket+i+1], node_disposer);
852
1214
  }
853
- last_step_before_it = b[last_bucket].before_begin();
1215
+ last_step_before_it = this->priv_bucket_lbbegin(last_bucket);
854
1216
  }
855
1217
  else{
856
1218
  last_step_before_it = before_first_it;
857
1219
  }
858
1220
  num_erased += this->priv_erase_from_single_bucket
859
- (this->priv_bucket_pointer()[last_bucket], last_step_before_it, last_it, node_disposer, optimize_multikey_tag);
1221
+ (this->priv_bucket(last_bucket), last_step_before_it, last_it, node_disposer, optimize_multikey_tag);
860
1222
  return num_erased;
861
1223
  }
862
1224
 
@@ -865,88 +1227,74 @@ struct bucket_plus_vtraits
865
1227
  //First find the last node of p's group.
866
1228
  //This requires checking the first node of the next group or
867
1229
  //the bucket node.
868
- slist_node_ptr end_ptr(b.end().pointed_node());
869
- node_ptr possible_end(node_traits::get_next( detail::dcast_bucket_ptr<node>(end_ptr)));
870
- node_ptr last_node_group(possible_end);
1230
+ slist_node_ptr end_ptr(sit_end(b).pointed_node());
1231
+ slist_node_ptr last_node_group(b.get_node_ptr());
1232
+ slist_node_ptr possible_end(slist_node_traits::get_next(last_node_group));
871
1233
 
872
1234
  while(end_ptr != possible_end){
873
- last_node_group = group_traits::get_next(detail::dcast_bucket_ptr<node>(possible_end));
874
- possible_end = node_traits::get_next(last_node_group);
1235
+ last_node_group = group_traits::get_next(dcast_bucket_ptr<node>(possible_end));
1236
+ possible_end = slist_node_traits::get_next(last_node_group);
875
1237
  }
876
- return bucket_type::s_iterator_to(*last_node_group);
1238
+ return siterator(last_node_group);
877
1239
  }
878
1240
 
879
- template<class NodeDisposer>
880
- std::size_t priv_erase_whole_bucket(bucket_type &b, NodeDisposer node_disposer)
881
- {
882
- std::size_t num_erased = 0;
883
- siterator b_begin(b.before_begin());
884
- siterator nxt(b_begin);
885
- ++nxt;
886
- siterator const end_sit(b.end());
887
- while(nxt != end_sit){
888
- //No need to init group links as we'll delete all bucket nodes
889
- nxt = bucket_type::s_erase_after_and_dispose(b_begin, node_disposer);
890
- ++num_erased;
891
- }
892
- return num_erased;
1241
+ BOOST_INTRUSIVE_FORCEINLINE static siterator priv_get_last(bucket_type &b, detail::false_) //NOT optimize multikey
1242
+ {
1243
+ slist_node_ptr p = b.get_node_ptr();
1244
+ return siterator(slist_node_algorithms::get_previous_node(p, slist_node_algorithms::end_node(p)));
893
1245
  }
894
1246
 
895
- BOOST_INTRUSIVE_FORCEINLINE static siterator priv_get_last(bucket_type &b, detail::false_) //NOT optimize multikey
896
- { return b.previous(b.end()); }
1247
+ template<class NodeDisposer>
1248
+ static BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_erase_whole_bucket(bucket_type &b, NodeDisposer node_disposer)
1249
+ { return slist_node_algorithms::detach_and_dispose(b.get_node_ptr(), node_disposer); }
897
1250
 
898
1251
  static siterator priv_get_previous(bucket_type &b, siterator i, detail::true_) //optimize multikey
899
1252
  {
900
- node_ptr const elem(detail::dcast_bucket_ptr<node>(i.pointed_node()));
1253
+ node_ptr const elem(dcast_bucket_ptr<node>(i.pointed_node()));
901
1254
  node_ptr const prev_in_group(group_traits::get_next(elem));
902
1255
  bool const first_in_group = node_traits::get_next(prev_in_group) != elem;
903
- typename bucket_type::node &n = first_in_group
904
- ? *group_functions_t::get_prev_to_first_in_group(b.end().pointed_node(), elem)
905
- : *group_traits::get_next(elem)
1256
+ slist_node_ptr n = first_in_group
1257
+ ? group_functions_t::get_prev_to_first_in_group(b.get_node_ptr(), elem)
1258
+ : group_traits::get_next(elem)
906
1259
  ;
907
- return bucket_type::s_iterator_to(n);
1260
+ return siterator(n);
908
1261
  }
909
1262
 
910
1263
  BOOST_INTRUSIVE_FORCEINLINE static siterator priv_get_previous(bucket_type &b, siterator i, detail::false_) //NOT optimize multikey
911
- { return b.previous(i); }
1264
+ { return siterator(slist_node_algorithms::get_previous_node(b.get_node_ptr(), i.pointed_node())); }
912
1265
 
913
- std::size_t priv_get_bucket_num_no_hash_store(siterator it, detail::true_) //optimize multikey
1266
+ template<class Disposer>
1267
+ struct typeof_node_disposer
914
1268
  {
915
- const bucket_ptr f(this->priv_bucket_pointer()), l(f + this->priv_bucket_count() - 1);
916
- slist_node_ptr bb = group_functions_t::get_bucket_before_begin
917
- ( f->end().pointed_node()
918
- , l->end().pointed_node()
919
- , detail::dcast_bucket_ptr<node>(it.pointed_node()));
920
- //Now get the bucket_impl from the iterator
921
- const bucket_type &b = static_cast<const bucket_type&>
922
- (bucket_type::slist_type::container_from_end_iterator(bucket_type::s_iterator_to(*bb)));
923
- //Now just calculate the index b has in the bucket array
924
- return static_cast<std::size_t>(&b - &*f);
925
- }
1269
+ typedef node_cast_adaptor
1270
+ < detail::node_disposer< Disposer, value_traits, CommonSListAlgorithms>
1271
+ , slist_node_ptr, node_ptr > type;
1272
+ };
926
1273
 
927
- std::size_t priv_get_bucket_num_no_hash_store(siterator it, detail::false_) //NO optimize multikey
1274
+ template<class Disposer>
1275
+ BOOST_INTRUSIVE_FORCEINLINE typename typeof_node_disposer<Disposer>::type
1276
+ make_node_disposer(const Disposer &disposer) const
928
1277
  {
929
- bucket_ptr f(this->priv_bucket_pointer()), l(f + this->priv_bucket_count() - 1);
930
- slist_node_ptr first_ptr(f->cend().pointed_node())
931
- , last_ptr(l->cend().pointed_node());
1278
+ typedef typename typeof_node_disposer<Disposer>::type return_t;
1279
+ return return_t(disposer, &this->priv_value_traits());
1280
+ }
932
1281
 
933
- //The end node is embedded in the singly linked list:
934
- //iterate until we reach it.
935
- while(!(first_ptr <= it.pointed_node() && it.pointed_node() <= last_ptr)){
936
- ++it;
937
- }
938
- //Now get the bucket_impl from the iterator
939
- const bucket_type &b = static_cast<const bucket_type&>
940
- (bucket_type::container_from_end_iterator(it));
1282
+ static BOOST_INTRUSIVE_FORCEINLINE bucket_ptr to_ptr(bucket_type &b)
1283
+ { return pointer_traits<bucket_ptr>::pointer_to(b); }
941
1284
 
942
- //Now just calculate the index b has in the bucket array
943
- return static_cast<std::size_t>(&b - &*f);
944
- }
1285
+ static BOOST_INTRUSIVE_FORCEINLINE siterator sit_bbegin(bucket_type& b)
1286
+ { return siterator(b.get_node_ptr()); }
1287
+
1288
+ static BOOST_INTRUSIVE_FORCEINLINE siterator sit_begin(bucket_type& b)
1289
+ { return siterator(b.begin_ptr()); }
1290
+
1291
+ static BOOST_INTRUSIVE_FORCEINLINE siterator sit_end(bucket_type& b)
1292
+ { return siterator(slist_node_algorithms::end_node(b.get_node_ptr())); }
945
1293
 
946
- BOOST_INTRUSIVE_FORCEINLINE static std::size_t priv_stored_hash(slist_node_ptr n, detail::true_) //store_hash
947
- { return node_traits::get_hash(detail::dcast_bucket_ptr<node>(n)); }
1294
+ BOOST_INTRUSIVE_FORCEINLINE static std::size_t priv_stored_hash(siterator s, detail::true_) //store_hash
1295
+ { return node_traits::get_hash(dcast_bucket_ptr<node>(s.pointed_node())); }
948
1296
 
949
- BOOST_INTRUSIVE_FORCEINLINE static std::size_t priv_stored_hash(slist_node_ptr, detail::false_) //NO store_hash
1297
+ BOOST_INTRUSIVE_FORCEINLINE static std::size_t priv_stored_hash(siterator, detail::false_) //NO store_hash
950
1298
  { return std::size_t(-1); }
951
1299
 
952
1300
  BOOST_INTRUSIVE_FORCEINLINE node &priv_value_to_node(reference v)
@@ -955,21 +1303,36 @@ struct bucket_plus_vtraits
955
1303
  BOOST_INTRUSIVE_FORCEINLINE const node &priv_value_to_node(const_reference v) const
956
1304
  { return *this->priv_value_traits().to_node_ptr(v); }
957
1305
 
958
- BOOST_INTRUSIVE_FORCEINLINE reference priv_value_from_slist_node(slist_node_ptr n)
959
- { return *this->priv_value_traits().to_value_ptr(detail::dcast_bucket_ptr<node>(n)); }
1306
+ BOOST_INTRUSIVE_FORCEINLINE node_ptr priv_value_to_node_ptr(reference v)
1307
+ { return this->priv_value_traits().to_node_ptr(v); }
960
1308
 
961
- BOOST_INTRUSIVE_FORCEINLINE const_reference priv_value_from_slist_node(slist_node_ptr n) const
962
- { return *this->priv_value_traits().to_value_ptr(detail::dcast_bucket_ptr<node>(n)); }
1309
+ BOOST_INTRUSIVE_FORCEINLINE const_node_ptr priv_value_to_node_ptr(const_reference v) const
1310
+ { return this->priv_value_traits().to_node_ptr(v); }
1311
+
1312
+ BOOST_INTRUSIVE_FORCEINLINE reference priv_value_from_siterator(siterator s)
1313
+ { return *this->priv_value_traits().to_value_ptr(dcast_bucket_ptr<node>(s.pointed_node())); }
1314
+
1315
+ BOOST_INTRUSIVE_FORCEINLINE const_reference priv_value_from_siterator(siterator s) const
1316
+ { return *this->priv_value_traits().to_value_ptr(dcast_bucket_ptr<node>(s.pointed_node())); }
1317
+
1318
+ static void priv_init_buckets(const bucket_ptr buckets_ptr, const std::size_t bucket_cnt)
1319
+ {
1320
+ bucket_ptr buckets_it = buckets_ptr;
1321
+ for (std::size_t bucket_i = 0; bucket_i != bucket_cnt; ++buckets_it, ++bucket_i) {
1322
+ slist_node_algorithms::init_header(buckets_it->get_node_ptr());
1323
+ }
1324
+ }
963
1325
 
964
1326
  void priv_clear_buckets(const bucket_ptr buckets_ptr, const std::size_t bucket_cnt)
965
1327
  {
966
1328
  bucket_ptr buckets_it = buckets_ptr;
967
1329
  for(std::size_t bucket_i = 0; bucket_i != bucket_cnt; ++buckets_it, ++bucket_i){
968
- if(safemode_or_autounlink){
969
- buckets_it->clear_and_dispose(detail::init_disposer<node_algorithms>());
1330
+ bucket_type &b = *buckets_it;
1331
+ BOOST_IF_CONSTEXPR(safemode_or_autounlink){
1332
+ slist_node_algorithms::detach_and_dispose(b.get_node_ptr(), this->make_node_disposer(detail::null_disposer()));
970
1333
  }
971
1334
  else{
972
- buckets_it->clear();
1335
+ slist_node_algorithms::init_header(b.get_node_ptr());
973
1336
  }
974
1337
  }
975
1338
  }
@@ -977,28 +1340,35 @@ struct bucket_plus_vtraits
977
1340
  BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_stored_or_compute_hash(const value_type &v, detail::true_) const //For store_hash == true
978
1341
  { return node_traits::get_hash(this->priv_value_traits().to_node_ptr(v)); }
979
1342
 
980
- typedef hashtable_iterator<bucket_plus_vtraits, false> iterator;
981
- typedef hashtable_iterator<bucket_plus_vtraits, true> const_iterator;
1343
+ typedef hashtable_iterator<bucket_plus_vtraits, LinearBuckets, false> iterator;
1344
+ typedef hashtable_iterator<bucket_plus_vtraits, LinearBuckets, true> const_iterator;
982
1345
 
983
- BOOST_INTRUSIVE_FORCEINLINE iterator end()
984
- { return iterator(this->priv_invalid_local_it(), 0); }
1346
+ BOOST_INTRUSIVE_FORCEINLINE iterator end() BOOST_NOEXCEPT
1347
+ { return this->build_iterator(this->priv_end_sit(), bucket_ptr()); }
985
1348
 
986
- BOOST_INTRUSIVE_FORCEINLINE const_iterator end() const
987
- { return this->cend(); }
1349
+ BOOST_INTRUSIVE_FORCEINLINE const_iterator end() const BOOST_NOEXCEPT
1350
+ { return this->cend(); }
988
1351
 
989
- BOOST_INTRUSIVE_FORCEINLINE const_iterator cend() const
990
- { return const_iterator(this->priv_invalid_local_it(), 0); }
1352
+ BOOST_INTRUSIVE_FORCEINLINE const_iterator cend() const BOOST_NOEXCEPT
1353
+ { return this->build_const_iterator(this->priv_end_sit(), bucket_ptr()); }
991
1354
 
992
- //Public functions:
993
- struct data_type : public ValueTraits
994
- {
995
- template<class BucketTraitsType>
996
- BOOST_INTRUSIVE_FORCEINLINE data_type(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits)
997
- : ValueTraits(val_traits), bucket_traits_(::boost::forward<BucketTraitsType>(b_traits))
998
- {}
1355
+ BOOST_INTRUSIVE_FORCEINLINE iterator build_iterator(siterator s, bucket_ptr p)
1356
+ { return this->build_iterator(s, p, linear_buckets_t()); }
1357
+
1358
+ BOOST_INTRUSIVE_FORCEINLINE iterator build_iterator(siterator s, bucket_ptr p, detail::true_) //linear buckets
1359
+ { return iterator(s, p, this->priv_value_traits_ptr()); }
1360
+
1361
+ BOOST_INTRUSIVE_FORCEINLINE iterator build_iterator(siterator s, bucket_ptr, detail::false_) //!linear buckets
1362
+ { return iterator(s, &this->get_bucket_value_traits()); }
1363
+
1364
+ BOOST_INTRUSIVE_FORCEINLINE const_iterator build_const_iterator(siterator s, bucket_ptr p) const
1365
+ { return this->build_const_iterator(s, p, linear_buckets_t()); }
999
1366
 
1000
- bucket_traits bucket_traits_;
1001
- } data;
1367
+ BOOST_INTRUSIVE_FORCEINLINE const_iterator build_const_iterator(siterator s, bucket_ptr p, detail::true_) const //linear buckets
1368
+ { return const_iterator(s, p, this->priv_value_traits_ptr()); }
1369
+
1370
+ BOOST_INTRUSIVE_FORCEINLINE const_iterator build_const_iterator(siterator s, bucket_ptr, detail::false_) const //!linear buckets
1371
+ { return const_iterator(s, &this->get_bucket_value_traits()); }
1002
1372
  };
1003
1373
 
1004
1374
  template<class Hash, class>
@@ -1022,7 +1392,7 @@ struct get_equal_to
1022
1392
  template<class T>
1023
1393
  struct get_equal_to<void, T>
1024
1394
  {
1025
- typedef std::equal_to<T> type;
1395
+ typedef value_equal<T> type;
1026
1396
  };
1027
1397
 
1028
1398
  template<class KeyOfValue, class T>
@@ -1064,18 +1434,24 @@ struct hash_key_equal
1064
1434
 
1065
1435
  //bucket_hash_t
1066
1436
  //Stores bucket_plus_vtraits plust the hash function
1067
- template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class BucketTraits>
1437
+ template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class BucketTraits, bool LinearBuckets>
1068
1438
  struct bucket_hash_t
1069
1439
  //Use public inheritance to avoid MSVC bugs with closures
1070
1440
  : public detail::ebo_functor_holder
1071
- <typename hash_key_hash < typename bucket_plus_vtraits<ValueTraits,BucketTraits>::value_traits::value_type
1441
+ <typename hash_key_hash < typename bucket_plus_vtraits<ValueTraits,BucketTraits, LinearBuckets >::value_traits::value_type
1072
1442
  , VoidOrKeyOfValue
1073
1443
  , VoidOrKeyHash
1074
1444
  >::type
1075
1445
  >
1076
- , bucket_plus_vtraits<ValueTraits, BucketTraits> //4
1446
+ , bucket_plus_vtraits<ValueTraits, BucketTraits, LinearBuckets> //4
1077
1447
  {
1078
- typedef typename bucket_plus_vtraits<ValueTraits,BucketTraits>::value_traits value_traits;
1448
+ private:
1449
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bucket_hash_t)
1450
+
1451
+ public:
1452
+
1453
+ typedef typename bucket_plus_vtraits
1454
+ <ValueTraits,BucketTraits, LinearBuckets>::value_traits value_traits;
1079
1455
  typedef typename value_traits::value_type value_type;
1080
1456
  typedef typename value_traits::node_traits node_traits;
1081
1457
  typedef hash_key_hash
@@ -1084,18 +1460,23 @@ struct bucket_hash_t
1084
1460
  typedef typename hash_key_types_base<value_type, VoidOrKeyOfValue>::key_of_value key_of_value;
1085
1461
 
1086
1462
  typedef BucketTraits bucket_traits;
1087
- typedef bucket_plus_vtraits<ValueTraits, BucketTraits> bucket_plus_vtraits_t;
1463
+ typedef bucket_plus_vtraits<ValueTraits, BucketTraits, LinearBuckets> bucket_plus_vtraits_t;
1088
1464
  typedef detail::ebo_functor_holder<hasher> base_t;
1089
1465
 
1090
- template<class BucketTraitsType>
1091
- BOOST_INTRUSIVE_FORCEINLINE bucket_hash_t(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits, const hasher & h)
1092
- : detail::ebo_functor_holder<hasher>(h), bucket_plus_vtraits_t(val_traits, ::boost::forward<BucketTraitsType>(b_traits))
1466
+ BOOST_INTRUSIVE_FORCEINLINE bucket_hash_t(const ValueTraits &val_traits, const bucket_traits &b_traits, const hasher & h)
1467
+ : base_t(h)
1468
+ , bucket_plus_vtraits_t(val_traits, b_traits)
1469
+ {}
1470
+
1471
+ BOOST_INTRUSIVE_FORCEINLINE bucket_hash_t(BOOST_RV_REF(bucket_hash_t) other)
1472
+ : base_t(BOOST_MOVE_BASE(base_t, other))
1473
+ , bucket_plus_vtraits_t(BOOST_MOVE_BASE(bucket_plus_vtraits_t, other))
1093
1474
  {}
1094
1475
 
1095
1476
  BOOST_INTRUSIVE_FORCEINLINE const hasher &priv_hasher() const
1096
1477
  { return this->base_t::get(); }
1097
1478
 
1098
- hasher &priv_hasher()
1479
+ BOOST_INTRUSIVE_FORCEINLINE hasher &priv_hasher()
1099
1480
  { return this->base_t::get(); }
1100
1481
 
1101
1482
  using bucket_plus_vtraits_t::priv_stored_or_compute_hash; //For store_hash == true
@@ -1104,11 +1485,12 @@ struct bucket_hash_t
1104
1485
  { return this->priv_hasher()(key_of_value()(v)); }
1105
1486
  };
1106
1487
 
1107
- template<class ValueTraits, class BucketTraits, class VoidOrKeyOfValue, class VoidOrKeyEqual>
1488
+ template<class ValueTraits, class BucketTraits, class VoidOrKeyOfValue, class VoidOrKeyEqual, bool LinearBuckets>
1108
1489
  struct hashtable_equal_holder
1109
1490
  {
1110
1491
  typedef detail::ebo_functor_holder
1111
- < typename hash_key_equal < typename bucket_plus_vtraits<ValueTraits, BucketTraits>::value_traits::value_type
1492
+ < typename hash_key_equal < typename bucket_plus_vtraits
1493
+ <ValueTraits, BucketTraits, LinearBuckets>::value_traits::value_type
1112
1494
  , VoidOrKeyOfValue
1113
1495
  , VoidOrKeyEqual
1114
1496
  >::type
@@ -1119,57 +1501,76 @@ struct hashtable_equal_holder
1119
1501
  //bucket_hash_equal_t
1120
1502
  //Stores bucket_hash_t and the equality function when the first
1121
1503
  //non-empty bucket shall not be cached.
1122
- template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits, bool>
1504
+ template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits, bool LinearBuckets, bool>
1123
1505
  struct bucket_hash_equal_t
1124
1506
  //Use public inheritance to avoid MSVC bugs with closures
1125
- : public bucket_hash_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, BucketTraits> //3
1126
- , public hashtable_equal_holder<ValueTraits, BucketTraits, VoidOrKeyOfValue, VoidOrKeyEqual>::type //equal
1507
+ : public bucket_hash_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, BucketTraits, LinearBuckets> //3
1508
+ , public hashtable_equal_holder<ValueTraits, BucketTraits, VoidOrKeyOfValue, VoidOrKeyEqual, LinearBuckets>::type //equal
1127
1509
  {
1510
+ private:
1511
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bucket_hash_equal_t)
1512
+
1513
+ public:
1128
1514
  typedef typename hashtable_equal_holder
1129
- <ValueTraits, BucketTraits, VoidOrKeyOfValue, VoidOrKeyEqual>::type equal_holder_t;
1130
- typedef bucket_hash_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, BucketTraits> bucket_hash_type;
1131
- typedef bucket_plus_vtraits<ValueTraits,BucketTraits> bucket_plus_vtraits_t;
1132
- typedef ValueTraits value_traits;
1133
- typedef typename equal_holder_t::functor_type key_equal;
1134
- typedef typename bucket_hash_type::hasher hasher;
1135
- typedef BucketTraits bucket_traits;
1136
- typedef typename bucket_plus_vtraits_t::slist_impl slist_impl;
1137
- typedef typename slist_impl::iterator siterator;
1138
- typedef detail::bucket_impl<slist_impl> bucket_type;
1139
- typedef typename detail::unordered_bucket_ptr_impl<value_traits>::type bucket_ptr;
1140
-
1141
- template<class BucketTraitsType>
1142
- bucket_hash_equal_t(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits, const hasher & h, const key_equal &e)
1143
- : bucket_hash_type(val_traits, ::boost::forward<BucketTraitsType>(b_traits), h)
1515
+ < ValueTraits, BucketTraits, VoidOrKeyOfValue
1516
+ , VoidOrKeyEqual, LinearBuckets>::type equal_holder_t;
1517
+ typedef bucket_hash_t< ValueTraits, VoidOrKeyOfValue
1518
+ , VoidOrKeyHash, BucketTraits
1519
+ , LinearBuckets> bucket_hash_type;
1520
+ typedef bucket_plus_vtraits
1521
+ <ValueTraits, BucketTraits, LinearBuckets> bucket_plus_vtraits_t;
1522
+ typedef ValueTraits value_traits;
1523
+ typedef typename equal_holder_t::functor_type key_equal;
1524
+ typedef typename bucket_hash_type::hasher hasher;
1525
+ typedef BucketTraits bucket_traits;
1526
+ typedef typename bucket_plus_vtraits_t::siterator siterator;
1527
+ typedef typename bucket_plus_vtraits_t::const_siterator const_siterator;
1528
+ typedef typename bucket_plus_vtraits_t::bucket_type bucket_type;
1529
+ typedef typename bucket_plus_vtraits_t::slist_node_algorithms slist_node_algorithms;
1530
+ typedef typename unordered_bucket_ptr_impl
1531
+ <value_traits>::type bucket_ptr;
1532
+
1533
+ bucket_hash_equal_t(const ValueTraits &val_traits, const bucket_traits &b_traits, const hasher & h, const key_equal &e)
1534
+ : bucket_hash_type(val_traits, b_traits, h)
1144
1535
  , equal_holder_t(e)
1145
1536
  {}
1146
1537
 
1538
+ BOOST_INTRUSIVE_FORCEINLINE bucket_hash_equal_t(BOOST_RV_REF(bucket_hash_equal_t) other)
1539
+ : bucket_hash_type(BOOST_MOVE_BASE(bucket_hash_type, other))
1540
+ , equal_holder_t(BOOST_MOVE_BASE(equal_holder_t, other))
1541
+ {}
1542
+
1147
1543
  BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_get_cache()
1148
- { return this->bucket_hash_type::priv_bucket_pointer(); }
1544
+ { return this->priv_bucket_pointer(); }
1149
1545
 
1150
- BOOST_INTRUSIVE_FORCEINLINE void priv_set_cache(const bucket_ptr &)
1546
+ BOOST_INTRUSIVE_FORCEINLINE void priv_set_cache(bucket_ptr)
1547
+ {}
1548
+
1549
+ BOOST_INTRUSIVE_FORCEINLINE void priv_set_cache_bucket_num(std::size_t)
1151
1550
  {}
1152
1551
 
1153
1552
  BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_get_cache_bucket_num()
1154
1553
  { return 0u; }
1155
1554
 
1156
- BOOST_INTRUSIVE_FORCEINLINE void priv_initialize_cache()
1555
+ BOOST_INTRUSIVE_FORCEINLINE void priv_init_cache()
1157
1556
  {}
1158
1557
 
1159
1558
  BOOST_INTRUSIVE_FORCEINLINE void priv_swap_cache(bucket_hash_equal_t &)
1160
1559
  {}
1161
1560
 
1162
- siterator priv_begin() const
1561
+ siterator priv_begin(bucket_ptr &pbucketptr) const
1163
1562
  {
1164
1563
  std::size_t n = 0;
1165
- std::size_t bucket_cnt = this->bucket_hash_type::priv_bucket_count();
1564
+ std::size_t bucket_cnt = this->priv_usable_bucket_count();
1166
1565
  for (n = 0; n < bucket_cnt; ++n){
1167
- bucket_type &b = this->bucket_hash_type::priv_bucket_pointer()[n];
1168
- if(!b.empty()){
1169
- return b.begin();
1566
+ bucket_type &b = this->priv_bucket(n);
1567
+ if(!slist_node_algorithms::is_empty(b.get_node_ptr())){
1568
+ pbucketptr = this->to_ptr(b);
1569
+ return siterator(b.begin_ptr());
1170
1570
  }
1171
1571
  }
1172
- return this->bucket_hash_type::priv_invalid_local_it();
1572
+ pbucketptr = this->priv_invalid_bucket_ptr();
1573
+ return this->priv_end_sit();
1173
1574
  }
1174
1575
 
1175
1576
  BOOST_INTRUSIVE_FORCEINLINE void priv_insertion_update_cache(std::size_t)
@@ -1178,6 +1579,9 @@ struct bucket_hash_equal_t
1178
1579
  BOOST_INTRUSIVE_FORCEINLINE void priv_erasure_update_cache_range(std::size_t, std::size_t)
1179
1580
  {}
1180
1581
 
1582
+ BOOST_INTRUSIVE_FORCEINLINE void priv_erasure_update_cache(bucket_ptr)
1583
+ {}
1584
+
1181
1585
  BOOST_INTRUSIVE_FORCEINLINE void priv_erasure_update_cache()
1182
1586
  {}
1183
1587
 
@@ -1191,65 +1595,82 @@ struct bucket_hash_equal_t
1191
1595
  //bucket_hash_equal_t
1192
1596
  //Stores bucket_hash_t and the equality function when the first
1193
1597
  //non-empty bucket shall be cached.
1194
- template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits> //cache_begin == true version
1195
- struct bucket_hash_equal_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, true>
1598
+ template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits, bool LinearBuckets> //cache_begin == true version
1599
+ struct bucket_hash_equal_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, LinearBuckets, true>
1196
1600
  //Use public inheritance to avoid MSVC bugs with closures
1197
- : bucket_hash_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, BucketTraits> //2
1198
- , hashtable_equal_holder<ValueTraits, BucketTraits, VoidOrKeyOfValue, VoidOrKeyEqual>::type
1601
+ : public bucket_hash_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, BucketTraits, LinearBuckets> //2
1602
+ , public hashtable_equal_holder<ValueTraits, BucketTraits, VoidOrKeyOfValue, VoidOrKeyEqual, LinearBuckets>::type
1199
1603
  {
1604
+ private:
1605
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bucket_hash_equal_t)
1606
+
1607
+ public:
1608
+
1200
1609
  typedef typename hashtable_equal_holder
1201
- <ValueTraits, BucketTraits, VoidOrKeyOfValue, VoidOrKeyEqual>::type equal_holder_t;
1610
+ < ValueTraits, BucketTraits
1611
+ , VoidOrKeyOfValue, VoidOrKeyEqual, LinearBuckets>::type equal_holder_t;
1202
1612
 
1203
- typedef bucket_plus_vtraits<ValueTraits,BucketTraits> bucket_plus_vtraits_t;
1613
+ typedef bucket_plus_vtraits
1614
+ < ValueTraits, BucketTraits, LinearBuckets> bucket_plus_vtraits_t;
1204
1615
  typedef ValueTraits value_traits;
1205
1616
  typedef typename equal_holder_t::functor_type key_equal;
1206
- typedef bucket_hash_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, BucketTraits> bucket_hash_type;
1617
+ typedef bucket_hash_t
1618
+ < ValueTraits, VoidOrKeyOfValue
1619
+ , VoidOrKeyHash, BucketTraits, LinearBuckets> bucket_hash_type;
1207
1620
  typedef typename bucket_hash_type::hasher hasher;
1208
1621
  typedef BucketTraits bucket_traits;
1209
- typedef typename bucket_plus_vtraits_t::slist_impl::iterator siterator;
1622
+ typedef typename bucket_plus_vtraits_t::siterator siterator;
1623
+ typedef typename bucket_plus_vtraits_t::slist_node_algorithms slist_node_algorithms;
1210
1624
 
1211
- template<class BucketTraitsType>
1212
- bucket_hash_equal_t(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits, const hasher & h, const key_equal &e)
1213
- : bucket_hash_type(val_traits, ::boost::forward<BucketTraitsType>(b_traits), h)
1625
+ bucket_hash_equal_t(const ValueTraits &val_traits, const bucket_traits &b_traits, const hasher & h, const key_equal &e)
1626
+ : bucket_hash_type(val_traits, b_traits, h)
1214
1627
  , equal_holder_t(e)
1215
1628
  {}
1216
1629
 
1217
- typedef typename detail::unordered_bucket_ptr_impl
1218
- <typename bucket_hash_type::value_traits>::type bucket_ptr;
1630
+ BOOST_INTRUSIVE_FORCEINLINE bucket_hash_equal_t(BOOST_RV_REF(bucket_hash_equal_t) other)
1631
+ : bucket_hash_type(BOOST_MOVE_BASE(bucket_hash_type, other))
1632
+ , equal_holder_t(BOOST_MOVE_BASE(equal_holder_t, other))
1633
+ {}
1219
1634
 
1220
- BOOST_INTRUSIVE_FORCEINLINE bucket_ptr &priv_get_cache()
1221
- { return cached_begin_; }
1635
+ typedef typename unordered_bucket_ptr_impl
1636
+ <typename bucket_hash_type::value_traits>::type bucket_ptr;
1222
1637
 
1223
- BOOST_INTRUSIVE_FORCEINLINE const bucket_ptr &priv_get_cache() const
1638
+ BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_get_cache() const
1224
1639
  { return cached_begin_; }
1225
1640
 
1226
- BOOST_INTRUSIVE_FORCEINLINE void priv_set_cache(const bucket_ptr &p)
1641
+ BOOST_INTRUSIVE_FORCEINLINE void priv_set_cache(bucket_ptr p)
1227
1642
  { cached_begin_ = p; }
1228
1643
 
1644
+ BOOST_INTRUSIVE_FORCEINLINE void priv_set_cache_bucket_num(std::size_t insertion_bucket)
1645
+ {
1646
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(insertion_bucket <= this->priv_usable_bucket_count());
1647
+ this->cached_begin_ = this->priv_bucket_pointer() + std::ptrdiff_t(insertion_bucket);
1648
+ }
1649
+
1229
1650
  BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_get_cache_bucket_num()
1230
- { return this->cached_begin_ - this->bucket_hash_type::priv_bucket_pointer(); }
1651
+ { return std::size_t(this->cached_begin_ - this->priv_bucket_pointer()); }
1231
1652
 
1232
- BOOST_INTRUSIVE_FORCEINLINE void priv_initialize_cache()
1233
- { this->cached_begin_ = this->bucket_hash_type::priv_invalid_bucket(); }
1653
+ BOOST_INTRUSIVE_FORCEINLINE void priv_init_cache()
1654
+ { this->cached_begin_ = this->priv_past_usable_bucket_ptr(); }
1234
1655
 
1235
1656
  BOOST_INTRUSIVE_FORCEINLINE void priv_swap_cache(bucket_hash_equal_t &other)
1236
- {
1237
- ::boost::adl_move_swap(this->cached_begin_, other.cached_begin_);
1238
- }
1657
+ { ::boost::adl_move_swap(this->cached_begin_, other.cached_begin_); }
1239
1658
 
1240
- siterator priv_begin() const
1659
+ siterator priv_begin(bucket_ptr& pbucketptr) const
1241
1660
  {
1242
- if(this->cached_begin_ == this->bucket_hash_type::priv_invalid_bucket()){
1243
- return this->bucket_hash_type::priv_invalid_local_it();
1661
+ pbucketptr = this->cached_begin_;
1662
+ if(this->cached_begin_ == this->priv_past_usable_bucket_ptr()){
1663
+ return this->priv_end_sit();
1244
1664
  }
1245
1665
  else{
1246
- return this->cached_begin_->begin();
1666
+ return siterator(cached_begin_->begin_ptr());
1247
1667
  }
1248
1668
  }
1249
1669
 
1250
1670
  void priv_insertion_update_cache(std::size_t insertion_bucket)
1251
1671
  {
1252
- bucket_ptr p = this->bucket_hash_type::priv_bucket_pointer() + insertion_bucket;
1672
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(insertion_bucket < this->priv_usable_bucket_count());
1673
+ bucket_ptr p = this->priv_bucket_pointer() + std::ptrdiff_t(insertion_bucket);
1253
1674
  if(p < this->cached_begin_){
1254
1675
  this->cached_begin_ = p;
1255
1676
  }
@@ -1266,24 +1687,30 @@ struct bucket_hash_equal_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrK
1266
1687
  //If the last bucket is the end, the cache must be updated
1267
1688
  //to the last position if all
1268
1689
  if(this->priv_get_cache_bucket_num() == first_bucket_num &&
1269
- this->bucket_hash_type::priv_bucket_pointer()[first_bucket_num].empty() ){
1270
- this->priv_set_cache(this->bucket_hash_type::priv_bucket_pointer() + last_bucket_num);
1690
+ this->priv_bucket_empty(first_bucket_num) ){
1691
+ this->priv_set_cache(this->priv_bucket_pointer() + std::ptrdiff_t(last_bucket_num));
1692
+ this->priv_erasure_update_cache();
1693
+ }
1694
+ }
1695
+
1696
+ void priv_erasure_update_cache(bucket_ptr first_bucket)
1697
+ {
1698
+ //If the last bucket is the end, the cache must be updated
1699
+ //to the last position if all
1700
+ if (this->priv_get_cache() == first_bucket &&
1701
+ this->priv_bucket_empty(first_bucket)) {
1271
1702
  this->priv_erasure_update_cache();
1272
1703
  }
1273
1704
  }
1274
1705
 
1275
1706
  void priv_erasure_update_cache()
1276
1707
  {
1277
- if(this->cached_begin_ != this->bucket_hash_type::priv_invalid_bucket()){
1278
- std::size_t current_n = this->priv_get_cache() - this->bucket_hash_type::priv_bucket_pointer();
1279
- for( const std::size_t num_buckets = this->bucket_hash_type::priv_bucket_count()
1280
- ; current_n < num_buckets
1281
- ; ++current_n, ++this->priv_get_cache()){
1282
- if(!this->priv_get_cache()->empty()){
1283
- return;
1284
- }
1708
+ const bucket_ptr cache_end = this->priv_past_usable_bucket_ptr();
1709
+ while( cached_begin_ != cache_end) {
1710
+ if (!slist_node_algorithms::is_empty(cached_begin_->get_node_ptr())) {
1711
+ return;
1285
1712
  }
1286
- this->priv_initialize_cache();
1713
+ ++cached_begin_;
1287
1714
  }
1288
1715
  }
1289
1716
 
@@ -1294,19 +1721,27 @@ struct bucket_hash_equal_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrK
1294
1721
  //to maintain minimal container size with compilers like MSVC
1295
1722
  //that have problems with EBO and multiple empty base classes
1296
1723
  template<class DeriveFrom, class SizeType, bool>
1297
- struct hashtable_size_traits_wrapper
1724
+ struct hashtable_size_wrapper
1298
1725
  : public DeriveFrom
1299
1726
  {
1727
+ private:
1728
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(hashtable_size_wrapper)
1729
+
1730
+ public:
1300
1731
  template<class Base, class Arg0, class Arg1, class Arg2>
1301
- hashtable_size_traits_wrapper( BOOST_FWD_REF(Base) base, BOOST_FWD_REF(Arg0) arg0
1302
- , BOOST_FWD_REF(Arg1) arg1, BOOST_FWD_REF(Arg2) arg2)
1303
- : DeriveFrom(::boost::forward<Base>(base)
1304
- , ::boost::forward<Arg0>(arg0)
1305
- , ::boost::forward<Arg1>(arg1)
1306
- , ::boost::forward<Arg2>(arg2))
1732
+ hashtable_size_wrapper( BOOST_FWD_REF(Base) base, BOOST_FWD_REF(Arg0) arg0
1733
+ , BOOST_FWD_REF(Arg1) arg1, BOOST_FWD_REF(Arg2) arg2)
1734
+ : DeriveFrom( ::boost::forward<Base>(base)
1735
+ , ::boost::forward<Arg0>(arg0)
1736
+ , ::boost::forward<Arg1>(arg1)
1737
+ , ::boost::forward<Arg2>(arg2))
1307
1738
  {}
1308
1739
  typedef detail::size_holder < true, SizeType> size_traits;//size_traits
1309
1740
 
1741
+ BOOST_INTRUSIVE_FORCEINLINE hashtable_size_wrapper(BOOST_RV_REF(hashtable_size_wrapper) other)
1742
+ : DeriveFrom(BOOST_MOVE_BASE(DeriveFrom, other))
1743
+ {}
1744
+
1310
1745
  size_traits size_traits_;
1311
1746
 
1312
1747
  typedef const size_traits & size_traits_const_t;
@@ -1320,16 +1755,24 @@ struct hashtable_size_traits_wrapper
1320
1755
  };
1321
1756
 
1322
1757
  template<class DeriveFrom, class SizeType>
1323
- struct hashtable_size_traits_wrapper<DeriveFrom, SizeType, false>
1758
+ struct hashtable_size_wrapper<DeriveFrom, SizeType, false>
1324
1759
  : public DeriveFrom
1325
1760
  {
1761
+ private:
1762
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(hashtable_size_wrapper)
1763
+
1764
+ public:
1326
1765
  template<class Base, class Arg0, class Arg1, class Arg2>
1327
- hashtable_size_traits_wrapper( BOOST_FWD_REF(Base) base, BOOST_FWD_REF(Arg0) arg0
1328
- , BOOST_FWD_REF(Arg1) arg1, BOOST_FWD_REF(Arg2) arg2)
1329
- : DeriveFrom(::boost::forward<Base>(base)
1330
- , ::boost::forward<Arg0>(arg0)
1331
- , ::boost::forward<Arg1>(arg1)
1332
- , ::boost::forward<Arg2>(arg2))
1766
+ hashtable_size_wrapper( BOOST_FWD_REF(Base) base, BOOST_FWD_REF(Arg0) arg0
1767
+ , BOOST_FWD_REF(Arg1) arg1, BOOST_FWD_REF(Arg2) arg2)
1768
+ : DeriveFrom( ::boost::forward<Base>(base)
1769
+ , ::boost::forward<Arg0>(arg0)
1770
+ , ::boost::forward<Arg1>(arg1)
1771
+ , ::boost::forward<Arg2>(arg2))
1772
+ {}
1773
+
1774
+ BOOST_INTRUSIVE_FORCEINLINE hashtable_size_wrapper(BOOST_RV_REF(hashtable_size_wrapper) other)
1775
+ : DeriveFrom(BOOST_MOVE_BASE(DeriveFrom, other))
1333
1776
  {}
1334
1777
 
1335
1778
  typedef detail::size_holder< false, SizeType> size_traits;
@@ -1341,32 +1784,43 @@ struct hashtable_size_traits_wrapper<DeriveFrom, SizeType, false>
1341
1784
  { return size_traits(); }
1342
1785
  };
1343
1786
 
1344
- //hashdata_internal
1345
- //Stores bucket_hash_equal_t and split_traits
1346
- template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits, class SizeType, std::size_t BoolFlags>
1347
- struct hashdata_internal
1348
- : public hashtable_size_traits_wrapper
1349
- < bucket_hash_equal_t
1350
- < ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual
1351
- , BucketTraits
1352
- , 0 != (BoolFlags & hash_bool_flags::cache_begin_pos)
1353
- > //2
1354
- , SizeType
1355
- , (BoolFlags & hash_bool_flags::incremental_pos) != 0
1356
- >
1787
+ template< class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash
1788
+ , class VoidOrKeyEqual, class BucketTraits, class SizeType
1789
+ , std::size_t BoolFlags>
1790
+ struct get_hashtable_size_wrapper_bucket
1357
1791
  {
1358
- typedef hashtable_size_traits_wrapper
1792
+ typedef hashtable_size_wrapper
1359
1793
  < bucket_hash_equal_t
1360
1794
  < ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual
1361
1795
  , BucketTraits
1796
+ , 0 != (BoolFlags & hash_bool_flags::linear_buckets_pos)
1362
1797
  , 0 != (BoolFlags & hash_bool_flags::cache_begin_pos)
1363
1798
  > //2
1364
1799
  , SizeType
1365
- , (BoolFlags & hash_bool_flags::incremental_pos) != 0
1366
- > internal_type;
1800
+ , (BoolFlags & hash_bool_flags::incremental_pos) != 0 ||
1801
+ (BoolFlags & hash_bool_flags::fastmod_buckets_pos) != 0
1802
+ > type;
1803
+ };
1804
+
1805
+ //hashdata_internal
1806
+ //Stores bucket_hash_equal_t and split_traits
1807
+ template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits, class SizeType, std::size_t BoolFlags>
1808
+ struct hashdata_internal
1809
+ : public get_hashtable_size_wrapper_bucket
1810
+ <ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, SizeType, BoolFlags>::type
1811
+ {
1812
+ private:
1813
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(hashdata_internal)
1814
+
1815
+ public:
1816
+ static const bool linear_buckets = 0 != (BoolFlags & hash_bool_flags::linear_buckets_pos);
1817
+ typedef typename get_hashtable_size_wrapper_bucket
1818
+ <ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, SizeType, BoolFlags>::type internal_type;
1819
+
1367
1820
  typedef typename internal_type::key_equal key_equal;
1368
1821
  typedef typename internal_type::hasher hasher;
1369
- typedef bucket_plus_vtraits<ValueTraits,BucketTraits> bucket_plus_vtraits_t;
1822
+ typedef bucket_plus_vtraits
1823
+ <ValueTraits, BucketTraits, linear_buckets> bucket_plus_vtraits_t;
1370
1824
  typedef SizeType size_type;
1371
1825
  typedef typename internal_type::size_traits split_traits;
1372
1826
  typedef typename bucket_plus_vtraits_t::bucket_ptr bucket_ptr;
@@ -1385,13 +1839,8 @@ struct hashdata_internal
1385
1839
  typedef typename node_traits::node node;
1386
1840
  typedef typename node_traits::node_ptr node_ptr;
1387
1841
  typedef typename node_traits::const_node_ptr const_node_ptr;
1388
- typedef detail::node_functions<node_traits> node_functions_t;
1389
- typedef typename detail::get_slist_impl
1390
- <typename detail::reduced_slist_node_traits
1391
- <typename value_traits::node_traits>::type
1392
- >::type slist_impl;
1393
- typedef typename slist_impl::node_algorithms node_algorithms;
1394
- typedef typename slist_impl::node_ptr slist_node_ptr;
1842
+ typedef typename bucket_plus_vtraits_t::slist_node_algorithms slist_node_algorithms;
1843
+ typedef typename bucket_plus_vtraits_t::slist_node_ptr slist_node_ptr;
1395
1844
 
1396
1845
  typedef hash_key_types_base
1397
1846
  < typename ValueTraits::value_type
@@ -1399,29 +1848,29 @@ struct hashdata_internal
1399
1848
  > hash_types_base;
1400
1849
  typedef typename hash_types_base::key_of_value key_of_value;
1401
1850
 
1402
- static const bool store_hash = detail::store_hash_is_true<node_traits>::value;
1851
+ static const bool store_hash = store_hash_is_true<node_traits>::value;
1403
1852
  static const bool safemode_or_autounlink = is_safe_autounlink<value_traits::link_mode>::value;
1404
1853
  static const bool stateful_value_traits = detail::is_stateful_value_traits<value_traits>::value;
1405
1854
 
1406
1855
  typedef detail::bool_<store_hash> store_hash_t;
1407
1856
 
1408
1857
  typedef detail::transform_iterator
1409
- < typename slist_impl::iterator
1410
- , downcast_node_to_value_t
1411
- < value_traits
1412
- , false> > local_iterator;
1858
+ < siterator
1859
+ , downcast_node_to_value_t<value_traits, false> > local_iterator;
1413
1860
 
1414
1861
  typedef detail::transform_iterator
1415
- < typename slist_impl::iterator
1416
- , downcast_node_to_value_t
1417
- < value_traits
1418
- , true> > const_local_iterator;
1419
- //
1862
+ < siterator
1863
+ , downcast_node_to_value_t<value_traits, true> > const_local_iterator;
1864
+
1865
+ typedef detail::bool_<linear_buckets> linear_buckets_t;
1420
1866
 
1421
- template<class BucketTraitsType>
1422
- hashdata_internal( const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits
1867
+ hashdata_internal( const ValueTraits &val_traits, const bucket_traits &b_traits
1423
1868
  , const hasher & h, const key_equal &e)
1424
- : internal_type(val_traits, ::boost::forward<BucketTraitsType>(b_traits), h, e)
1869
+ : internal_type(val_traits, b_traits, h, e)
1870
+ {}
1871
+
1872
+ BOOST_INTRUSIVE_FORCEINLINE hashdata_internal(BOOST_RV_REF(hashdata_internal) other)
1873
+ : internal_type(BOOST_MOVE_BASE(internal_type, other))
1425
1874
  {}
1426
1875
 
1427
1876
  BOOST_INTRUSIVE_FORCEINLINE typename internal_type::size_traits_t priv_split_traits()
@@ -1433,153 +1882,241 @@ struct hashdata_internal
1433
1882
  ~hashdata_internal()
1434
1883
  { this->priv_clear_buckets(); }
1435
1884
 
1885
+ using internal_type::priv_clear_buckets;
1886
+
1436
1887
  void priv_clear_buckets()
1437
1888
  {
1438
- this->internal_type::priv_clear_buckets
1439
- ( this->priv_get_cache()
1440
- , this->internal_type::priv_bucket_count()
1441
- - (this->priv_get_cache()
1442
- - this->internal_type::priv_bucket_pointer()));
1889
+ const std::size_t cache_num = this->priv_get_cache_bucket_num();
1890
+ this->priv_clear_buckets(this->priv_get_cache(), this->priv_usable_bucket_count() - cache_num);
1443
1891
  }
1444
1892
 
1445
1893
  void priv_clear_buckets_and_cache()
1446
1894
  {
1447
1895
  this->priv_clear_buckets();
1448
- this->priv_initialize_cache();
1896
+ this->priv_init_cache();
1449
1897
  }
1450
1898
 
1451
- void priv_initialize_buckets_and_cache()
1899
+ void priv_init_buckets_and_cache()
1452
1900
  {
1453
- this->internal_type::priv_clear_buckets
1454
- ( this->internal_type::priv_bucket_pointer()
1455
- , this->internal_type::priv_bucket_count());
1456
- this->priv_initialize_cache();
1901
+ this->priv_init_buckets(this->priv_bucket_pointer(), this->priv_usable_bucket_count());
1902
+ this->priv_init_cache();
1457
1903
  }
1904
+
1905
+ typedef typename bucket_plus_vtraits_t::iterator iterator;
1906
+ typedef typename bucket_plus_vtraits_t::const_iterator const_iterator;
1458
1907
 
1459
- typedef hashtable_iterator<bucket_plus_vtraits_t, false> iterator;
1460
- typedef hashtable_iterator<bucket_plus_vtraits_t, true> const_iterator;
1461
-
1462
- static std::size_t priv_stored_hash(slist_node_ptr n, detail::true_ true_value)
1463
- { return bucket_plus_vtraits<ValueTraits, BucketTraits>::priv_stored_hash(n, true_value); }
1908
+ //public functions
1909
+ BOOST_INTRUSIVE_FORCEINLINE SizeType split_count() const BOOST_NOEXCEPT
1910
+ { return this->priv_split_traits().get_size(); }
1464
1911
 
1465
- static std::size_t priv_stored_hash(slist_node_ptr n, detail::false_ false_value)
1466
- { return bucket_plus_vtraits<ValueTraits, BucketTraits>::priv_stored_hash(n, false_value); }
1912
+ BOOST_INTRUSIVE_FORCEINLINE static SizeType initial_split_from_bucket_count(SizeType bc) BOOST_NOEXCEPT
1913
+ {
1914
+ BOOST_IF_CONSTEXPR(fastmod_buckets) {
1915
+ size_type split;
1916
+ split = static_cast<SizeType>(prime_fmod_size::lower_size_index(bc));
1917
+ //The passed bucket size must be exactly the supported one
1918
+ BOOST_ASSERT(prime_fmod_size::size(split) == bc);
1919
+ return split;
1920
+ }
1921
+ else {
1922
+ BOOST_IF_CONSTEXPR(incremental) {
1923
+ BOOST_ASSERT(0 == (std::size_t(bc) & (std::size_t(bc) - 1u)));
1924
+ return size_type(bc >> 1u);
1925
+ }
1926
+ else{
1927
+ return bc;
1928
+ }
1929
+ }
1930
+ }
1467
1931
 
1468
- //public functions
1469
- BOOST_INTRUSIVE_FORCEINLINE SizeType split_count() const
1932
+ BOOST_INTRUSIVE_FORCEINLINE static SizeType rehash_split_from_bucket_count(SizeType bc) BOOST_NOEXCEPT
1470
1933
  {
1471
- return this->priv_split_traits().get_size();
1934
+ BOOST_IF_CONSTEXPR(fastmod_buckets) {
1935
+ return (initial_split_from_bucket_count)(bc);
1936
+ }
1937
+ else {
1938
+ BOOST_IF_CONSTEXPR(incremental) {
1939
+ BOOST_ASSERT(0 == (std::size_t(bc) & (std::size_t(bc) - 1u)));
1940
+ return bc;
1941
+ }
1942
+ else{
1943
+ return bc;
1944
+ }
1945
+ }
1472
1946
  }
1473
1947
 
1474
- BOOST_INTRUSIVE_FORCEINLINE iterator iterator_to(reference value)
1948
+ BOOST_INTRUSIVE_FORCEINLINE iterator iterator_to(reference value) BOOST_NOEXCEPT_IF(!linear_buckets)
1949
+ { return iterator_to(value, linear_buckets_t()); }
1950
+
1951
+ const_iterator iterator_to(const_reference value) const BOOST_NOEXCEPT_IF(!linear_buckets)
1952
+ { return iterator_to(value, linear_buckets_t()); }
1953
+
1954
+ iterator iterator_to(reference value, detail::true_) //linear_buckets
1475
1955
  {
1476
- return iterator(bucket_type::s_iterator_to
1477
- (this->priv_value_to_node(value)), &this->get_bucket_value_traits());
1956
+ const std::size_t h = this->priv_stored_or_compute_hash(value, store_hash_t());
1957
+ siterator sit(this->priv_value_to_node_ptr(value));
1958
+ return this->build_iterator(sit, this->priv_hash_to_bucket_ptr(h));
1478
1959
  }
1479
1960
 
1480
- const_iterator iterator_to(const_reference value) const
1961
+ const_iterator iterator_to(const_reference value, detail::true_) const //linear_buckets
1481
1962
  {
1482
- siterator const sit = bucket_type::s_iterator_to
1483
- ( *pointer_traits<node_ptr>::const_cast_from
1484
- (pointer_traits<const_node_ptr>::pointer_to(this->priv_value_to_node(value)))
1963
+ const std::size_t h = this->priv_stored_or_compute_hash(value, store_hash_t());
1964
+ siterator const sit = siterator
1965
+ ( pointer_traits<node_ptr>::const_cast_from(this->priv_value_to_node_ptr(value))
1485
1966
  );
1967
+ return this->build_const_iterator(sit, this->priv_hash_to_bucket_ptr(h));
1968
+ }
1969
+
1970
+ static const bool incremental = 0 != (BoolFlags & hash_bool_flags::incremental_pos);
1971
+ static const bool power_2_buckets = incremental || (0 != (BoolFlags & hash_bool_flags::power_2_buckets_pos));
1972
+ static const bool fastmod_buckets = 0 != (BoolFlags & hash_bool_flags::fastmod_buckets_pos);
1973
+
1974
+ typedef detail::bool_<fastmod_buckets> fastmod_buckets_t;
1975
+
1976
+ BOOST_INTRUSIVE_FORCEINLINE bucket_type &priv_hash_to_bucket(std::size_t hash_value) const
1977
+ { return this->priv_bucket(this->priv_hash_to_nbucket(hash_value)); }
1978
+
1979
+ BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_hash_to_bucket_ptr(std::size_t hash_value) const
1980
+ { return this->priv_bucket_ptr(this->priv_hash_to_nbucket(hash_value)); }
1981
+
1982
+ BOOST_INTRUSIVE_FORCEINLINE size_type priv_hash_to_nbucket(std::size_t hash_value) const
1983
+ { return (priv_hash_to_nbucket)(hash_value, fastmod_buckets_t()); }
1984
+
1985
+ BOOST_INTRUSIVE_FORCEINLINE size_type priv_hash_to_nbucket(std::size_t hash_value, detail::true_) const //fastmod_buckets_t
1986
+ {
1987
+ return static_cast<size_type>(hash_to_bucket_split<power_2_buckets, incremental>
1988
+ (hash_value, this->priv_usable_bucket_count(), this->split_count(), detail::true_()));
1989
+ }
1990
+
1991
+ BOOST_INTRUSIVE_FORCEINLINE size_type priv_hash_to_nbucket(std::size_t hash_value, detail::false_) const //!fastmod_buckets_t
1992
+ {
1993
+ return static_cast<size_type>(hash_to_bucket_split<power_2_buckets, incremental>
1994
+ (hash_value, this->priv_usable_bucket_count(), this->split_count(), detail::false_()));
1995
+ }
1996
+
1997
+
1998
+ BOOST_INTRUSIVE_FORCEINLINE iterator iterator_to(reference value, detail::false_) BOOST_NOEXCEPT
1999
+ {
2000
+ return iterator( siterator(this->priv_value_to_node_ptr(value))
2001
+ , &this->get_bucket_value_traits());
2002
+ }
2003
+
2004
+ const_iterator iterator_to(const_reference value, detail::false_) const BOOST_NOEXCEPT
2005
+ {
2006
+ siterator const sit = siterator
2007
+ ( pointer_traits<node_ptr>::const_cast_from(this->priv_value_to_node_ptr(value)) );
1486
2008
  return const_iterator(sit, &this->get_bucket_value_traits());
1487
2009
  }
1488
2010
 
1489
- static local_iterator s_local_iterator_to(reference value)
2011
+
2012
+ static local_iterator s_local_iterator_to(reference value) BOOST_NOEXCEPT
1490
2013
  {
1491
2014
  BOOST_STATIC_ASSERT((!stateful_value_traits));
1492
- siterator sit = bucket_type::s_iterator_to(*value_traits::to_node_ptr(value));
2015
+ siterator sit(value_traits::to_node_ptr(value));
1493
2016
  return local_iterator(sit, const_value_traits_ptr());
1494
2017
  }
1495
2018
 
1496
- static const_local_iterator s_local_iterator_to(const_reference value)
2019
+ static const_local_iterator s_local_iterator_to(const_reference value) BOOST_NOEXCEPT
1497
2020
  {
1498
2021
  BOOST_STATIC_ASSERT((!stateful_value_traits));
1499
- siterator const sit = bucket_type::s_iterator_to
1500
- ( *pointer_traits<node_ptr>::const_cast_from
2022
+ siterator const sit = siterator
2023
+ ( pointer_traits<node_ptr>::const_cast_from
1501
2024
  (value_traits::to_node_ptr(value))
1502
2025
  );
1503
2026
  return const_local_iterator(sit, const_value_traits_ptr());
1504
2027
  }
1505
2028
 
1506
- local_iterator local_iterator_to(reference value)
2029
+ local_iterator local_iterator_to(reference value) BOOST_NOEXCEPT
1507
2030
  {
1508
- siterator sit = bucket_type::s_iterator_to(this->priv_value_to_node(value));
2031
+ siterator sit(this->priv_value_to_node_ptr(value));
1509
2032
  return local_iterator(sit, this->priv_value_traits_ptr());
1510
2033
  }
1511
2034
 
1512
- const_local_iterator local_iterator_to(const_reference value) const
2035
+ const_local_iterator local_iterator_to(const_reference value) const BOOST_NOEXCEPT
1513
2036
  {
1514
- siterator sit = bucket_type::s_iterator_to
1515
- ( *pointer_traits<node_ptr>::const_cast_from
1516
- (pointer_traits<const_node_ptr>::pointer_to(this->priv_value_to_node(value)))
1517
- );
2037
+ siterator sit
2038
+ ( pointer_traits<node_ptr>::const_cast_from(this->priv_value_to_node_ptr(value)) );
1518
2039
  return const_local_iterator(sit, this->priv_value_traits_ptr());
1519
2040
  }
1520
2041
 
1521
- BOOST_INTRUSIVE_FORCEINLINE size_type bucket_count() const
1522
- {
1523
- const std::size_t bc = this->priv_bucket_count();
1524
- BOOST_INTRUSIVE_INVARIANT_ASSERT(sizeof(size_type) >= sizeof(std::size_t) || bc <= size_type(-1));
1525
- return static_cast<size_type>(bc);
1526
- }
2042
+ BOOST_INTRUSIVE_FORCEINLINE size_type bucket_count() const BOOST_NOEXCEPT
2043
+ { return size_type(this->priv_usable_bucket_count()); }
1527
2044
 
1528
- BOOST_INTRUSIVE_FORCEINLINE size_type bucket_size(size_type n) const
1529
- { return this->priv_bucket_pointer()[n].size(); }
2045
+ BOOST_INTRUSIVE_FORCEINLINE size_type bucket_size(size_type n) const BOOST_NOEXCEPT
2046
+ { return (size_type)this->priv_bucket_size(n); }
1530
2047
 
1531
- BOOST_INTRUSIVE_FORCEINLINE bucket_ptr bucket_pointer() const
2048
+ BOOST_INTRUSIVE_FORCEINLINE bucket_ptr bucket_pointer() const BOOST_NOEXCEPT
1532
2049
  { return this->priv_bucket_pointer(); }
1533
2050
 
1534
- BOOST_INTRUSIVE_FORCEINLINE local_iterator begin(size_type n)
1535
- { return local_iterator(this->priv_bucket_pointer()[n].begin(), this->priv_value_traits_ptr()); }
2051
+ BOOST_INTRUSIVE_FORCEINLINE local_iterator begin(size_type n) BOOST_NOEXCEPT
2052
+ { return local_iterator(this->priv_bucket_lbegin(n), this->priv_value_traits_ptr()); }
1536
2053
 
1537
- BOOST_INTRUSIVE_FORCEINLINE const_local_iterator begin(size_type n) const
2054
+ BOOST_INTRUSIVE_FORCEINLINE const_local_iterator begin(size_type n) const BOOST_NOEXCEPT
1538
2055
  { return this->cbegin(n); }
1539
2056
 
1540
- static BOOST_INTRUSIVE_FORCEINLINE size_type suggested_upper_bucket_count(size_type n)
2057
+ static BOOST_INTRUSIVE_FORCEINLINE size_type suggested_upper_bucket_count(size_type n) BOOST_NOEXCEPT
1541
2058
  {
1542
- return prime_list_holder<0>::suggested_upper_bucket_count(n);
2059
+ BOOST_IF_CONSTEXPR(fastmod_buckets){
2060
+ std::size_t s = prime_fmod_size::upper_size_index(n);
2061
+ return static_cast<SizeType>(prime_fmod_size::size(s));
2062
+ }
2063
+ else{
2064
+ return prime_list_holder<0>::suggested_upper_bucket_count(n);
2065
+ }
1543
2066
  }
1544
2067
 
1545
- static BOOST_INTRUSIVE_FORCEINLINE size_type suggested_lower_bucket_count(size_type n)
2068
+ static BOOST_INTRUSIVE_FORCEINLINE size_type suggested_lower_bucket_count(size_type n) BOOST_NOEXCEPT
1546
2069
  {
1547
- return prime_list_holder<0>::suggested_lower_bucket_count(n);
2070
+ BOOST_IF_CONSTEXPR(fastmod_buckets){
2071
+ std::size_t s = prime_fmod_size::lower_size_index(n);
2072
+ return static_cast<SizeType>(prime_fmod_size::size(s));
2073
+ }
2074
+ else{
2075
+ return prime_list_holder<0>::suggested_lower_bucket_count(n);
2076
+ }
1548
2077
  }
1549
2078
 
1550
- const_local_iterator cbegin(size_type n) const
2079
+ const_local_iterator cbegin(size_type n) const BOOST_NOEXCEPT
1551
2080
  {
1552
2081
  return const_local_iterator
1553
- ( pointer_traits<bucket_ptr>::const_cast_from(this->priv_bucket_pointer())[n].begin()
2082
+ (this->priv_bucket_lbegin(n)
1554
2083
  , this->priv_value_traits_ptr());
1555
2084
  }
1556
2085
 
1557
2086
  using internal_type::end;
1558
2087
  using internal_type::cend;
1559
2088
 
1560
- local_iterator end(size_type n)
1561
- { return local_iterator(this->priv_bucket_pointer()[n].end(), this->priv_value_traits_ptr()); }
2089
+ local_iterator end(size_type n) BOOST_NOEXCEPT
2090
+ { return local_iterator(this->priv_bucket_lend(n), this->priv_value_traits_ptr()); }
1562
2091
 
1563
- BOOST_INTRUSIVE_FORCEINLINE const_local_iterator end(size_type n) const
2092
+ BOOST_INTRUSIVE_FORCEINLINE const_local_iterator end(size_type n) const BOOST_NOEXCEPT
1564
2093
  { return this->cend(n); }
1565
2094
 
1566
- const_local_iterator cend(size_type n) const
2095
+ const_local_iterator cend(size_type n) const BOOST_NOEXCEPT
1567
2096
  {
1568
2097
  return const_local_iterator
1569
- ( pointer_traits<bucket_ptr>::const_cast_from(this->priv_bucket_pointer())[n].end()
2098
+ ( this->priv_bucket_lend(n)
1570
2099
  , this->priv_value_traits_ptr());
1571
2100
  }
1572
2101
 
1573
2102
  //Public functions for hashtable_impl
1574
2103
 
1575
- BOOST_INTRUSIVE_FORCEINLINE iterator begin()
1576
- { return iterator(this->priv_begin(), &this->get_bucket_value_traits()); }
2104
+ BOOST_INTRUSIVE_FORCEINLINE iterator begin() BOOST_NOEXCEPT
2105
+ {
2106
+ bucket_ptr p;
2107
+ siterator s = this->priv_begin(p);
2108
+ return this->build_iterator(s, p);
2109
+ }
1577
2110
 
1578
- BOOST_INTRUSIVE_FORCEINLINE const_iterator begin() const
2111
+ BOOST_INTRUSIVE_FORCEINLINE const_iterator begin() const BOOST_NOEXCEPT
1579
2112
  { return this->cbegin(); }
1580
2113
 
1581
- BOOST_INTRUSIVE_FORCEINLINE const_iterator cbegin() const
1582
- { return const_iterator(this->priv_begin(), &this->get_bucket_value_traits()); }
2114
+ BOOST_INTRUSIVE_FORCEINLINE const_iterator cbegin() const BOOST_NOEXCEPT
2115
+ {
2116
+ bucket_ptr p;
2117
+ siterator s = this->priv_begin(p);
2118
+ return this->build_const_iterator(s, p);
2119
+ }
1583
2120
 
1584
2121
  BOOST_INTRUSIVE_FORCEINLINE hasher hash_function() const
1585
2122
  { return this->priv_hasher(); }
@@ -1588,6 +2125,23 @@ struct hashdata_internal
1588
2125
  { return this->priv_equal(); }
1589
2126
  };
1590
2127
 
2128
+ template< class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash
2129
+ , class VoidOrKeyEqual, class BucketTraits, class SizeType
2130
+ , std::size_t BoolFlags>
2131
+ struct get_hashtable_size_wrapper_internal
2132
+ {
2133
+ typedef hashtable_size_wrapper
2134
+ < hashdata_internal
2135
+ < ValueTraits
2136
+ , VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual
2137
+ , BucketTraits, SizeType
2138
+ , BoolFlags & ~(hash_bool_flags::constant_time_size_pos) //1
2139
+ >
2140
+ , SizeType
2141
+ , (BoolFlags& hash_bool_flags::constant_time_size_pos) != 0
2142
+ > type;
2143
+ };
2144
+
1591
2145
  /// @endcond
1592
2146
 
1593
2147
  //! The class template hashtable is an intrusive hash table container, that
@@ -1632,27 +2186,13 @@ template<class T, class ...Options>
1632
2186
  template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits, class SizeType, std::size_t BoolFlags>
1633
2187
  #endif
1634
2188
  class hashtable_impl
1635
- : private hashtable_size_traits_wrapper
1636
- < hashdata_internal
1637
- < ValueTraits
1638
- , VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual
1639
- , BucketTraits, SizeType
1640
- , BoolFlags & (hash_bool_flags::incremental_pos | hash_bool_flags::cache_begin_pos) //1
1641
- >
1642
- , SizeType
1643
- , (BoolFlags & hash_bool_flags::constant_time_size_pos) != 0
1644
- >
2189
+ : private get_hashtable_size_wrapper_internal
2190
+ <ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, SizeType, BoolFlags>::type
1645
2191
  {
1646
- typedef hashtable_size_traits_wrapper
1647
- < hashdata_internal
1648
- < ValueTraits
1649
- , VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual
1650
- , BucketTraits, SizeType
1651
- , BoolFlags & (hash_bool_flags::incremental_pos | hash_bool_flags::cache_begin_pos) //1
1652
- >
1653
- , SizeType
1654
- , (BoolFlags & hash_bool_flags::constant_time_size_pos) != 0
1655
- > internal_type;
2192
+ static const bool linear_buckets_flag = (BoolFlags & hash_bool_flags::linear_buckets_pos) != 0;
2193
+ typedef typename get_hashtable_size_wrapper_internal
2194
+ <ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, SizeType, BoolFlags>::type
2195
+ internal_type;
1656
2196
  typedef typename internal_type::size_traits size_traits;
1657
2197
  typedef hash_key_types_base
1658
2198
  < typename ValueTraits::value_type
@@ -1664,10 +2204,14 @@ class hashtable_impl
1664
2204
  /// @cond
1665
2205
  typedef BucketTraits bucket_traits;
1666
2206
 
1667
- typedef typename internal_type::slist_impl slist_impl;
1668
- typedef bucket_plus_vtraits<ValueTraits, BucketTraits> bucket_plus_vtraits_t;
2207
+ typedef bucket_plus_vtraits
2208
+ <ValueTraits, BucketTraits, linear_buckets_flag> bucket_plus_vtraits_t;
1669
2209
  typedef typename bucket_plus_vtraits_t::const_value_traits_ptr const_value_traits_ptr;
1670
2210
 
2211
+ typedef detail::bool_<linear_buckets_flag> linear_buckets_t;
2212
+
2213
+ typedef typename internal_type::siterator siterator;
2214
+ typedef typename internal_type::const_siterator const_siterator;
1671
2215
  using internal_type::begin;
1672
2216
  using internal_type::cbegin;
1673
2217
  using internal_type::end;
@@ -1697,10 +2241,8 @@ class hashtable_impl
1697
2241
  typedef SizeType size_type;
1698
2242
  typedef typename internal_type::key_equal key_equal;
1699
2243
  typedef typename internal_type::hasher hasher;
1700
- typedef detail::bucket_impl<slist_impl> bucket_type;
2244
+ typedef typename internal_type::bucket_type bucket_type;
1701
2245
  typedef typename internal_type::bucket_ptr bucket_ptr;
1702
- typedef typename slist_impl::iterator siterator;
1703
- typedef typename slist_impl::const_iterator const_siterator;
1704
2246
  typedef typename internal_type::iterator iterator;
1705
2247
  typedef typename internal_type::const_iterator const_iterator;
1706
2248
  typedef typename internal_type::local_iterator local_iterator;
@@ -1717,7 +2259,7 @@ class hashtable_impl
1717
2259
  <node_ptr>::reference node_reference;
1718
2260
  typedef typename pointer_traits
1719
2261
  <const_node_ptr>::reference const_node_reference;
1720
- typedef typename slist_impl::node_algorithms node_algorithms;
2262
+ typedef typename internal_type::slist_node_algorithms slist_node_algorithms;
1721
2263
 
1722
2264
  static const bool stateful_value_traits = internal_type::stateful_value_traits;
1723
2265
  static const bool store_hash = internal_type::store_hash;
@@ -1728,9 +2270,10 @@ class hashtable_impl
1728
2270
  static const bool compare_hash = 0 != (BoolFlags & hash_bool_flags::compare_hash_pos);
1729
2271
  static const bool incremental = 0 != (BoolFlags & hash_bool_flags::incremental_pos);
1730
2272
  static const bool power_2_buckets = incremental || (0 != (BoolFlags & hash_bool_flags::power_2_buckets_pos));
1731
-
1732
- static const bool optimize_multikey
1733
- = detail::optimize_multikey_is_true<node_traits>::value && !unique_keys;
2273
+ static const bool optimize_multikey = optimize_multikey_is_true<node_traits>::value && !unique_keys;
2274
+ static const bool linear_buckets = linear_buckets_flag;
2275
+ static const bool fastmod_buckets = 0 != (BoolFlags & hash_bool_flags::fastmod_buckets_pos);
2276
+ static const std::size_t bucket_overhead = internal_type::bucket_overhead;
1734
2277
 
1735
2278
  /// @cond
1736
2279
  static const bool is_multikey = !unique_keys;
@@ -1740,7 +2283,11 @@ class hashtable_impl
1740
2283
  //See documentation for more explanations
1741
2284
  BOOST_STATIC_ASSERT((!compare_hash || store_hash));
1742
2285
 
1743
- typedef typename slist_impl::node_ptr slist_node_ptr;
2286
+ //Configuration error: fasmod_buckets<> can't be specified with incremental<> or power_2_buckets<>
2287
+ //See documentation for more explanations
2288
+ BOOST_STATIC_ASSERT(!(fastmod_buckets && power_2_buckets));
2289
+
2290
+ typedef typename internal_type::slist_node_ptr slist_node_ptr;
1744
2291
  typedef typename pointer_traits
1745
2292
  <slist_node_ptr>::template rebind_pointer
1746
2293
  < void >::type void_pointer;
@@ -1752,9 +2299,11 @@ class hashtable_impl
1752
2299
  typedef detail::bool_<optimize_multikey> optimize_multikey_t;
1753
2300
  typedef detail::bool_<cache_begin> cache_begin_t;
1754
2301
  typedef detail::bool_<power_2_buckets> power_2_buckets_t;
2302
+ typedef detail::bool_<fastmod_buckets> fastmod_buckets_t;
2303
+ typedef detail::bool_<compare_hash> compare_hash_t;
1755
2304
  typedef typename internal_type::split_traits split_traits;
1756
- typedef detail::group_functions<node_traits> group_functions_t;
1757
- typedef detail::node_functions<node_traits> node_functions_t;
2305
+ typedef group_functions<node_traits> group_functions_t;
2306
+ typedef node_functions<node_traits> node_functions_t;
1758
2307
 
1759
2308
  private:
1760
2309
  //noncopyable, movable
@@ -1767,27 +2316,24 @@ class hashtable_impl
1767
2316
  //Cache begin is incompatible with auto-unlink hooks!
1768
2317
  BOOST_STATIC_ASSERT(!(cache_begin && ((int)value_traits::link_mode == (int)auto_unlink)));
1769
2318
 
1770
- template<class Disposer>
1771
- struct typeof_node_disposer
1772
- {
1773
- typedef node_cast_adaptor
1774
- < detail::node_disposer< Disposer, value_traits, CircularSListAlgorithms>
1775
- , slist_node_ptr, node_ptr > type;
1776
- };
1777
-
1778
- template<class Disposer>
1779
- typename typeof_node_disposer<Disposer>::type
1780
- make_node_disposer(const Disposer &disposer) const
1781
- {
1782
- typedef typename typeof_node_disposer<Disposer>::type return_t;
1783
- return return_t(disposer, &this->priv_value_traits());
1784
- }
1785
2319
 
1786
2320
  /// @endcond
1787
-
2321
+
1788
2322
  public:
1789
- typedef detail::insert_commit_data_impl insert_commit_data;
2323
+ typedef insert_commit_data_impl<store_hash> insert_commit_data;
1790
2324
 
2325
+ void default_init_actions()
2326
+ {
2327
+ this->priv_set_sentinel_bucket();
2328
+ this->priv_init_buckets_and_cache();
2329
+ this->priv_size_traits().set_size(size_type(0));
2330
+ size_type bucket_sz = this->bucket_count();
2331
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(bucket_sz != 0);
2332
+ //Check power of two bucket array if the option is activated
2333
+ BOOST_INTRUSIVE_INVARIANT_ASSERT
2334
+ (!power_2_buckets || (0 == (bucket_sz & (bucket_sz - 1))));
2335
+ this->priv_split_traits().set_size(this->initial_split_from_bucket_count(bucket_sz));
2336
+ }
1791
2337
 
1792
2338
  public:
1793
2339
 
@@ -1809,16 +2355,7 @@ class hashtable_impl
1809
2355
  , const key_equal &equal_func = key_equal()
1810
2356
  , const value_traits &v_traits = value_traits())
1811
2357
  : internal_type(v_traits, b_traits, hash_func, equal_func)
1812
- {
1813
- this->priv_initialize_buckets_and_cache();
1814
- this->priv_size_traits().set_size(size_type(0));
1815
- size_type bucket_sz = this->bucket_count();
1816
- BOOST_INTRUSIVE_INVARIANT_ASSERT(bucket_sz != 0);
1817
- //Check power of two bucket array if the option is activated
1818
- BOOST_INTRUSIVE_INVARIANT_ASSERT
1819
- (!power_2_buckets || (0 == (bucket_sz & (bucket_sz-1))));
1820
- this->priv_split_traits().set_size(bucket_sz>>1);
1821
- }
2358
+ { this->default_init_actions(); }
1822
2359
 
1823
2360
  //! <b>Requires</b>: buckets must not be being used by any other resource
1824
2361
  //! and dereferencing iterator must yield an lvalue of type value_type.
@@ -1843,14 +2380,8 @@ class hashtable_impl
1843
2380
  , const value_traits &v_traits = value_traits())
1844
2381
  : internal_type(v_traits, b_traits, hash_func, equal_func)
1845
2382
  {
1846
- this->priv_initialize_buckets_and_cache();
1847
- this->priv_size_traits().set_size(size_type(0));
1848
- size_type bucket_sz = this->bucket_count();
1849
- BOOST_INTRUSIVE_INVARIANT_ASSERT(bucket_sz != 0);
1850
- //Check power of two bucket array if the option is activated
1851
- BOOST_INTRUSIVE_INVARIANT_ASSERT
1852
- (!power_2_buckets || (0 == (bucket_sz & (bucket_sz-1))));
1853
- this->priv_split_traits().set_size(bucket_sz>>1);
2383
+ this->default_init_actions();
2384
+
1854
2385
  //Now insert
1855
2386
  if(unique)
1856
2387
  this->insert_unique(b, e);
@@ -1868,17 +2399,13 @@ class hashtable_impl
1868
2399
  //! move constructor throws (this does not happen with predefined Boost.Intrusive hooks)
1869
2400
  //! or the move constructor of value traits, bucket traits, hasher or comparison throws.
1870
2401
  hashtable_impl(BOOST_RV_REF(hashtable_impl) x)
1871
- : internal_type( ::boost::move(x.priv_value_traits())
1872
- , ::boost::move(x.priv_bucket_traits())
1873
- , ::boost::move(x.priv_hasher())
1874
- , ::boost::move(x.priv_equal())
1875
- )
2402
+ : internal_type(BOOST_MOVE_BASE(internal_type, x))
1876
2403
  {
1877
2404
  this->priv_swap_cache(x);
1878
- x.priv_initialize_cache();
2405
+ x.priv_init_cache();
1879
2406
  this->priv_size_traits().set_size(x.priv_size_traits().get_size());
1880
2407
  x.priv_size_traits().set_size(size_type(0));
1881
- this->priv_split_traits().set_size(x.priv_split_traits().get_size());
2408
+ this->priv_split_traits().set_size(x.split_count());
1882
2409
  x.priv_split_traits().set_size(size_type(0));
1883
2410
  }
1884
2411
 
@@ -1887,7 +2414,6 @@ class hashtable_impl
1887
2414
  hashtable_impl& operator=(BOOST_RV_REF(hashtable_impl) x)
1888
2415
  { this->swap(x); return *this; }
1889
2416
 
1890
- #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1891
2417
  //! <b>Effects</b>: Detaches all elements from this. The objects in the unordered_set
1892
2418
  //! are not deleted (i.e. no destructors are called).
1893
2419
  //!
@@ -1895,15 +2421,17 @@ class hashtable_impl
1895
2421
  //! it's a safe-mode or auto-unlink value. Otherwise constant.
1896
2422
  //!
1897
2423
  //! <b>Throws</b>: Nothing.
1898
- ~hashtable_impl();
2424
+ ~hashtable_impl()
2425
+ {}
1899
2426
 
2427
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1900
2428
  //! <b>Effects</b>: Returns an iterator pointing to the beginning of the unordered_set.
1901
2429
  //!
1902
2430
  //! <b>Complexity</b>: Amortized constant time.
1903
2431
  //! Worst case (empty unordered_set): O(this->bucket_count())
1904
2432
  //!
1905
2433
  //! <b>Throws</b>: Nothing.
1906
- iterator begin();
2434
+ iterator begin() BOOST_NOEXCEPT;
1907
2435
 
1908
2436
  //! <b>Effects</b>: Returns a const_iterator pointing to the beginning
1909
2437
  //! of the unordered_set.
@@ -1912,7 +2440,7 @@ class hashtable_impl
1912
2440
  //! Worst case (empty unordered_set): O(this->bucket_count())
1913
2441
  //!
1914
2442
  //! <b>Throws</b>: Nothing.
1915
- const_iterator begin() const;
2443
+ const_iterator begin() const BOOST_NOEXCEPT;
1916
2444
 
1917
2445
  //! <b>Effects</b>: Returns a const_iterator pointing to the beginning
1918
2446
  //! of the unordered_set.
@@ -1921,28 +2449,28 @@ class hashtable_impl
1921
2449
  //! Worst case (empty unordered_set): O(this->bucket_count())
1922
2450
  //!
1923
2451
  //! <b>Throws</b>: Nothing.
1924
- const_iterator cbegin() const;
2452
+ const_iterator cbegin() const BOOST_NOEXCEPT;
1925
2453
 
1926
2454
  //! <b>Effects</b>: Returns an iterator pointing to the end of the unordered_set.
1927
2455
  //!
1928
2456
  //! <b>Complexity</b>: Constant.
1929
2457
  //!
1930
2458
  //! <b>Throws</b>: Nothing.
1931
- iterator end();
2459
+ iterator end() BOOST_NOEXCEPT;
1932
2460
 
1933
2461
  //! <b>Effects</b>: Returns a const_iterator pointing to the end of the unordered_set.
1934
2462
  //!
1935
2463
  //! <b>Complexity</b>: Constant.
1936
2464
  //!
1937
2465
  //! <b>Throws</b>: Nothing.
1938
- const_iterator end() const;
2466
+ const_iterator end() const BOOST_NOEXCEPT;
1939
2467
 
1940
2468
  //! <b>Effects</b>: Returns a const_iterator pointing to the end of the unordered_set.
1941
2469
  //!
1942
2470
  //! <b>Complexity</b>: Constant.
1943
2471
  //!
1944
2472
  //! <b>Throws</b>: Nothing.
1945
- const_iterator cend() const;
2473
+ const_iterator cend() const BOOST_NOEXCEPT;
1946
2474
 
1947
2475
  //! <b>Effects</b>: Returns the hasher object used by the unordered_set.
1948
2476
  //!
@@ -1967,9 +2495,9 @@ class hashtable_impl
1967
2495
  //! Otherwise constant.
1968
2496
  //!
1969
2497
  //! <b>Throws</b>: Nothing.
1970
- bool empty() const
2498
+ bool empty() const BOOST_NOEXCEPT
1971
2499
  {
1972
- if(constant_time_size){
2500
+ BOOST_IF_CONSTEXPR(constant_time_size){
1973
2501
  return !this->size();
1974
2502
  }
1975
2503
  else if(cache_begin){
@@ -1979,7 +2507,7 @@ class hashtable_impl
1979
2507
  size_type bucket_cnt = this->bucket_count();
1980
2508
  const bucket_type *b = boost::movelib::to_raw_pointer(this->priv_bucket_pointer());
1981
2509
  for (size_type n = 0; n < bucket_cnt; ++n, ++b){
1982
- if(!b->empty()){
2510
+ if(!slist_node_algorithms::is_empty(b->get_node_ptr())){
1983
2511
  return false;
1984
2512
  }
1985
2513
  }
@@ -1993,18 +2521,19 @@ class hashtable_impl
1993
2521
  //! constant_time_size is false. Constant-time otherwise.
1994
2522
  //!
1995
2523
  //! <b>Throws</b>: Nothing.
1996
- size_type size() const
2524
+ size_type size() const BOOST_NOEXCEPT
1997
2525
  {
1998
- if(constant_time_size)
2526
+ BOOST_IF_CONSTEXPR(constant_time_size)
1999
2527
  return this->priv_size_traits().get_size();
2000
2528
  else{
2001
- size_type len = 0;
2002
- size_type bucket_cnt = this->bucket_count();
2529
+ std::size_t len = 0;
2530
+ std::size_t bucket_cnt = this->bucket_count();
2003
2531
  const bucket_type *b = boost::movelib::to_raw_pointer(this->priv_bucket_pointer());
2004
- for (size_type n = 0; n < bucket_cnt; ++n, ++b){
2005
- len += b->size();
2532
+ for (std::size_t n = 0; n < bucket_cnt; ++n, ++b){
2533
+ len += slist_node_algorithms::count(b->get_node_ptr()) - 1u;
2006
2534
  }
2007
- return len;
2535
+ BOOST_INTRUSIVE_INVARIANT_ASSERT((len <= SizeType(-1)));
2536
+ return size_type(len);
2008
2537
  }
2009
2538
  }
2010
2539
 
@@ -2096,7 +2625,7 @@ class hashtable_impl
2096
2625
  siterator prev;
2097
2626
  siterator const it = this->priv_find
2098
2627
  (key_of_value()(value), this->priv_hasher(), this->priv_equal(), bucket_num, hash_value, prev);
2099
- bool const next_is_in_group = optimize_multikey && it != this->priv_invalid_local_it();
2628
+ bool const next_is_in_group = optimize_multikey && it != this->priv_end_sit();
2100
2629
  return this->priv_insert_equal_after_find(value, bucket_num, hash_value, prev, next_is_in_group);
2101
2630
  }
2102
2631
 
@@ -2206,12 +2735,15 @@ class hashtable_impl
2206
2735
  , KeyEqual equal_func
2207
2736
  , insert_commit_data &commit_data)
2208
2737
  {
2209
- size_type bucket_num;
2210
- siterator prev;
2211
- siterator const pos = this->priv_find(key, hash_func, equal_func, bucket_num, commit_data.hash, prev);
2212
- return std::pair<iterator, bool>
2213
- ( iterator(pos, &this->get_bucket_value_traits())
2214
- , pos == this->priv_invalid_local_it());
2738
+ const std::size_t h = hash_func(key);
2739
+ const std::size_t bn = this->priv_hash_to_nbucket(h);
2740
+
2741
+ commit_data.bucket_idx = bn;
2742
+ commit_data.set_hash(h);
2743
+
2744
+ bucket_ptr bp = this->priv_bucket_ptr(bn);
2745
+ siterator const s = this->priv_find_in_bucket(*bp, key, equal_func, h);
2746
+ return std::pair<iterator, bool>(this->build_iterator(s, bp), s == this->priv_end_sit());
2215
2747
  }
2216
2748
 
2217
2749
  //! <b>Effects</b>: Checks if a value can be inserted in the unordered_set, using
@@ -2264,17 +2796,17 @@ class hashtable_impl
2264
2796
  //! erased between the "insert_check" and "insert_commit" calls.
2265
2797
  //!
2266
2798
  //! After a successful rehashing insert_commit_data remains valid.
2267
- iterator insert_unique_commit(reference value, const insert_commit_data &commit_data)
2799
+ iterator insert_unique_commit(reference value, const insert_commit_data &commit_data) BOOST_NOEXCEPT
2268
2800
  {
2269
- size_type bucket_num = this->priv_hash_to_bucket(commit_data.hash);
2270
- bucket_type &b = this->priv_bucket_pointer()[bucket_num];
2271
2801
  this->priv_size_traits().increment();
2272
- node_ptr const n = pointer_traits<node_ptr>::pointer_to(this->priv_value_to_node(value));
2273
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!safemode_or_autounlink || node_algorithms::unique(n));
2274
- node_functions_t::store_hash(n, commit_data.hash, store_hash_t());
2275
- this->priv_insertion_update_cache(bucket_num);
2802
+ node_ptr const n = this->priv_value_to_node_ptr(value);
2803
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!safemode_or_autounlink || slist_node_algorithms::unique(n));
2804
+ node_functions_t::store_hash(n, commit_data.get_hash(), store_hash_t());
2805
+ this->priv_insertion_update_cache(static_cast<size_type>(commit_data.bucket_idx));
2276
2806
  group_functions_t::insert_in_group(n, n, optimize_multikey_t());
2277
- return iterator(b.insert_after(b.before_begin(), *n), &this->get_bucket_value_traits());
2807
+ bucket_type& b = this->priv_bucket(commit_data.bucket_idx);
2808
+ slist_node_algorithms::link_after(b.get_node_ptr(), n);
2809
+ return this->build_iterator(siterator(n), this->to_ptr(b));
2278
2810
  }
2279
2811
 
2280
2812
  //! <b>Effects</b>: Erases the element pointed to by i.
@@ -2285,7 +2817,7 @@ class hashtable_impl
2285
2817
  //!
2286
2818
  //! <b>Note</b>: Invalidates the iterators (but not the references)
2287
2819
  //! to the erased element. No destructors are called.
2288
- BOOST_INTRUSIVE_FORCEINLINE void erase(const_iterator i)
2820
+ BOOST_INTRUSIVE_FORCEINLINE void erase(const_iterator i) BOOST_NOEXCEPT
2289
2821
  { this->erase_and_dispose(i, detail::null_disposer()); }
2290
2822
 
2291
2823
  //! <b>Effects</b>: Erases the range pointed to by b end e.
@@ -2297,7 +2829,7 @@ class hashtable_impl
2297
2829
  //!
2298
2830
  //! <b>Note</b>: Invalidates the iterators (but not the references)
2299
2831
  //! to the erased elements. No destructors are called.
2300
- BOOST_INTRUSIVE_FORCEINLINE void erase(const_iterator b, const_iterator e)
2832
+ BOOST_INTRUSIVE_FORCEINLINE void erase(const_iterator b, const_iterator e) BOOST_NOEXCEPT
2301
2833
  { this->erase_and_dispose(b, e, detail::null_disposer()); }
2302
2834
 
2303
2835
  //! <b>Effects</b>: Erases all the elements with the given value.
@@ -2353,14 +2885,13 @@ class hashtable_impl
2353
2885
  template<class Disposer>
2354
2886
  BOOST_INTRUSIVE_DOC1ST(void
2355
2887
  , typename detail::disable_if_convertible<Disposer BOOST_INTRUSIVE_I const_iterator>::type)
2356
- erase_and_dispose(const_iterator i, Disposer disposer)
2888
+ erase_and_dispose(const_iterator i, Disposer disposer) BOOST_NOEXCEPT
2357
2889
  {
2358
2890
  //Get the bucket number and local iterator for both iterators
2359
- siterator const first_local_it(i.slist_it());
2360
- size_type const first_bucket_num = this->priv_get_bucket_num(first_local_it);
2361
- this->priv_erase_node(this->priv_bucket_pointer()[first_bucket_num], first_local_it, make_node_disposer(disposer), optimize_multikey_t());
2891
+ const bucket_ptr bp = this->priv_get_bucket_ptr(i);
2892
+ this->priv_erase_node(*bp, i.slist_it(), this->make_node_disposer(disposer), optimize_multikey_t());
2362
2893
  this->priv_size_traits().decrement();
2363
- this->priv_erasure_update_cache_range(first_bucket_num, first_bucket_num);
2894
+ this->priv_erasure_update_cache(bp);
2364
2895
  }
2365
2896
 
2366
2897
  //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
@@ -2376,33 +2907,31 @@ class hashtable_impl
2376
2907
  //! <b>Note</b>: Invalidates the iterators
2377
2908
  //! to the erased elements.
2378
2909
  template<class Disposer>
2379
- void erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
2910
+ void erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer) BOOST_NOEXCEPT
2380
2911
  {
2381
2912
  if(b != e){
2382
2913
  //Get the bucket number and local iterator for both iterators
2383
- siterator first_local_it(b.slist_it());
2384
- size_type first_bucket_num = this->priv_get_bucket_num(first_local_it);
2914
+ size_type first_bucket_num = this->priv_get_bucket_num(b);
2385
2915
 
2386
- const bucket_ptr buck_ptr = this->priv_bucket_pointer();
2387
2916
  siterator before_first_local_it
2388
- = this->priv_get_previous(buck_ptr[first_bucket_num], first_local_it);
2917
+ = this->priv_get_previous(this->priv_bucket(first_bucket_num), b.slist_it(), optimize_multikey_t());
2389
2918
  size_type last_bucket_num;
2390
2919
  siterator last_local_it;
2391
2920
 
2392
2921
  //For the end iterator, we will assign the end iterator
2393
2922
  //of the last bucket
2394
2923
  if(e == this->end()){
2395
- last_bucket_num = this->bucket_count() - 1;
2396
- last_local_it = buck_ptr[last_bucket_num].end();
2924
+ last_bucket_num = size_type(this->bucket_count() - 1u);
2925
+ last_local_it = this->sit_end(this->priv_bucket(last_bucket_num));
2397
2926
  }
2398
2927
  else{
2399
2928
  last_local_it = e.slist_it();
2400
- last_bucket_num = this->priv_get_bucket_num(last_local_it);
2929
+ last_bucket_num = this->priv_get_bucket_num(e);
2401
2930
  }
2402
- size_type const num_erased = this->priv_erase_node_range
2931
+ size_type const num_erased = (size_type)this->priv_erase_node_range
2403
2932
  ( before_first_local_it, first_bucket_num, last_local_it, last_bucket_num
2404
- , make_node_disposer(disposer), optimize_multikey_t());
2405
- this->priv_size_traits().set_size(this->priv_size_traits().get_size()-num_erased);
2933
+ , this->make_node_disposer(disposer), optimize_multikey_t());
2934
+ this->priv_size_traits().set_size(size_type(this->priv_size_traits().get_size()-num_erased));
2406
2935
  this->priv_erasure_update_cache_range(first_bucket_num, last_bucket_num);
2407
2936
  }
2408
2937
  }
@@ -2449,30 +2978,34 @@ class hashtable_impl
2449
2978
  std::size_t h;
2450
2979
  siterator prev;
2451
2980
  siterator it = this->priv_find(key, hash_func, equal_func, bucket_num, h, prev);
2452
- bool const success = it != this->priv_invalid_local_it();
2981
+ bool const success = it != this->priv_end_sit();
2453
2982
 
2454
- size_type cnt(0);
2983
+ std::size_t cnt(0);
2455
2984
  if(success){
2456
2985
  if(optimize_multikey){
2986
+ siterator past_last_in_group = it;
2987
+ (priv_go_to_last_in_group)(past_last_in_group, optimize_multikey_t());
2988
+ ++past_last_in_group;
2457
2989
  cnt = this->priv_erase_from_single_bucket
2458
- (this->priv_bucket_pointer()[bucket_num], prev, ++(priv_last_in_group)(it), make_node_disposer(disposer), optimize_multikey_t());
2990
+ ( this->priv_bucket(bucket_num), prev
2991
+ , past_last_in_group
2992
+ , this->make_node_disposer(disposer), optimize_multikey_t());
2459
2993
  }
2460
2994
  else{
2461
- bucket_type &b = this->priv_bucket_pointer()[bucket_num];
2462
- siterator const end_sit = b.end();
2995
+ siterator const end_sit = this->priv_bucket_lend(bucket_num);
2463
2996
  do{
2464
2997
  ++cnt;
2465
2998
  ++it;
2466
2999
  }while(it != end_sit &&
2467
- this->priv_is_value_equal_to_key
2468
- (this->priv_value_from_slist_node(it.pointed_node()), h, key, equal_func));
2469
- bucket_type::s_erase_after_and_dispose(prev, it, make_node_disposer(disposer));
3000
+ this->priv_is_value_equal_to_key
3001
+ (this->priv_value_from_siterator(it), h, key, equal_func, compare_hash_t()));
3002
+ slist_node_algorithms::unlink_after_and_dispose(prev.pointed_node(), it.pointed_node(), this->make_node_disposer(disposer));
2470
3003
  }
2471
- this->priv_size_traits().set_size(this->priv_size_traits().get_size()-cnt);
3004
+ this->priv_size_traits().set_size(size_type(this->priv_size_traits().get_size()-cnt));
2472
3005
  this->priv_erasure_update_cache();
2473
3006
  }
2474
3007
 
2475
- return cnt;
3008
+ return static_cast<size_type>(cnt);
2476
3009
  }
2477
3010
 
2478
3011
  //! <b>Effects</b>: Erases all of the elements.
@@ -2484,7 +3017,7 @@ class hashtable_impl
2484
3017
  //!
2485
3018
  //! <b>Note</b>: Invalidates the iterators (but not the references)
2486
3019
  //! to the erased elements. No destructors are called.
2487
- void clear()
3020
+ void clear() BOOST_NOEXCEPT
2488
3021
  {
2489
3022
  this->priv_clear_buckets_and_cache();
2490
3023
  this->priv_size_traits().set_size(size_type(0));
@@ -2502,18 +3035,19 @@ class hashtable_impl
2502
3035
  //! <b>Note</b>: Invalidates the iterators (but not the references)
2503
3036
  //! to the erased elements. No destructors are called.
2504
3037
  template<class Disposer>
2505
- void clear_and_dispose(Disposer disposer)
3038
+ void clear_and_dispose(Disposer disposer) BOOST_NOEXCEPT
2506
3039
  {
2507
3040
  if(!constant_time_size || !this->empty()){
2508
3041
  size_type num_buckets = this->bucket_count();
2509
3042
  bucket_ptr b = this->priv_bucket_pointer();
2510
- typename typeof_node_disposer<Disposer>::type d(disposer, &this->priv_value_traits());
2511
- for(; num_buckets--; ++b){
2512
- b->clear_and_dispose(d);
3043
+ typename internal_type::template typeof_node_disposer<Disposer>::type d(disposer, &this->priv_value_traits());
3044
+ for(; num_buckets; ++b){
3045
+ --num_buckets;
3046
+ slist_node_algorithms::detach_and_dispose(b->get_node_ptr(), d);
2513
3047
  }
2514
3048
  this->priv_size_traits().set_size(size_type(0));
2515
3049
  }
2516
- this->priv_initialize_cache();
3050
+ this->priv_init_cache();
2517
3051
  }
2518
3052
 
2519
3053
  //! <b>Effects</b>: Returns the number of contained elements with the given value
@@ -2577,11 +3111,10 @@ class hashtable_impl
2577
3111
  template<class KeyType, class KeyHasher, class KeyEqual>
2578
3112
  iterator find(const KeyType &key, KeyHasher hash_func, KeyEqual equal_func)
2579
3113
  {
2580
- size_type bucket_n;
2581
- std::size_t hash;
2582
- siterator prev;
2583
- return iterator( this->priv_find(key, hash_func, equal_func, bucket_n, hash, prev)
2584
- , &this->get_bucket_value_traits());
3114
+ std::size_t h = hash_func(key);
3115
+ bucket_ptr bp = this->priv_hash_to_bucket_ptr(h);
3116
+ siterator s = this->priv_find_in_bucket(*bp, key, equal_func, h);
3117
+ return this->build_iterator(s, bp);
2585
3118
  }
2586
3119
 
2587
3120
  //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
@@ -2616,11 +3149,10 @@ class hashtable_impl
2616
3149
  const_iterator find
2617
3150
  (const KeyType &key, KeyHasher hash_func, KeyEqual equal_func) const
2618
3151
  {
2619
- size_type bucket_n;
2620
- std::size_t hash_value;
2621
- siterator prev;
2622
- return const_iterator( this->priv_find(key, hash_func, equal_func, bucket_n, hash_value, prev)
2623
- , &this->get_bucket_value_traits());
3152
+ std::size_t h = hash_func(key);
3153
+ bucket_ptr bp = this->priv_hash_to_bucket_ptr(h);
3154
+ siterator s = this->priv_find_in_bucket(*bp, key, equal_func, h);
3155
+ return this->build_const_iterator(s, bp);
2624
3156
  }
2625
3157
 
2626
3158
  //! <b>Effects</b>: Returns a range containing all elements with values equivalent
@@ -2657,11 +3189,11 @@ class hashtable_impl
2657
3189
  std::pair<iterator,iterator> equal_range
2658
3190
  (const KeyType &key, KeyHasher hash_func, KeyEqual equal_func)
2659
3191
  {
2660
- std::pair<siterator, siterator> ret =
3192
+ priv_equal_range_result ret =
2661
3193
  this->priv_equal_range(key, hash_func, equal_func);
2662
3194
  return std::pair<iterator, iterator>
2663
- ( iterator(ret.first, &this->get_bucket_value_traits())
2664
- , iterator(ret.second, &this->get_bucket_value_traits()));
3195
+ ( this->build_iterator(ret.first, ret.bucket_first)
3196
+ , this->build_iterator(ret.second, ret.bucket_second));
2665
3197
  }
2666
3198
 
2667
3199
  //! <b>Effects</b>: Returns a range containing all elements with values equivalent
@@ -2699,11 +3231,11 @@ class hashtable_impl
2699
3231
  std::pair<const_iterator,const_iterator> equal_range
2700
3232
  (const KeyType &key, KeyHasher hash_func, KeyEqual equal_func) const
2701
3233
  {
2702
- std::pair<siterator, siterator> ret =
3234
+ priv_equal_range_result ret =
2703
3235
  this->priv_equal_range(key, hash_func, equal_func);
2704
3236
  return std::pair<const_iterator, const_iterator>
2705
- ( const_iterator(ret.first, &this->get_bucket_value_traits())
2706
- , const_iterator(ret.second, &this->get_bucket_value_traits()));
3237
+ ( this->build_const_iterator(ret.first, ret.bucket_first)
3238
+ , this->build_const_iterator(ret.second, ret.bucket_second));
2707
3239
  }
2708
3240
 
2709
3241
  #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
@@ -2717,7 +3249,7 @@ class hashtable_impl
2717
3249
  //! <b>Complexity</b>: Constant.
2718
3250
  //!
2719
3251
  //! <b>Throws</b>: If the internal hash function throws.
2720
- iterator iterator_to(reference value);
3252
+ iterator iterator_to(reference value) BOOST_NOEXCEPT;
2721
3253
 
2722
3254
  //! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
2723
3255
  //! appropriate type. Otherwise the behavior is undefined.
@@ -2728,7 +3260,7 @@ class hashtable_impl
2728
3260
  //! <b>Complexity</b>: Constant.
2729
3261
  //!
2730
3262
  //! <b>Throws</b>: If the internal hash function throws.
2731
- const_iterator iterator_to(const_reference value) const;
3263
+ const_iterator iterator_to(const_reference value) const BOOST_NOEXCEPT;
2732
3264
 
2733
3265
  //! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
2734
3266
  //! appropriate type. Otherwise the behavior is undefined.
@@ -2742,7 +3274,7 @@ class hashtable_impl
2742
3274
  //!
2743
3275
  //! <b>Note</b>: This static function is available only if the <i>value traits</i>
2744
3276
  //! is stateless.
2745
- static local_iterator s_local_iterator_to(reference value);
3277
+ static local_iterator s_local_iterator_to(reference value) BOOST_NOEXCEPT;
2746
3278
 
2747
3279
  //! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
2748
3280
  //! appropriate type. Otherwise the behavior is undefined.
@@ -2756,7 +3288,7 @@ class hashtable_impl
2756
3288
  //!
2757
3289
  //! <b>Note</b>: This static function is available only if the <i>value traits</i>
2758
3290
  //! is stateless.
2759
- static const_local_iterator s_local_iterator_to(const_reference value);
3291
+ static const_local_iterator s_local_iterator_to(const_reference value) BOOST_NOEXCEPT;
2760
3292
 
2761
3293
  //! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
2762
3294
  //! appropriate type. Otherwise the behavior is undefined.
@@ -2767,7 +3299,7 @@ class hashtable_impl
2767
3299
  //! <b>Complexity</b>: Constant.
2768
3300
  //!
2769
3301
  //! <b>Throws</b>: Nothing.
2770
- local_iterator local_iterator_to(reference value);
3302
+ local_iterator local_iterator_to(reference value) BOOST_NOEXCEPT;
2771
3303
 
2772
3304
  //! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
2773
3305
  //! appropriate type. Otherwise the behavior is undefined.
@@ -2778,7 +3310,7 @@ class hashtable_impl
2778
3310
  //! <b>Complexity</b>: Constant.
2779
3311
  //!
2780
3312
  //! <b>Throws</b>: Nothing.
2781
- const_local_iterator local_iterator_to(const_reference value) const;
3313
+ const_local_iterator local_iterator_to(const_reference value) const BOOST_NOEXCEPT;
2782
3314
 
2783
3315
  //! <b>Effects</b>: Returns the number of buckets passed in the constructor
2784
3316
  //! or the last rehash function.
@@ -2786,7 +3318,7 @@ class hashtable_impl
2786
3318
  //! <b>Complexity</b>: Constant.
2787
3319
  //!
2788
3320
  //! <b>Throws</b>: Nothing.
2789
- size_type bucket_count() const;
3321
+ size_type bucket_count() const BOOST_NOEXCEPT;
2790
3322
 
2791
3323
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2792
3324
  //!
@@ -2795,7 +3327,7 @@ class hashtable_impl
2795
3327
  //! <b>Complexity</b>: Constant.
2796
3328
  //!
2797
3329
  //! <b>Throws</b>: Nothing.
2798
- size_type bucket_size(size_type n) const;
3330
+ size_type bucket_size(size_type n) const BOOST_NOEXCEPT;
2799
3331
  #endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2800
3332
 
2801
3333
  //! <b>Effects</b>: Returns the index of the bucket in which elements
@@ -2806,7 +3338,7 @@ class hashtable_impl
2806
3338
  //! <b>Throws</b>: If the hash functor throws.
2807
3339
  //!
2808
3340
  //! <b>Note</b>: the return value is in the range [0, this->bucket_count()).
2809
- BOOST_INTRUSIVE_FORCEINLINE size_type bucket(const key_type& k) const
3341
+ BOOST_INTRUSIVE_FORCEINLINE size_type bucket(const key_type& k) const
2810
3342
  { return this->bucket(k, this->priv_hasher()); }
2811
3343
 
2812
3344
  //! <b>Requires</b>: "hash_func" must be a hash function that induces
@@ -2823,7 +3355,7 @@ class hashtable_impl
2823
3355
  //! <b>Note</b>: the return value is in the range [0, this->bucket_count()).
2824
3356
  template<class KeyType, class KeyHasher>
2825
3357
  BOOST_INTRUSIVE_FORCEINLINE size_type bucket(const KeyType& k, KeyHasher hash_func) const
2826
- { return this->priv_hash_to_bucket(hash_func(k)); }
3358
+ { return this->priv_hash_to_nbucket(hash_func(k)); }
2827
3359
 
2828
3360
  #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2829
3361
  //! <b>Effects</b>: Returns the bucket array pointer passed in the constructor
@@ -2832,7 +3364,7 @@ class hashtable_impl
2832
3364
  //! <b>Complexity</b>: Constant.
2833
3365
  //!
2834
3366
  //! <b>Throws</b>: Nothing.
2835
- bucket_ptr bucket_pointer() const;
3367
+ bucket_ptr bucket_pointer() const BOOST_NOEXCEPT;
2836
3368
 
2837
3369
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2838
3370
  //!
@@ -2845,7 +3377,7 @@ class hashtable_impl
2845
3377
  //!
2846
3378
  //! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
2847
3379
  //! containing all of the elements in the nth bucket.
2848
- local_iterator begin(size_type n);
3380
+ local_iterator begin(size_type n) BOOST_NOEXCEPT;
2849
3381
 
2850
3382
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2851
3383
  //!
@@ -2858,7 +3390,7 @@ class hashtable_impl
2858
3390
  //!
2859
3391
  //! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
2860
3392
  //! containing all of the elements in the nth bucket.
2861
- const_local_iterator begin(size_type n) const;
3393
+ const_local_iterator begin(size_type n) const BOOST_NOEXCEPT;
2862
3394
 
2863
3395
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2864
3396
  //!
@@ -2871,7 +3403,7 @@ class hashtable_impl
2871
3403
  //!
2872
3404
  //! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
2873
3405
  //! containing all of the elements in the nth bucket.
2874
- const_local_iterator cbegin(size_type n) const;
3406
+ const_local_iterator cbegin(size_type n) const BOOST_NOEXCEPT;
2875
3407
 
2876
3408
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2877
3409
  //!
@@ -2884,7 +3416,7 @@ class hashtable_impl
2884
3416
  //!
2885
3417
  //! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
2886
3418
  //! containing all of the elements in the nth bucket.
2887
- local_iterator end(size_type n);
3419
+ local_iterator end(size_type n) BOOST_NOEXCEPT;
2888
3420
 
2889
3421
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2890
3422
  //!
@@ -2897,7 +3429,7 @@ class hashtable_impl
2897
3429
  //!
2898
3430
  //! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
2899
3431
  //! containing all of the elements in the nth bucket.
2900
- const_local_iterator end(size_type n) const;
3432
+ const_local_iterator end(size_type n) const BOOST_NOEXCEPT;
2901
3433
 
2902
3434
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2903
3435
  //!
@@ -2910,7 +3442,7 @@ class hashtable_impl
2910
3442
  //!
2911
3443
  //! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
2912
3444
  //! containing all of the elements in the nth bucket.
2913
- const_local_iterator cend(size_type n) const;
3445
+ const_local_iterator cend(size_type n) const BOOST_NOEXCEPT;
2914
3446
  #endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2915
3447
 
2916
3448
  //! <b>Requires</b>: new_bucket_traits can hold a pointer to a new bucket array
@@ -2941,7 +3473,7 @@ class hashtable_impl
2941
3473
  //!
2942
3474
  //! <b>Throws</b>: If the hasher functor throws. Basic guarantee.
2943
3475
  BOOST_INTRUSIVE_FORCEINLINE void rehash(const bucket_traits &new_bucket_traits)
2944
- { this->rehash_impl(new_bucket_traits, false); }
3476
+ { this->priv_rehash_impl(new_bucket_traits, false); }
2945
3477
 
2946
3478
  //! <b>Note</b>: This function is used when keys from inserted elements are changed
2947
3479
  //! (e.g. a language change when key is a string) but uniqueness and hash properties are
@@ -2964,7 +3496,7 @@ class hashtable_impl
2964
3496
  //!
2965
3497
  //! <b>Throws</b>: If the hasher functor throws. Basic guarantee.
2966
3498
  BOOST_INTRUSIVE_FORCEINLINE void full_rehash()
2967
- { this->rehash_impl(this->priv_bucket_traits(), true); }
3499
+ { this->priv_rehash_impl(this->priv_bucket_traits(), true); }
2968
3500
 
2969
3501
  //! <b>Requires</b>:
2970
3502
  //!
@@ -2979,46 +3511,48 @@ class hashtable_impl
2979
3511
  {
2980
3512
  //This function is only available for containers with incremental hashing
2981
3513
  BOOST_STATIC_ASSERT(( incremental && power_2_buckets ));
2982
- const size_type split_idx = this->priv_split_traits().get_size();
2983
- const size_type bucket_cnt = this->bucket_count();
2984
- const bucket_ptr buck_ptr = this->priv_bucket_pointer();
3514
+ const std::size_t split_idx = this->split_count();
3515
+ const std::size_t bucket_cnt = this->bucket_count();
2985
3516
  bool ret = false;
2986
3517
 
2987
3518
  if(grow){
2988
3519
  //Test if the split variable can be changed
2989
3520
  if((ret = split_idx < bucket_cnt)){
2990
- const size_type bucket_to_rehash = split_idx - bucket_cnt/2;
2991
- bucket_type &old_bucket = buck_ptr[bucket_to_rehash];
3521
+ const std::size_t bucket_to_rehash = split_idx - bucket_cnt/2u;
3522
+ bucket_type &old_bucket = this->priv_bucket(bucket_to_rehash);
2992
3523
  this->priv_split_traits().increment();
2993
3524
 
2994
3525
  //Anti-exception stuff: if an exception is thrown while
2995
3526
  //moving elements from old_bucket to the target bucket, all moved
2996
3527
  //elements are moved back to the original one.
2997
- detail::incremental_rehash_rollback<bucket_type, split_traits> rollback
2998
- ( buck_ptr[split_idx], old_bucket, this->priv_split_traits());
2999
- for( siterator before_i(old_bucket.before_begin()), i(old_bucket.begin()), end_sit(old_bucket.end())
3000
- ; i != end_sit; i = before_i, ++i){
3001
- const value_type &v = this->priv_value_from_slist_node(i.pointed_node());
3528
+ incremental_rehash_rollback<bucket_type, split_traits, slist_node_algorithms> rollback
3529
+ ( this->priv_bucket(split_idx), old_bucket, this->priv_split_traits());
3530
+ siterator before_i(old_bucket.get_node_ptr());
3531
+ siterator i(before_i); ++i;
3532
+ siterator end_sit = linear_buckets ? siterator() : before_i;
3533
+ for( ; i != end_sit; i = before_i, ++i){
3534
+ const value_type &v = this->priv_value_from_siterator(i);
3002
3535
  const std::size_t hash_value = this->priv_stored_or_compute_hash(v, store_hash_t());
3003
- const size_type new_n = this->priv_hash_to_bucket(hash_value);
3004
- siterator const last = (priv_last_in_group)(i);
3536
+ const std::size_t new_n = this->priv_hash_to_nbucket(hash_value);
3537
+ siterator last = i;
3538
+ (priv_go_to_last_in_group)(last, optimize_multikey_t());
3005
3539
  if(new_n == bucket_to_rehash){
3006
3540
  before_i = last;
3007
3541
  }
3008
3542
  else{
3009
- bucket_type &new_b = buck_ptr[new_n];
3010
- new_b.splice_after(new_b.before_begin(), old_bucket, before_i, last);
3543
+ bucket_type &new_b = this->priv_bucket(new_n);
3544
+ slist_node_algorithms::transfer_after(new_b.get_node_ptr(), before_i.pointed_node(), last.pointed_node());
3011
3545
  }
3012
3546
  }
3013
3547
  rollback.release();
3014
3548
  this->priv_erasure_update_cache();
3015
3549
  }
3016
3550
  }
3017
- else if((ret = split_idx > bucket_cnt/2)){ //!grow
3018
- const size_type target_bucket_num = split_idx - 1 - bucket_cnt/2;
3019
- bucket_type &target_bucket = buck_ptr[target_bucket_num];
3020
- bucket_type &source_bucket = buck_ptr[split_idx-1];
3021
- target_bucket.splice_after(target_bucket.cbefore_begin(), source_bucket);
3551
+ else if((ret = split_idx > bucket_cnt/2u)){ //!grow
3552
+ const std::size_t target_bucket_num = split_idx - 1u - bucket_cnt/2u;
3553
+ bucket_type &target_bucket = this->priv_bucket(target_bucket_num);
3554
+ bucket_type &source_bucket = this->priv_bucket(split_idx-1u);
3555
+ slist_node_algorithms::transfer_after(target_bucket.get_node_ptr(), source_bucket.get_node_ptr());
3022
3556
  this->priv_split_traits().decrement();
3023
3557
  this->priv_insertion_update_cache(target_bucket_num);
3024
3558
  }
@@ -3038,40 +3572,50 @@ class hashtable_impl
3038
3572
  //! <b>Throws</b>: Nothing
3039
3573
  //!
3040
3574
  //! <b>Note</b>: this method is only available if incremental<true> option is activated.
3041
- bool incremental_rehash(const bucket_traits &new_bucket_traits)
3575
+ bool incremental_rehash(const bucket_traits &new_bucket_traits) BOOST_NOEXCEPT
3042
3576
  {
3043
3577
  //This function is only available for containers with incremental hashing
3044
3578
  BOOST_STATIC_ASSERT(( incremental && power_2_buckets ));
3045
- size_type const new_bucket_traits_size = new_bucket_traits.bucket_count();
3046
- size_type const cur_bucket_traits = this->bucket_count();
3579
+ const bucket_ptr new_buckets = new_bucket_traits.bucket_begin();
3580
+ const size_type new_bucket_count_stdszt = static_cast<SizeType>(new_bucket_traits.bucket_count() - bucket_overhead);
3581
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(sizeof(size_type) >= sizeof(std::size_t) || new_bucket_count_stdszt <= size_type(-1));
3582
+ size_type new_bucket_count = static_cast<size_type>(new_bucket_count_stdszt);
3583
+ const size_type old_bucket_count = static_cast<size_type>(this->priv_usable_bucket_count());
3047
3584
  const size_type split_idx = this->split_count();
3048
3585
 
3049
3586
  //Test new bucket size is consistent with internal bucket size and split count
3050
- if(new_bucket_traits_size/2 == cur_bucket_traits){
3051
- if(!(split_idx >= cur_bucket_traits))
3587
+ if(new_bucket_count/2 == old_bucket_count){
3588
+ if(!(split_idx >= old_bucket_count))
3052
3589
  return false;
3053
3590
  }
3054
- else if(new_bucket_traits_size == cur_bucket_traits/2){
3055
- if(!(split_idx <= new_bucket_traits_size))
3591
+ else if(new_bucket_count == old_bucket_count/2){
3592
+ if(!(split_idx <= new_bucket_count))
3056
3593
  return false;
3057
3594
  }
3058
3595
  else{
3059
3596
  return false;
3060
3597
  }
3061
3598
 
3062
- const size_type ini_n = this->priv_get_cache_bucket_num();
3599
+ const size_type ini_n = (size_type)this->priv_get_cache_bucket_num();
3063
3600
  const bucket_ptr old_buckets = this->priv_bucket_pointer();
3064
- this->priv_bucket_traits() = new_bucket_traits;
3065
- if(new_bucket_traits.bucket_begin() != old_buckets){
3601
+
3602
+
3603
+ this->priv_unset_sentinel_bucket();
3604
+ this->priv_initialize_new_buckets(old_buckets, old_bucket_count, new_buckets, new_bucket_count);
3605
+ if (&new_bucket_traits != &this->priv_bucket_traits())
3606
+ this->priv_bucket_traits() = new_bucket_traits;
3607
+
3608
+ if(old_buckets != new_buckets){
3066
3609
  for(size_type n = ini_n; n < split_idx; ++n){
3067
- bucket_type &new_bucket = new_bucket_traits.bucket_begin()[n];
3068
- bucket_type &old_bucket = old_buckets[n];
3069
- new_bucket.splice_after(new_bucket.cbefore_begin(), old_bucket);
3610
+ slist_node_ptr new_bucket_nodeptr = new_bucket_traits.bucket_begin()[difference_type(n)].get_node_ptr();
3611
+ slist_node_ptr old_bucket_node_ptr = old_buckets[difference_type(n)].get_node_ptr();
3612
+ slist_node_algorithms::transfer_after(new_bucket_nodeptr, old_bucket_node_ptr);
3070
3613
  }
3071
- //Put cache to safe position
3072
- this->priv_initialize_cache();
3073
- this->priv_insertion_update_cache(ini_n);
3614
+ //Reset cache to safe position
3615
+ this->priv_set_cache_bucket_num(ini_n);
3074
3616
  }
3617
+
3618
+ this->priv_set_sentinel_bucket();
3075
3619
  return true;
3076
3620
  }
3077
3621
 
@@ -3084,7 +3628,7 @@ class hashtable_impl
3084
3628
  //! <b>Complexity</b>: Constant
3085
3629
  //!
3086
3630
  //! <b>Throws</b>: Nothing
3087
- size_type split_count() const;
3631
+ size_type split_count() const BOOST_NOEXCEPT;
3088
3632
 
3089
3633
  //! <b>Effects</b>: Returns the nearest new bucket count optimized for
3090
3634
  //! the container that is bigger or equal than n. This suggestion can be
@@ -3095,7 +3639,7 @@ class hashtable_impl
3095
3639
  //! <b>Complexity</b>: Amortized constant time.
3096
3640
  //!
3097
3641
  //! <b>Throws</b>: Nothing.
3098
- static size_type suggested_upper_bucket_count(size_type n);
3642
+ static size_type suggested_upper_bucket_count(size_type n) BOOST_NOEXCEPT;
3099
3643
 
3100
3644
  //! <b>Effects</b>: Returns the nearest new bucket count optimized for
3101
3645
  //! the container that is smaller or equal than n. This suggestion can be
@@ -3106,7 +3650,7 @@ class hashtable_impl
3106
3650
  //! <b>Complexity</b>: Amortized constant time.
3107
3651
  //!
3108
3652
  //! <b>Throws</b>: Nothing.
3109
- static size_type suggested_lower_bucket_count(size_type n);
3653
+ static size_type suggested_lower_bucket_count(size_type n) BOOST_NOEXCEPT;
3110
3654
  #endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
3111
3655
 
3112
3656
 
@@ -3116,6 +3660,10 @@ class hashtable_impl
3116
3660
  if(constant_time_size && x.size() != y.size()){
3117
3661
  return false;
3118
3662
  }
3663
+
3664
+ if (boost::intrusive::iterator_udistance(x.begin(), x.end()) != x.size())
3665
+ return false;
3666
+
3119
3667
  for (const_iterator ix = x.cbegin(), ex = x.cend(); ix != ex; ++ix){
3120
3668
  std::pair<const_iterator, const_iterator> eqx(x.equal_range(key_of_value()(*ix))),
3121
3669
  eqy(y.equal_range(key_of_value()(*ix)));
@@ -3148,18 +3696,45 @@ class hashtable_impl
3148
3696
  BOOST_INTRUSIVE_FORCEINLINE void check() const {}
3149
3697
  private:
3150
3698
 
3151
- void rehash_impl(const bucket_traits &new_bucket_traits, bool do_full_rehash)
3699
+ static void priv_initialize_new_buckets
3700
+ ( bucket_ptr old_buckets, size_type old_bucket_count
3701
+ , bucket_ptr new_buckets, size_type new_bucket_count)
3702
+ {
3703
+ //Initialize new buckets
3704
+ const bool same_buffer = old_buckets == new_buckets;
3705
+ if (same_buffer && new_bucket_count <= old_bucket_count) {
3706
+ //Nothing to do here
3707
+ }
3708
+ else {
3709
+ bucket_ptr p;
3710
+ size_type c;
3711
+
3712
+ if (same_buffer) {
3713
+ p = old_buckets + std::ptrdiff_t(old_bucket_count);
3714
+ c = size_type(new_bucket_count - old_bucket_count);
3715
+ }
3716
+ else {
3717
+ p = new_buckets;
3718
+ c = new_bucket_count;
3719
+ }
3720
+ internal_type::priv_init_buckets(p, c);
3721
+ }
3722
+ }
3723
+
3724
+ void priv_rehash_impl(const bucket_traits &new_bucket_traits, bool do_full_rehash)
3152
3725
  {
3726
+ const std::size_t nbc = new_bucket_traits.bucket_count() - bucket_overhead;
3727
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(sizeof(SizeType) >= sizeof(std::size_t) || nbc <= SizeType(-1));
3728
+
3153
3729
  const bucket_ptr new_buckets = new_bucket_traits.bucket_begin();
3154
- size_type new_bucket_count = new_bucket_traits.bucket_count();
3730
+ const size_type new_bucket_count = static_cast<SizeType>(nbc);
3155
3731
  const bucket_ptr old_buckets = this->priv_bucket_pointer();
3156
- size_type old_bucket_count = this->bucket_count();
3732
+ const size_type old_bucket_count = this->bucket_count();
3157
3733
 
3158
3734
  //Check power of two bucket array if the option is activated
3159
3735
  BOOST_INTRUSIVE_INVARIANT_ASSERT
3160
3736
  (!power_2_buckets || (0 == (new_bucket_count & (new_bucket_count-1u))));
3161
3737
 
3162
- size_type n = this->priv_get_cache_bucket_num();
3163
3738
  const bool same_buffer = old_buckets == new_buckets;
3164
3739
  //If the new bucket length is a common factor
3165
3740
  //of the old one we can avoid hash calculations.
@@ -3168,86 +3743,95 @@ class hashtable_impl
3168
3743
  //If we are shrinking the same bucket array and it's
3169
3744
  //is a fast shrink, just rehash the last nodes
3170
3745
  size_type new_first_bucket_num = new_bucket_count;
3171
- if(same_buffer && fast_shrink && (n < new_bucket_count)){
3172
- new_first_bucket_num = n;
3173
- n = new_bucket_count;
3746
+ size_type old_bucket_cache = (size_type)this->priv_get_cache_bucket_num();
3747
+ if(same_buffer && fast_shrink && (old_bucket_cache < new_bucket_count)){
3748
+ new_first_bucket_num = old_bucket_cache;
3749
+ old_bucket_cache = new_bucket_count;
3174
3750
  }
3175
3751
 
3752
+ if (!do_full_rehash)
3753
+ this->priv_initialize_new_buckets(old_buckets, old_bucket_count, new_buckets, new_bucket_count);
3754
+
3176
3755
  //Anti-exception stuff: they destroy the elements if something goes wrong.
3177
3756
  //If the source and destination buckets are the same, the second rollback function
3178
3757
  //is harmless, because all elements have been already unlinked and destroyed
3179
- typedef detail::init_disposer<node_algorithms> NodeDisposer;
3180
- typedef detail::exception_array_disposer<bucket_type, NodeDisposer, size_type> ArrayDisposer;
3181
- NodeDisposer node_disp;
3182
- ArrayDisposer rollback1(new_buckets[0], node_disp, new_bucket_count);
3183
- ArrayDisposer rollback2(old_buckets[0], node_disp, old_bucket_count);
3758
+
3759
+ typedef typename internal_type::template typeof_node_disposer<detail::null_disposer>::type NodeDisposer;
3760
+ typedef exception_bucket_disposer<bucket_type, slist_node_algorithms, NodeDisposer, size_type> ArrayDisposer;
3761
+ NodeDisposer nd(this->make_node_disposer(detail::null_disposer()));
3762
+ ArrayDisposer rollback1(new_buckets[0], nd, new_bucket_count);
3763
+ ArrayDisposer rollback2(old_buckets[0], nd, old_bucket_count);
3184
3764
 
3185
3765
  //Put size in a safe value for rollback exception
3186
3766
  size_type const size_backup = this->priv_size_traits().get_size();
3187
3767
  this->priv_size_traits().set_size(0);
3188
3768
  //Put cache to safe position
3189
- this->priv_initialize_cache();
3190
- this->priv_insertion_update_cache(size_type(0u));
3769
+ this->priv_init_cache();
3770
+ this->priv_unset_sentinel_bucket();
3771
+
3772
+ const size_type split = this->rehash_split_from_bucket_count(new_bucket_count);
3191
3773
 
3192
3774
  //Iterate through nodes
3193
- for(; n < old_bucket_count; ++n){
3194
- bucket_type &old_bucket = old_buckets[n];
3775
+ for(size_type n = old_bucket_cache; n < old_bucket_count; ++n){
3776
+ bucket_type &old_bucket = old_buckets[difference_type(n)];
3195
3777
  if(!fast_shrink){
3196
- for( siterator before_i(old_bucket.before_begin()), i(old_bucket.begin()), end_sit(old_bucket.end())
3778
+ siterator before_i(old_bucket.get_node_ptr());
3779
+ siterator i(before_i); ++i;
3780
+ siterator end_sit(this->sit_end(old_bucket));
3781
+ for( //
3197
3782
  ; i != end_sit
3198
3783
  ; i = before_i, ++i){
3199
3784
 
3200
3785
  //First obtain hash value (and store it if do_full_rehash)
3201
3786
  std::size_t hash_value;
3202
3787
  if(do_full_rehash){
3203
- value_type &v = this->priv_value_from_slist_node(i.pointed_node());
3788
+ value_type &v = this->priv_value_from_siterator(i);
3204
3789
  hash_value = this->priv_hasher()(key_of_value()(v));
3205
- node_functions_t::store_hash(pointer_traits<node_ptr>::pointer_to(this->priv_value_to_node(v)), hash_value, store_hash_t());
3790
+ node_functions_t::store_hash(this->priv_value_to_node_ptr(v), hash_value, store_hash_t());
3206
3791
  }
3207
3792
  else{
3208
- const value_type &v = this->priv_value_from_slist_node(i.pointed_node());
3793
+ const value_type &v = this->priv_value_from_siterator(i);
3209
3794
  hash_value = this->priv_stored_or_compute_hash(v, store_hash_t());
3210
3795
  }
3211
3796
 
3212
3797
  //Now calculate the new bucket position
3213
- const size_type new_n = detail::hash_to_bucket_split<power_2_buckets, incremental>
3214
- (hash_value, new_bucket_count, new_bucket_count);
3798
+ const size_type new_n = (size_type)hash_to_bucket_split<power_2_buckets, incremental>
3799
+ (hash_value, new_bucket_count, split, fastmod_buckets_t());
3215
3800
 
3216
3801
  //Update first used bucket cache
3217
3802
  if(cache_begin && new_n < new_first_bucket_num)
3218
3803
  new_first_bucket_num = new_n;
3219
3804
 
3220
3805
  //If the target bucket is new, transfer the whole group
3221
- siterator const last = (priv_last_in_group)(i);
3806
+ siterator last = i;
3807
+ (priv_go_to_last_in_group)(i, optimize_multikey_t());
3222
3808
 
3223
3809
  if(same_buffer && new_n == n){
3224
3810
  before_i = last;
3225
3811
  }
3226
3812
  else{
3227
- bucket_type &new_b = new_buckets[new_n];
3228
- new_b.splice_after(new_b.before_begin(), old_bucket, before_i, last);
3813
+ bucket_type &new_b = new_buckets[difference_type(new_n)];
3814
+ slist_node_algorithms::transfer_after(new_b.get_node_ptr(), before_i.pointed_node(), last.pointed_node());
3229
3815
  }
3230
3816
  }
3231
3817
  }
3232
3818
  else{
3233
- const size_type new_n = detail::hash_to_bucket_split<power_2_buckets, incremental>(n, new_bucket_count, new_bucket_count);
3819
+ const size_type new_n = (size_type)hash_to_bucket_split<power_2_buckets, incremental>
3820
+ (n, new_bucket_count, split, fastmod_buckets_t());
3234
3821
  if(cache_begin && new_n < new_first_bucket_num)
3235
3822
  new_first_bucket_num = new_n;
3236
- bucket_type &new_b = new_buckets[new_n];
3237
- new_b.splice_after( new_b.before_begin()
3238
- , old_bucket
3239
- , old_bucket.before_begin()
3240
- , bucket_plus_vtraits_t::priv_get_last(old_bucket, optimize_multikey_t()));
3823
+ bucket_type &new_b = new_buckets[difference_type(new_n)];
3824
+ siterator last = this->priv_get_last(old_bucket, optimize_multikey_t());
3825
+ slist_node_algorithms::transfer_after(new_b.get_node_ptr(), old_bucket.get_node_ptr(), last.pointed_node());
3241
3826
  }
3242
3827
  }
3243
3828
 
3244
3829
  this->priv_size_traits().set_size(size_backup);
3245
- this->priv_split_traits().set_size(new_bucket_count);
3246
- if(&new_bucket_traits != &this->priv_bucket_traits()){
3830
+ this->priv_split_traits().set_size(split);
3831
+ if(&new_bucket_traits != &this->priv_bucket_traits())
3247
3832
  this->priv_bucket_traits() = new_bucket_traits;
3248
- }
3249
- this->priv_initialize_cache();
3250
- this->priv_insertion_update_cache(new_first_bucket_num);
3833
+ this->priv_set_sentinel_bucket();
3834
+ this->priv_set_cache_bucket_num(new_first_bucket_num);
3251
3835
  rollback1.release();
3252
3836
  rollback2.release();
3253
3837
  }
@@ -3282,8 +3866,8 @@ class hashtable_impl
3282
3866
  for(; b != e; ++b){
3283
3867
  //No need to check for duplicates and insert it in the first position
3284
3868
  //as this is an unordered container. So use minimal insertion code
3285
- std::size_t const hash_to_store = this->priv_stored_or_compute_hash(*b, store_hash_t());;
3286
- size_type const bucket_number = this->priv_hash_to_bucket(hash_to_store);
3869
+ std::size_t const hash_to_store = this->priv_stored_or_compute_hash(*b, store_hash_t());
3870
+ size_type const bucket_number = this->priv_hash_to_nbucket(hash_to_store);
3287
3871
  typedef typename detail::if_c
3288
3872
  <detail::is_const<MaybeConstHashtableImpl>::value, const_reference, reference>::type reference_type;
3289
3873
  reference_type r = *b;
@@ -3301,16 +3885,14 @@ class hashtable_impl
3301
3885
  {
3302
3886
  //No need to check for duplicates and insert it in the first position
3303
3887
  //as this is an unordered container. So use minimal insertion code
3304
- //std::size_t const hash_value = this->priv_stored_or_compute_hash(src_ref, store_hash_t());;
3305
- //size_type const bucket_number = this->priv_hash_to_bucket(hash_value);
3306
- bucket_type &cur_bucket = this->priv_bucket_pointer()[bucket_number];
3307
- siterator const prev(cur_bucket.before_begin());
3888
+ bucket_type &cur_bucket = this->priv_bucket(bucket_number);
3889
+ siterator const prev(cur_bucket.get_node_ptr());
3308
3890
  //Just check if the cloned node is equal to the first inserted value in the new bucket
3309
3891
  //as equal src values were contiguous and they should be already inserted in the
3310
3892
  //destination bucket.
3311
- bool const next_is_in_group = optimize_multikey && !cur_bucket.empty() &&
3893
+ bool const next_is_in_group = optimize_multikey && !this->priv_bucket_empty(bucket_number) &&
3312
3894
  this->priv_equal()( key_of_value()(src_ref)
3313
- , key_of_value()(this->priv_value_from_slist_node((++siterator(prev)).pointed_node())));
3895
+ , key_of_value()(this->priv_value_from_siterator(++siterator(prev))));
3314
3896
  this->priv_insert_equal_after_find(*cloner(src_ref), bucket_number, hash_to_store, prev, next_is_in_group);
3315
3897
  }
3316
3898
 
@@ -3320,29 +3902,26 @@ class hashtable_impl
3320
3902
  //First clone the first ones
3321
3903
  const size_type src_bucket_count = src.bucket_count();
3322
3904
  const size_type dst_bucket_count = this->bucket_count();
3323
- const bucket_ptr src_buckets = src.priv_bucket_pointer();
3324
- const bucket_ptr dst_buckets = this->priv_bucket_pointer();
3325
3905
  size_type constructed = 0;
3326
- typedef node_cast_adaptor< detail::node_disposer<Disposer, value_traits, CircularSListAlgorithms>
3327
- , slist_node_ptr, node_ptr > NodeDisposer;
3906
+ typedef typename internal_type::template typeof_node_disposer<Disposer>::type NodeDisposer;
3328
3907
  NodeDisposer node_disp(disposer, &this->priv_value_traits());
3329
3908
 
3330
- detail::exception_array_disposer<bucket_type, NodeDisposer, size_type>
3331
- rollback(dst_buckets[0], node_disp, constructed);
3909
+ exception_bucket_disposer<bucket_type, slist_node_algorithms, NodeDisposer, size_type>
3910
+ rollback(this->priv_bucket(0), node_disp, constructed);
3332
3911
  //Now insert the remaining ones using the modulo trick
3333
3912
  for( //"constructed" already initialized
3334
3913
  ; constructed < src_bucket_count
3335
3914
  ; ++constructed){
3336
- //Since incremental hashing can't be structurally copied, avoid hash_to_bucket_split
3337
- const std::size_t new_n = detail::hash_to_bucket(constructed, dst_bucket_count, detail::bool_<power_2_buckets>());
3338
- bucket_type &src_b = src_buckets[constructed];
3339
- for( siterator b(src_b.begin()), e(src_b.end()); b != e; ++b){
3340
- slist_node_ptr const n(b.pointed_node());
3915
+
3916
+ const size_type new_n = (size_type)hash_to_bucket_split<power_2_buckets, incremental>
3917
+ (constructed, dst_bucket_count, this->split_count(), fastmod_buckets_t());
3918
+ bucket_type &src_b = src.priv_bucket(constructed);
3919
+ for( siterator b(this->priv_bucket_lbegin(src_b)), e(this->priv_bucket_lend(src_b)); b != e; ++b){
3341
3920
  typedef typename detail::if_c
3342
3921
  <detail::is_const<MaybeConstHashtableImpl>::value, const_reference, reference>::type reference_type;
3343
- reference_type r = this->priv_value_from_slist_node(n);
3922
+ reference_type r = this->priv_value_from_siterator(b);
3344
3923
  this->priv_clone_front_in_bucket<reference_type>
3345
- (new_n, r, this->priv_stored_hash(n, store_hash_t()), cloner);
3924
+ (new_n, r, this->priv_stored_hash(b, store_hash_t()), cloner);
3346
3925
  }
3347
3926
  }
3348
3927
  this->priv_hasher() = src.priv_hasher();
@@ -3350,78 +3929,95 @@ class hashtable_impl
3350
3929
  rollback.release();
3351
3930
  this->priv_size_traits().set_size(src.priv_size_traits().get_size());
3352
3931
  this->priv_split_traits().set_size(dst_bucket_count);
3353
- this->priv_insertion_update_cache(0u);
3932
+ this->priv_set_cache_bucket_num(0u);
3354
3933
  this->priv_erasure_update_cache();
3355
3934
  }
3356
3935
 
3357
- std::size_t priv_hash_to_bucket(std::size_t hash_value) const
3358
- {
3359
- return detail::hash_to_bucket_split<power_2_buckets, incremental>
3360
- (hash_value, this->priv_bucket_traits().bucket_count(), this->priv_split_traits().get_size());
3361
- }
3362
-
3363
3936
  iterator priv_insert_equal_after_find(reference value, size_type bucket_num, std::size_t hash_value, siterator prev, bool const next_is_in_group)
3364
3937
  {
3365
3938
  //Now store hash if needed
3366
- node_ptr n = pointer_traits<node_ptr>::pointer_to(this->priv_value_to_node(value));
3939
+ node_ptr n = this->priv_value_to_node_ptr(value);
3367
3940
  node_functions_t::store_hash(n, hash_value, store_hash_t());
3368
3941
  //Checks for some modes
3369
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!safemode_or_autounlink || node_algorithms::unique(n));
3942
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!safemode_or_autounlink || slist_node_algorithms::unique(n));
3370
3943
  //Shortcut to optimize_multikey cases
3371
3944
  group_functions_t::insert_in_group
3372
- ( next_is_in_group ? detail::dcast_bucket_ptr<node>((++siterator(prev)).pointed_node()) : n
3945
+ ( next_is_in_group ? dcast_bucket_ptr<node>((++siterator(prev)).pointed_node()) : n
3373
3946
  , n, optimize_multikey_t());
3374
3947
  //Update cache and increment size if needed
3375
3948
  this->priv_insertion_update_cache(bucket_num);
3376
3949
  this->priv_size_traits().increment();
3377
- //Insert the element in the bucket after it
3378
- return iterator(bucket_type::s_insert_after(prev, *n), &this->get_bucket_value_traits());
3950
+ slist_node_algorithms::link_after(prev.pointed_node(), n);
3951
+ return this->build_iterator(siterator(n), this->priv_bucket_ptr(bucket_num));
3379
3952
  }
3380
3953
 
3381
3954
  template<class KeyType, class KeyHasher, class KeyEqual>
3382
- siterator priv_find //In case it is not found previt is bucket.before_begin()
3955
+ siterator priv_find //In case it is not found previt is priv_end_sit()
3383
3956
  ( const KeyType &key, KeyHasher hash_func
3384
3957
  , KeyEqual equal_func, size_type &bucket_number, std::size_t &h, siterator &previt) const
3385
3958
  {
3386
3959
  h = hash_func(key);
3387
- return this->priv_find_with_hash(key, equal_func, bucket_number, h, previt);
3388
- }
3389
3960
 
3390
- template<class KeyType, class KeyEqual>
3391
- bool priv_is_value_equal_to_key(const value_type &v, const std::size_t h, const KeyType &key, KeyEqual equal_func) const
3392
- {
3393
- (void)h;
3394
- return (!compare_hash || this->priv_stored_or_compute_hash(v, store_hash_t()) == h) && equal_func(key, key_of_value()(v));
3395
- }
3961
+ bucket_number = this->priv_hash_to_nbucket(h);
3962
+ bucket_type& b = this->priv_bucket(bucket_number);
3963
+ siterator prev = this->sit_bbegin(b);
3964
+ siterator it = prev;
3965
+ siterator const endit = this->sit_end(b);
3396
3966
 
3397
- //return previous iterator to the next equal range group in case
3398
- static siterator priv_last_in_group(const siterator &it_first_in_group)
3399
- {
3400
- return bucket_type::s_iterator_to
3401
- (*group_functions_t::get_last_in_group
3402
- (detail::dcast_bucket_ptr<node>(it_first_in_group.pointed_node()), optimize_multikey_t()));
3967
+ while (++it != endit) {
3968
+ if (this->priv_is_value_equal_to_key
3969
+ (this->priv_value_from_siterator(it), h, key, equal_func, compare_hash_t())) {
3970
+ previt = prev;
3971
+ return it;
3972
+ }
3973
+ (priv_go_to_last_in_group)(it, optimize_multikey_t());
3974
+ prev = it;
3975
+ }
3976
+ previt = b.get_node_ptr();
3977
+ return this->priv_end_sit();
3403
3978
  }
3404
3979
 
3980
+
3405
3981
  template<class KeyType, class KeyEqual>
3406
- siterator priv_find_with_hash //In case it is not found previt is bucket.before_begin()
3407
- ( const KeyType &key, KeyEqual equal_func, size_type &bucket_number, const std::size_t h, siterator &previt) const
3982
+ siterator priv_find_in_bucket //In case it is not found previt is priv_end_sit()
3983
+ (bucket_type &b, const KeyType& key, KeyEqual equal_func, const std::size_t h) const
3408
3984
  {
3409
- bucket_number = this->priv_hash_to_bucket(h);
3410
- bucket_type &b = this->priv_bucket_pointer()[bucket_number];
3411
- previt = b.before_begin();
3412
- siterator it = previt;
3413
- siterator const endit = b.end();
3985
+ siterator it(this->sit_begin(b));
3986
+ siterator const endit(this->sit_end(b));
3414
3987
 
3415
- while(++it != endit){
3416
- if(this->priv_is_value_equal_to_key(this->priv_value_from_slist_node(it.pointed_node()), h, key, equal_func)){
3988
+ for (; it != endit; (priv_go_to_last_in_group)(it, optimize_multikey_t()), ++it) {
3989
+ if (BOOST_LIKELY(this->priv_is_value_equal_to_key
3990
+ (this->priv_value_from_siterator(it), h, key, equal_func, compare_hash_t()))) {
3417
3991
  return it;
3418
3992
  }
3419
- previt = it = (priv_last_in_group)(it);
3420
3993
  }
3421
- previt = b.before_begin();
3422
- return this->priv_invalid_local_it();
3994
+ return this->priv_end_sit();
3995
+ }
3996
+
3997
+ template<class KeyType, class KeyEqual>
3998
+ BOOST_INTRUSIVE_FORCEINLINE bool priv_is_value_equal_to_key
3999
+ (const value_type &v, const std::size_t h, const KeyType &key, KeyEqual equal_func, detail::true_) const //compare_hash
4000
+ { return this->priv_stored_or_compute_hash(v, store_hash_t()) == h && equal_func(key, key_of_value()(v)); }
4001
+
4002
+ template<class KeyType, class KeyEqual>
4003
+ BOOST_INTRUSIVE_FORCEINLINE bool priv_is_value_equal_to_key
4004
+ (const value_type& v, const std::size_t , const KeyType& key, KeyEqual equal_func, detail::false_) const //compare_hash
4005
+ { return equal_func(key, key_of_value()(v)); }
4006
+
4007
+ //return previous iterator to the next equal range group in case
4008
+ BOOST_INTRUSIVE_FORCEINLINE static void priv_go_to_last_in_group
4009
+ (siterator &it_first_in_group, detail::true_) BOOST_NOEXCEPT //optimize_multikey
4010
+ {
4011
+ it_first_in_group =
4012
+ (group_functions_t::get_last_in_group
4013
+ (dcast_bucket_ptr<node>(it_first_in_group.pointed_node()), optimize_multikey_t()));
3423
4014
  }
3424
4015
 
4016
+ //return previous iterator to the next equal range group in case
4017
+ BOOST_INTRUSIVE_FORCEINLINE static void priv_go_to_last_in_group //!optimize_multikey
4018
+ (siterator /*&it_first_in_group*/, detail::false_) BOOST_NOEXCEPT
4019
+ { }
4020
+
3425
4021
  template<class KeyType, class KeyHasher, class KeyEqual>
3426
4022
  std::pair<siterator, siterator> priv_local_equal_range
3427
4023
  ( const KeyType &key
@@ -3430,7 +4026,7 @@ class hashtable_impl
3430
4026
  , size_type &found_bucket
3431
4027
  , size_type &cnt) const
3432
4028
  {
3433
- size_type internal_cnt = 0;
4029
+ std::size_t internal_cnt = 0;
3434
4030
  //Let's see if the element is present
3435
4031
 
3436
4032
  siterator prev;
@@ -3438,34 +4034,47 @@ class hashtable_impl
3438
4034
  std::size_t h;
3439
4035
  std::pair<siterator, siterator> to_return
3440
4036
  ( this->priv_find(key, hash_func, equal_func, n_bucket, h, prev)
3441
- , this->priv_invalid_local_it());
4037
+ , this->priv_end_sit());
3442
4038
 
3443
4039
  if(to_return.first != to_return.second){
3444
4040
  found_bucket = n_bucket;
3445
4041
  //If it's present, find the first that it's not equal in
3446
4042
  //the same bucket
3447
- bucket_type &b = this->priv_bucket_pointer()[n_bucket];
3448
4043
  siterator it = to_return.first;
3449
- ++internal_cnt; //At least one is found
3450
- if(optimize_multikey){
3451
- to_return.second = ++(priv_last_in_group)(it);
3452
- internal_cnt += boost::intrusive::iterator_distance(++it, to_return.second);
4044
+ siterator const bend = this->priv_bucket_lend(n_bucket);
4045
+ BOOST_IF_CONSTEXPR(optimize_multikey){
4046
+ siterator past_last_in_group_it = it;
4047
+ (priv_go_to_last_in_group)(past_last_in_group_it, optimize_multikey_t());
4048
+ ++past_last_in_group_it;
4049
+ internal_cnt += boost::intrusive::iterator_udistance(++it, past_last_in_group_it) + 1u;
4050
+ if (past_last_in_group_it != bend)
4051
+ to_return.second = past_last_in_group_it;
3453
4052
  }
3454
4053
  else{
3455
- siterator const bend = b.end();
3456
- while(++it != bend &&
3457
- this->priv_is_value_equal_to_key(this->priv_value_from_slist_node(it.pointed_node()), h, key, equal_func)){
3458
- ++internal_cnt;
3459
- }
3460
- to_return.second = it;
4054
+ do {
4055
+ ++internal_cnt; //At least one is found
4056
+ ++it;
4057
+ } while(it != bend &&
4058
+ this->priv_is_value_equal_to_key
4059
+ (this->priv_value_from_siterator(it), h, key, equal_func, compare_hash_t()));
4060
+ if (it != bend)
4061
+ to_return.second = it;
3461
4062
  }
3462
4063
  }
3463
- cnt = internal_cnt;
4064
+ cnt = size_type(internal_cnt);
3464
4065
  return to_return;
3465
4066
  }
3466
4067
 
4068
+ struct priv_equal_range_result
4069
+ {
4070
+ siterator first;
4071
+ siterator second;
4072
+ bucket_ptr bucket_first;
4073
+ bucket_ptr bucket_second;
4074
+ };
4075
+
3467
4076
  template<class KeyType, class KeyHasher, class KeyEqual>
3468
- std::pair<siterator, siterator> priv_equal_range
4077
+ priv_equal_range_result priv_equal_range
3469
4078
  ( const KeyType &key
3470
4079
  , KeyHasher hash_func
3471
4080
  , KeyEqual equal_func) const
@@ -3474,75 +4083,103 @@ class hashtable_impl
3474
4083
  size_type cnt;
3475
4084
 
3476
4085
  //Let's see if the element is present
3477
- std::pair<siterator, siterator> to_return
4086
+ const std::pair<siterator, siterator> to_return
3478
4087
  (this->priv_local_equal_range(key, hash_func, equal_func, n_bucket, cnt));
4088
+ priv_equal_range_result r;
4089
+ r.first = to_return.first;
4090
+ r.second = to_return.second;
4091
+
3479
4092
  //If not, find the next element as ".second" if ".second" local iterator
3480
4093
  //is not pointing to an element.
3481
- bucket_ptr const bp = this->priv_bucket_pointer();
3482
- if(to_return.first != to_return.second &&
3483
- to_return.second == bp[n_bucket].end()){
3484
- to_return.second = this->priv_invalid_local_it();
3485
- ++n_bucket;
3486
- for( const size_type max_bucket = this->bucket_count()
3487
- ; n_bucket != max_bucket
3488
- ; ++n_bucket){
3489
- bucket_type &b = bp[n_bucket];
3490
- if(!b.empty()){
3491
- to_return.second = b.begin();
3492
- break;
3493
- }
4094
+ if(to_return.first == to_return.second) {
4095
+ r.bucket_first = r.bucket_second = this->priv_invalid_bucket_ptr();
4096
+ }
4097
+ else if (to_return.second != this->priv_end_sit()) {
4098
+ r.bucket_first = this->priv_bucket_ptr(n_bucket);
4099
+ }
4100
+ else{
4101
+ r.bucket_first = this->priv_bucket_ptr(n_bucket);
4102
+ const size_type max_bucket = this->bucket_count();
4103
+ do{
4104
+ ++n_bucket;
4105
+ } while (n_bucket != max_bucket && this->priv_bucket_empty(n_bucket));
4106
+
4107
+ if (n_bucket == max_bucket){
4108
+ r.bucket_second = this->priv_invalid_bucket_ptr();
4109
+ }
4110
+ else{
4111
+ r.bucket_second = this->priv_bucket_ptr(n_bucket);
4112
+ r.second = siterator(r.bucket_second->begin_ptr());
3494
4113
  }
3495
4114
  }
3496
- return to_return;
4115
+
4116
+ return r;
3497
4117
  }
3498
4118
 
3499
- std::size_t priv_get_bucket_num(siterator it)
3500
- { return this->priv_get_bucket_num_hash_dispatch(it, store_hash_t()); }
4119
+ BOOST_INTRUSIVE_FORCEINLINE size_type priv_get_bucket_num(const_iterator it) BOOST_NOEXCEPT
4120
+ { return this->priv_get_bucket_num(it, linear_buckets_t()); }
3501
4121
 
3502
- std::size_t priv_get_bucket_num_hash_dispatch(siterator it, detail::true_) //store_hash
4122
+ BOOST_INTRUSIVE_FORCEINLINE size_type priv_get_bucket_num(const_iterator it, detail::true_) BOOST_NOEXCEPT //linear
4123
+ { return size_type(it.get_bucket_ptr() - this->priv_bucket_pointer()); }
4124
+
4125
+ BOOST_INTRUSIVE_FORCEINLINE size_type priv_get_bucket_num(const_iterator it, detail::false_) BOOST_NOEXCEPT //!linear
4126
+ { return this->priv_get_bucket_num_hash_dispatch(it.slist_it(), store_hash_t()); }
4127
+
4128
+ BOOST_INTRUSIVE_FORCEINLINE size_type priv_get_bucket_num_hash_dispatch(siterator it, detail::true_) BOOST_NOEXCEPT //store_hash
4129
+ { return (size_type)this->priv_hash_to_nbucket(this->priv_stored_hash(it, store_hash_t())); }
4130
+
4131
+ size_type priv_get_bucket_num_hash_dispatch(siterator it, detail::false_) BOOST_NOEXCEPT //NO store_hash
3503
4132
  {
3504
- return this->priv_hash_to_bucket
3505
- (this->priv_stored_hash(it.pointed_node(), store_hash_t()));
4133
+ const bucket_type &f = this->priv_bucket(0u);
4134
+ slist_node_ptr bb = group_functions_t::get_bucket_before_begin
4135
+ ( this->priv_bucket_lbbegin(0u).pointed_node()
4136
+ , this->priv_bucket_lbbegin(this->priv_usable_bucket_count() - 1u).pointed_node()
4137
+ , it.pointed_node()
4138
+ , optimize_multikey_t());
4139
+
4140
+ //Now get the bucket_impl from the iterator
4141
+ const bucket_type &b = static_cast<const bucket_type&>(*bb);
4142
+ //Now just calculate the index b has in the bucket array
4143
+ return static_cast<size_type>(&b - &f);
3506
4144
  }
3507
4145
 
3508
- std::size_t priv_get_bucket_num_hash_dispatch(siterator it, detail::false_) //NO store_hash
3509
- { return this->priv_get_bucket_num_no_hash_store(it, optimize_multikey_t()); }
3510
4146
 
3511
- static siterator priv_get_previous(bucket_type &b, siterator i)
3512
- { return bucket_plus_vtraits_t::priv_get_previous(b, i, optimize_multikey_t()); }
4147
+ BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_get_bucket_ptr(const_iterator it) BOOST_NOEXCEPT
4148
+ { return this->priv_get_bucket_ptr(it, linear_buckets_t()); }
4149
+
4150
+ BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_get_bucket_ptr(const_iterator it, detail::true_) BOOST_NOEXCEPT //linear
4151
+ { return it.get_bucket_ptr(); }
4152
+
4153
+ BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_get_bucket_ptr(const_iterator it, detail::false_) BOOST_NOEXCEPT //!linear
4154
+ { return this->priv_bucket_ptr(this->priv_get_bucket_num_hash_dispatch(it.slist_it(), store_hash_t())); }
3513
4155
 
3514
4156
  /// @endcond
3515
4157
  };
3516
4158
 
3517
4159
  /// @cond
3518
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
3519
4160
  template < class T
3520
- , bool UniqueKeys
3521
4161
  , class PackedOptions
3522
4162
  >
3523
- #else
3524
- template <class T, bool UniqueKeys, class ...Options>
3525
- #endif
3526
4163
  struct make_bucket_traits
3527
4164
  {
3528
4165
  //Real value traits must be calculated from options
3529
4166
  typedef typename detail::get_value_traits
3530
- <T, typename PackedOptions::proto_value_traits>::type value_traits;
4167
+ <T, typename PackedOptions::proto_value_traits>::type value_traits;
3531
4168
 
3532
4169
  typedef typename PackedOptions::bucket_traits specified_bucket_traits;
3533
4170
 
3534
4171
  //Real bucket traits must be calculated from options and calculated value_traits
3535
- typedef typename detail::get_slist_impl
3536
- <typename detail::reduced_slist_node_traits
3537
- <typename value_traits::node_traits>::type
3538
- >::type slist_impl;
4172
+ typedef bucket_traits_impl
4173
+ < typename unordered_bucket_ptr_impl
4174
+ <value_traits>::type
4175
+ , std::size_t> bucket_traits_t;
3539
4176
 
3540
4177
  typedef typename
3541
4178
  detail::if_c< detail::is_same
3542
4179
  < specified_bucket_traits
3543
4180
  , default_bucket_traits
3544
4181
  >::value
3545
- , detail::bucket_traits_impl<slist_impl>
4182
+ , bucket_traits_t
3546
4183
  , specified_bucket_traits
3547
4184
  >::type type;
3548
4185
  };
@@ -3558,6 +4195,7 @@ template<class T, class O1 = void, class O2 = void
3558
4195
  , class O5 = void, class O6 = void
3559
4196
  , class O7 = void, class O8 = void
3560
4197
  , class O9 = void, class O10= void
4198
+ , class O11= void
3561
4199
  >
3562
4200
  #endif
3563
4201
  struct make_hashtable
@@ -3566,7 +4204,7 @@ struct make_hashtable
3566
4204
  typedef typename pack_options
3567
4205
  < hashtable_defaults,
3568
4206
  #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
3569
- O1, O2, O3, O4, O5, O6, O7, O8, O9, O10
4207
+ O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11
3570
4208
  #else
3571
4209
  Options...
3572
4210
  #endif
@@ -3576,7 +4214,7 @@ struct make_hashtable
3576
4214
  <T, typename packed_options::proto_value_traits>::type value_traits;
3577
4215
 
3578
4216
  typedef typename make_bucket_traits
3579
- <T, false, packed_options>::type bucket_traits;
4217
+ <T, packed_options>::type bucket_traits;
3580
4218
 
3581
4219
  typedef hashtable_impl
3582
4220
  < value_traits
@@ -3591,6 +4229,8 @@ struct make_hashtable
3591
4229
  |(std::size_t(packed_options::cache_begin)*hash_bool_flags::cache_begin_pos)
3592
4230
  |(std::size_t(packed_options::compare_hash)*hash_bool_flags::compare_hash_pos)
3593
4231
  |(std::size_t(packed_options::incremental)*hash_bool_flags::incremental_pos)
4232
+ |(std::size_t(packed_options::linear_buckets)*hash_bool_flags::linear_buckets_pos)
4233
+ |(std::size_t(packed_options::fastmod_buckets)*hash_bool_flags::fastmod_buckets_pos)
3594
4234
  > implementation_defined;
3595
4235
 
3596
4236
  /// @endcond