passenger 6.0.6 → 6.0.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2780) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG +391 -1
  3. data/CONTRIBUTING.md +1 -1
  4. data/CONTRIBUTORS +20 -0
  5. data/README.md +4 -11
  6. data/bin/passenger-install-nginx-module +5 -4
  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/integration_tests.rb +8 -7
  11. data/build/packaging.rb +4 -2
  12. data/build/ruby_tests.rb +1 -1
  13. data/build/support/cxx_dependency_map.rb +156 -54
  14. data/build/test_basics.rb +8 -5
  15. data/dev/copy_boost_headers +140 -78
  16. data/dev/index_cxx_dependencies.rb +1 -1
  17. data/dev/nginx_version_sha256 +72 -0
  18. data/dev/websocketpp.patch +39 -0
  19. data/doc/templates/markdown.html.erb +2 -6
  20. data/package.json +20 -18
  21. data/passenger.gemspec +1 -1
  22. data/resources/mime.types +1 -0
  23. data/resources/release.txt +1 -0
  24. data/resources/templates/config/installation_utils/user_support_binaries_dir_not_writable.txt.erb +1 -0
  25. data/resources/templates/error_renderer/with_details/dist/bundle.js +2 -33
  26. data/resources/templates/error_renderer/with_details/dist/styles.css +2 -2
  27. data/resources/templates/error_renderer/with_details/src/GetHelpView.jsx +1 -1
  28. data/resources/templates/error_renderer/with_details/src/index.html.template +0 -2
  29. data/resources/templates/error_renderer/with_details/webpack.config.js +13 -16
  30. data/resources/templates/error_renderer/without_details/dist/bundle.js +0 -1
  31. data/resources/templates/error_renderer/without_details/dist/styles.css +1 -1
  32. data/resources/templates/error_renderer/without_details/webpack.config.js +13 -16
  33. data/resources/templates/standalone/global.erb +4 -0
  34. data/resources/templates/standalone/rails_asset_pipeline.erb +1 -1
  35. data/resources/templates/standalone/server.erb +1 -0
  36. data/src/agent/AgentMain.cpp +2 -8
  37. data/src/agent/Core/AdminPanelConnector.h +3 -4
  38. data/src/agent/Core/ApiServer.h +36 -1
  39. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +2 -2
  40. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +1 -1
  41. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +2 -0
  42. data/src/agent/Core/ApplicationPool/Group.h +1 -1
  43. data/src/agent/Core/ApplicationPool/Implementation.cpp +0 -1
  44. data/src/agent/Core/ApplicationPool/Options.h +16 -2
  45. data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +1 -1
  46. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +8 -1
  47. data/src/agent/Core/ApplicationPool/Pool.h +10 -2
  48. data/src/agent/Core/Config.h +9 -4
  49. data/src/agent/Core/Controller/AppResponse.h +0 -1
  50. data/src/agent/Core/Controller/CheckoutSession.cpp +24 -13
  51. data/src/agent/Core/Controller/Config.h +12 -4
  52. data/src/agent/Core/Controller/InitRequest.cpp +4 -0
  53. data/src/agent/Core/Controller/InternalUtils.cpp +32 -6
  54. data/src/agent/Core/Controller/SendRequest.cpp +2 -2
  55. data/src/agent/Core/Controller.h +4 -1
  56. data/src/agent/Core/CoreMain.cpp +1 -0
  57. data/src/agent/Core/OptionParser.h +4 -0
  58. data/src/agent/Core/ResponseCache.h +3 -2
  59. data/src/agent/Core/SecurityUpdateChecker.h +5 -5
  60. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h +20 -0
  61. data/src/agent/Core/SpawningKit/Config.h +24 -0
  62. data/src/agent/Core/SpawningKit/Handshake/BackgroundIOCapturer.h +1 -1
  63. data/src/agent/Core/SpawningKit/Handshake/Perform.h +5 -5
  64. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +4 -0
  65. data/src/agent/Core/SpawningKit/PipeWatcher.h +19 -4
  66. data/src/agent/Core/SpawningKit/SmartSpawner.h +1 -1
  67. data/src/agent/Core/SpawningKit/Spawner.h +3 -0
  68. data/src/agent/Core/SpawningKit/UserSwitchingRules.h +2 -2
  69. data/src/agent/Core/TelemetryCollector.h +1 -1
  70. data/src/agent/ExecHelper/ExecHelperMain.cpp +10 -12
  71. data/src/agent/FileReadHelper/FileReadHelperMain.cpp +7 -10
  72. data/src/agent/MainFunctions.h +38 -0
  73. data/src/agent/Shared/ApiServerUtils.h +4 -3
  74. data/src/agent/Shared/ApplicationPoolApiKey.h +2 -0
  75. data/src/agent/Shared/Fundamentals/Initialization.cpp +1 -1
  76. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +28 -3
  77. data/src/agent/SystemMetrics/SystemMetricsMain.cpp +1 -0
  78. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +6 -4
  79. data/src/agent/Watchdog/ApiServer.h +1 -1
  80. data/src/agent/Watchdog/Config.h +3 -1
  81. data/src/agent/Watchdog/InstanceDirToucher.cpp +1 -1
  82. data/src/agent/Watchdog/WatchdogMain.cpp +10 -13
  83. data/src/apache2_module/Config.cpp +1 -1
  84. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +42 -27
  85. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +15 -0
  86. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +44 -1
  87. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +13 -0
  88. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +9 -0
  89. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +37 -0
  90. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +21 -0
  91. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +53 -2
  92. data/src/apache2_module/Hooks.cpp +27 -1
  93. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +19 -19
  94. data/src/cxx_supportlib/BackgroundEventLoop.cpp +5 -1
  95. data/src/cxx_supportlib/ConfigKit/Common.h +1 -1
  96. data/src/cxx_supportlib/ConfigKit/Schema.h +1 -1
  97. data/src/cxx_supportlib/ConfigKit/Translator.h +1 -1
  98. data/src/cxx_supportlib/Constants.h +4 -3
  99. data/src/cxx_supportlib/DataStructures/HashedStaticString.h +2 -0
  100. data/src/cxx_supportlib/DataStructures/StringKeyTable.h +1 -1
  101. data/src/cxx_supportlib/FileDescriptor.h +8 -0
  102. data/src/cxx_supportlib/FileTools/FileManip.cpp +10 -1
  103. data/src/cxx_supportlib/FileTools/FileManip.h +16 -0
  104. data/src/cxx_supportlib/FileTools/PathManip.cpp +10 -1
  105. data/src/cxx_supportlib/Hooks.h +1 -0
  106. data/src/cxx_supportlib/IOTools/BufferedIO.h +1 -1
  107. data/src/cxx_supportlib/IOTools/IOUtils.cpp +6 -10
  108. data/src/cxx_supportlib/IOTools/MessageIO.h +1 -1
  109. data/src/cxx_supportlib/Integrations/LibevJsonUtils.h +3 -3
  110. data/src/cxx_supportlib/JsonTools/CBindings.cpp +0 -2
  111. data/src/cxx_supportlib/JsonTools/JsonUtils.h +4 -4
  112. data/src/cxx_supportlib/LoggingKit/Context.h +16 -21
  113. data/src/cxx_supportlib/LoggingKit/Forward.h +0 -2
  114. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +36 -72
  115. data/src/cxx_supportlib/MemoryKit/mbuf.cpp +12 -4
  116. data/src/cxx_supportlib/MemoryKit/mbuf.h +1 -1
  117. data/src/cxx_supportlib/ProcessManagement/Utils.cpp +1 -1
  118. data/src/cxx_supportlib/ResourceLocator.h +1 -1
  119. data/src/cxx_supportlib/SafeLibev.h +3 -1
  120. data/src/cxx_supportlib/SecurityKit/Crypto.cpp +3 -94
  121. data/src/cxx_supportlib/SecurityKit/Crypto.h +0 -8
  122. data/src/cxx_supportlib/ServerKit/AcceptLoadBalancer.h +1 -1
  123. data/src/cxx_supportlib/ServerKit/Context.h +6 -0
  124. data/src/cxx_supportlib/ServerKit/Errors.h +3 -2
  125. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +99 -64
  126. data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +4 -1
  127. data/src/cxx_supportlib/ServerKit/HttpRequest.h +2 -2
  128. data/src/cxx_supportlib/ServerKit/HttpServer.h +3 -2
  129. data/src/cxx_supportlib/ServerKit/llerrors.h +84 -0
  130. data/src/cxx_supportlib/ServerKit/llhttp.c +10168 -0
  131. data/src/cxx_supportlib/ServerKit/llhttp.h +903 -0
  132. data/src/cxx_supportlib/ServerKit/llhttp_api.c +510 -0
  133. data/src/cxx_supportlib/ServerKit/llhttp_http.c +170 -0
  134. data/src/cxx_supportlib/ServerKit/llversion.h +12 -0
  135. data/src/cxx_supportlib/ServerKit/url_parser.c +574 -0
  136. data/src/cxx_supportlib/ServerKit/url_parser.h +74 -0
  137. data/src/cxx_supportlib/StaticString.h +5 -1
  138. data/src/cxx_supportlib/StrIntTools/DateParsing.h +1 -1
  139. data/src/cxx_supportlib/StrIntTools/StrIntUtils.cpp +12 -3
  140. data/src/cxx_supportlib/StrIntTools/StrIntUtils.h +5 -0
  141. data/src/cxx_supportlib/SystemTools/ProcessMetricsCollector.h +1 -1
  142. data/src/cxx_supportlib/SystemTools/SystemMetricsCollector.h +2 -2
  143. data/src/cxx_supportlib/SystemTools/UserDatabase.cpp +14 -14
  144. data/src/cxx_supportlib/SystemTools/UserDatabase.h +6 -10
  145. data/src/cxx_supportlib/Utils/AnsiColorConstants.h +11 -9
  146. data/src/cxx_supportlib/Utils/HttpConstants.h +1 -1
  147. data/src/cxx_supportlib/Utils.cpp +1 -1
  148. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +9 -12
  149. data/src/cxx_supportlib/oxt/dynamic_thread_group.hpp +5 -1
  150. data/src/cxx_supportlib/oxt/implementation.cpp +1 -2
  151. data/src/cxx_supportlib/oxt/system_calls.cpp +1 -1
  152. data/src/cxx_supportlib/oxt/thread.hpp +1 -1
  153. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/compare.hpp +3 -3
  154. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/case_conv.hpp +5 -2
  155. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/classification.hpp +3 -1
  156. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_format_all.hpp +2 -0
  157. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_iterator.hpp +11 -3
  158. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/finder.hpp +15 -15
  159. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/formatter.hpp +1 -1
  160. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/trim.hpp +3 -3
  161. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/find_format.hpp +1 -2
  162. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/find_iterator.hpp +27 -1
  163. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/formatter.hpp +0 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/iter_find.hpp +8 -0
  165. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/predicate.hpp +4 -3
  166. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/split.hpp +12 -0
  167. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +47 -0
  168. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_posix.hpp +41 -0
  169. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_sunos.hpp +34 -0
  170. data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +28 -0
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_executor.hpp +338 -0
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_handler.hpp +824 -0
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +353 -0
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/append.hpp +67 -0
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +128 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +115 -32
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +223 -0
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +119 -33
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +282 -0
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +37 -0
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +828 -107
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/awaitable.hpp +144 -0
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +649 -327
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +205 -123
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_file.hpp +826 -0
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +4 -8
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +691 -0
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +655 -329
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +628 -0
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +376 -171
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +413 -114
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +325 -68
  193. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +427 -248
  194. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +1239 -517
  195. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +22 -121
  196. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +16 -81
  197. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +746 -0
  198. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +494 -252
  199. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +13 -15
  200. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +3 -3
  201. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +250 -131
  202. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +624 -0
  203. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +532 -0
  204. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +546 -0
  205. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +157 -186
  206. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +551 -0
  207. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +918 -336
  208. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +320 -0
  209. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +55 -39
  210. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +1 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +61 -47
  212. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +1 -1
  213. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +55 -39
  214. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +1 -1
  215. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +4 -4
  216. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_signal.hpp +247 -0
  217. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_state.hpp +237 -0
  218. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_type.hpp +159 -0
  219. data/src/cxx_supportlib/vendor-modified/boost/asio/co_spawn.hpp +525 -0
  220. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +1 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +321 -0
  222. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +270 -150
  223. data/src/cxx_supportlib/vendor-modified/boost/asio/connect_pipe.hpp +85 -0
  224. data/src/cxx_supportlib/vendor-modified/boost/asio/consign.hpp +77 -0
  225. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +4 -3
  226. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +1 -1
  227. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +154 -43
  228. data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +717 -0
  229. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +107 -0
  230. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +2 -10
  231. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +2 -4
  232. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +1 -1
  233. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +24 -10
  234. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_cancellation_state.hpp +166 -0
  235. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +4 -3
  236. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +265 -370
  237. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/blocking_executor_op.hpp +109 -0
  238. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +1 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +300 -7
  240. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  241. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +1 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +2 -23
  243. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +1 -1
  244. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +12 -7
  245. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/composed_work.hpp +254 -0
  246. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +1 -1
  247. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +9 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +1 -1
  249. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +667 -702
  250. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +40 -11
  251. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +1 -5
  252. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +3 -23
  253. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +1 -1
  254. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +69 -12
  255. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +1 -1
  256. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +65 -7
  257. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +76 -16
  258. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +75 -16
  259. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +36 -7
  260. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +36 -7
  261. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +3 -5
  262. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +2 -2
  263. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/exception.hpp +31 -0
  264. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_function.hpp +154 -0
  265. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +6 -6
  266. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +1 -1
  267. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +3 -43
  268. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/functional.hpp +5 -10
  269. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +9 -10
  270. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +3 -5
  271. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +66 -76
  272. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +1 -1
  273. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +27 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +24 -27
  275. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +452 -36
  276. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +1 -1
  277. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +1 -1
  278. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +601 -84
  279. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +21 -1
  280. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +27 -4
  281. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +21 -1
  282. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +47 -8
  283. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +20 -14
  284. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +47 -7
  285. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_descriptor_service.ipp +207 -0
  286. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_file_service.ipp +142 -0
  287. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.hpp +114 -0
  288. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.ipp +916 -0
  289. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_socket_service_base.ipp +251 -0
  290. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +21 -1
  291. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +49 -7
  292. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +1 -1
  293. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +11 -6
  294. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +8 -4
  295. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +1 -1
  296. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_serial_port_service.ipp +170 -0
  297. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +1 -1
  298. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +1 -1
  299. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +20 -12
  300. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +32 -22
  301. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +39 -35
  302. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/scheduler.ipp +110 -6
  303. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +25 -1
  304. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +74 -7
  305. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +2 -3
  306. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +1 -1
  307. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +185 -28
  308. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +817 -353
  309. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +18 -9
  310. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +209 -42
  311. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +25 -1
  312. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +8 -40
  313. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +34 -9
  314. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/thread_context.ipp +37 -0
  315. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +10 -6
  316. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +17 -11
  317. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +1 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_defer.hpp +209 -0
  319. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_dispatch.hpp +195 -0
  320. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_post.hpp +209 -0
  321. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +1 -1
  322. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_object_impl.hpp +179 -0
  323. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_at_op.hpp +197 -0
  324. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_op.hpp +192 -0
  325. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_service.hpp +689 -0
  326. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_at_op.hpp +191 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_op.hpp +187 -0
  328. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_file_service.hpp +263 -0
  329. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_null_buffers_op.hpp +116 -0
  330. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_operation.hpp +86 -0
  331. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_service.hpp +321 -0
  332. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_accept_op.hpp +282 -0
  333. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_connect_op.hpp +142 -0
  334. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recv_op.hpp +207 -0
  335. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvfrom_op.hpp +208 -0
  336. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvmsg_op.hpp +194 -0
  337. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_send_op.hpp +193 -0
  338. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_sendto_op.hpp +196 -0
  339. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service.hpp +631 -0
  340. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service_base.hpp +665 -0
  341. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_wait_op.hpp +114 -0
  342. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +85 -52
  343. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +1 -1
  344. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +1 -1
  345. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +37 -8
  346. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/limits.hpp +1 -6
  347. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +1 -1
  348. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +94 -27
  349. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +3 -5
  350. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/non_const_lvalue.hpp +45 -0
  351. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +1 -1
  352. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +7 -1
  353. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +1 -1
  354. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +1 -1
  355. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +1 -5
  356. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +19 -4
  357. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +1 -1
  358. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +63 -52
  359. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +1 -1
  360. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +1 -1
  361. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +1 -1
  362. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +1 -1
  363. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +1 -1
  364. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +1 -1
  365. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +2 -2
  366. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +30 -8
  367. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +15 -2
  368. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +1 -1
  369. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +1 -1
  370. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +1 -1
  371. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_serial_port_service.hpp +251 -0
  372. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +1 -1
  373. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +1 -1
  374. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +1 -1
  375. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +1 -1
  376. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +60 -7
  377. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +233 -55
  378. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +49 -8
  379. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +139 -33
  380. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +59 -10
  381. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +81 -19
  382. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +81 -16
  383. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +65 -13
  384. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +87 -20
  385. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +81 -17
  386. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +198 -91
  387. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +314 -75
  388. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +49 -8
  389. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +29 -5
  390. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +8 -2
  391. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +45 -1
  392. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +17 -16
  393. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +4 -4
  394. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +34 -16
  395. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +1 -1
  396. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +34 -18
  397. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +24 -22
  398. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +37 -19
  399. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler.hpp +36 -8
  400. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_operation.hpp +1 -1
  401. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_task.hpp +51 -0
  402. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_thread_info.hpp +1 -1
  403. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +1 -1
  404. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +1 -1
  405. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +1 -1
  406. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +59 -6
  407. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +2 -3
  408. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +1 -1
  409. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +11 -7
  410. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +1 -1
  411. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +5 -1
  412. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +90 -15
  413. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +1 -1
  414. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +71 -33
  415. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +1 -1
  416. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +2 -2
  417. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +12 -1
  418. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/source_location.hpp +47 -0
  419. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +3 -5
  420. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +13 -6
  421. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +1 -6
  422. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +1 -6
  423. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +1 -6
  424. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +1 -6
  425. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +1 -6
  426. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +36 -5
  427. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +8 -6
  428. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +1 -1
  429. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +7 -9
  430. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +10 -1
  431. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +11 -1
  432. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +154 -25
  433. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +18 -9
  434. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +7 -3
  435. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +31 -2
  436. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +1 -1
  437. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +6 -2
  438. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +1 -1
  439. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +3 -1
  440. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +3 -1
  441. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +1 -1
  442. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +132 -40
  443. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/utility.hpp +85 -0
  444. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +13 -8
  445. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +6 -2
  446. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +2 -2
  447. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +85 -14
  448. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +7 -81
  449. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +136 -47
  450. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +30 -1
  451. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +280 -0
  452. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +1935 -0
  453. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bad_executor.hpp +48 -0
  454. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1362 -0
  455. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1082 -0
  456. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +193 -0
  457. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +192 -0
  458. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +118 -0
  459. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/bad_executor.ipp +42 -0
  460. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/invocable_archetype.hpp +45 -0
  461. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1004 -0
  462. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +186 -0
  463. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +755 -0
  464. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/prefer_only.hpp +330 -0
  465. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +753 -0
  466. data/src/cxx_supportlib/vendor-modified/boost/asio/execution.hpp +33 -0
  467. data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +3 -26
  468. data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +66 -44
  469. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +239 -47
  470. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/append.hpp +38 -0
  471. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_single.hpp +134 -0
  472. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_tuple.hpp +38 -0
  473. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/awaitable_operators.hpp +538 -0
  474. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +515 -0
  475. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +515 -0
  476. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/cancellation_condition.hpp +154 -0
  477. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel.hpp +72 -0
  478. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_error.hpp +88 -0
  479. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_traits.hpp +303 -0
  480. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +147 -0
  481. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_spawn.hpp +138 -177
  482. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/concurrent_channel.hpp +72 -0
  483. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +295 -0
  484. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro_traits.hpp +230 -0
  485. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/deferred.hpp +38 -0
  486. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_handler.hpp +79 -0
  487. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_message.hpp +131 -0
  488. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_operation.hpp +363 -0
  489. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_payload.hpp +224 -0
  490. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +129 -0
  491. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +194 -0
  492. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +150 -0
  493. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +679 -0
  494. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_completion_handler.hpp +171 -0
  495. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +143 -0
  496. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/has_signature.hpp +56 -0
  497. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +623 -0
  498. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +201 -0
  499. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +178 -0
  500. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/channel_error.ipp +63 -0
  501. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_composed.hpp +1176 -0
  502. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1224 -0
  503. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +790 -0
  504. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +257 -0
  505. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_coro.hpp +216 -0
  506. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_promise.hpp +68 -0
  507. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +459 -0
  508. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/prepend.hpp +38 -0
  509. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +226 -0
  510. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +191 -0
  511. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +113 -0
  512. data/src/cxx_supportlib/vendor-modified/boost/asio/file_base.hpp +168 -0
  513. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +2 -6
  514. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +4 -4
  515. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +1 -1
  516. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +1 -1
  517. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +4 -4
  518. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +4 -4
  519. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +4 -4
  520. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +1 -1
  521. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +1 -6
  522. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_completion_executor.ipp +128 -0
  523. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_io_executor.ipp +136 -0
  524. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +164 -0
  525. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +247 -0
  526. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +1198 -0
  527. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +160 -185
  528. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +154 -181
  529. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancellation_signal.ipp +98 -0
  530. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +451 -0
  531. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +328 -379
  532. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.hpp +75 -0
  533. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.ipp +151 -0
  534. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +139 -0
  535. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/deferred.hpp +149 -0
  536. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +79 -0
  537. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +4 -4
  538. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +7 -37
  539. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +1 -1
  540. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +72 -141
  541. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +8 -3
  542. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +220 -132
  543. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +5 -3
  544. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/multiple_exceptions.ipp +47 -0
  545. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +165 -0
  546. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +663 -325
  547. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +248 -260
  548. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +2114 -675
  549. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +252 -0
  550. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +1 -1
  551. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +1 -1
  552. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1183 -318
  553. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +15 -3
  554. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +2 -2
  555. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +26 -7
  556. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +115 -21
  557. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +198 -48
  558. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +74 -8
  559. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_awaitable.hpp +303 -0
  560. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +186 -416
  561. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +586 -321
  562. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +221 -242
  563. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +699 -70
  564. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +82 -70
  565. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +1 -1
  566. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +1 -1
  567. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +52 -31
  568. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +124 -32
  569. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +13 -19
  570. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +16 -22
  571. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +114 -43
  572. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +13 -18
  573. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +15 -20
  574. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +13 -3
  575. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +46 -27
  576. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +331 -239
  577. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +1 -1
  578. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +4 -8
  579. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +17 -1
  580. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +9 -13
  581. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +21 -19
  582. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +10 -14
  583. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
  584. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +1 -1
  585. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +7 -7
  586. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +1 -1
  587. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +23 -22
  588. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +1 -1
  589. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +11 -15
  590. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +1 -1
  591. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +27 -35
  592. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +1 -1
  593. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +1 -1
  594. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +1 -1
  595. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +6 -4
  596. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +1 -1
  597. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +6 -4
  598. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +8 -8
  599. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +17 -21
  600. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +14 -18
  601. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +1 -1
  602. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +1 -1
  603. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +9 -9
  604. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +7 -7
  605. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +3 -3
  606. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +4 -4
  607. data/src/cxx_supportlib/vendor-modified/boost/asio/is_applicable_property.hpp +63 -0
  608. data/src/cxx_supportlib/vendor-modified/boost/asio/is_contiguous_iterator.hpp +47 -0
  609. data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +1 -1
  610. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +1 -1
  611. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +1 -1
  612. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +10 -6
  613. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +14 -19
  614. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +4 -4
  615. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +7 -1
  616. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +10 -8
  617. data/src/cxx_supportlib/vendor-modified/boost/asio/local/seq_packet_protocol.hpp +86 -0
  618. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +4 -4
  619. data/src/cxx_supportlib/vendor-modified/boost/asio/multiple_exceptions.hpp +54 -0
  620. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +1 -61
  621. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +29 -105
  622. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +273 -82
  623. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +283 -86
  624. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +5 -612
  625. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +2 -2
  626. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +3 -326
  627. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +149 -43
  628. data/src/cxx_supportlib/vendor-modified/boost/asio/prefer.hpp +581 -0
  629. data/src/cxx_supportlib/vendor-modified/boost/asio/prepend.hpp +68 -0
  630. data/src/cxx_supportlib/vendor-modified/boost/asio/query.hpp +315 -0
  631. data/src/cxx_supportlib/vendor-modified/boost/asio/random_access_file.hpp +37 -0
  632. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +672 -171
  633. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +173 -66
  634. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +1767 -469
  635. data/src/cxx_supportlib/vendor-modified/boost/asio/readable_pipe.hpp +37 -0
  636. data/src/cxx_supportlib/vendor-modified/boost/asio/recycling_allocator.hpp +140 -0
  637. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +66 -0
  638. data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +346 -0
  639. data/src/cxx_supportlib/vendor-modified/boost/asio/require.hpp +437 -0
  640. data/src/cxx_supportlib/vendor-modified/boost/asio/require_concept.hpp +347 -0
  641. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +3 -736
  642. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +1 -1
  643. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +3 -422
  644. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_base.hpp +173 -0
  645. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +26 -26
  646. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +641 -105
  647. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +7 -3
  648. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +24 -24
  649. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +7 -2
  650. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +10 -1
  651. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +7 -2
  652. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +65 -10
  653. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +7 -3
  654. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +75 -71
  655. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +1 -1
  656. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +5 -1
  657. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +1 -1
  658. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +7 -2
  659. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +17 -2
  660. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +89 -6
  661. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +2 -2
  662. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +12 -3
  663. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +21 -7
  664. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/host_name_verification.hpp +92 -0
  665. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +1 -1
  666. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +188 -73
  667. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +29 -5
  668. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/host_name_verification.ipp +75 -0
  669. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +5 -1
  670. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +2 -1
  671. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +7 -3
  672. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +421 -141
  673. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +1 -1
  674. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +1 -1
  675. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +1 -1
  676. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +2 -1
  677. data/src/cxx_supportlib/vendor-modified/boost/asio/static_thread_pool.hpp +33 -0
  678. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +1 -6
  679. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +311 -40
  680. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_file.hpp +37 -0
  681. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +1 -1
  682. data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +18 -6
  683. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +570 -28
  684. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +1 -6
  685. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +269 -0
  686. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +773 -42
  687. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +1 -1
  688. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/equality_comparable.hpp +102 -0
  689. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_member.hpp +106 -0
  690. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_free.hpp +106 -0
  691. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_member.hpp +106 -0
  692. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_free.hpp +106 -0
  693. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_member.hpp +106 -0
  694. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_static_constexpr_member.hpp +103 -0
  695. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_free.hpp +106 -0
  696. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_member.hpp +106 -0
  697. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_free.hpp +106 -0
  698. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_member.hpp +106 -0
  699. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_query.hpp +104 -0
  700. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require.hpp +117 -0
  701. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require_concept.hpp +118 -0
  702. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +1 -1
  703. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +2 -2
  704. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +1 -1
  705. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +1 -1
  706. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +1 -1
  707. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +82 -43
  708. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +1 -1
  709. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +1 -1
  710. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +1 -1
  711. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +163 -0
  712. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +17 -18
  713. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +2 -6
  714. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +2 -2
  715. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +1 -1
  716. data/src/cxx_supportlib/vendor-modified/boost/asio/writable_pipe.hpp +37 -0
  717. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +656 -170
  718. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +174 -64
  719. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +1 -1
  720. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +66 -28
  721. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +194 -0
  722. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +170 -11
  723. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_flag.hpp +12 -3
  724. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +97 -0
  725. data/src/cxx_supportlib/vendor-modified/boost/atomic/capabilities.hpp +2 -191
  726. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +8 -1
  727. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/aligned_variable.hpp +57 -0
  728. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag_impl.hpp +129 -0
  729. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_impl.hpp +1265 -0
  730. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +1228 -0
  731. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +102 -12
  732. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +43 -11
  733. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/capabilities.hpp +217 -0
  734. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_aarch32.hpp +53 -0
  735. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_aarch64.hpp +65 -0
  736. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_alpha.hpp +34 -0
  737. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_arm.hpp +103 -0
  738. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_ppc.hpp +55 -0
  739. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_sparc.hpp +34 -0
  740. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_x86.hpp +74 -0
  741. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_msvc_arm.hpp +34 -0
  742. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_msvc_x86.hpp +61 -0
  743. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_atomic.hpp +100 -75
  744. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_sync.hpp +0 -7
  745. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/cas_based_exchange.hpp +50 -0
  746. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/classify.hpp +90 -0
  747. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +57 -64
  748. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_operations.hpp +50 -0
  749. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_operations_fwd.hpp +38 -0
  750. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch32.hpp +1121 -0
  751. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch64.hpp +1909 -0
  752. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_alpha.hpp +867 -0
  753. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_arm.hpp +1417 -0
  754. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_ppc.hpp +1218 -0
  755. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_sparc.hpp +215 -0
  756. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +1110 -0
  757. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_arm.hpp +828 -0
  758. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +903 -0
  759. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations.hpp +49 -0
  760. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +194 -0
  761. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated_fwd.hpp +38 -0
  762. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_fwd.hpp +38 -0
  763. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_cas_based.hpp +94 -0
  764. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_atomic.hpp +306 -0
  765. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_sync.hpp +263 -0
  766. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_linux_arm.hpp +169 -0
  767. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extending_cas_based_arithmetic.hpp +72 -0
  768. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_operations_fwd.hpp +4 -1
  769. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +22 -12
  770. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +13 -10
  771. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_operations_fwd.hpp +4 -1
  772. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +59 -40
  773. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch32.hpp +1060 -0
  774. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch64.hpp +1330 -0
  775. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_arm.hpp +363 -355
  776. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +167 -163
  777. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_x86.hpp +232 -102
  778. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_generic.hpp +9 -17
  779. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_arm.hpp +6 -4
  780. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_x86.hpp +119 -92
  781. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_operations.hpp +41 -0
  782. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch32.hpp +60 -0
  783. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch64.hpp +58 -0
  784. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_alpha.hpp +53 -0
  785. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp +90 -0
  786. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_ppc.hpp +68 -0
  787. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_sparc.hpp +70 -0
  788. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_x86.hpp +69 -0
  789. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_arm.hpp +66 -0
  790. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_x86.hpp +66 -0
  791. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations.hpp +41 -0
  792. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations_emulated.hpp +50 -0
  793. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_atomic.hpp +75 -0
  794. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_sync.hpp +53 -0
  795. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_linux_arm.hpp +64 -0
  796. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/float_sizes.hpp +122 -35
  797. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/footer.hpp +24 -0
  798. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_operations_fwd.hpp +4 -1
  799. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +13 -8
  800. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_generic.hpp +6 -3
  801. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +154 -0
  802. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_arm_asm_common.hpp +79 -0
  803. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_atomic_memory_order_utils.hpp +66 -0
  804. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_ppc_asm_common.hpp +33 -0
  805. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/header.hpp +72 -0
  806. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +25 -1
  807. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_conversions.hpp +108 -0
  808. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +35 -11
  809. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/intptr.hpp +46 -0
  810. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lock_pool.hpp +151 -0
  811. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/memory_order_utils.hpp +47 -0
  812. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/once_flag.hpp +43 -0
  813. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_aarch32_common.hpp +53 -0
  814. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_aarch64_common.hpp +53 -0
  815. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm_common.hpp +8 -79
  816. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc_common.hpp +4 -1
  817. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_common.hpp +7 -2
  818. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +30 -5
  819. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +80 -34
  820. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_traits.hpp +187 -0
  821. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/alignment_of.hpp +51 -0
  822. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/has_unique_object_representations.hpp +143 -0
  823. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_enum.hpp +42 -0
  824. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_floating_point.hpp +3 -2
  825. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp +46 -0
  826. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_copyable.hpp +45 -0
  827. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +42 -0
  828. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_capabilities.hpp +363 -0
  829. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_darwin_ulock.hpp +58 -0
  830. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_dragonfly_umtx.hpp +30 -0
  831. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_freebsd_umtx.hpp +40 -0
  832. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_futex.hpp +31 -0
  833. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +64 -0
  834. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_operations.hpp +28 -0
  835. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_operations_fwd.hpp +43 -0
  836. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_darwin_ulock.hpp +158 -0
  837. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_dragonfly_umtx.hpp +75 -0
  838. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +96 -0
  839. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_freebsd_umtx.hpp +119 -0
  840. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_futex.hpp +111 -0
  841. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_generic.hpp +143 -0
  842. data/src/cxx_supportlib/vendor-modified/boost/atomic/fences.hpp +7 -18
  843. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +90 -0
  844. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_flag.hpp +40 -0
  845. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +97 -0
  846. data/src/cxx_supportlib/vendor-modified/boost/atomic.hpp +9 -0
  847. data/src/cxx_supportlib/vendor-modified/boost/bind/apply.hpp +4 -49
  848. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +237 -1767
  849. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_cc.hpp +117 -0
  850. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf2_cc.hpp +210 -0
  851. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf_cc.hpp +405 -0
  852. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/integer_sequence.hpp +111 -0
  853. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/result_traits.hpp +165 -0
  854. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/tuple_for_each.hpp +64 -0
  855. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +143 -279
  856. data/src/cxx_supportlib/vendor-modified/boost/bind/placeholders.hpp +13 -14
  857. data/src/cxx_supportlib/vendor-modified/boost/bind/protect.hpp +24 -259
  858. data/src/cxx_supportlib/vendor-modified/boost/bind/std_placeholders.hpp +33 -0
  859. data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +4 -320
  860. data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +2 -0
  861. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +4 -4
  862. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/chrono.hpp +26 -6
  863. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/is_evenly_divisible_by.hpp +1 -7
  864. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/requires_cxx11.hpp +23 -0
  865. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/scan_keyword.hpp +4 -2
  866. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +10 -6
  867. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_get.hpp +1 -1
  868. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +4 -4
  869. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_put.hpp +5 -5
  870. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_style.hpp +1 -1
  871. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +3 -2
  872. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +3 -3
  873. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/timezone.hpp +2 -1
  874. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/ios_base_state_ptr.hpp +7 -7
  875. data/src/cxx_supportlib/vendor-modified/boost/chrono/io_v1/chrono_io.hpp +3 -3
  876. data/src/cxx_supportlib/vendor-modified/boost/chrono/system_clocks.hpp +3 -2
  877. data/src/cxx_supportlib/vendor-modified/boost/chrono/time_point.hpp +1 -1
  878. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +113 -111
  879. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +26 -22
  880. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/space_optimized.hpp +27 -33
  881. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer.hpp +9 -6
  882. data/src/cxx_supportlib/vendor-modified/boost/concept/assert.hpp +1 -1
  883. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/general.hpp +21 -0
  884. data/src/cxx_supportlib/vendor-modified/boost/concept/usage.hpp +7 -0
  885. data/src/cxx_supportlib/vendor-modified/boost/concept_check.hpp +1 -1
  886. data/src/cxx_supportlib/vendor-modified/boost/config/abi_prefix.hpp +1 -1
  887. data/src/cxx_supportlib/vendor-modified/boost/config/abi_suffix.hpp +1 -3
  888. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +211 -0
  889. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +212 -0
  890. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +47 -0
  891. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +65 -0
  892. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +59 -0
  893. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +41 -0
  894. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx98.hpp +23 -0
  895. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +73 -22
  896. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +8 -1
  897. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +33 -3
  898. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +89 -0
  899. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +160 -10
  900. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +37 -12
  901. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +6 -0
  902. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +6 -0
  903. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +35 -8
  904. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +6 -2
  905. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +6 -0
  906. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +8 -0
  907. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +6 -0
  908. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +6 -0
  909. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +6 -0
  910. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +6 -0
  911. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +12 -0
  912. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +6 -0
  913. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +47 -8
  914. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +18 -0
  915. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +4 -0
  916. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +218 -0
  917. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_compiler_config.hpp +1 -1
  918. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_platform_config.hpp +5 -0
  919. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_stdlib_config.hpp +13 -2
  920. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +291 -6
  921. data/src/cxx_supportlib/vendor-modified/boost/config/header_deprecated.hpp +1 -1
  922. data/src/cxx_supportlib/vendor-modified/boost/config/platform/bsd.hpp +5 -8
  923. data/src/cxx_supportlib/vendor-modified/boost/config/platform/vxworks.hpp +63 -74
  924. data/src/cxx_supportlib/vendor-modified/boost/config/platform/wasm.hpp +23 -0
  925. data/src/cxx_supportlib/vendor-modified/boost/config/requires_threads.hpp +1 -1
  926. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +74 -8
  927. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcomo.hpp +1 -0
  928. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +38 -1
  929. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +140 -7
  930. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/modena.hpp +1 -0
  931. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/msl.hpp +1 -0
  932. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/roguewave.hpp +2 -1
  933. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/sgi.hpp +1 -0
  934. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/stlport.hpp +6 -5
  935. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/vacpp.hpp +1 -0
  936. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/xlcpp_zos.hpp +1 -0
  937. data/src/cxx_supportlib/vendor-modified/boost/config/user.hpp +2 -2
  938. data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +26 -0
  939. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +34 -21
  940. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +39 -32
  941. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +55 -32
  942. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +121 -29
  943. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +409 -305
  944. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +2 -2
  945. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +14 -13
  946. data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -10
  947. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +186 -139
  948. data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +28 -0
  949. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +4 -4
  950. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +14 -15
  951. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -1
  952. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -1
  953. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +27 -23
  954. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +11 -3
  955. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +3 -0
  956. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +17 -15
  957. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_or_allocator_rebind.hpp +4 -0
  958. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +21 -116
  959. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +959 -141
  960. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +181 -57
  961. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +67 -67
  962. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +305 -224
  963. data/src/cxx_supportlib/vendor-modified/boost/container/detail/guards_dended.hpp +198 -0
  964. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +17 -0
  965. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +35 -0
  966. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +91 -0
  967. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +8 -0
  968. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +220 -186
  969. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +1 -2
  970. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +2 -2
  971. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +14 -10
  972. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +48 -23
  973. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +28 -9
  974. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +253 -120
  975. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +2 -2
  976. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +12 -12
  977. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +94 -102
  978. data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +1 -7
  979. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +1 -1
  980. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +3 -7
  981. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +3 -0
  982. data/src/cxx_supportlib/vendor-modified/boost/container/detail/thread_mutex.hpp +6 -6
  983. data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +28 -28
  984. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +365 -424
  985. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +3 -0
  986. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_functors.hpp +9 -13
  987. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +3 -3
  988. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +3 -12
  989. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +111 -7
  990. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +2961 -0
  991. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +433 -342
  992. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +142 -139
  993. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +135 -157
  994. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +270 -271
  995. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +32 -12
  996. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -16
  997. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +32 -20
  998. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +431 -5
  999. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/devector.hpp +51 -0
  1000. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_set.hpp +3 -3
  1001. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/global_resource.hpp +1 -4
  1002. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +36 -2
  1003. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +5 -4
  1004. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +9 -9
  1005. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +91 -7
  1006. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/synchronized_pool_resource.hpp +4 -4
  1007. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/unsynchronized_pool_resource.hpp +4 -4
  1008. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +78 -80
  1009. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +173 -188
  1010. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +124 -150
  1011. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +301 -278
  1012. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +294 -217
  1013. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +239 -156
  1014. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +473 -392
  1015. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +155 -41
  1016. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +751 -964
  1017. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_integral.hpp +146 -0
  1018. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_mix.hpp +113 -0
  1019. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_range.hpp +408 -0
  1020. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple_like.hpp +62 -0
  1021. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/mulx.hpp +79 -0
  1022. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +395 -580
  1023. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +25 -24
  1024. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_contiguous_range.hpp +98 -0
  1025. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_described_class.hpp +37 -0
  1026. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_range.hpp +41 -0
  1027. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_tuple_like.hpp +36 -0
  1028. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_unordered_range.hpp +38 -0
  1029. data/src/cxx_supportlib/vendor-modified/boost/core/addressof.hpp +2 -2
  1030. data/src/cxx_supportlib/vendor-modified/boost/core/alignof.hpp +57 -0
  1031. data/src/cxx_supportlib/vendor-modified/boost/core/alloc_construct.hpp +95 -0
  1032. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_access.hpp +834 -0
  1033. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_traits.hpp +112 -0
  1034. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +954 -0
  1035. data/src/cxx_supportlib/vendor-modified/boost/core/checked_delete.hpp +35 -7
  1036. data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +298 -0
  1037. data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +46 -0
  1038. data/src/cxx_supportlib/vendor-modified/boost/core/default_allocator.hpp +158 -0
  1039. data/src/cxx_supportlib/vendor-modified/boost/core/detail/is_same.hpp +39 -0
  1040. data/src/cxx_supportlib/vendor-modified/boost/core/detail/lwt_unattended.hpp +66 -0
  1041. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_pause.hpp +71 -0
  1042. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_sleep.hpp +122 -0
  1043. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_yield.hpp +100 -0
  1044. data/src/cxx_supportlib/vendor-modified/boost/core/detail/splitmix64.hpp +54 -0
  1045. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +1272 -0
  1046. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +37 -18
  1047. data/src/cxx_supportlib/vendor-modified/boost/core/fclose_deleter.hpp +53 -0
  1048. data/src/cxx_supportlib/vendor-modified/boost/core/first_scalar.hpp +45 -0
  1049. data/src/cxx_supportlib/vendor-modified/boost/core/functor.hpp +41 -0
  1050. data/src/cxx_supportlib/vendor-modified/boost/core/identity.hpp +61 -0
  1051. data/src/cxx_supportlib/vendor-modified/boost/core/ignore_unused.hpp +32 -2
  1052. data/src/cxx_supportlib/vendor-modified/boost/core/invoke_swap.hpp +93 -0
  1053. data/src/cxx_supportlib/vendor-modified/boost/core/is_same.hpp +10 -15
  1054. data/src/cxx_supportlib/vendor-modified/boost/core/launder.hpp +69 -0
  1055. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +214 -62
  1056. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +41 -6
  1057. data/src/cxx_supportlib/vendor-modified/boost/core/make_span.hpp +59 -0
  1058. data/src/cxx_supportlib/vendor-modified/boost/core/max_align.hpp +82 -0
  1059. data/src/cxx_supportlib/vendor-modified/boost/core/memory_resource.hpp +108 -0
  1060. data/src/cxx_supportlib/vendor-modified/boost/core/no_exceptions_support.hpp +14 -2
  1061. data/src/cxx_supportlib/vendor-modified/boost/core/noinit_adaptor.hpp +90 -0
  1062. data/src/cxx_supportlib/vendor-modified/boost/core/noncopyable.hpp +1 -1
  1063. data/src/cxx_supportlib/vendor-modified/boost/core/null_deleter.hpp +7 -0
  1064. data/src/cxx_supportlib/vendor-modified/boost/core/nvp.hpp +57 -0
  1065. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_traits.hpp +112 -60
  1066. data/src/cxx_supportlib/vendor-modified/boost/core/quick_exit.hpp +2 -2
  1067. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +59 -16
  1068. data/src/cxx_supportlib/vendor-modified/boost/core/serialization.hpp +131 -0
  1069. data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +31 -0
  1070. data/src/cxx_supportlib/vendor-modified/boost/core/snprintf.hpp +173 -0
  1071. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +399 -0
  1072. data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +10 -37
  1073. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +1181 -0
  1074. data/src/cxx_supportlib/vendor-modified/boost/core/typeinfo.hpp +2 -2
  1075. data/src/cxx_supportlib/vendor-modified/boost/core/uncaught_exceptions.hpp +155 -0
  1076. data/src/cxx_supportlib/vendor-modified/boost/core/use_default.hpp +17 -0
  1077. data/src/cxx_supportlib/vendor-modified/boost/core/verbose_terminate_handler.hpp +88 -0
  1078. data/src/cxx_supportlib/vendor-modified/boost/core/yield_primitives.hpp +12 -0
  1079. data/src/cxx_supportlib/vendor-modified/boost/cregex.hpp +4 -0
  1080. data/src/cxx_supportlib/vendor-modified/boost/cstdint.hpp +5 -5
  1081. data/src/cxx_supportlib/vendor-modified/boost/current_function.hpp +3 -3
  1082. data/src/cxx_supportlib/vendor-modified/boost/date_time/c_time.hpp +9 -4
  1083. data/src/cxx_supportlib/vendor-modified/boost/date_time/compiler_config.hpp +4 -41
  1084. data/src/cxx_supportlib/vendor-modified/boost/date_time/constrained_value.hpp +19 -11
  1085. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +24 -24
  1086. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration.hpp +17 -22
  1087. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration_types.hpp +44 -49
  1088. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_facet.hpp +5 -6
  1089. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_generators.hpp +24 -19
  1090. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_iterator.hpp +8 -8
  1091. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_parsing.hpp +51 -25
  1092. data/src/cxx_supportlib/vendor-modified/boost/date_time/dst_rules.hpp +56 -56
  1093. data/src/cxx_supportlib/vendor-modified/boost/date_time/dst_transition_generators.hpp +2 -2
  1094. data/src/cxx_supportlib/vendor-modified/boost/date_time/find_match.hpp +42 -0
  1095. data/src/cxx_supportlib/vendor-modified/boost/date_time/format_date_parser.hpp +98 -98
  1096. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters.hpp +3 -3
  1097. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters_limited.hpp +3 -3
  1098. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +34 -27
  1099. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day.hpp +4 -4
  1100. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration.hpp +44 -32
  1101. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration_types.hpp +2 -2
  1102. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_month.hpp +51 -23
  1103. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_serialize.hpp +29 -27
  1104. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_weekday.hpp +43 -9
  1105. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_year.hpp +3 -3
  1106. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/parsers.hpp +34 -15
  1107. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.hpp +15 -17
  1108. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.ipp +30 -25
  1109. data/src/cxx_supportlib/vendor-modified/boost/date_time/int_adapter.hpp +57 -37
  1110. data/src/cxx_supportlib/vendor-modified/boost/date_time/iso_format.hpp +13 -13
  1111. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +2 -2
  1112. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_time_io.hpp +3 -0
  1113. data/src/cxx_supportlib/vendor-modified/boost/date_time/locale_config.hpp +3 -3
  1114. data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +44 -47
  1115. data/src/cxx_supportlib/vendor-modified/boost/date_time/period_formatter.hpp +34 -31
  1116. data/src/cxx_supportlib/vendor-modified/boost/date_time/period_parser.hpp +27 -28
  1117. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/conversion.hpp +1 -1
  1118. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/date_duration_operators.hpp +8 -8
  1119. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_config.hpp +13 -26
  1120. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +4 -4
  1121. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_io.hpp +1 -1
  1122. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/ptime.hpp +22 -4
  1123. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters.hpp +4 -4
  1124. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters_limited.hpp +2 -2
  1125. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_parsers.hpp +4 -0
  1126. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_serialize.hpp +28 -12
  1127. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_formatter.hpp +1 -0
  1128. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +1 -6
  1129. data/src/cxx_supportlib/vendor-modified/boost/date_time/string_parse_tree.hpp +5 -3
  1130. data/src/cxx_supportlib/vendor-modified/boost/date_time/strings_from_facet.hpp +4 -2
  1131. data/src/cxx_supportlib/vendor-modified/boost/date_time/time.hpp +24 -3
  1132. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +56 -44
  1133. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +9 -12
  1134. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_iterator.hpp +8 -8
  1135. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +5 -10
  1136. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_resolution_traits.hpp +18 -18
  1137. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_system_counted.hpp +65 -50
  1138. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_system_split.hpp +43 -30
  1139. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_base.hpp +1 -1
  1140. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_names.hpp +1 -1
  1141. data/src/cxx_supportlib/vendor-modified/boost/date_time/tz_db_base.hpp +0 -1
  1142. data/src/cxx_supportlib/vendor-modified/boost/date_time/wrapping_int.hpp +16 -15
  1143. data/src/cxx_supportlib/vendor-modified/boost/date_time/year_month_day.hpp +7 -5
  1144. data/src/cxx_supportlib/vendor-modified/boost/describe/bases.hpp +50 -0
  1145. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +40 -0
  1146. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/cx_streq.hpp +30 -0
  1147. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/void_t.hpp +32 -0
  1148. data/src/cxx_supportlib/vendor-modified/boost/describe/members.hpp +161 -0
  1149. data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +33 -0
  1150. data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +6 -10
  1151. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +6 -97
  1152. data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +3 -3
  1153. data/src/cxx_supportlib/vendor-modified/boost/exception/current_exception_cast.hpp +10 -4
  1154. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/clone_current_exception.hpp +10 -4
  1155. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +12 -7
  1156. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +135 -34
  1157. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/is_output_streamable.hpp +9 -4
  1158. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/object_hex_dump.hpp +9 -4
  1159. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +24 -0
  1160. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/shared_ptr.hpp +2 -2
  1161. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +11 -5
  1162. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +18 -9
  1163. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +103 -59
  1164. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +9 -4
  1165. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +12 -10
  1166. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string.hpp +10 -5
  1167. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string_stub.hpp +9 -4
  1168. data/src/cxx_supportlib/vendor-modified/boost/exception_ptr.hpp +2 -2
  1169. data/src/cxx_supportlib/vendor-modified/boost/foreach.hpp +16 -9
  1170. data/src/cxx_supportlib/vendor-modified/boost/function/function0.hpp +1 -3
  1171. data/src/cxx_supportlib/vendor-modified/boost/function/function1.hpp +1 -3
  1172. data/src/cxx_supportlib/vendor-modified/boost/function/function10.hpp +1 -3
  1173. data/src/cxx_supportlib/vendor-modified/boost/function/function2.hpp +1 -3
  1174. data/src/cxx_supportlib/vendor-modified/boost/function/function3.hpp +1 -3
  1175. data/src/cxx_supportlib/vendor-modified/boost/function/function4.hpp +1 -3
  1176. data/src/cxx_supportlib/vendor-modified/boost/function/function5.hpp +1 -3
  1177. data/src/cxx_supportlib/vendor-modified/boost/function/function6.hpp +1 -3
  1178. data/src/cxx_supportlib/vendor-modified/boost/function/function7.hpp +1 -3
  1179. data/src/cxx_supportlib/vendor-modified/boost/function/function8.hpp +1 -3
  1180. data/src/cxx_supportlib/vendor-modified/boost/function/function9.hpp +1 -3
  1181. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +62 -210
  1182. data/src/cxx_supportlib/vendor-modified/boost/function/function_fwd.hpp +36 -41
  1183. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +313 -422
  1184. data/src/cxx_supportlib/vendor-modified/boost/function/function_typeof.hpp +1 -31
  1185. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +5 -61
  1186. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor.hpp +2 -2
  1187. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_ct.hpp +3 -3
  1188. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +31 -29
  1189. data/src/cxx_supportlib/vendor-modified/boost/integer/extended_euclidean.hpp +83 -0
  1190. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_log2.hpp +86 -81
  1191. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_mask.hpp +2 -2
  1192. data/src/cxx_supportlib/vendor-modified/boost/integer/mod_inverse.hpp +53 -0
  1193. data/src/cxx_supportlib/vendor-modified/boost/integer/static_log2.hpp +4 -5
  1194. data/src/cxx_supportlib/vendor-modified/boost/integer/static_min_max.hpp +3 -2
  1195. data/src/cxx_supportlib/vendor-modified/boost/integer.hpp +4 -4
  1196. data/src/cxx_supportlib/vendor-modified/boost/integer_fwd.hpp +2 -2
  1197. data/src/cxx_supportlib/vendor-modified/boost/integer_traits.hpp +3 -3
  1198. data/src/cxx_supportlib/vendor-modified/boost/intrusive/any_hook.hpp +4 -4
  1199. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +99 -100
  1200. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +51 -52
  1201. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +64 -64
  1202. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +101 -102
  1203. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +155 -164
  1204. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +147 -141
  1205. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +35 -27
  1206. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +88 -19
  1207. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +4 -4
  1208. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +30 -30
  1209. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/array_initializer.hpp +10 -8
  1210. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +14 -14
  1211. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +38 -40
  1212. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +84 -15
  1213. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +1 -0
  1214. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +3 -3
  1215. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +27 -27
  1216. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/empty_node_checker.hpp +1 -1
  1217. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +1 -1
  1218. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +1 -32
  1219. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +14 -15
  1220. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +277 -0
  1221. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_combine.hpp +54 -0
  1222. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_integral.hpp +119 -0
  1223. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_mix.hpp +130 -0
  1224. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +204 -115
  1225. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +22 -20
  1226. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +6 -6
  1227. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +126 -80
  1228. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +7 -7
  1229. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +30 -18
  1230. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +4 -4
  1231. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/math.hpp +11 -64
  1232. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +8 -1
  1233. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +4 -4
  1234. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_to_value.hpp +1 -1
  1235. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +6 -17
  1236. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +18 -18
  1237. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/reverse_iterator.hpp +3 -140
  1238. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +3 -1
  1239. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +14 -14
  1240. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +36 -17
  1241. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +2 -2
  1242. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +22 -22
  1243. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +38 -26
  1244. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +6 -6
  1245. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +28 -28
  1246. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/twin.hpp +49 -0
  1247. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/value_functors.hpp +52 -0
  1248. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +66 -4
  1249. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +1764 -1040
  1250. data/src/cxx_supportlib/vendor-modified/boost/intrusive/intrusive_fwd.hpp +5 -0
  1251. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +98 -18
  1252. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +113 -111
  1253. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list_hook.hpp +10 -10
  1254. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +4 -4
  1255. data/src/cxx_supportlib/vendor-modified/boost/intrusive/options.hpp +26 -4
  1256. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +21 -11
  1257. data/src/cxx_supportlib/vendor-modified/boost/intrusive/parent_from_member.hpp +2 -2
  1258. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +4 -4
  1259. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +31 -23
  1260. data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +13 -6
  1261. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +51 -52
  1262. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +51 -51
  1263. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +101 -102
  1264. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set_hook.hpp +12 -12
  1265. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +109 -110
  1266. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +68 -77
  1267. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +41 -41
  1268. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +174 -182
  1269. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist_hook.hpp +8 -6
  1270. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +107 -108
  1271. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +54 -55
  1272. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +59 -57
  1273. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +141 -115
  1274. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +58 -53
  1275. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +158 -152
  1276. data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +6 -4
  1277. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +126 -116
  1278. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +17 -17
  1279. data/src/cxx_supportlib/vendor-modified/boost/io/ios_state.hpp +361 -315
  1280. data/src/cxx_supportlib/vendor-modified/boost/io_fwd.hpp +45 -49
  1281. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +11 -0
  1282. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +10 -10
  1283. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +1 -1
  1284. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +5 -5
  1285. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +13 -13
  1286. data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +148 -0
  1287. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +3 -3
  1288. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +2 -2
  1289. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +107 -26
  1290. data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +8 -4
  1291. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +24 -25
  1292. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +59 -0
  1293. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +140 -158
  1294. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +613 -646
  1295. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +85 -73
  1296. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +35 -45
  1297. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +22 -29
  1298. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +73 -0
  1299. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +2 -2
  1300. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +30 -25
  1301. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +7 -9
  1302. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +22 -161
  1303. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +10 -13
  1304. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/chrono.cpp +4 -2
  1305. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/process_cpu_clocks.cpp +3 -1
  1306. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/thread_clock.cpp +3 -1
  1307. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +1 -1
  1308. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +20 -25
  1309. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +13 -122
  1310. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/static_mutex.cpp +8 -2
  1311. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +24 -22
  1312. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once.cpp +0 -1
  1313. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +4 -3
  1314. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +36 -21
  1315. data/src/cxx_supportlib/vendor-modified/boost/limits.hpp +12 -12
  1316. data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +6 -12
  1317. data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +5 -5
  1318. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +82 -60
  1319. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +108 -84
  1320. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +321 -488
  1321. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +11 -10
  1322. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/heap_sort.hpp +22 -11
  1323. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +9 -0
  1324. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +463 -120
  1325. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +87 -10
  1326. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +16 -5
  1327. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/search.hpp +79 -0
  1328. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/set_difference.hpp +9 -3
  1329. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +8 -5
  1330. data/src/cxx_supportlib/vendor-modified/boost/move/algo/predicate.hpp +24 -9
  1331. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +0 -1
  1332. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +24 -3
  1333. data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +32 -6
  1334. data/src/cxx_supportlib/vendor-modified/boost/move/detail/addressof.hpp +61 -0
  1335. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +1 -0
  1336. data/src/cxx_supportlib/vendor-modified/boost/move/detail/force_ptr.hpp +36 -0
  1337. data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +12 -0
  1338. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +109 -9
  1339. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +8 -32
  1340. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils_core.hpp +11 -6
  1341. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
  1342. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +268 -0
  1343. data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +40 -33
  1344. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +5 -1
  1345. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_end.hpp +2 -0
  1346. data/src/cxx_supportlib/vendor-modified/boost/move/detail/to_raw_pointer.hpp +1 -1
  1347. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +332 -69
  1348. data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +1 -27
  1349. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +85 -3
  1350. data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +21 -21
  1351. data/src/cxx_supportlib/vendor-modified/boost/move/make_unique.hpp +10 -0
  1352. data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +65 -66
  1353. data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +2 -2
  1354. data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +38 -33
  1355. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +1386 -0
  1356. data/src/cxx_supportlib/vendor-modified/boost/mp11/bind.hpp +120 -0
  1357. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/config.hpp +149 -0
  1358. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_append.hpp +321 -0
  1359. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_copy_if.hpp +48 -0
  1360. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_count.hpp +147 -0
  1361. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_defer.hpp +119 -0
  1362. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_fold.hpp +166 -0
  1363. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_front.hpp +50 -0
  1364. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_list.hpp +39 -0
  1365. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_value_list.hpp +41 -0
  1366. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list.hpp +24 -0
  1367. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list_v.hpp +27 -0
  1368. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +87 -0
  1369. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_min_element.hpp +51 -0
  1370. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_plus.hpp +84 -0
  1371. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_remove_if.hpp +48 -0
  1372. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_rename.hpp +54 -0
  1373. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_value.hpp +25 -0
  1374. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_void.hpp +32 -0
  1375. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_with_index.hpp +385 -0
  1376. data/src/cxx_supportlib/vendor-modified/boost/mp11/function.hpp +222 -0
  1377. data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +121 -0
  1378. data/src/cxx_supportlib/vendor-modified/boost/mp11/integral.hpp +51 -0
  1379. data/src/cxx_supportlib/vendor-modified/boost/mp11/list.hpp +481 -0
  1380. data/src/cxx_supportlib/vendor-modified/boost/mp11/set.hpp +188 -0
  1381. data/src/cxx_supportlib/vendor-modified/boost/mp11/utility.hpp +169 -0
  1382. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +16 -0
  1383. data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +1 -1
  1384. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +9 -9
  1385. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/common_name_wknd.hpp +2 -2
  1386. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/adl.hpp +1 -1
  1387. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/arrays.hpp +1 -1
  1388. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/bcc.hpp +2 -2
  1389. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/bind.hpp +1 -1
  1390. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/compiler.hpp +2 -2
  1391. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/ctps.hpp +1 -1
  1392. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/dtp.hpp +3 -3
  1393. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/forwarding.hpp +1 -1
  1394. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/integral.hpp +1 -1
  1395. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/operators.hpp +1 -1
  1396. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/overload_resolution.hpp +1 -1
  1397. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/preprocessor.hpp +1 -1
  1398. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/ttp.hpp +2 -2
  1399. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/count_impl.hpp +1 -1
  1400. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/fold_impl_body.hpp +3 -3
  1401. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/has_rebind.hpp +4 -4
  1402. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +1 -1
  1403. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/lambda_support.hpp +3 -3
  1404. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/nested_type_wknd.hpp +1 -1
  1405. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +1 -1
  1406. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/enum.hpp +12 -0
  1407. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/params.hpp +12 -0
  1408. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/size_impl.hpp +1 -1
  1409. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/static_cast.hpp +1 -1
  1410. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/template_arity.hpp +1 -1
  1411. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/yes_no.hpp +2 -1
  1412. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +1 -1
  1413. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +1 -1
  1414. data/src/cxx_supportlib/vendor-modified/boost/mpl/has_xxx.hpp +4 -4
  1415. data/src/cxx_supportlib/vendor-modified/boost/mpl/if.hpp +1 -1
  1416. data/src/cxx_supportlib/vendor-modified/boost/mpl/integral_c.hpp +1 -1
  1417. data/src/cxx_supportlib/vendor-modified/boost/mpl/lower_bound.hpp +1 -1
  1418. data/src/cxx_supportlib/vendor-modified/boost/mpl/numeric_cast.hpp +1 -1
  1419. data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +1 -1
  1420. data/src/cxx_supportlib/vendor-modified/boost/mpl/string.hpp +6 -6
  1421. data/src/cxx_supportlib/vendor-modified/boost/mpl/upper_bound.hpp +1 -1
  1422. data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/at.hpp +1 -1
  1423. data/src/cxx_supportlib/vendor-modified/boost/next_prior.hpp +3 -44
  1424. data/src/cxx_supportlib/vendor-modified/boost/nondet_random.hpp +22 -0
  1425. data/src/cxx_supportlib/vendor-modified/boost/none.hpp +5 -5
  1426. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +11 -1
  1427. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/cast.hpp +1 -1
  1428. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/converter_policies.hpp +5 -5
  1429. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/converter.hpp +1 -1
  1430. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/int_float_mixture.hpp +5 -5
  1431. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/meta.hpp +1 -1
  1432. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/sign_mixture.hpp +5 -5
  1433. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +5 -5
  1434. data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +33 -24
  1435. data/src/cxx_supportlib/vendor-modified/boost/optional/bad_optional_access.hpp +9 -0
  1436. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +7 -6
  1437. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +1 -1
  1438. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +4 -4
  1439. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_hash.hpp +49 -0
  1440. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +10 -3
  1441. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +1 -1
  1442. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +6 -6
  1443. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +38 -27
  1444. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +95 -29
  1445. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +3 -2
  1446. data/src/cxx_supportlib/vendor-modified/boost/parameter/are_tagged_arguments.hpp +125 -0
  1447. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/always_true_predicate.hpp +42 -0
  1448. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/arg_list.hpp +1253 -359
  1449. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/as_lvalue.hpp +25 -0
  1450. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/augment_predicate.hpp +198 -0
  1451. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/cast.hpp +7 -136
  1452. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/default.hpp +101 -59
  1453. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/has_nested_template_fn.hpp +111 -0
  1454. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/is_maybe.hpp +42 -16
  1455. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/is_placeholder.hpp +64 -0
  1456. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/is_tagged_argument.hpp +95 -0
  1457. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/lambda_tag.hpp +16 -0
  1458. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/maybe.hpp +128 -97
  1459. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/name.hpp +93 -0
  1460. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/as_parameter_requirements.hpp +32 -0
  1461. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/deduce_tag.hpp +217 -0
  1462. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/deduced_item.hpp +34 -0
  1463. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/insert_tagged.hpp +23 -0
  1464. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/is_named_argument.hpp +43 -0
  1465. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/item.hpp +47 -0
  1466. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_arg_list.hpp +438 -0
  1467. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_deduced_items.hpp +53 -0
  1468. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_items.hpp +45 -0
  1469. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_parameter_spec_items.hpp +244 -0
  1470. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/parameter_requirements.hpp +25 -0
  1471. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/predicate.hpp +87 -0
  1472. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/satisfies.hpp +142 -0
  1473. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_deduced.hpp +59 -0
  1474. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_keyword_arg.hpp +30 -0
  1475. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp +67 -0
  1476. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_template_keyword_arg.hpp +30 -0
  1477. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_type.hpp +89 -0
  1478. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/unmatched_argument.hpp +41 -0
  1479. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/parameter_requirements.hpp +7 -20
  1480. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/parenthesized_type.hpp +8 -31
  1481. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pp_impl/argument_pack.hpp +91 -0
  1482. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pp_impl/match.hpp +55 -0
  1483. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pp_impl/unwrap_predicate.hpp +97 -0
  1484. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/binary_seq_for_each.hpp +1638 -0
  1485. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/binary_seq_for_each_inc.hpp +1796 -0
  1486. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/binary_seq_to_args.hpp +65 -0
  1487. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/convert_binary_seq.hpp +57 -0
  1488. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/flatten.hpp +7 -110
  1489. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/for_each.hpp +7 -98
  1490. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/for_each_pred.hpp +1029 -0
  1491. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/argument_specs.hpp +24 -0
  1492. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/arity_range.hpp +42 -0
  1493. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/flatten.hpp +143 -0
  1494. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/for_each.hpp +152 -0
  1495. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/forwarding_overloads.hpp +509 -0
  1496. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_cast.hpp +730 -0
  1497. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_dispatch_layer.hpp +474 -0
  1498. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_dispatch_tuple.hpp +33 -0
  1499. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_forward_match.hpp +43 -0
  1500. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_name.hpp +152 -0
  1501. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/no_spec_overloads.hpp +331 -0
  1502. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/parenthesized_return_type.hpp +122 -0
  1503. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/parenthesized_type.hpp +34 -0
  1504. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/specification.hpp +109 -0
  1505. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/split_args.hpp +71 -0
  1506. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/inc_binary_seq.hpp +78 -0
  1507. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/is_binary.hpp +31 -0
  1508. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/is_nullary.hpp +32 -0
  1509. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/no_perfect_forwarding_begin.hpp +165 -0
  1510. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/no_perfect_forwarding_end.hpp +24 -0
  1511. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/nullptr.hpp +18 -0
  1512. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/overloads.hpp +92 -0
  1513. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/qualifier.hpp +88 -0
  1514. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/seq_enum.hpp +26 -0
  1515. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/seq_merge.hpp +1807 -0
  1516. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/result_of0.hpp +46 -29
  1517. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/set.hpp +94 -42
  1518. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tag.hpp +156 -34
  1519. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tagged_argument.hpp +874 -159
  1520. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tagged_argument_fwd.hpp +38 -0
  1521. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/template_keyword.hpp +76 -34
  1522. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/unwrap_cv_reference.hpp +161 -78
  1523. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/use_default.hpp +17 -0
  1524. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/use_default_tag.hpp +29 -0
  1525. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/void.hpp +26 -17
  1526. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/yesno.hpp +30 -14
  1527. data/src/cxx_supportlib/vendor-modified/boost/parameter/binding.hpp +158 -74
  1528. data/src/cxx_supportlib/vendor-modified/boost/parameter/compose.hpp +210 -0
  1529. data/src/cxx_supportlib/vendor-modified/boost/parameter/config.hpp +75 -6
  1530. data/src/cxx_supportlib/vendor-modified/boost/parameter/deduced.hpp +132 -0
  1531. data/src/cxx_supportlib/vendor-modified/boost/parameter/is_argument_pack.hpp +29 -0
  1532. data/src/cxx_supportlib/vendor-modified/boost/parameter/keyword.hpp +724 -102
  1533. data/src/cxx_supportlib/vendor-modified/boost/parameter/keyword_fwd.hpp +23 -0
  1534. data/src/cxx_supportlib/vendor-modified/boost/parameter/macros.hpp +205 -72
  1535. data/src/cxx_supportlib/vendor-modified/boost/parameter/match.hpp +37 -44
  1536. data/src/cxx_supportlib/vendor-modified/boost/parameter/name.hpp +100 -126
  1537. data/src/cxx_supportlib/vendor-modified/boost/parameter/nested_keyword.hpp +111 -0
  1538. data/src/cxx_supportlib/vendor-modified/boost/parameter/optional.hpp +67 -0
  1539. data/src/cxx_supportlib/vendor-modified/boost/parameter/parameters.hpp +556 -887
  1540. data/src/cxx_supportlib/vendor-modified/boost/parameter/preprocessor.hpp +156 -1016
  1541. data/src/cxx_supportlib/vendor-modified/boost/parameter/preprocessor_no_spec.hpp +74 -0
  1542. data/src/cxx_supportlib/vendor-modified/boost/parameter/required.hpp +66 -0
  1543. data/src/cxx_supportlib/vendor-modified/boost/parameter/template_keyword.hpp +87 -0
  1544. data/src/cxx_supportlib/vendor-modified/boost/parameter/value_type.hpp +156 -74
  1545. data/src/cxx_supportlib/vendor-modified/boost/pool/object_pool.hpp +2 -2
  1546. data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +22 -9
  1547. data/src/cxx_supportlib/vendor-modified/boost/pool/pool_alloc.hpp +1 -1
  1548. data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +13 -0
  1549. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/alpha.h +19 -13
  1550. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +96 -32
  1551. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/blackfin.h +16 -10
  1552. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/convex.h +19 -13
  1553. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/e2k.h +54 -0
  1554. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ia64.h +19 -13
  1555. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/loongarch.h +41 -0
  1556. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/m68k.h +33 -27
  1557. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/mips.h +31 -20
  1558. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/parisc.h +24 -18
  1559. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ppc.h +82 -30
  1560. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ptx.h +15 -9
  1561. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/pyramid.h +13 -7
  1562. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/riscv.h +48 -0
  1563. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/rs6k.h +23 -12
  1564. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sparc.h +26 -13
  1565. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/superh.h +29 -15
  1566. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sys370.h +15 -9
  1567. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sys390.h +15 -9
  1568. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86/32.h +31 -25
  1569. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86/64.h +19 -13
  1570. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86.h +4 -4
  1571. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/z.h +14 -8
  1572. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +3 -1
  1573. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/borland.h +12 -11
  1574. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/clang.h +10 -9
  1575. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/comeau.h +10 -9
  1576. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/compaq.h +12 -11
  1577. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/diab.h +10 -9
  1578. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/digitalmars.h +10 -9
  1579. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/dignus.h +10 -9
  1580. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/edg.h +10 -9
  1581. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/ekopath.h +10 -9
  1582. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/gcc.h +11 -10
  1583. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/gcc_xml.h +9 -8
  1584. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/greenhills.h +12 -11
  1585. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/hp_acc.h +10 -9
  1586. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/iar.h +10 -9
  1587. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/ibm.h +15 -14
  1588. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/intel.h +18 -17
  1589. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/kai.h +10 -9
  1590. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/llvm.h +9 -8
  1591. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/metaware.h +9 -8
  1592. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/metrowerks.h +14 -13
  1593. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/microtec.h +9 -8
  1594. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/mpw.h +12 -11
  1595. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/nvcc.h +10 -9
  1596. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/palm.h +10 -9
  1597. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/pgi.h +10 -9
  1598. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/sgi_mipspro.h +12 -11
  1599. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/sunpro.h +14 -13
  1600. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/tendra.h +9 -8
  1601. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/visualc.h +13 -12
  1602. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/watcom.h +10 -9
  1603. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/arm/versions.h +16 -10
  1604. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/arm.h +21 -19
  1605. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/ppc/versions.h +27 -21
  1606. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/ppc.h +21 -19
  1607. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86/versions.h +73 -67
  1608. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86.h +39 -37
  1609. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd/versions.h +24 -19
  1610. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd.h +25 -23
  1611. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd.h +95 -46
  1612. data/src/cxx_supportlib/vendor-modified/boost/predef/language/cuda.h +11 -10
  1613. data/src/cxx_supportlib/vendor-modified/boost/predef/language/objc.h +9 -8
  1614. data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdc.h +11 -10
  1615. data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdcpp.h +41 -34
  1616. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/cloudabi.h +10 -9
  1617. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/gnu.h +12 -11
  1618. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/uc.h +10 -9
  1619. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/vms.h +9 -8
  1620. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/zos.h +10 -9
  1621. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/cxx.h +11 -10
  1622. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/dinkumware.h +11 -10
  1623. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/libcomo.h +10 -9
  1624. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/modena.h +10 -9
  1625. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/msl.h +12 -11
  1626. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/msvc.h +53 -0
  1627. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/roguewave.h +11 -10
  1628. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/sgi.h +10 -9
  1629. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/stdcpp3.h +12 -11
  1630. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/stlport.h +13 -12
  1631. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/vacpp.h +9 -8
  1632. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std.h +1 -0
  1633. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +105 -35
  1634. data/src/cxx_supportlib/vendor-modified/boost/predef/os/aix.h +14 -13
  1635. data/src/cxx_supportlib/vendor-modified/boost/predef/os/amigaos.h +10 -9
  1636. data/src/cxx_supportlib/vendor-modified/boost/predef/os/beos.h +9 -8
  1637. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/bsdi.h +10 -8
  1638. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/dragonfly.h +10 -8
  1639. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/free.h +11 -9
  1640. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/net.h +17 -15
  1641. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/open.h +60 -58
  1642. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd.h +22 -23
  1643. data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +10 -9
  1644. data/src/cxx_supportlib/vendor-modified/boost/predef/os/haiku.h +9 -8
  1645. data/src/cxx_supportlib/vendor-modified/boost/predef/os/hpux.h +11 -10
  1646. data/src/cxx_supportlib/vendor-modified/boost/predef/os/ios.h +12 -11
  1647. data/src/cxx_supportlib/vendor-modified/boost/predef/os/irix.h +10 -9
  1648. data/src/cxx_supportlib/vendor-modified/boost/predef/os/linux.h +14 -10
  1649. data/src/cxx_supportlib/vendor-modified/boost/predef/os/macos.h +14 -13
  1650. data/src/cxx_supportlib/vendor-modified/boost/predef/os/os400.h +9 -8
  1651. data/src/cxx_supportlib/vendor-modified/boost/predef/os/qnxnto.h +12 -11
  1652. data/src/cxx_supportlib/vendor-modified/boost/predef/os/solaris.h +10 -9
  1653. data/src/cxx_supportlib/vendor-modified/boost/predef/os/unix.h +24 -22
  1654. data/src/cxx_supportlib/vendor-modified/boost/predef/os/vms.h +11 -10
  1655. data/src/cxx_supportlib/vendor-modified/boost/predef/os/windows.h +16 -15
  1656. data/src/cxx_supportlib/vendor-modified/boost/predef/os.h +0 -1
  1657. data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +18 -19
  1658. data/src/cxx_supportlib/vendor-modified/boost/predef/other/wordsize.h +73 -0
  1659. data/src/cxx_supportlib/vendor-modified/boost/predef/other/workaround.h +22 -14
  1660. data/src/cxx_supportlib/vendor-modified/boost/predef/other.h +3 -2
  1661. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/android.h +44 -0
  1662. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/cloudabi.h +9 -8
  1663. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/ios.h +14 -9
  1664. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw.h +12 -11
  1665. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw32.h +10 -9
  1666. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw64.h +10 -9
  1667. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_desktop.h +10 -9
  1668. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_phone.h +9 -8
  1669. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_runtime.h +10 -9
  1670. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_server.h +9 -8
  1671. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_store.h +10 -9
  1672. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_system.h +9 -8
  1673. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_uwp.h +12 -11
  1674. data/src/cxx_supportlib/vendor-modified/boost/predef/platform.h +1 -1
  1675. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  1676. data/src/cxx_supportlib/vendor-modified/boost/predef/version_number.h +16 -14
  1677. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/add.hpp +54 -1
  1678. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/dec.hpp +33 -0
  1679. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/is_1_number.hpp +21 -0
  1680. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/is_maximum_number.hpp +22 -0
  1681. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/is_minimum_number.hpp +21 -0
  1682. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/maximum_number.hpp +19 -0
  1683. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/div.hpp +37 -1
  1684. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/inc.hpp +33 -0
  1685. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/dec_1024.hpp +531 -0
  1686. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/dec_256.hpp +276 -0
  1687. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/dec_512.hpp +275 -0
  1688. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/inc_1024.hpp +536 -0
  1689. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/inc_256.hpp +275 -0
  1690. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/inc_512.hpp +280 -0
  1691. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/mod.hpp +37 -1
  1692. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/mul.hpp +60 -1
  1693. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/sub.hpp +51 -1
  1694. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/detail/get_data.hpp +21 -21
  1695. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/enum.hpp +17 -1
  1696. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/insert.hpp +71 -0
  1697. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/remove.hpp +66 -0
  1698. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/replace.hpp +58 -0
  1699. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/to_list.hpp +7 -7
  1700. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/to_seq.hpp +7 -7
  1701. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/to_tuple.hpp +7 -7
  1702. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/limits/not_equal_1024.hpp +1044 -0
  1703. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/limits/not_equal_256.hpp +793 -0
  1704. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/limits/not_equal_512.hpp +532 -0
  1705. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/not_equal.hpp +44 -1
  1706. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +16 -33
  1707. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/limits.hpp +136 -3
  1708. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/deduce_d.hpp +27 -0
  1709. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/dmc/while.hpp +2 -3
  1710. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/limits/while_1024.hpp +1044 -0
  1711. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/limits/while_256.hpp +533 -0
  1712. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/limits/while_512.hpp +532 -0
  1713. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/while.hpp +27 -0
  1714. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/limits/while_1024.hpp +1044 -0
  1715. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/limits/while_256.hpp +533 -0
  1716. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/limits/while_512.hpp +532 -0
  1717. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/while.hpp +27 -0
  1718. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/limits/while_1024.hpp +531 -0
  1719. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/limits/while_256.hpp +275 -0
  1720. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/limits/while_512.hpp +275 -0
  1721. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/while.hpp +75 -0
  1722. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/auto_rec.hpp +41 -0
  1723. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/dmc/auto_rec.hpp +2 -2
  1724. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/limits/auto_rec_1024.hpp +532 -0
  1725. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/limits/auto_rec_256.hpp +280 -0
  1726. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/limits/auto_rec_512.hpp +276 -0
  1727. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/check_empty.hpp +19 -0
  1728. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/detail/is_empty.hpp +3 -3
  1729. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/intercept.hpp +29 -0
  1730. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/is_empty.hpp +0 -37
  1731. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/is_empty_variadic.hpp +28 -5
  1732. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/limits/intercept_1024.hpp +530 -0
  1733. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/limits/intercept_256.hpp +273 -0
  1734. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/limits/intercept_512.hpp +274 -0
  1735. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/overload.hpp +1 -3
  1736. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/va_opt.hpp +34 -0
  1737. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities.hpp +2 -0
  1738. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward1.hpp +27 -0
  1739. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward2.hpp +27 -0
  1740. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward3.hpp +27 -0
  1741. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward4.hpp +27 -0
  1742. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward5.hpp +27 -0
  1743. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward1_1024.hpp +2573 -0
  1744. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward1_256.hpp +1296 -0
  1745. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward1_512.hpp +1293 -0
  1746. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward2_1024.hpp +2573 -0
  1747. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward2_256.hpp +1296 -0
  1748. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward2_512.hpp +1293 -0
  1749. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward3_1024.hpp +2573 -0
  1750. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward3_256.hpp +1296 -0
  1751. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward3_512.hpp +1293 -0
  1752. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward4_1024.hpp +2573 -0
  1753. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward4_256.hpp +1296 -0
  1754. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward4_512.hpp +1293 -0
  1755. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward5_1024.hpp +2573 -0
  1756. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward5_256.hpp +1296 -0
  1757. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward5_512.hpp +1293 -0
  1758. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse1_1024.hpp +2571 -0
  1759. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse1_256.hpp +1296 -0
  1760. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse1_512.hpp +1291 -0
  1761. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse2_1024.hpp +2571 -0
  1762. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse2_256.hpp +1296 -0
  1763. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse2_512.hpp +1293 -0
  1764. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse3_1024.hpp +2571 -0
  1765. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse3_256.hpp +1296 -0
  1766. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse3_512.hpp +1293 -0
  1767. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse4_1024.hpp +2571 -0
  1768. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse4_256.hpp +1296 -0
  1769. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse4_512.hpp +1293 -0
  1770. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse5_1024.hpp +2571 -0
  1771. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse5_256.hpp +1296 -0
  1772. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse5_512.hpp +1293 -0
  1773. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse1.hpp +25 -0
  1774. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse2.hpp +25 -0
  1775. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse3.hpp +25 -0
  1776. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse4.hpp +25 -0
  1777. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse5.hpp +25 -0
  1778. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/local_1024.hpp +1549 -0
  1779. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/local_256.hpp +782 -0
  1780. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/local_512.hpp +781 -0
  1781. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/rlocal_1024.hpp +1549 -0
  1782. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/rlocal_256.hpp +782 -0
  1783. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/rlocal_512.hpp +781 -0
  1784. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/local.hpp +27 -0
  1785. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/rlocal.hpp +25 -0
  1786. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/dmc/fold_left.hpp +3 -2
  1787. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/fold_left.hpp +28 -0
  1788. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/fold_right.hpp +29 -0
  1789. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_left_1024.hpp +1044 -0
  1790. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_left_256.hpp +533 -0
  1791. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_left_512.hpp +532 -0
  1792. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_right_1024.hpp +1557 -0
  1793. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_right_256.hpp +791 -0
  1794. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_right_512.hpp +789 -0
  1795. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/fold_left.hpp +28 -0
  1796. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/fold_right.hpp +26 -0
  1797. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_left_1024.hpp +532 -0
  1798. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_left_256.hpp +275 -0
  1799. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_left_512.hpp +276 -0
  1800. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_right_1024.hpp +532 -0
  1801. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_right_256.hpp +275 -0
  1802. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_right_512.hpp +276 -0
  1803. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/enum.hpp +13 -1
  1804. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/fold_left.hpp +60 -0
  1805. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/fold_right.hpp +44 -0
  1806. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/for_each_product.hpp +25 -6
  1807. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/limits/fold_left_1024.hpp +531 -0
  1808. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/limits/fold_left_256.hpp +275 -0
  1809. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/limits/fold_left_512.hpp +275 -0
  1810. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/reverse.hpp +35 -0
  1811. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/size.hpp +56 -1
  1812. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/to_array.hpp +21 -88
  1813. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/to_tuple.hpp +14 -14
  1814. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/bool.hpp +22 -0
  1815. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/limits/bool_1024.hpp +531 -0
  1816. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/limits/bool_256.hpp +275 -0
  1817. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/limits/bool_512.hpp +275 -0
  1818. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/punctuation/is_begin_parens.hpp +1 -5
  1819. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/punctuation/remove_parens.hpp +0 -4
  1820. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/deduce_r.hpp +27 -0
  1821. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/dmc/for.hpp +3 -2
  1822. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/for.hpp +26 -0
  1823. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/limits/for_1024.hpp +1044 -0
  1824. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/limits/for_256.hpp +533 -0
  1825. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/limits/for_512.hpp +532 -0
  1826. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/for.hpp +28 -0
  1827. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/limits/for_1024.hpp +1044 -0
  1828. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/limits/for_256.hpp +533 -0
  1829. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/limits/for_512.hpp +532 -0
  1830. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/msvc/for.hpp +1 -0
  1831. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/for.hpp +121 -7
  1832. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/for_1024.hpp +531 -0
  1833. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/for_256.hpp +275 -0
  1834. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/for_512.hpp +275 -0
  1835. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/repeat_1024.hpp +1557 -0
  1836. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/repeat_256.hpp +791 -0
  1837. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/repeat_512.hpp +789 -0
  1838. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/repeat.hpp +22 -0
  1839. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/repeat_from_to.hpp +27 -0
  1840. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/binary_transform.hpp +6 -11
  1841. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/is_empty.hpp +11 -11
  1842. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/limits/split_1024.hpp +530 -0
  1843. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/limits/split_256.hpp +272 -0
  1844. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/limits/split_512.hpp +274 -0
  1845. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/split.hpp +23 -0
  1846. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/elem.hpp +23 -0
  1847. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/enum.hpp +23 -0
  1848. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/fold_left.hpp +52 -0
  1849. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/fold_right.hpp +37 -0
  1850. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/for_each.hpp +27 -27
  1851. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/for_each_i.hpp +28 -28
  1852. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/elem_1024.hpp +530 -0
  1853. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/elem_256.hpp +272 -0
  1854. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/elem_512.hpp +274 -0
  1855. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/enum_1024.hpp +530 -0
  1856. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/enum_256.hpp +272 -0
  1857. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/enum_512.hpp +274 -0
  1858. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_left_1024.hpp +1556 -0
  1859. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_left_256.hpp +1053 -0
  1860. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_left_512.hpp +788 -0
  1861. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_right_1024.hpp +530 -0
  1862. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_right_256.hpp +273 -0
  1863. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_right_512.hpp +274 -0
  1864. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/size_1024.hpp +1043 -0
  1865. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/size_256.hpp +532 -0
  1866. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/size_512.hpp +531 -0
  1867. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/replace.hpp +7 -7
  1868. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/rest_n.hpp +16 -10
  1869. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/size.hpp +23 -0
  1870. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/variadic_seq_to_seq.hpp +0 -2
  1871. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/stringize.hpp +0 -4
  1872. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/detail/is_single_return.hpp +5 -5
  1873. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/eat.hpp +4 -18
  1874. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/elem.hpp +11 -157
  1875. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/insert.hpp +2 -7
  1876. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/reverse_128.hpp +403 -0
  1877. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/reverse_256.hpp +1171 -0
  1878. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/reverse_64.hpp +83 -0
  1879. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_list_128.hpp +595 -0
  1880. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_list_256.hpp +1747 -0
  1881. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_list_64.hpp +83 -0
  1882. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_128.hpp +403 -0
  1883. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_256.hpp +1171 -0
  1884. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_64.hpp +84 -0
  1885. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/pop_back.hpp +16 -21
  1886. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/pop_front.hpp +16 -21
  1887. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/push_back.hpp +1 -6
  1888. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/push_front.hpp +1 -7
  1889. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/rem.hpp +21 -43
  1890. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/remove.hpp +16 -21
  1891. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/replace.hpp +2 -7
  1892. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/reverse.hpp +38 -25
  1893. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/size.hpp +13 -6
  1894. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_array.hpp +15 -12
  1895. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_list.hpp +37 -25
  1896. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_seq.hpp +38 -24
  1897. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/detail/has_opt.hpp +39 -0
  1898. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/detail/is_single_return.hpp +5 -5
  1899. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/elem.hpp +93 -71
  1900. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +34 -0
  1901. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/elem_128.hpp +275 -0
  1902. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/elem_256.hpp +723 -0
  1903. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/elem_64.hpp +81 -0
  1904. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/size_128.hpp +47 -0
  1905. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/size_256.hpp +53 -0
  1906. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/size_64.hpp +23 -0
  1907. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/size.hpp +39 -4
  1908. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_array.hpp +15 -9
  1909. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_list.hpp +9 -2
  1910. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_seq.hpp +1 -3
  1911. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_tuple.hpp +1 -3
  1912. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic.hpp +1 -0
  1913. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/wstringize.hpp +0 -4
  1914. data/src/cxx_supportlib/vendor-modified/boost/random/additive_combine.hpp +2 -2
  1915. data/src/cxx_supportlib/vendor-modified/boost/random/detail/gray_coded_qrng.hpp +29 -5
  1916. data/src/cxx_supportlib/vendor-modified/boost/random/detail/int_float_pair.hpp +3 -4
  1917. data/src/cxx_supportlib/vendor-modified/boost/random/detail/integer_log2.hpp +1 -1
  1918. data/src/cxx_supportlib/vendor-modified/boost/random/detail/mixmax_skip_N17.ipp +287 -0
  1919. data/src/cxx_supportlib/vendor-modified/boost/random/detail/niederreiter_base2_table.hpp +1 -0
  1920. data/src/cxx_supportlib/vendor-modified/boost/random/detail/operators.hpp +1 -1
  1921. data/src/cxx_supportlib/vendor-modified/boost/random/detail/qrng_base.hpp +5 -5
  1922. data/src/cxx_supportlib/vendor-modified/boost/random/detail/seed.hpp +9 -11
  1923. data/src/cxx_supportlib/vendor-modified/boost/random/detail/seed_impl.hpp +13 -14
  1924. data/src/cxx_supportlib/vendor-modified/boost/random/detail/sobol_table.hpp +1 -0
  1925. data/src/cxx_supportlib/vendor-modified/boost/random/discard_block.hpp +2 -2
  1926. data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +4 -0
  1927. data/src/cxx_supportlib/vendor-modified/boost/random/generate_canonical.hpp +2 -3
  1928. data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +3 -3
  1929. data/src/cxx_supportlib/vendor-modified/boost/random/independent_bits.hpp +3 -3
  1930. data/src/cxx_supportlib/vendor-modified/boost/random/inversive_congruential.hpp +3 -4
  1931. data/src/cxx_supportlib/vendor-modified/boost/random/lagged_fibonacci.hpp +4 -4
  1932. data/src/cxx_supportlib/vendor-modified/boost/random/linear_congruential.hpp +5 -7
  1933. data/src/cxx_supportlib/vendor-modified/boost/random/linear_feedback_shift.hpp +3 -3
  1934. data/src/cxx_supportlib/vendor-modified/boost/random/mersenne_twister.hpp +2 -2
  1935. data/src/cxx_supportlib/vendor-modified/boost/random/mixmax.hpp +313 -0
  1936. data/src/cxx_supportlib/vendor-modified/boost/random/niederreiter_base2.hpp +2 -2
  1937. data/src/cxx_supportlib/vendor-modified/boost/random/random_device.hpp +2 -2
  1938. data/src/cxx_supportlib/vendor-modified/boost/random/shuffle_order.hpp +2 -2
  1939. data/src/cxx_supportlib/vendor-modified/boost/random/sobol.hpp +3 -2
  1940. data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +203 -0
  1941. data/src/cxx_supportlib/vendor-modified/boost/random/subtract_with_carry.hpp +18 -18
  1942. data/src/cxx_supportlib/vendor-modified/boost/random/traits.hpp +3 -3
  1943. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int_distribution.hpp +7 -7
  1944. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real_distribution.hpp +4 -5
  1945. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_smallint.hpp +4 -5
  1946. data/src/cxx_supportlib/vendor-modified/boost/random/xor_combine.hpp +4 -2
  1947. data/src/cxx_supportlib/vendor-modified/boost/random.hpp +2 -0
  1948. data/src/cxx_supportlib/vendor-modified/boost/range/as_literal.hpp +0 -6
  1949. data/src/cxx_supportlib/vendor-modified/boost/range/begin.hpp +4 -10
  1950. data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +1 -1
  1951. data/src/cxx_supportlib/vendor-modified/boost/range/config.hpp +1 -1
  1952. data/src/cxx_supportlib/vendor-modified/boost/range/end.hpp +4 -10
  1953. data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +0 -32
  1954. data/src/cxx_supportlib/vendor-modified/boost/range/rbegin.hpp +0 -13
  1955. data/src/cxx_supportlib/vendor-modified/boost/range/rend.hpp +0 -13
  1956. data/src/cxx_supportlib/vendor-modified/boost/range/size.hpp +1 -1
  1957. data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +4 -82
  1958. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/gcd_lcm.hpp +53 -0
  1959. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_evenly_divisible_by.hpp +32 -0
  1960. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_ratio.hpp +28 -0
  1961. data/src/cxx_supportlib/vendor-modified/boost/ratio/include.hpp +1 -3
  1962. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio.hpp +5 -249
  1963. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_fwd.hpp +30 -56
  1964. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_io.hpp +0 -533
  1965. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +40 -14
  1966. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +79 -74
  1967. data/src/cxx_supportlib/vendor-modified/boost/regex/config/borland.hpp +1 -1
  1968. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +104 -111
  1969. data/src/cxx_supportlib/vendor-modified/boost/regex/pattern_except.hpp +4 -72
  1970. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +4 -140
  1971. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +8 -761
  1972. data/src/cxx_supportlib/vendor-modified/boost/regex/regex_traits.hpp +4 -0
  1973. data/src/cxx_supportlib/vendor-modified/boost/regex/user.hpp +2 -0
  1974. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +25 -15
  1975. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +47 -24
  1976. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +59 -28
  1977. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/c_regex_traits.hpp +342 -42
  1978. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +111 -28
  1979. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cregex.hpp +0 -117
  1980. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +1516 -0
  1981. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/indexed_bit_flag.hpp +54 -0
  1982. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +18 -6
  1983. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +9 -9
  1984. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +39 -1
  1985. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/object_cache.hpp +171 -0
  1986. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +128 -0
  1987. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +39 -20
  1988. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +17 -7
  1989. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +51 -52
  1990. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +12 -12
  1991. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/primary_transform.hpp +1 -1
  1992. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/protected_call.hpp +3 -1
  1993. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex.hpp +0 -36
  1994. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +10 -3
  1995. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +2 -0
  1996. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +35 -4
  1997. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +9 -7
  1998. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +1 -1
  1999. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +641 -25
  2000. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -7
  2001. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/states.hpp +1 -1
  2002. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/sub_match.hpp +1 -1
  2003. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +1 -1
  2004. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/unicode_iterator.hpp +871 -0
  2005. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +524 -40
  2006. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex.hpp +734 -0
  2007. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +1576 -0
  2008. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +3130 -0
  2009. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/c_regex_traits.hpp +474 -0
  2010. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/char_regex_traits.hpp +59 -0
  2011. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cpp_regex_traits.hpp +1040 -0
  2012. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cregex.hpp +195 -0
  2013. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/error_type.hpp +59 -0
  2014. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +1402 -0
  2015. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_category.hpp +84 -0
  2016. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_traits.hpp +32 -0
  2017. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_flags.hpp +156 -0
  2018. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_results.hpp +667 -0
  2019. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +173 -0
  2020. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/object_cache.hpp +160 -0
  2021. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +106 -0
  2022. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher.hpp +576 -0
  2023. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +921 -0
  2024. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +1874 -0
  2025. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/primary_transform.hpp +120 -0
  2026. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regbase.hpp +158 -0
  2027. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex.hpp +106 -0
  2028. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_format.hpp +1124 -0
  2029. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_fwd.hpp +73 -0
  2030. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_grep.hpp +98 -0
  2031. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_iterator.hpp +173 -0
  2032. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_match.hpp +92 -0
  2033. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_merge.hpp +71 -0
  2034. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_raw_buffer.hpp +213 -0
  2035. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_replace.hpp +77 -0
  2036. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_search.hpp +103 -0
  2037. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_split.hpp +152 -0
  2038. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_token_iterator.hpp +255 -0
  2039. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits.hpp +130 -0
  2040. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits_defaults.hpp +996 -0
  2041. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +159 -0
  2042. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/states.hpp +299 -0
  2043. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/sub_match.hpp +382 -0
  2044. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/syntax_type.hpp +105 -0
  2045. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_iterator.hpp +177 -0
  2046. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_token_iterator.hpp +312 -0
  2047. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/unicode_iterator.hpp +862 -0
  2048. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +1311 -0
  2049. data/src/cxx_supportlib/vendor-modified/boost/regex.hpp +4 -0
  2050. data/src/cxx_supportlib/vendor-modified/boost/regex_fwd.hpp +4 -0
  2051. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +93 -388
  2052. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +5 -5
  2053. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +8 -4
  2054. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc.hpp +7 -0
  2055. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +63 -0
  2056. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +11 -0
  2057. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_nt.hpp +7 -0
  2058. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_pt.hpp +7 -0
  2059. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_spin.hpp +7 -0
  2060. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_std_atomic.hpp +8 -1
  2061. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_sync.hpp +13 -2
  2062. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +6 -6
  2063. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_sp_deleter.hpp +3 -3
  2064. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +23 -0
  2065. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +88 -48
  2066. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_convertible.hpp +1 -1
  2067. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +12 -16
  2068. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +13 -3
  2069. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +10 -3
  2070. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +15 -3
  2071. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +148 -0
  2072. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +13 -3
  2073. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +13 -3
  2074. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +13 -3
  2075. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +13 -3
  2076. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +13 -3
  2077. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +25 -16
  2078. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +16 -8
  2079. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +14 -4
  2080. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +10 -3
  2081. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +25 -17
  2082. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +10 -3
  2083. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +13 -3
  2084. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +45 -28
  2085. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +27 -0
  2086. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +69 -0
  2087. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_typeinfo_.hpp +58 -0
  2088. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +7 -9
  2089. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +7 -0
  2090. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_atomic.hpp +94 -0
  2091. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_nt.hpp +7 -0
  2092. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_pt.hpp +7 -0
  2093. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_std_atomic.hpp +13 -5
  2094. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_sync.hpp +8 -1
  2095. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +13 -147
  2096. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +1 -0
  2097. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +49 -12
  2098. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared.hpp +1 -0
  2099. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +23 -22
  2100. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +2 -1
  2101. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_unique.hpp +70 -0
  2102. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +3 -2
  2103. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +3 -2
  2104. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +6 -4
  2105. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +120 -40
  2106. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +80 -8
  2107. data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +5 -4
  2108. data/src/cxx_supportlib/vendor-modified/boost/system/detail/append_int.hpp +32 -0
  2109. data/src/cxx_supportlib/vendor-modified/boost/system/detail/cerrno.hpp +329 -0
  2110. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +44 -18
  2111. data/src/cxx_supportlib/vendor-modified/boost/system/detail/enable_if.hpp +23 -0
  2112. data/src/cxx_supportlib/vendor-modified/boost/system/detail/errc.hpp +126 -0
  2113. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +183 -0
  2114. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +166 -0
  2115. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +659 -0
  2116. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +326 -0
  2117. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +80 -58
  2118. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +108 -0
  2119. data/src/cxx_supportlib/vendor-modified/boost/system/detail/interop_category.hpp +107 -0
  2120. data/src/cxx_supportlib/vendor-modified/boost/system/detail/is_same.hpp +23 -0
  2121. data/src/cxx_supportlib/vendor-modified/boost/system/detail/mutex.hpp +128 -0
  2122. data/src/cxx_supportlib/vendor-modified/boost/system/detail/snprintf.hpp +28 -0
  2123. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category.hpp +84 -0
  2124. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category_impl.hpp +97 -0
  2125. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category.hpp +110 -0
  2126. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_impl.hpp +61 -0
  2127. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_message.hpp +71 -0
  2128. data/src/cxx_supportlib/vendor-modified/boost/system/detail/throws.hpp +59 -0
  2129. data/src/cxx_supportlib/vendor-modified/boost/system/errc.hpp +57 -0
  2130. data/src/cxx_supportlib/vendor-modified/boost/system/error_category.hpp +13 -0
  2131. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +7 -942
  2132. data/src/cxx_supportlib/vendor-modified/boost/system/error_condition.hpp +13 -0
  2133. data/src/cxx_supportlib/vendor-modified/boost/system/generic_category.hpp +13 -0
  2134. data/src/cxx_supportlib/vendor-modified/boost/system/is_error_code_enum.hpp +30 -0
  2135. data/src/cxx_supportlib/vendor-modified/boost/system/is_error_condition_enum.hpp +30 -0
  2136. data/src/cxx_supportlib/vendor-modified/boost/system/system_category.hpp +14 -0
  2137. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +30 -59
  2138. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/deque_adaptor.hpp +1 -1
  2139. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/deque_base.hpp +1 -1
  2140. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +9 -21
  2141. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +9 -21
  2142. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_adaptor.hpp +1 -1
  2143. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_base.hpp +1 -1
  2144. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_op_status.hpp +3 -1
  2145. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_bounded_queue.hpp +1 -1
  2146. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_deque.hpp +3 -3
  2147. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_priority_queue.hpp +4 -4
  2148. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_queue.hpp +3 -3
  2149. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_timed_queue.hpp +80 -14
  2150. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/deque.hpp +1 -24
  2151. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/functional.hpp +1 -14
  2152. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/list.hpp +1 -14
  2153. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_arg.hpp +2 -12
  2154. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_traits.hpp +0 -11
  2155. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/config.hpp +0 -2
  2156. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/default_delete.hpp +0 -16
  2157. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/pointer_traits.hpp +0 -11
  2158. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/scoped_allocator.hpp +0 -11
  2159. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/shared_ptr.hpp +0 -19
  2160. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/unique_ptr.hpp +4 -6
  2161. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/queue.hpp +1 -24
  2162. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/tuple.hpp +1 -18
  2163. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/vector.hpp +1 -14
  2164. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +12 -3
  2165. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/invoke.hpp +27 -21
  2166. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/platform_time.hpp +8 -8
  2167. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_to_unsigned.hpp +55 -0
  2168. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_trim.hpp +29 -0
  2169. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +30 -11
  2170. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/basic_thread_pool.hpp +3 -0
  2171. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor.hpp +2 -0
  2172. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor_adaptor.hpp +2 -0
  2173. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/generic_executor_ref.hpp +2 -0
  2174. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/inline_executor.hpp +8 -0
  2175. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/loop_executor.hpp +4 -0
  2176. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduled_thread_pool.hpp +4 -0
  2177. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduler.hpp +2 -0
  2178. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduling_adaptor.hpp +3 -0
  2179. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/serial_executor.hpp +4 -0
  2180. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/serial_executor_cont.hpp +9 -2
  2181. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/thread_executor.hpp +6 -0
  2182. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/work.hpp +3 -1
  2183. data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v2/task_region.hpp +6 -2
  2184. data/src/cxx_supportlib/vendor-modified/boost/thread/externally_locked.hpp +6 -5
  2185. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +2 -2
  2186. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_any.hpp +4 -2
  2187. data/src/cxx_supportlib/vendor-modified/boost/thread/interruption.hpp +22 -0
  2188. data/src/cxx_supportlib/vendor-modified/boost/thread/poly_lockable.hpp +7 -2
  2189. data/src/cxx_supportlib/vendor-modified/boost/thread/poly_shared_lockable.hpp +16 -12
  2190. data/src/cxx_supportlib/vendor-modified/boost/thread/poly_shared_lockable_adapter.hpp +3 -4
  2191. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +18 -24
  2192. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +6 -13
  2193. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/mutex.hpp +11 -37
  2194. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once.hpp +29 -28
  2195. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once_atomic.hpp +1 -1
  2196. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_helpers.hpp +163 -18
  2197. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +1 -69
  2198. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/recursive_mutex.hpp +19 -19
  2199. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +1 -1
  2200. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +10 -7
  2201. data/src/cxx_supportlib/vendor-modified/boost/thread/scoped_thread.hpp +9 -0
  2202. data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +4 -4
  2203. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_guard.hpp +5 -0
  2204. data/src/cxx_supportlib/vendor-modified/boost/thread/tss.hpp +23 -41
  2205. data/src/cxx_supportlib/vendor-modified/boost/thread/user_scheduler.hpp +3 -0
  2206. data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +1 -1
  2207. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +231 -56
  2208. data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +2 -2
  2209. data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +35 -30
  2210. data/src/cxx_supportlib/vendor-modified/boost/tuple/tuple.hpp +52 -1
  2211. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_pointer.hpp +1 -1
  2212. data/src/cxx_supportlib/vendor-modified/boost/type_traits/aligned_storage.hpp +1 -1
  2213. data/src/cxx_supportlib/vendor-modified/boost/type_traits/alignment_of.hpp +3 -3
  2214. data/src/cxx_supportlib/vendor-modified/boost/type_traits/conjunction.hpp +40 -0
  2215. data/src/cxx_supportlib/vendor-modified/boost/type_traits/copy_cv_ref.hpp +31 -0
  2216. data/src/cxx_supportlib/vendor-modified/boost/type_traits/copy_reference.hpp +35 -0
  2217. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +29 -5
  2218. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_binary_operator.hpp +6 -6
  2219. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_postfix_operator.hpp +6 -6
  2220. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_prefix_operator.hpp +6 -6
  2221. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_03.hpp +3 -3
  2222. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_11.hpp +276 -101
  2223. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +27 -27
  2224. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_tester.hpp +415 -255
  2225. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_likely_lambda.hpp +2 -1
  2226. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +27 -27
  2227. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp +1345 -1542
  2228. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_03.hpp +4 -4
  2229. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_11.hpp +288 -148
  2230. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_swappable_cxx_11.hpp +70 -0
  2231. data/src/cxx_supportlib/vendor-modified/boost/type_traits/disjunction.hpp +40 -0
  2232. data/src/cxx_supportlib/vendor-modified/boost/type_traits/extent.hpp +2 -2
  2233. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus.hpp +6 -6
  2234. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus_assign.hpp +6 -6
  2235. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_copy.hpp +1 -1
  2236. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus_assign.hpp +6 -6
  2237. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +1 -1
  2238. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_promotion.hpp +2 -2
  2239. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +23 -9
  2240. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_array.hpp +2 -2
  2241. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_base_and_derived.hpp +2 -2
  2242. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_bounded_array.hpp +42 -0
  2243. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +3 -2
  2244. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_compound.hpp +1 -1
  2245. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_const.hpp +1 -1
  2246. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_constructible.hpp +1 -1
  2247. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_convertible.hpp +4 -4
  2248. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_default_constructible.hpp +1 -1
  2249. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_destructible.hpp +1 -1
  2250. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_empty.hpp +4 -4
  2251. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_enum.hpp +4 -4
  2252. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_floating_point.hpp +22 -0
  2253. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_function.hpp +1 -1
  2254. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_fundamental.hpp +1 -1
  2255. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_integral.hpp +6 -3
  2256. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_lvalue_reference.hpp +1 -1
  2257. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_function_pointer.hpp +1 -1
  2258. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_pointer.hpp +1 -1
  2259. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_swappable.hpp +4 -24
  2260. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_pointer.hpp +1 -1
  2261. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_same.hpp +1 -1
  2262. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_scoped_enum.hpp +26 -0
  2263. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_signed.hpp +2 -2
  2264. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_swappable.hpp +92 -0
  2265. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_trivially_copyable.hpp +31 -0
  2266. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_unbounded_array.hpp +41 -0
  2267. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_unscoped_enum.hpp +25 -0
  2268. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_unsigned.hpp +2 -2
  2269. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +2 -2
  2270. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_volatile.hpp +1 -1
  2271. data/src/cxx_supportlib/vendor-modified/boost/type_traits/negation.hpp +23 -0
  2272. data/src/cxx_supportlib/vendor-modified/boost/type_traits/rank.hpp +4 -4
  2273. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_all_extents.hpp +1 -1
  2274. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_const.hpp +1 -1
  2275. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv.hpp +1 -1
  2276. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_extent.hpp +1 -1
  2277. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_volatile.hpp +1 -1
  2278. data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +3 -3
  2279. data/src/cxx_supportlib/vendor-modified/boost/typeof/decltype.hpp +2 -3
  2280. data/src/cxx_supportlib/vendor-modified/boost/typeof/incr_registration_group.hpp +1 -10
  2281. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +5 -6
  2282. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/bitset.hpp +2 -4
  2283. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/complex.hpp +2 -4
  2284. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/deque.hpp +2 -5
  2285. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/fstream.hpp +2 -15
  2286. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/functional.hpp +4 -51
  2287. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iostream.hpp +2 -6
  2288. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/istream.hpp +2 -9
  2289. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iterator.hpp +2 -46
  2290. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/list.hpp +2 -5
  2291. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/locale.hpp +2 -29
  2292. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/map.hpp +2 -9
  2293. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/memory.hpp +4 -9
  2294. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/ostream.hpp +2 -6
  2295. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/queue.hpp +2 -5
  2296. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/set.hpp +2 -9
  2297. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/sstream.hpp +2 -19
  2298. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/stack.hpp +2 -5
  2299. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/streambuf.hpp +2 -5
  2300. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/string.hpp +2 -12
  2301. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/utility.hpp +2 -4
  2302. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/valarray.hpp +2 -10
  2303. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/vector.hpp +2 -5
  2304. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof.hpp +8 -202
  2305. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +860 -0
  2306. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +51 -0
  2307. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +716 -0
  2308. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +52 -0
  2309. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocator_constructed.hpp +59 -0
  2310. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/archive_constructed.hpp +71 -0
  2311. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/bad_archive_exception.hpp +27 -0
  2312. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/concurrent_static_asserts.hpp +105 -0
  2313. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +884 -0
  2314. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +1764 -0
  2315. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2271 -0
  2316. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/element_type.hpp +64 -0
  2317. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_map_types.hpp +86 -0
  2318. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_set_types.hpp +44 -0
  2319. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/ignore_wshadow.hpp +35 -0
  2320. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_handle.hpp +204 -0
  2321. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_map_types.hpp +139 -0
  2322. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_set_types.hpp +92 -0
  2323. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/reentrancy_check.hpp +138 -0
  2324. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/restore_wshadow.hpp +11 -0
  2325. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/rw_spinlock.hpp +179 -0
  2326. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +651 -0
  2327. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/tuple_rotate_right.hpp +52 -0
  2328. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +1462 -3502
  2329. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +10 -14
  2330. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/mulx.hpp +129 -0
  2331. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/narrow_cast.hpp +44 -0
  2332. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/opt_storage.hpp +30 -0
  2333. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +214 -0
  2334. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialization_version.hpp +74 -0
  2335. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_container.hpp +204 -0
  2336. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_fca_container.hpp +156 -0
  2337. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_tracked_address.hpp +104 -0
  2338. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +8 -13
  2339. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/static_assert.hpp +16 -0
  2340. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/throw_exception.hpp +30 -0
  2341. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +226 -0
  2342. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/xmx.hpp +75 -0
  2343. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +44 -0
  2344. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +800 -0
  2345. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +44 -0
  2346. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +610 -0
  2347. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +44 -0
  2348. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +768 -1002
  2349. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +16 -13
  2350. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +895 -0
  2351. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +44 -0
  2352. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +699 -0
  2353. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +44 -0
  2354. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +547 -672
  2355. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +18 -15
  2356. data/src/cxx_supportlib/vendor-modified/boost/utility/base_from_member.hpp +2 -1
  2357. data/src/cxx_supportlib/vendor-modified/boost/utility/binary.hpp +3 -2
  2358. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/result_of_iterate.hpp +3 -3
  2359. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/result_of_variadic.hpp +190 -0
  2360. data/src/cxx_supportlib/vendor-modified/boost/utility/in_place_factory.hpp +6 -0
  2361. data/src/cxx_supportlib/vendor-modified/boost/utility/result_of.hpp +33 -11
  2362. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +9 -44
  2363. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +31 -47
  2364. data/src/cxx_supportlib/vendor-modified/boost/utility/swap.hpp +4 -1
  2365. data/src/cxx_supportlib/vendor-modified/boost/utility/typed_in_place_factory.hpp +6 -1
  2366. data/src/cxx_supportlib/vendor-modified/boost/utility/value_init.hpp +41 -75
  2367. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  2368. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +2 -9
  2369. data/src/cxx_supportlib/vendor-modified/modp_b64_data.h +0 -4
  2370. data/src/cxx_supportlib/vendor-modified/modp_b64_strict_aliasing.cpp +5 -1
  2371. data/src/cxx_supportlib/vendor-modified/websocketpp/changelog.md +444 -0
  2372. data/src/cxx_supportlib/vendor-modified/websocketpp/readme.md +49 -0
  2373. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/close.hpp +353 -0
  2374. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/asio.hpp +141 -0
  2375. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/functional.hpp +100 -0
  2376. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/md5.hpp +448 -0
  2377. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/memory.hpp +88 -0
  2378. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/thread.hpp +88 -0
  2379. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/core.hpp +297 -0
  2380. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/connection.hpp +1642 -0
  2381. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/endpoint.hpp +700 -0
  2382. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp +129 -0
  2383. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/extensions/permessage_deflate/enabled.hpp +817 -0
  2384. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/frame.hpp +853 -0
  2385. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/impl/parser.hpp +200 -0
  2386. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/parser.hpp +629 -0
  2387. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/impl/connection_impl.hpp +2375 -0
  2388. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/impl/endpoint_impl.hpp +269 -0
  2389. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/base.hpp +299 -0
  2390. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi13.hpp +1072 -0
  2391. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/roles/client_endpoint.hpp +173 -0
  2392. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/roles/server_endpoint.hpp +195 -0
  2393. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/sha1/sha1.hpp +189 -0
  2394. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/connection.hpp +1197 -0
  2395. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/endpoint.hpp +1182 -0
  2396. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/security/none.hpp +372 -0
  2397. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/security/tls.hpp +474 -0
  2398. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/base/endpoint.hpp +77 -0
  2399. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/debug/connection.hpp +412 -0
  2400. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/debug/endpoint.hpp +140 -0
  2401. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/iostream/connection.hpp +714 -0
  2402. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/iostream/endpoint.hpp +222 -0
  2403. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/stub/connection.hpp +286 -0
  2404. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/uri.hpp +356 -0
  2405. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/utilities.hpp +180 -0
  2406. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/version.hpp +61 -0
  2407. data/src/helper-scripts/node-loader.js +1 -1
  2408. data/src/helper-scripts/wsgi-loader.py +34 -17
  2409. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +24 -0
  2410. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +19 -0
  2411. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +36 -0
  2412. data/src/nginx_module/ConfigGeneral/ManifestGeneration.c +2 -2
  2413. data/src/nginx_module/Configuration.c +4 -4
  2414. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +16 -0
  2415. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +54 -0
  2416. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +40 -0
  2417. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +9 -0
  2418. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +12 -0
  2419. data/src/nginx_module/config +2 -0
  2420. data/src/nginx_module/ngx_http_passenger_module.c +3 -2
  2421. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/common.js +50 -29
  2422. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/cli-config.js +20 -20
  2423. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/npm-config.js +11 -11
  2424. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/syslog-config.js +3 -3
  2425. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config.js +8 -2
  2426. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/container.js +2 -1
  2427. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/logger.js +174 -146
  2428. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/console.js +4 -2
  2429. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/file.js +15 -5
  2430. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/http.js +14 -4
  2431. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports.js +26 -24
  2432. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston.js +5 -5
  2433. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/async/package.json +4 -13
  2434. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/package.json +19 -33
  2435. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/cycle/package.json +11 -29
  2436. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/eyes/package.json +12 -40
  2437. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/isstream/package.json +3 -12
  2438. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/stack-trace/lib/stack-trace.js +49 -24
  2439. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/stack-trace/package.json +4 -16
  2440. data/src/nodejs_supportlib/vendor-copy/winston/package.json +11 -55
  2441. data/src/ruby_native_extension/extconf.rb +1 -1
  2442. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +5 -1
  2443. data/src/ruby_supportlib/phusion_passenger/admin_tools/memory_stats.rb +1 -1
  2444. data/src/ruby_supportlib/phusion_passenger/admin_tools.rb +1 -1
  2445. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +12 -0
  2446. data/src/ruby_supportlib/phusion_passenger/common_library.rb +17 -4
  2447. data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +1 -1
  2448. data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +1 -1
  2449. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +4 -3
  2450. data/src/ruby_supportlib/phusion_passenger/config/restart_app_command.rb +16 -12
  2451. data/src/ruby_supportlib/phusion_passenger/console_text_template.rb +7 -2
  2452. data/src/ruby_supportlib/phusion_passenger/constants.rb +3 -2
  2453. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +28 -7
  2454. data/src/ruby_supportlib/phusion_passenger/native_support.rb +10 -5
  2455. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +18 -0
  2456. data/src/ruby_supportlib/phusion_passenger/packaging.rb +3 -1
  2457. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +10 -13
  2458. data/src/ruby_supportlib/phusion_passenger/platform_info/binary_compatibility.rb +23 -19
  2459. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +14 -0
  2460. data/src/ruby_supportlib/phusion_passenger/platform_info/curl.rb +3 -0
  2461. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +8 -2
  2462. data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/libs.rb +10 -6
  2463. data/src/ruby_supportlib/phusion_passenger/platform_info/linux.rb +2 -1
  2464. data/src/ruby_supportlib/phusion_passenger/platform_info/openssl.rb +5 -0
  2465. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +47 -28
  2466. data/src/ruby_supportlib/phusion_passenger/platform_info/pcre.rb +64 -0
  2467. data/src/ruby_supportlib/phusion_passenger/platform_info/ruby.rb +2 -2
  2468. data/src/ruby_supportlib/phusion_passenger/public_api.rb +3 -0
  2469. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +12 -1
  2470. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +18 -18
  2471. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +11 -7
  2472. data/src/ruby_supportlib/phusion_passenger/ruby_core_enhancements.rb +5 -0
  2473. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +14 -1
  2474. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +3 -2
  2475. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +28 -17
  2476. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +1 -1
  2477. data/src/ruby_supportlib/phusion_passenger/utils.rb +1 -0
  2478. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/app.rb +1 -1
  2479. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +4 -0
  2480. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/lldb_controller.rb +5 -1
  2481. data/src/ruby_supportlib/phusion_passenger.rb +9 -9
  2482. metadata +863 -303
  2483. data/src/cxx_supportlib/ServerKit/http_parser.cpp +0 -2265
  2484. data/src/cxx_supportlib/ServerKit/http_parser.h +0 -330
  2485. data/src/cxx_supportlib/vendor-copy/websocketpp/changelog.md +0 -342
  2486. data/src/cxx_supportlib/vendor-copy/websocketpp/readme.md +0 -49
  2487. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/close.hpp +0 -342
  2488. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/asio.hpp +0 -131
  2489. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/functional.hpp +0 -105
  2490. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/md5.hpp +0 -448
  2491. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/memory.hpp +0 -89
  2492. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/thread.hpp +0 -84
  2493. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/core.hpp +0 -285
  2494. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/connection.hpp +0 -1651
  2495. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/endpoint.hpp +0 -700
  2496. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp +0 -128
  2497. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/extensions/permessage_deflate/enabled.hpp +0 -752
  2498. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/frame.hpp +0 -861
  2499. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/impl/parser.hpp +0 -196
  2500. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/parser.hpp +0 -619
  2501. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/impl/connection_impl.hpp +0 -2372
  2502. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/impl/endpoint_impl.hpp +0 -269
  2503. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/base.hpp +0 -299
  2504. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/hybi13.hpp +0 -1056
  2505. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/roles/client_endpoint.hpp +0 -173
  2506. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/roles/server_endpoint.hpp +0 -190
  2507. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/sha1/sha1.hpp +0 -189
  2508. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/connection.hpp +0 -1204
  2509. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/endpoint.hpp +0 -1147
  2510. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/security/none.hpp +0 -370
  2511. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/security/tls.hpp +0 -484
  2512. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/base/endpoint.hpp +0 -77
  2513. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/debug/connection.hpp +0 -412
  2514. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/debug/endpoint.hpp +0 -140
  2515. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/iostream/connection.hpp +0 -714
  2516. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/iostream/endpoint.hpp +0 -222
  2517. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/stub/connection.hpp +0 -286
  2518. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/uri.hpp +0 -355
  2519. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/utilities.hpp +0 -182
  2520. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/version.hpp +0 -61
  2521. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +0 -457
  2522. data/src/cxx_supportlib/vendor-modified/boost/asio/datagram_socket_service.hpp +0 -468
  2523. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer_service.hpp +0 -175
  2524. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +0 -93
  2525. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +0 -70
  2526. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +0 -67
  2527. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +0 -101
  2528. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +0 -57
  2529. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_serial_port_service.ipp +0 -154
  2530. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +0 -64
  2531. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +0 -216
  2532. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_serial_port_service.hpp +0 -238
  2533. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_fwd.hpp +0 -42
  2534. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +0 -64
  2535. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +0 -119
  2536. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detached.hpp +0 -67
  2537. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_spawn.hpp +0 -878
  2538. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/detached.hpp +0 -93
  2539. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/redirect_error.hpp +0 -296
  2540. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/redirect_error.hpp +0 -69
  2541. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental.hpp +0 -22
  2542. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +0 -83
  2543. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +0 -87
  2544. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_type.hpp +0 -52
  2545. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +0 -79
  2546. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +0 -80
  2547. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +0 -54
  2548. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +0 -79
  2549. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.cpp +0 -25
  2550. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_service.hpp +0 -202
  2551. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor_service.hpp +0 -281
  2552. data/src/cxx_supportlib/vendor-modified/boost/asio/raw_socket_service.hpp +0 -468
  2553. data/src/cxx_supportlib/vendor-modified/boost/asio/seq_packet_socket_service.hpp +0 -418
  2554. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_service.hpp +0 -251
  2555. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_service.hpp +0 -144
  2556. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_acceptor_service.hpp +0 -374
  2557. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_socket_service.hpp +0 -414
  2558. data/src/cxx_supportlib/vendor-modified/boost/asio/waitable_timer_service.hpp +0 -212
  2559. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_handle.hpp +0 -275
  2560. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +0 -184
  2561. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +0 -378
  2562. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +0 -361
  2563. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +0 -383
  2564. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle_service.hpp +0 -185
  2565. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +0 -333
  2566. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +0 -118
  2567. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +0 -380
  2568. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle_service.hpp +0 -216
  2569. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +0 -364
  2570. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle_service.hpp +0 -212
  2571. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag.hpp +0 -71
  2572. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_template.hpp +0 -1248
  2573. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_alpha.hpp +0 -34
  2574. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_arm.hpp +0 -39
  2575. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_ppc.hpp +0 -37
  2576. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_sparc.hpp +0 -34
  2577. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_x86.hpp +0 -40
  2578. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_msvc_arm.hpp +0 -34
  2579. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_msvc_x86.hpp +0 -55
  2580. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_arm.hpp +0 -67
  2581. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_ppc.hpp +0 -42
  2582. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_x86.hpp +0 -58
  2583. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_extend.hpp +0 -105
  2584. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lockpool.hpp +0 -51
  2585. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations.hpp +0 -24
  2586. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations_fwd.hpp +0 -35
  2587. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations_lockfree.hpp +0 -30
  2588. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_cas_based.hpp +0 -107
  2589. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_emulated.hpp +0 -162
  2590. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_extending_cas_based.hpp +0 -69
  2591. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_alpha.hpp +0 -876
  2592. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm.hpp +0 -1397
  2593. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_atomic.hpp +0 -392
  2594. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc.hpp +0 -1232
  2595. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sparc.hpp +0 -240
  2596. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sync.hpp +0 -240
  2597. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86.hpp +0 -563
  2598. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +0 -556
  2599. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_linux_arm.hpp +0 -180
  2600. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_arm.hpp +0 -824
  2601. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_x86.hpp +0 -908
  2602. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_type.hpp +0 -207
  2603. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_cc.hpp +0 -117
  2604. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf2_cc.hpp +0 -228
  2605. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf_cc.hpp +0 -441
  2606. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_template.hpp +0 -345
  2607. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_cc.hpp +0 -103
  2608. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_template.hpp +0 -1047
  2609. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_vw.hpp +0 -130
  2610. data/src/cxx_supportlib/vendor-modified/boost/bind/storage.hpp +0 -475
  2611. data/src/cxx_supportlib/vendor-modified/boost/bind.hpp +0 -41
  2612. data/src/cxx_supportlib/vendor-modified/boost/checked_delete.hpp +0 -17
  2613. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/allocators.hpp +0 -89
  2614. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +0 -68
  2615. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/float_functions.hpp +0 -336
  2616. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_float.hpp +0 -271
  2617. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/limits.hpp +0 -62
  2618. data/src/cxx_supportlib/vendor-modified/boost/container_hash/extensions.hpp +0 -414
  2619. data/src/cxx_supportlib/vendor-modified/boost/detail/atomic_count.hpp +0 -21
  2620. data/src/cxx_supportlib/vendor-modified/boost/detail/container_fwd.hpp +0 -157
  2621. data/src/cxx_supportlib/vendor-modified/boost/detail/endian.hpp +0 -11
  2622. data/src/cxx_supportlib/vendor-modified/boost/detail/iterator.hpp +0 -39
  2623. data/src/cxx_supportlib/vendor-modified/boost/detail/sp_typeinfo.hpp +0 -36
  2624. data/src/cxx_supportlib/vendor-modified/boost/function/detail/function_iterate.hpp +0 -16
  2625. data/src/cxx_supportlib/vendor-modified/boost/function/detail/gen_maybe_include.pl +0 -39
  2626. data/src/cxx_supportlib/vendor-modified/boost/function/detail/maybe_include.hpp +0 -369
  2627. data/src/cxx_supportlib/vendor-modified/boost/function/detail/prologue.hpp +0 -26
  2628. data/src/cxx_supportlib/vendor-modified/boost/function/gen_function_N.pl +0 -26
  2629. data/src/cxx_supportlib/vendor-modified/boost/functional/hash_fwd.hpp +0 -6
  2630. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/c_regex_traits.cpp +0 -206
  2631. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cpp_regex_traits.cpp +0 -117
  2632. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cregex.cpp +0 -660
  2633. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/instances.cpp +0 -32
  2634. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_raw_buffer.cpp +0 -72
  2635. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_traits_defaults.cpp +0 -692
  2636. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wc_regex_traits.cpp +0 -314
  2637. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/winstances.cpp +0 -35
  2638. data/src/cxx_supportlib/vendor-modified/boost/math/policies/policy.hpp +0 -1040
  2639. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +0 -581
  2640. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/round_fwd.hpp +0 -93
  2641. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/fpclassify.hpp +0 -640
  2642. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +0 -1678
  2643. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/sign.hpp +0 -194
  2644. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +0 -469
  2645. data/src/cxx_supportlib/vendor-modified/boost/math/tools/promotion.hpp +0 -182
  2646. data/src/cxx_supportlib/vendor-modified/boost/math/tools/real_cast.hpp +0 -31
  2647. data/src/cxx_supportlib/vendor-modified/boost/math/tools/user.hpp +0 -105
  2648. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/overloads.hpp +0 -88
  2649. data/src/cxx_supportlib/vendor-modified/boost/pointer_to_other.hpp +0 -55
  2650. data/src/cxx_supportlib/vendor-modified/boost/predef/detail/endian_compat.h +0 -28
  2651. data/src/cxx_supportlib/vendor-modified/boost/predef/os/android.h +0 -45
  2652. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/abs.hpp +0 -89
  2653. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/gcd.hpp +0 -124
  2654. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/lcm.hpp +0 -126
  2655. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/sign.hpp +0 -89
  2656. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/overflow_helpers.hpp +0 -367
  2657. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/ratio_io.hpp +0 -1342
  2658. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/abs.hpp +0 -30
  2659. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/arithmetic.hpp +0 -22
  2660. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/comparison.hpp +0 -19
  2661. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/divides.hpp +0 -30
  2662. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/equal_to.hpp +0 -30
  2663. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/gcd.hpp +0 -30
  2664. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater.hpp +0 -30
  2665. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater_equal.hpp +0 -30
  2666. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/lcm.hpp +0 -30
  2667. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less.hpp +0 -30
  2668. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less_equal.hpp +0 -30
  2669. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/minus.hpp +0 -30
  2670. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/negate.hpp +0 -30
  2671. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/not_equal_to.hpp +0 -30
  2672. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/numeric_cast.hpp +0 -31
  2673. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/plus.hpp +0 -30
  2674. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_c_tag.hpp +0 -25
  2675. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_constant.hpp +0 -15
  2676. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/sign.hpp +0 -30
  2677. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/times.hpp +0 -30
  2678. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +0 -452
  2679. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +0 -236
  2680. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_solaris.hpp +0 -59
  2681. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +0 -151
  2682. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +0 -161
  2683. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +0 -116
  2684. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync.hpp +0 -69
  2685. data/src/cxx_supportlib/vendor-modified/boost/swap.hpp +0 -17
  2686. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_interoperability.hpp +0 -141
  2687. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_posix.hpp +0 -132
  2688. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +0 -278
  2689. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +0 -297
  2690. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +0 -265
  2691. data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +0 -100
  2692. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -58
  2693. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +0 -34
  2694. data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +0 -117
  2695. data/src/cxx_supportlib/vendor-modified/boost/typeof/integral_template_param.hpp +0 -80
  2696. data/src/cxx_supportlib/vendor-modified/boost/typeof/message.hpp +0 -8
  2697. data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +0 -121
  2698. data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +0 -60
  2699. data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +0 -38
  2700. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions.hpp +0 -50
  2701. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +0 -135
  2702. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +0 -61
  2703. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +0 -32
  2704. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +0 -160
  2705. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +0 -149
  2706. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +0 -27
  2707. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_template_param.hpp +0 -37
  2708. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +0 -186
  2709. data/src/cxx_supportlib/vendor-modified/boost/typeof/unsupported.hpp +0 -29
  2710. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +0 -166
  2711. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +0 -321
  2712. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +0 -471
  2713. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +0 -621
  2714. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +0 -171
  2715. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +0 -63
  2716. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/daily-rotate-file.js +0 -601
  2717. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/webhook.js +0 -146
  2718. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/LICENSE +0 -19
  2719. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/lib/pkginfo.js +0 -136
  2720. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/package.json +0 -56
  2721. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/COPYING +0 -0
  2722. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/base64/base64.hpp +0 -0
  2723. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/client.hpp +0 -0
  2724. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/asio_ssl.hpp +0 -0
  2725. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/chrono.hpp +0 -0
  2726. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/connection_hdl.hpp +0 -0
  2727. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/cpp11.hpp +0 -0
  2728. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/network.hpp +0 -0
  2729. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/platforms.hpp +0 -0
  2730. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/random.hpp +0 -0
  2731. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/regex.hpp +0 -0
  2732. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/stdint.hpp +0 -0
  2733. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/system_error.hpp +0 -0
  2734. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/time.hpp +0 -0
  2735. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/type_traits.hpp +0 -0
  2736. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/concurrency/basic.hpp +0 -0
  2737. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/concurrency/none.hpp +0 -0
  2738. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/asio.hpp +0 -0
  2739. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/asio_client.hpp +0 -0
  2740. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/asio_no_tls.hpp +0 -0
  2741. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/asio_no_tls_client.hpp +0 -0
  2742. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/boost_config.hpp +0 -0
  2743. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/core_client.hpp +0 -0
  2744. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/debug.hpp +0 -0
  2745. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/debug_asio.hpp +0 -0
  2746. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/debug_asio_no_tls.hpp +0 -0
  2747. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/minimal_client.hpp +0 -0
  2748. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/minimal_server.hpp +0 -0
  2749. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/connection_base.hpp +0 -0
  2750. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/endpoint_base.hpp +0 -0
  2751. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/error.hpp +0 -0
  2752. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/extensions/extension.hpp +0 -0
  2753. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/constants.hpp +0 -0
  2754. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/impl/request.hpp +0 -0
  2755. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/impl/response.hpp +0 -0
  2756. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/request.hpp +0 -0
  2757. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/response.hpp +0 -0
  2758. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/impl/utilities_impl.hpp +0 -0
  2759. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/logger/basic.hpp +0 -0
  2760. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/logger/levels.hpp +0 -0
  2761. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/logger/stub.hpp +0 -0
  2762. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/logger/syslog.hpp +0 -0
  2763. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/message_buffer/alloc.hpp +0 -0
  2764. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/message_buffer/message.hpp +0 -0
  2765. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/message_buffer/pool.hpp +0 -0
  2766. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/hybi00.hpp +0 -0
  2767. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/hybi07.hpp +0 -0
  2768. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/hybi08.hpp +0 -0
  2769. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/processor.hpp +0 -0
  2770. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/random/none.hpp +0 -0
  2771. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/random/random_device.hpp +0 -0
  2772. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/server.hpp +0 -0
  2773. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/asio/base.hpp +0 -0
  2774. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/asio/security/base.hpp +0 -0
  2775. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/base/connection.hpp +0 -0
  2776. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/debug/base.hpp +0 -0
  2777. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/iostream/base.hpp +0 -0
  2778. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/stub/base.hpp +0 -0
  2779. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/stub/endpoint.hpp +0 -0
  2780. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/utf8_validator.hpp +0 -0
@@ -1,6 +1,8 @@
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.
5
+ // (C) Copyright 2022 Christian Mazakas
4
6
  //
5
7
  // Distributed under the Boost Software License, Version 1.0.
6
8
  // (See accompanying file LICENSE_1_0.txt or copy at
@@ -9,12 +11,29 @@
9
11
  // See http://www.boost.org/libs/intrusive for documentation.
10
12
  //
11
13
  /////////////////////////////////////////////////////////////////////////////
14
+
15
+ // fastmod_buckets option is implemented reusing parts of Joaquin M. Lopez
16
+ // Munoz's "fxa_unordered" library (proof of concept of closed- and
17
+ // open-addressing unordered associative containers), released under
18
+ // Boost Software License:
19
+ //
20
+ // https://github.com/joaquintides/fxa_unordered/
21
+ //
22
+ // On cases and systems that can't take advantage of Daniel Lemire's
23
+ // "fastmod" (https://github.com/lemire/fastmod) approach,
24
+ // precomputed divisions are used.
25
+ //
26
+ // As always, thanks Joaquin for your great work!
27
+
28
+
12
29
  #ifndef BOOST_INTRUSIVE_HASHTABLE_HPP
13
30
  #define BOOST_INTRUSIVE_HASHTABLE_HPP
14
31
 
15
32
  #include <boost/intrusive/detail/config_begin.hpp>
16
33
  #include <boost/intrusive/intrusive_fwd.hpp>
17
34
 
35
+ #include <boost/move/detail/meta_utils_core.hpp>
36
+
18
37
  //General intrusive utilities
19
38
  #include <boost/intrusive/detail/hashtable_node.hpp>
20
39
  #include <boost/intrusive/detail/transform_iterator.hpp>
@@ -27,41 +46,339 @@
27
46
  #include <boost/intrusive/detail/simple_disposers.hpp>
28
47
  #include <boost/intrusive/detail/size_holder.hpp>
29
48
  #include <boost/intrusive/detail/iterator.hpp>
49
+ #include <boost/intrusive/detail/get_value_traits.hpp>
50
+ #include <boost/intrusive/detail/algorithm.hpp>
51
+ #include <boost/intrusive/detail/value_functors.hpp>
30
52
 
31
53
  //Implementation utilities
32
54
  #include <boost/intrusive/unordered_set_hook.hpp>
33
- #include <boost/intrusive/slist.hpp>
55
+ #include <boost/intrusive/detail/slist_iterator.hpp>
34
56
  #include <boost/intrusive/pointer_traits.hpp>
35
57
  #include <boost/intrusive/detail/mpl.hpp>
58
+ #include <boost/intrusive/circular_slist_algorithms.hpp>
59
+ #include <boost/intrusive/linear_slist_algorithms.hpp>
36
60
 
37
61
  //boost
38
- #include <boost/functional/hash.hpp>
39
62
  #include <boost/intrusive/detail/assert.hpp>
40
- #include <boost/static_assert.hpp>
41
63
  #include <boost/move/utility_core.hpp>
42
64
  #include <boost/move/adl_move_swap.hpp>
65
+ #include <boost/move/algo/detail/search.hpp>
43
66
 
44
67
  //std C++
45
- #include <boost/intrusive/detail/minimal_less_equal_header.hpp> //std::equal_to
46
68
  #include <boost/intrusive/detail/minimal_pair_header.hpp> //std::pair
47
- #include <algorithm> //std::lower_bound, std::upper_bound
48
69
  #include <cstddef> //std::size_t
70
+ #include <boost/cstdint.hpp> //std::uint64_t
71
+
72
+
73
+ #include "detail/hash.hpp"
49
74
 
50
75
  #if defined(BOOST_HAS_PRAGMA_ONCE)
51
76
  # pragma once
52
77
  #endif
53
78
 
79
+ #ifdef _MSC_VER
80
+ #include <intrin.h>
81
+ #endif
82
+
83
+
54
84
  namespace boost {
85
+
55
86
  namespace intrusive {
56
87
 
88
+
89
+ #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
90
+
57
91
  /// @cond
58
92
 
93
+ //We only support LLP64(Win64) or LP64(most Unix) data models
94
+ #ifdef _WIN64 //In 64 bit windows sizeof(size_t) == sizeof(unsigned long long)
95
+ # define BOOST_INTRUSIVE_SIZE_C(NUMBER) NUMBER##ULL
96
+ # define BOOST_INTRUSIVE_64_BIT_SIZE_T 1
97
+ #else //In 32 bit windows and 32/64 bit unixes sizeof(size_t) == sizeof(unsigned long)
98
+ # define BOOST_INTRUSIVE_SIZE_C(NUMBER) NUMBER##UL
99
+ # define BOOST_INTRUSIVE_64_BIT_SIZE_T (((((ULONG_MAX>>16)>>16)>>16)>>15) != 0)
100
+ #endif
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 inline 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 inline 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 inline 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 inline 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 inline 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 inline 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 inline 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
+ inline static std::size_t modfunc(std::size_t hash) { return hash % SizeIndex; }
171
+
172
+ static std::size_t(*const positions[])(std::size_t);
173
+
174
+ #if BOOST_INTRUSIVE_64_BIT_SIZE_T
175
+ static const uint64_t inv_sizes32[];
176
+ static const std::size_t inv_sizes32_size;
177
+ #endif
178
+
179
+ inline static std::size_t lower_size_index(std::size_t n)
180
+ { return prime_list_holder<>::suggested_lower_bucket_count_idx(n); }
181
+
182
+ inline static std::size_t upper_size_index(std::size_t n)
183
+ { return prime_list_holder<>::suggested_upper_bucket_count_idx(n); }
184
+
185
+ inline static std::size_t size(std::size_t size_index)
186
+ { return prime_list_holder<>::size_from_index(size_index); }
187
+
188
+ #if BOOST_INTRUSIVE_64_BIT_SIZE_T
189
+ // https://github.com/lemire/fastmod
190
+
191
+ inline static uint64_t mul128_u32(uint64_t lowbits, uint32_t d)
192
+ {
193
+ #if defined(_MSC_VER)
194
+ return __umulh(lowbits, d);
195
+ #elif defined(BOOST_HAS_INT128)
196
+ return static_cast<uint64_t>((uint128_type(lowbits) * d) >> 64);
197
+ #else
198
+ uint64_t r1 = (lowbits & UINT32_MAX) * d;
199
+ uint64_t r2 = (lowbits >> 32) * d;
200
+ r2 += r1 >> 32;
201
+ return r2 >> 32;
202
+ #endif
203
+ }
204
+
205
+ inline static uint32_t fastmod_u32(uint32_t a, uint64_t M, uint32_t d)
206
+ {
207
+ uint64_t lowbits = M * a;
208
+ return (uint32_t)(mul128_u32(lowbits, d));
209
+ }
210
+ #endif // BOOST_INTRUSIVE_64_BIT_SIZE_T
211
+
212
+ inline static std::size_t position(std::size_t hash,std::size_t size_index)
213
+ {
214
+ #if BOOST_INTRUSIVE_64_BIT_SIZE_T
215
+ BOOST_CONSTEXPR_OR_CONST std::size_t sizes_under_32bit = sizeof(inv_sizes32)/sizeof(inv_sizes32[0]);
216
+ if(BOOST_LIKELY(size_index < sizes_under_32bit)){
217
+ return fastmod_u32( uint32_t(hash)+uint32_t(hash>>32)
218
+ , inv_sizes32[size_index]
219
+ , uint32_t(prime_list[size_index]) );
220
+ }
221
+ else{
222
+ return positions[size_index](hash);
223
+ }
224
+ #else
225
+ return positions[size_index](hash);
226
+ #endif // BOOST_INTRUSIVE_64_BIT_SIZE_T
227
+ }
228
+ };
229
+
230
+ template<int Dummy>
231
+ std::size_t(* const prime_list_holder<Dummy>::positions[])(std::size_t) =
232
+ {
233
+ modfunc<BOOST_INTRUSIVE_SIZE_C(3)>, modfunc<BOOST_INTRUSIVE_SIZE_C(7)>,
234
+ modfunc<BOOST_INTRUSIVE_SIZE_C(11)>, modfunc<BOOST_INTRUSIVE_SIZE_C(17)>,
235
+ modfunc<BOOST_INTRUSIVE_SIZE_C(29)>, modfunc<BOOST_INTRUSIVE_SIZE_C(53)>,
236
+ modfunc<BOOST_INTRUSIVE_SIZE_C(97)>, modfunc<BOOST_INTRUSIVE_SIZE_C(193)>,
237
+ modfunc<BOOST_INTRUSIVE_SIZE_C(389)>, modfunc<BOOST_INTRUSIVE_SIZE_C(769)>,
238
+ modfunc<BOOST_INTRUSIVE_SIZE_C(1543)>, modfunc<BOOST_INTRUSIVE_SIZE_C(3079)>,
239
+ modfunc<BOOST_INTRUSIVE_SIZE_C(6151)>, modfunc<BOOST_INTRUSIVE_SIZE_C(12289)>,
240
+ modfunc<BOOST_INTRUSIVE_SIZE_C(24593)>, modfunc<BOOST_INTRUSIVE_SIZE_C(49157)>,
241
+ modfunc<BOOST_INTRUSIVE_SIZE_C(98317)>, modfunc<BOOST_INTRUSIVE_SIZE_C(196613)>,
242
+ modfunc<BOOST_INTRUSIVE_SIZE_C(393241)>, modfunc<BOOST_INTRUSIVE_SIZE_C(786433)>,
243
+ modfunc<BOOST_INTRUSIVE_SIZE_C(1572869)>, modfunc<BOOST_INTRUSIVE_SIZE_C(3145739)>,
244
+ modfunc<BOOST_INTRUSIVE_SIZE_C(6291469)>, modfunc<BOOST_INTRUSIVE_SIZE_C(12582917)>,
245
+ modfunc<BOOST_INTRUSIVE_SIZE_C(25165843)>, modfunc<BOOST_INTRUSIVE_SIZE_C(50331653)>,
246
+ modfunc<BOOST_INTRUSIVE_SIZE_C(100663319)>, modfunc<BOOST_INTRUSIVE_SIZE_C(201326611)>,
247
+ modfunc<BOOST_INTRUSIVE_SIZE_C(402653189)>, modfunc<BOOST_INTRUSIVE_SIZE_C(805306457)>,
248
+ modfunc<BOOST_INTRUSIVE_SIZE_C(1610612741)>, //0-30 indexes
249
+ #if BOOST_INTRUSIVE_64_BIT_SIZE_T
250
+ //Taken from Boost.MultiIndex code, thanks to Joaquin M. Lopez Munoz.
251
+ modfunc<BOOST_INTRUSIVE_SIZE_C(3221225473)>, //<- 32 bit values stop here (index 31)
252
+ modfunc<BOOST_INTRUSIVE_SIZE_C(6442450939)>, modfunc<BOOST_INTRUSIVE_SIZE_C(12884901893)>,
253
+ modfunc<BOOST_INTRUSIVE_SIZE_C(25769803751)>, modfunc<BOOST_INTRUSIVE_SIZE_C(51539607551)>,
254
+ modfunc<BOOST_INTRUSIVE_SIZE_C(103079215111)>, modfunc<BOOST_INTRUSIVE_SIZE_C(206158430209)>,
255
+ modfunc<BOOST_INTRUSIVE_SIZE_C(412316860441)>, modfunc<BOOST_INTRUSIVE_SIZE_C(824633720831)>,
256
+ modfunc<BOOST_INTRUSIVE_SIZE_C(1649267441651)>, modfunc<BOOST_INTRUSIVE_SIZE_C(3298534883309)>,
257
+ modfunc<BOOST_INTRUSIVE_SIZE_C(6597069766657)>, modfunc<BOOST_INTRUSIVE_SIZE_C(13194139533299)>,
258
+ modfunc<BOOST_INTRUSIVE_SIZE_C(26388279066623)>, modfunc<BOOST_INTRUSIVE_SIZE_C(52776558133303)>,
259
+ modfunc<BOOST_INTRUSIVE_SIZE_C(105553116266489)>, modfunc<BOOST_INTRUSIVE_SIZE_C(211106232532969)>,
260
+ modfunc<BOOST_INTRUSIVE_SIZE_C(422212465066001)>, modfunc<BOOST_INTRUSIVE_SIZE_C(844424930131963)>,
261
+ modfunc<BOOST_INTRUSIVE_SIZE_C(1688849860263953)>, modfunc<BOOST_INTRUSIVE_SIZE_C(3377699720527861)>,
262
+ modfunc<BOOST_INTRUSIVE_SIZE_C(6755399441055731)>, modfunc<BOOST_INTRUSIVE_SIZE_C(13510798882111483)>,
263
+ modfunc<BOOST_INTRUSIVE_SIZE_C(27021597764222939)>, modfunc<BOOST_INTRUSIVE_SIZE_C(54043195528445957)>,
264
+ modfunc<BOOST_INTRUSIVE_SIZE_C(108086391056891903)>, modfunc<BOOST_INTRUSIVE_SIZE_C(216172782113783843)>,
265
+ modfunc<BOOST_INTRUSIVE_SIZE_C(432345564227567621)>, modfunc<BOOST_INTRUSIVE_SIZE_C(864691128455135207)>,
266
+ modfunc<BOOST_INTRUSIVE_SIZE_C(1729382256910270481)>, modfunc<BOOST_INTRUSIVE_SIZE_C(3458764513820540933)>,
267
+ modfunc<BOOST_INTRUSIVE_SIZE_C(6917529027641081903)>, modfunc<BOOST_INTRUSIVE_SIZE_C(9223372036854775783)> //(index 63)
268
+ #else
269
+ modfunc<BOOST_INTRUSIVE_SIZE_C(2147483647)> //<- 32 bit stops here (index 31) as ptrdiff_t is signed
270
+ #endif
271
+ };
272
+
273
+ template<int Dummy>
274
+ const std::size_t prime_list_holder<Dummy>::prime_list[] = {
275
+ BOOST_INTRUSIVE_SIZE_C(3), BOOST_INTRUSIVE_SIZE_C(7),
276
+ BOOST_INTRUSIVE_SIZE_C(11), BOOST_INTRUSIVE_SIZE_C(17),
277
+ BOOST_INTRUSIVE_SIZE_C(29), BOOST_INTRUSIVE_SIZE_C(53),
278
+ BOOST_INTRUSIVE_SIZE_C(97), BOOST_INTRUSIVE_SIZE_C(193),
279
+ BOOST_INTRUSIVE_SIZE_C(389), BOOST_INTRUSIVE_SIZE_C(769),
280
+ BOOST_INTRUSIVE_SIZE_C(1543), BOOST_INTRUSIVE_SIZE_C(3079),
281
+ BOOST_INTRUSIVE_SIZE_C(6151), BOOST_INTRUSIVE_SIZE_C(12289),
282
+ BOOST_INTRUSIVE_SIZE_C(24593), BOOST_INTRUSIVE_SIZE_C(49157),
283
+ BOOST_INTRUSIVE_SIZE_C(98317), BOOST_INTRUSIVE_SIZE_C(196613),
284
+ BOOST_INTRUSIVE_SIZE_C(393241), BOOST_INTRUSIVE_SIZE_C(786433),
285
+ BOOST_INTRUSIVE_SIZE_C(1572869), BOOST_INTRUSIVE_SIZE_C(3145739),
286
+ BOOST_INTRUSIVE_SIZE_C(6291469), BOOST_INTRUSIVE_SIZE_C(12582917),
287
+ BOOST_INTRUSIVE_SIZE_C(25165843), BOOST_INTRUSIVE_SIZE_C(50331653),
288
+ BOOST_INTRUSIVE_SIZE_C(100663319), BOOST_INTRUSIVE_SIZE_C(201326611),
289
+ BOOST_INTRUSIVE_SIZE_C(402653189), BOOST_INTRUSIVE_SIZE_C(805306457),
290
+ BOOST_INTRUSIVE_SIZE_C(1610612741), //0-30 indexes
291
+ #if BOOST_INTRUSIVE_64_BIT_SIZE_T
292
+ //Taken from Boost.MultiIndex code, thanks to Joaquin M. Lopez Munoz.
293
+ BOOST_INTRUSIVE_SIZE_C(3221225473), //<- 32 bit values stop here (index 31)
294
+ BOOST_INTRUSIVE_SIZE_C(6442450939), BOOST_INTRUSIVE_SIZE_C(12884901893),
295
+ BOOST_INTRUSIVE_SIZE_C(25769803751), BOOST_INTRUSIVE_SIZE_C(51539607551),
296
+ BOOST_INTRUSIVE_SIZE_C(103079215111), BOOST_INTRUSIVE_SIZE_C(206158430209),
297
+ BOOST_INTRUSIVE_SIZE_C(412316860441), BOOST_INTRUSIVE_SIZE_C(824633720831),
298
+ BOOST_INTRUSIVE_SIZE_C(1649267441651), BOOST_INTRUSIVE_SIZE_C(3298534883309),
299
+ BOOST_INTRUSIVE_SIZE_C(6597069766657), BOOST_INTRUSIVE_SIZE_C(13194139533299),
300
+ BOOST_INTRUSIVE_SIZE_C(26388279066623), BOOST_INTRUSIVE_SIZE_C(52776558133303),
301
+ BOOST_INTRUSIVE_SIZE_C(105553116266489), BOOST_INTRUSIVE_SIZE_C(211106232532969),
302
+ BOOST_INTRUSIVE_SIZE_C(422212465066001), BOOST_INTRUSIVE_SIZE_C(844424930131963),
303
+ BOOST_INTRUSIVE_SIZE_C(1688849860263953), BOOST_INTRUSIVE_SIZE_C(3377699720527861),
304
+ BOOST_INTRUSIVE_SIZE_C(6755399441055731), BOOST_INTRUSIVE_SIZE_C(13510798882111483),
305
+ BOOST_INTRUSIVE_SIZE_C(27021597764222939), BOOST_INTRUSIVE_SIZE_C(54043195528445957),
306
+ BOOST_INTRUSIVE_SIZE_C(108086391056891903), BOOST_INTRUSIVE_SIZE_C(216172782113783843),
307
+ BOOST_INTRUSIVE_SIZE_C(432345564227567621), BOOST_INTRUSIVE_SIZE_C(864691128455135207),
308
+ BOOST_INTRUSIVE_SIZE_C(1729382256910270481), BOOST_INTRUSIVE_SIZE_C(3458764513820540933),
309
+ BOOST_INTRUSIVE_SIZE_C(6917529027641081903), BOOST_INTRUSIVE_SIZE_C(9223372036854775783) //(index 63)
310
+ #else
311
+ BOOST_INTRUSIVE_SIZE_C(2147483647) //<- 32 bit stops here (index 31) as ptrdiff_t is signed
312
+ #endif
313
+ };
314
+
315
+ template<int Dummy>
316
+ const std::size_t prime_list_holder<Dummy>::prime_list_size
317
+ = sizeof(prime_list) / sizeof(std::size_t);
318
+
319
+
320
+ #if BOOST_INTRUSIVE_64_BIT_SIZE_T
321
+
322
+ template<int Dummy>
323
+ const uint64_t prime_list_holder<Dummy>::inv_sizes32[] = {
324
+ BOOST_INTRUSIVE_SIZE_C(6148914691236517206), //3
325
+ BOOST_INTRUSIVE_SIZE_C(2635249153387078803), //7
326
+ BOOST_INTRUSIVE_SIZE_C(1676976733973595602), //11
327
+ BOOST_INTRUSIVE_SIZE_C(1085102592571150096), //17
328
+ BOOST_INTRUSIVE_SIZE_C(636094623231363849), //29
329
+ BOOST_INTRUSIVE_SIZE_C(348051774975651918), //53
330
+ BOOST_INTRUSIVE_SIZE_C(190172619316593316), //97
331
+ BOOST_INTRUSIVE_SIZE_C(95578984837873325), //193
332
+ BOOST_INTRUSIVE_SIZE_C(47420935922132524), //389
333
+ BOOST_INTRUSIVE_SIZE_C(23987963684927896), //769
334
+ BOOST_INTRUSIVE_SIZE_C(11955116055547344), //1543
335
+ BOOST_INTRUSIVE_SIZE_C(5991147799191151), //3079
336
+ BOOST_INTRUSIVE_SIZE_C(2998982941588287), //6151
337
+ BOOST_INTRUSIVE_SIZE_C(1501077717772769), //12289
338
+ BOOST_INTRUSIVE_SIZE_C(750081082979285), //24593
339
+ BOOST_INTRUSIVE_SIZE_C(375261795343686), //49157
340
+ BOOST_INTRUSIVE_SIZE_C(187625172388393), //98317
341
+ BOOST_INTRUSIVE_SIZE_C(93822606204624), //196613
342
+ BOOST_INTRUSIVE_SIZE_C(46909513691883), //393241
343
+ BOOST_INTRUSIVE_SIZE_C(23456218233098), //786433
344
+ BOOST_INTRUSIVE_SIZE_C(11728086747027), //1572869
345
+ BOOST_INTRUSIVE_SIZE_C(5864041509391), //3145739
346
+ BOOST_INTRUSIVE_SIZE_C(2932024948977), //6291469
347
+ BOOST_INTRUSIVE_SIZE_C(1466014921160), //12582917
348
+ BOOST_INTRUSIVE_SIZE_C(733007198436), //25165843
349
+ BOOST_INTRUSIVE_SIZE_C(366503839517), //50331653
350
+ BOOST_INTRUSIVE_SIZE_C(183251896093), //100663319
351
+ BOOST_INTRUSIVE_SIZE_C(91625960335), //201326611
352
+ BOOST_INTRUSIVE_SIZE_C(45812983922), //402653189
353
+ BOOST_INTRUSIVE_SIZE_C(22906489714), //805306457
354
+ BOOST_INTRUSIVE_SIZE_C(11453246088), //1610612741
355
+ BOOST_INTRUSIVE_SIZE_C(5726623060) //3221225473
356
+ };
357
+
358
+ template<int Dummy>
359
+ const std::size_t prime_list_holder<Dummy>::inv_sizes32_size
360
+ = sizeof(inv_sizes32) / sizeof(uint64_t);
361
+
362
+ #endif // BOOST_INTRUSIVE_64_BIT_SIZE_T
363
+
364
+ struct prime_fmod_size : prime_list_holder<>
365
+ {
366
+ };
367
+
368
+
369
+ #undef BOOST_INTRUSIVE_SIZE_C
370
+ #undef BOOST_INTRUSIVE_64_BIT_SIZE_T
371
+
372
+ #endif //#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
373
+
374
+
375
+
59
376
  template<class InputIt, class T>
60
377
  InputIt priv_algo_find(InputIt first, InputIt last, const T& value)
61
378
  {
62
379
  for (; first != last; ++first) {
63
380
  if (*first == value) {
64
- return first;
381
+ return first;
65
382
  }
66
383
  }
67
384
  return last;
@@ -105,242 +422,169 @@ bool priv_algo_is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, F
105
422
  continue; //We've seen this one before.
106
423
  }
107
424
  distance_type matches = (priv_algo_count)(first2, last2, *scan);
108
- if (0 == matches || (priv_algo_count)(scan, last1, *scan != matches)){
425
+ if (0 == matches || (priv_algo_count)(scan, last1, *scan) != matches){
109
426
  return false;
110
427
  }
111
428
  }
112
429
  return true;
113
430
  }
114
431
 
115
- template<int Dummy = 0>
116
- struct prime_list_holder
432
+ struct hash_bool_flags
117
433
  {
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
- }
434
+ static const std::size_t unique_keys_pos = 1u;
435
+ static const std::size_t constant_time_size_pos = 2u;
436
+ static const std::size_t power_2_buckets_pos = 4u;
437
+ static const std::size_t cache_begin_pos = 8u;
438
+ static const std::size_t compare_hash_pos = 16u;
439
+ static const std::size_t incremental_pos = 32u;
440
+ static const std::size_t linear_buckets_pos = 64u;
441
+ static const std::size_t fastmod_buckets_pos = 128u;
442
+ };
125
443
 
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
- }
444
+ template<class Bucket, class Algo, class Disposer, class SizeType>
445
+ class exception_bucket_disposer
446
+ {
447
+ Bucket *cont_;
448
+ Disposer &disp_;
449
+ const SizeType &constructed_;
131
450
 
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
- }
451
+ exception_bucket_disposer(const exception_bucket_disposer&);
452
+ exception_bucket_disposer &operator=(const exception_bucket_disposer&);
140
453
 
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
- }
454
+ public:
149
455
 
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))>());
456
+ exception_bucket_disposer
457
+ (Bucket &cont, Disposer &disp, const SizeType &constructed)
458
+ : cont_(&cont), disp_(disp), constructed_(constructed)
459
+ {}
155
460
 
156
- }
461
+ inline void release()
462
+ { cont_ = 0; }
157
463
 
158
- template <class SizeType>
159
- static BOOST_INTRUSIVE_FORCEINLINE SizeType suggested_lower_bucket_count_dispatch(SizeType n, detail::false_)
464
+ ~exception_bucket_disposer()
160
465
  {
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))>());
466
+ SizeType n = constructed_;
467
+ if(cont_){
468
+ while(n--){
469
+ Algo::detach_and_dispose(cont_[n].get_node_ptr(), disp_);
470
+ }
471
+ }
163
472
  }
473
+ };
164
474
 
165
- static const std::size_t prime_list[];
166
- static const std::size_t prime_list_size;
475
+ template<class SupposedValueTraits>
476
+ struct unordered_bucket_impl
477
+ {
478
+ typedef typename detail::get_node_traits
479
+ <SupposedValueTraits>::type node_traits;
480
+ typedef typename reduced_slist_node_traits
481
+ <node_traits>::type reduced_node_traits;
482
+ typedef bucket_impl<reduced_node_traits> type;
167
483
 
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
- }
484
+ typedef typename pointer_traits
485
+ <typename reduced_node_traits::node_ptr>
486
+ ::template rebind_pointer<type>::type pointer;
487
+ };
178
488
 
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
- }
489
+ template<class SupposedValueTraits>
490
+ struct unordered_bucket_ptr_impl
491
+ {
492
+ typedef typename unordered_bucket_impl<SupposedValueTraits>::pointer type;
493
+ };
187
494
 
188
- public:
189
495
 
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
- }
496
+ template <class BucketPtr, class SizeType>
497
+ struct bucket_traits_impl
498
+ {
499
+ private:
500
+ BOOST_COPYABLE_AND_MOVABLE(bucket_traits_impl)
195
501
 
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
- };
502
+ public:
503
+ /// @cond
202
504
 
203
- #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
505
+ typedef BucketPtr bucket_ptr;
506
+ typedef SizeType size_type;
204
507
 
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
508
+ /// @endcond
213
509
 
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
- };
510
+ inline bucket_traits_impl(bucket_ptr buckets, size_type len)
511
+ : buckets_(buckets), buckets_len_(len)
512
+ {}
255
513
 
256
- #undef BOOST_INTRUSIVE_PRIME_C
257
- #undef BOOST_INTRUSIVE_64_BIT_SIZE_T
514
+ inline bucket_traits_impl(const bucket_traits_impl& x)
515
+ : buckets_(x.buckets_), buckets_len_(x.buckets_len_)
516
+ {}
258
517
 
259
- #endif //#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
518
+ inline bucket_traits_impl(BOOST_RV_REF(bucket_traits_impl) x)
519
+ : buckets_(x.buckets_), buckets_len_(x.buckets_len_)
520
+ {
521
+ x.buckets_ = bucket_ptr(); x.buckets_len_ = 0u;
522
+ }
260
523
 
261
- template<int Dummy>
262
- const std::size_t prime_list_holder<Dummy>::prime_list_size
263
- = sizeof(prime_list)/sizeof(std::size_t);
524
+ inline bucket_traits_impl& operator=(BOOST_RV_REF(bucket_traits_impl) x)
525
+ {
526
+ buckets_ = x.buckets_; buckets_len_ = x.buckets_len_;
527
+ x.buckets_ = bucket_ptr(); x.buckets_len_ = 0u; return *this;
528
+ }
264
529
 
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
- };
530
+ inline bucket_traits_impl& operator=(BOOST_COPY_ASSIGN_REF(bucket_traits_impl) x)
531
+ {
532
+ buckets_ = x.buckets_; buckets_len_ = x.buckets_len_; return *this;
533
+ }
274
534
 
275
- namespace detail {
535
+ inline bucket_ptr bucket_begin() const
536
+ {
537
+ return buckets_;
538
+ }
276
539
 
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
- };
540
+ inline size_type bucket_count() const BOOST_NOEXCEPT
541
+ {
542
+ return buckets_len_;
543
+ }
288
544
 
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;
545
+ private:
546
+ bucket_ptr buckets_;
547
+ size_type buckets_len_;
297
548
  };
298
549
 
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
550
 
313
551
  template <class T>
314
552
  struct store_hash_is_true
315
553
  {
316
554
  template<bool Add>
317
- struct two_or_three {yes_type _[2 + Add];};
318
- template <class U> static yes_type test(...);
555
+ struct two_or_three {detail::yes_type _[2u + (unsigned)Add];};
556
+ template <class U> static detail::yes_type test(...);
319
557
  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;
558
+ static const bool value = sizeof(test<T>(0)) > sizeof(detail::yes_type)*2u;
321
559
  };
322
560
 
323
561
  template <class T>
324
562
  struct optimize_multikey_is_true
325
563
  {
326
564
  template<bool Add>
327
- struct two_or_three {yes_type _[2 + Add];};
328
- template <class U> static yes_type test(...);
565
+ struct two_or_three { detail::yes_type _[2u + (unsigned)Add];};
566
+ template <class U> static detail::yes_type test(...);
329
567
  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;
568
+ static const bool value = sizeof(test<T>(0)) > sizeof(detail::yes_type)*2u;
331
569
  };
332
570
 
333
571
  struct insert_commit_data_impl
334
572
  {
335
573
  std::size_t hash;
574
+ std::size_t bucket_idx;
575
+ inline std::size_t get_hash() const
576
+ { return hash; }
577
+
578
+ inline void set_hash(std::size_t h)
579
+ { hash = h; }
336
580
  };
337
581
 
338
582
  template<class Node, class SlistNodePtr>
339
- BOOST_INTRUSIVE_FORCEINLINE typename pointer_traits<SlistNodePtr>::template rebind_pointer<Node>::type
583
+ inline typename pointer_traits<SlistNodePtr>::template rebind_pointer<Node>::type
340
584
  dcast_bucket_ptr(const SlistNodePtr &p)
341
585
  {
342
586
  typedef typename pointer_traits<SlistNodePtr>::template rebind_pointer<Node>::type node_ptr;
343
- return pointer_traits<node_ptr>::pointer_to(static_cast<Node&>(*p));
587
+ return pointer_traits<node_ptr>::static_cast_from(p);
344
588
  }
345
589
 
346
590
  template<class NodeTraits>
@@ -375,21 +619,22 @@ struct group_functions
375
619
  typedef circular_slist_algorithms<node_traits> node_algorithms;
376
620
 
377
621
  static slist_node_ptr get_bucket_before_begin
378
- (slist_node_ptr bucket_beg, slist_node_ptr bucket_end, node_ptr p)
622
+ (slist_node_ptr bucket_beg, slist_node_ptr bucket_last, slist_node_ptr sp, detail::true_)
379
623
  {
380
624
  //First find the last node of p's group.
381
625
  //This requires checking the first node of the next group or
382
626
  //the bucket node.
627
+ node_ptr p = dcast_bucket_ptr<node>(sp);
383
628
  node_ptr prev_node = p;
384
629
  node_ptr nxt(node_traits::get_next(p));
385
- while(!(bucket_beg <= nxt && nxt <= bucket_end) &&
630
+ while(!(bucket_beg <= nxt && nxt <= bucket_last) &&
386
631
  (group_traits::get_next(nxt) == prev_node)){
387
632
  prev_node = nxt;
388
633
  nxt = node_traits::get_next(nxt);
389
634
  }
390
635
 
391
636
  //If we've reached the bucket node just return it.
392
- if(bucket_beg <= nxt && nxt <= bucket_end){
637
+ if(bucket_beg <= nxt && nxt <= bucket_last){
393
638
  return nxt;
394
639
  }
395
640
 
@@ -398,17 +643,28 @@ struct group_functions
398
643
  node_ptr last_node_group = group_traits::get_next(first_node_of_group);
399
644
  slist_node_ptr possible_end = node_traits::get_next(last_node_group);
400
645
 
401
- while(!(bucket_beg <= possible_end && possible_end <= bucket_end)){
402
- first_node_of_group = detail::dcast_bucket_ptr<node>(possible_end);
646
+ while(!(bucket_beg <= possible_end && possible_end <= bucket_last)){
647
+ first_node_of_group = dcast_bucket_ptr<node>(possible_end);
403
648
  last_node_group = group_traits::get_next(first_node_of_group);
404
649
  possible_end = node_traits::get_next(last_node_group);
405
650
  }
406
651
  return possible_end;
407
652
  }
408
653
 
654
+ static slist_node_ptr get_bucket_before_begin
655
+ (slist_node_ptr bucket_beg, slist_node_ptr bucket_last, slist_node_ptr sp, detail::false_)
656
+ {
657
+ //The end node is embedded in the singly linked list:
658
+ //iterate until we reach it.
659
+ while (!(bucket_beg <= sp && sp <= bucket_last)){
660
+ sp = reduced_node_traits::get_next(sp);
661
+ }
662
+ return sp;
663
+ }
664
+
409
665
  static node_ptr get_prev_to_first_in_group(slist_node_ptr bucket_node, node_ptr first_in_group)
410
666
  {
411
- node_ptr nb = detail::dcast_bucket_ptr<node>(bucket_node);
667
+ node_ptr nb = dcast_bucket_ptr<node>(bucket_node);
412
668
  node_ptr n;
413
669
  while((n = node_traits::get_next(nb)) != first_in_group){
414
670
  nb = group_traits::get_next(n); //go to last in group
@@ -426,13 +682,13 @@ struct group_functions
426
682
  }
427
683
  }
428
684
 
429
- BOOST_INTRUSIVE_FORCEINLINE static void erase_from_group(const slist_node_ptr&, const node_ptr&, detail::false_)
685
+ inline static void erase_from_group(slist_node_ptr, node_ptr, detail::false_)
430
686
  {}
431
687
 
432
- BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_last_in_group(node_ptr first_in_group, detail::true_)
688
+ inline static node_ptr get_last_in_group(node_ptr first_in_group, detail::true_)
433
689
  { return group_traits::get_next(first_in_group); }
434
690
 
435
- BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_last_in_group(node_ptr n, detail::false_)
691
+ inline static node_ptr get_last_in_group(node_ptr n, detail::false_)
436
692
  { return n; }
437
693
 
438
694
  static node_ptr get_first_in_group(node_ptr n, detail::true_)
@@ -444,33 +700,35 @@ struct group_functions
444
700
  return n;
445
701
  }
446
702
 
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(node_ptr n, detail::false_)
703
+ inline static node_ptr get_first_in_group(node_ptr n, detail::false_)
453
704
  { return n; }
454
705
 
455
- BOOST_INTRUSIVE_FORCEINLINE static void insert_in_group(node_ptr first_in_group, node_ptr n, true_)
706
+ inline static bool is_first_in_group(node_ptr ptr)
707
+ { return node_traits::get_next(group_traits::get_next(ptr)) != ptr; }
708
+
709
+
710
+ inline static void insert_in_group(node_ptr first_in_group, node_ptr n, detail::true_)
456
711
  { group_algorithms::link_after(first_in_group, n); }
457
712
 
458
- static void insert_in_group(const node_ptr&, const node_ptr&, false_)
713
+ inline static void insert_in_group(node_ptr, node_ptr, detail::false_)
459
714
  {}
460
715
 
461
- BOOST_INTRUSIVE_FORCEINLINE static node_ptr split_group(node_ptr const new_first_in_group)
716
+ //Splits a group in two groups, and makes "new_first" the first node in the second group.
717
+ //Returns the first element of the first group
718
+ static node_ptr split_group(node_ptr const new_first)
462
719
  {
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);
720
+ node_ptr const old_first((get_first_in_group)(new_first, detail::true_()));
721
+ //Check new_first was not the first in group
722
+ if(old_first != new_first){
723
+ node_ptr const last = group_traits::get_next(old_first);
724
+ group_traits::set_next(old_first, group_traits::get_next(new_first));
725
+ group_traits::set_next(new_first, last);
468
726
  }
469
- return first;
727
+ return old_first;
470
728
  }
471
729
  };
472
730
 
473
- template<class BucketType, class SplitTraits>
731
+ template<class BucketType, class SplitTraits, class SlistNodeAlgorithms>
474
732
  class incremental_rehash_rollback
475
733
  {
476
734
  private:
@@ -483,12 +741,12 @@ class incremental_rehash_rollback
483
741
 
484
742
  public:
485
743
  incremental_rehash_rollback
486
- (bucket_type &source_bucket, bucket_type &destiny_bucket, split_traits &split_traits)
744
+ (bucket_type &source_bucket, bucket_type &destiny_bucket, split_traits &split_tr)
487
745
  : source_bucket_(source_bucket), destiny_bucket_(destiny_bucket)
488
- , split_traits_(split_traits), released_(false)
746
+ , split_traits_(split_tr), released_(false)
489
747
  {}
490
748
 
491
- BOOST_INTRUSIVE_FORCEINLINE void release()
749
+ inline void release()
492
750
  { released_ = true; }
493
751
 
494
752
  ~incremental_rehash_rollback()
@@ -496,7 +754,7 @@ class incremental_rehash_rollback
496
754
  if(!released_){
497
755
  //If an exception is thrown, just put all moved nodes back in the old bucket
498
756
  //and move back the split mark.
499
- destiny_bucket_.splice_after(destiny_bucket_.before_begin(), source_bucket_);
757
+ SlistNodeAlgorithms::transfer_after(destiny_bucket_.get_node_ptr(), source_bucket_.get_node_ptr());
500
758
  split_traits_.decrement();
501
759
  }
502
760
  }
@@ -511,39 +769,42 @@ class incremental_rehash_rollback
511
769
  template<class NodeTraits>
512
770
  struct node_functions
513
771
  {
514
- BOOST_INTRUSIVE_FORCEINLINE static void store_hash(typename NodeTraits::node_ptr p, std::size_t h, true_)
772
+ inline static void store_hash(typename NodeTraits::node_ptr p, std::size_t h, detail::true_)
515
773
  { return NodeTraits::set_hash(p, h); }
516
774
 
517
- BOOST_INTRUSIVE_FORCEINLINE static void store_hash(typename NodeTraits::node_ptr, std::size_t, false_)
775
+ inline static void store_hash(typename NodeTraits::node_ptr, std::size_t, detail::false_)
518
776
  {}
519
777
  };
520
778
 
521
- BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket(std::size_t hash_value, std::size_t bucket_cnt, detail::false_)
779
+ inline std::size_t hash_to_bucket(std::size_t hash_value, std::size_t bucket_cnt, detail::false_)
522
780
  { return hash_value % bucket_cnt; }
523
781
 
524
- BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket(std::size_t hash_value, std::size_t bucket_cnt, detail::true_)
782
+ inline std::size_t hash_to_bucket(std::size_t hash_value, std::size_t bucket_cnt, detail::true_)
525
783
  { return hash_value & (bucket_cnt - 1); }
526
784
 
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)
785
+ template<bool Power2Buckets, bool Incremental> //!fastmod_buckets
786
+ inline std::size_t hash_to_bucket_split(std::size_t hash_value, std::size_t bucket_cnt, std::size_t split, detail::false_)
529
787
  {
530
- std::size_t bucket_number = detail::hash_to_bucket(hash_value, bucket_cnt, detail::bool_<Power2Buckets>());
531
- if(Incremental)
788
+ std::size_t bucket_number = hash_to_bucket(hash_value, bucket_cnt, detail::bool_<Power2Buckets>());
789
+ BOOST_IF_CONSTEXPR(Incremental)
532
790
  bucket_number -= static_cast<std::size_t>(bucket_number >= split)*(bucket_cnt/2);
533
791
  return bucket_number;
534
792
  }
535
793
 
536
- } //namespace detail {
794
+ template<bool Power2Buckets, bool Incremental> //fastmod_buckets
795
+ inline std::size_t hash_to_bucket_split(std::size_t hash_value, std::size_t , std::size_t split, detail::true_)
796
+ {
797
+ return prime_fmod_size::position(hash_value, split);
798
+ }
537
799
 
538
800
  //!This metafunction will obtain the type of a bucket
539
801
  //!from the value_traits or hook option to be used with
540
802
  //!a hash container.
541
803
  template<class ValueTraitsOrHookOption>
542
804
  struct unordered_bucket
543
- : public detail::unordered_bucket_impl
544
- <typename ValueTraitsOrHookOption::
545
- template pack<empty>::proto_value_traits
546
- >
805
+ : public unordered_bucket_impl
806
+ < typename ValueTraitsOrHookOption::
807
+ template pack<empty>::proto_value_traits>
547
808
  {};
548
809
 
549
810
  //!This metafunction will obtain the type of a bucket pointer
@@ -551,10 +812,9 @@ struct unordered_bucket
551
812
  //!a hash container.
552
813
  template<class ValueTraitsOrHookOption>
553
814
  struct unordered_bucket_ptr
554
- : public detail::unordered_bucket_ptr_impl
555
- <typename ValueTraitsOrHookOption::
556
- template pack<empty>::proto_value_traits
557
- >
815
+ : public unordered_bucket_ptr_impl
816
+ < typename ValueTraitsOrHookOption::
817
+ template pack<empty>::proto_value_traits>
558
818
  {};
559
819
 
560
820
  //!This metafunction will obtain the type of the default bucket traits
@@ -565,13 +825,12 @@ template<class ValueTraitsOrHookOption>
565
825
  struct unordered_default_bucket_traits
566
826
  {
567
827
  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;
828
+ template pack<empty>::proto_value_traits supposed_value_traits;
829
+
830
+ typedef bucket_traits_impl
831
+ < typename unordered_bucket_ptr_impl
832
+ <supposed_value_traits>::type
833
+ , std::size_t> type;
575
834
  };
576
835
 
577
836
  struct default_bucket_traits;
@@ -597,34 +856,34 @@ struct hashtable_defaults
597
856
  static const bool cache_begin = false;
598
857
  static const bool compare_hash = false;
599
858
  static const bool incremental = false;
859
+ static const bool linear_buckets = false;
860
+ static const bool fastmod_buckets = false;
600
861
  };
601
862
 
602
863
  template<class ValueTraits, bool IsConst>
603
864
  struct downcast_node_to_value_t
604
865
  : public detail::node_to_value<ValueTraits, IsConst>
605
866
  {
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;
867
+ typedef detail::node_to_value<ValueTraits, IsConst> base_t;
868
+ typedef typename base_t::result_type result_type;
869
+ typedef ValueTraits value_traits;
870
+ typedef typename unordered_bucket_impl
871
+ <value_traits>::type::node_traits::node node;
613
872
  typedef typename detail::add_const_if_c
614
- <typename slist_impl::node, IsConst>::type & first_argument_type;
873
+ <node, IsConst>::type &first_argument_type;
615
874
  typedef typename detail::add_const_if_c
616
875
  < typename ValueTraits::node_traits::node
617
- , IsConst>::type & intermediate_argument_type;
876
+ , IsConst>::type &intermediate_argument_type;
618
877
  typedef typename pointer_traits
619
878
  <typename ValueTraits::pointer>::
620
879
  template rebind_pointer
621
880
  <const ValueTraits>::type const_value_traits_ptr;
622
881
 
623
- BOOST_INTRUSIVE_FORCEINLINE downcast_node_to_value_t(const const_value_traits_ptr &ptr)
882
+ inline downcast_node_to_value_t(const_value_traits_ptr ptr)
624
883
  : base_t(ptr)
625
884
  {}
626
885
 
627
- BOOST_INTRUSIVE_FORCEINLINE result_type operator()(first_argument_type arg) const
886
+ inline result_type operator()(first_argument_type arg) const
628
887
  { return this->base_t::operator()(static_cast<intermediate_argument_type>(arg)); }
629
888
  };
630
889
 
@@ -639,14 +898,14 @@ struct node_cast_adaptor
639
898
  typedef typename pointer_traits<NodePtr>::element_type node;
640
899
 
641
900
  template<class ConvertibleToF, class RealValuTraits>
642
- BOOST_INTRUSIVE_FORCEINLINE node_cast_adaptor(const ConvertibleToF &c2f, const RealValuTraits *traits)
901
+ inline node_cast_adaptor(const ConvertibleToF &c2f, const RealValuTraits *traits)
643
902
  : base_t(base_t(c2f, traits))
644
903
  {}
645
904
 
646
- BOOST_INTRUSIVE_FORCEINLINE typename base_t::node_ptr operator()(const slist_node &to_clone)
905
+ inline typename base_t::node_ptr operator()(const slist_node &to_clone)
647
906
  { return base_t::operator()(static_cast<const node &>(to_clone)); }
648
907
 
649
- BOOST_INTRUSIVE_FORCEINLINE void operator()(SlistNodePtr to_clone)
908
+ inline void operator()(SlistNodePtr to_clone)
650
909
  {
651
910
  base_t::operator()(pointer_traits<NodePtr>::pointer_to(static_cast<node &>(*to_clone)));
652
911
  }
@@ -655,25 +914,58 @@ struct node_cast_adaptor
655
914
  //bucket_plus_vtraits stores ValueTraits + BucketTraits
656
915
  //this data is needed by iterators to obtain the
657
916
  //value from the iterator and detect the bucket
658
- template<class ValueTraits, class BucketTraits>
917
+ template<class ValueTraits, class BucketTraits, bool LinearBuckets>
659
918
  struct bucket_plus_vtraits
660
919
  {
920
+ private:
921
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bucket_plus_vtraits)
922
+
923
+
924
+ struct data_type
925
+ : public ValueTraits, BucketTraits
926
+ {
927
+ private:
928
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(data_type)
929
+
930
+ public:
931
+ inline data_type(const ValueTraits& val_traits, const BucketTraits& b_traits)
932
+ : ValueTraits(val_traits), BucketTraits(b_traits)
933
+ {}
934
+
935
+ inline data_type(BOOST_RV_REF(data_type) other)
936
+ : ValueTraits (BOOST_MOVE_BASE(ValueTraits, other))
937
+ , BucketTraits(BOOST_MOVE_BASE(BucketTraits, other))
938
+ {}
939
+ } m_data;
940
+
941
+ public:
661
942
  typedef BucketTraits bucket_traits;
662
943
  typedef ValueTraits value_traits;
663
944
 
664
945
  static const bool safemode_or_autounlink = is_safe_autounlink<value_traits::link_mode>::value;
665
946
 
666
- typedef typename
667
- detail::get_slist_impl_from_supposed_value_traits
668
- <value_traits>::type slist_impl;
947
+ typedef typename unordered_bucket_impl
948
+ <value_traits>::type bucket_type;
949
+ typedef typename unordered_bucket_ptr_impl
950
+ <value_traits>::type bucket_ptr;
669
951
  typedef typename value_traits::node_traits node_traits;
952
+ typedef typename bucket_type::node_traits slist_node_traits;
670
953
  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;
676
- typedef typename node_traits::node_ptr node_ptr;
954
+ typedef group_functions<node_traits> group_functions_t;
955
+ typedef typename detail::if_c
956
+ < LinearBuckets
957
+ , linear_slist_algorithms<slist_node_traits>
958
+ , circular_slist_algorithms<slist_node_traits>
959
+ >::type slist_node_algorithms;
960
+
961
+ typedef typename slist_node_traits::node_ptr slist_node_ptr;
962
+ typedef trivial_value_traits
963
+ <slist_node_traits, normal_link> slist_value_traits;
964
+ typedef slist_iterator<slist_value_traits, false> siterator;
965
+ typedef slist_iterator<slist_value_traits, true> const_siterator;
966
+
967
+ typedef typename node_traits::node_ptr node_ptr;
968
+ typedef typename node_traits::const_node_ptr const_node_ptr;
677
969
  typedef typename node_traits::node node;
678
970
  typedef typename value_traits::value_type value_type;
679
971
  typedef typename value_traits::pointer pointer;
@@ -690,75 +982,159 @@ struct bucket_plus_vtraits
690
982
  <typename value_traits::pointer>::
691
983
  template rebind_pointer
692
984
  <const bucket_plus_vtraits>::type const_bucket_value_traits_ptr;
693
- typedef typename detail::unordered_bucket_ptr_impl
694
- <value_traits>::type bucket_ptr;
985
+ typedef detail::bool_<LinearBuckets> linear_buckets_t;
986
+ typedef bucket_plus_vtraits& this_ref;
695
987
 
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))
988
+ static const std::size_t bucket_overhead = LinearBuckets ? 1u : 0u;
989
+
990
+ inline bucket_plus_vtraits(const ValueTraits &val_traits, const bucket_traits &b_traits)
991
+ : m_data(val_traits, b_traits)
699
992
  {}
700
993
 
701
- BOOST_INTRUSIVE_FORCEINLINE bucket_plus_vtraits & operator =(const bucket_plus_vtraits &x)
702
- { data.bucket_traits_ = x.data.bucket_traits_; return *this; }
994
+ inline bucket_plus_vtraits(BOOST_RV_REF(bucket_plus_vtraits) other)
995
+ : m_data(boost::move(((bucket_plus_vtraits&)other).m_data))
996
+ {}
703
997
 
704
- BOOST_INTRUSIVE_FORCEINLINE const_value_traits_ptr priv_value_traits_ptr() const
998
+ inline const_value_traits_ptr priv_value_traits_ptr() const
705
999
  { return pointer_traits<const_value_traits_ptr>::pointer_to(this->priv_value_traits()); }
706
1000
 
707
1001
  //bucket_value_traits
708
1002
  //
709
- BOOST_INTRUSIVE_FORCEINLINE const bucket_plus_vtraits &get_bucket_value_traits() const
1003
+ inline const bucket_plus_vtraits &get_bucket_value_traits() const
710
1004
  { return *this; }
711
1005
 
712
- BOOST_INTRUSIVE_FORCEINLINE bucket_plus_vtraits &get_bucket_value_traits()
1006
+ inline bucket_plus_vtraits &get_bucket_value_traits()
713
1007
  { return *this; }
714
1008
 
715
- BOOST_INTRUSIVE_FORCEINLINE const_bucket_value_traits_ptr bucket_value_traits_ptr() const
1009
+ inline const_bucket_value_traits_ptr bucket_value_traits_ptr() const
716
1010
  { return pointer_traits<const_bucket_value_traits_ptr>::pointer_to(this->get_bucket_value_traits()); }
717
1011
 
718
1012
  //value traits
719
1013
  //
720
- BOOST_INTRUSIVE_FORCEINLINE const value_traits &priv_value_traits() const
721
- { return this->data; }
1014
+ inline const value_traits &priv_value_traits() const
1015
+ { return static_cast<const value_traits &>(this->m_data); }
722
1016
 
723
- BOOST_INTRUSIVE_FORCEINLINE value_traits &priv_value_traits()
724
- { return this->data; }
1017
+ inline value_traits &priv_value_traits()
1018
+ { return static_cast<value_traits &>(this->m_data); }
725
1019
 
726
- //bucket_traits
1020
+ //value traits
727
1021
  //
728
- BOOST_INTRUSIVE_FORCEINLINE const bucket_traits &priv_bucket_traits() const
729
- { return this->data.bucket_traits_; }
1022
+ inline const bucket_traits &priv_bucket_traits() const
1023
+ { return static_cast<const bucket_traits &>(this->m_data); }
730
1024
 
731
- BOOST_INTRUSIVE_FORCEINLINE bucket_traits &priv_bucket_traits()
732
- { return this->data.bucket_traits_; }
1025
+ inline bucket_traits& priv_bucket_traits()
1026
+ { return static_cast<bucket_traits&>(this->m_data); }
733
1027
 
734
1028
  //bucket operations
735
- BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_bucket_pointer() const
1029
+ inline bucket_ptr priv_bucket_pointer() const BOOST_NOEXCEPT
736
1030
  { return this->priv_bucket_traits().bucket_begin(); }
737
1031
 
738
- std::size_t priv_bucket_count() const
739
- { return this->priv_bucket_traits().bucket_count(); }
1032
+ inline std::size_t priv_usable_bucket_count() const BOOST_NOEXCEPT
1033
+ {
1034
+ BOOST_IF_CONSTEXPR(bucket_overhead){
1035
+ const std::size_t n = this->priv_bucket_traits().bucket_count();
1036
+ return n - std::size_t(n != 0)*bucket_overhead;
1037
+ }
1038
+ else{
1039
+ return this->priv_bucket_traits().bucket_count();
1040
+ }
1041
+ }
740
1042
 
741
- BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_invalid_bucket() const
1043
+ inline bucket_type &priv_bucket(std::size_t n) const BOOST_NOEXCEPT
742
1044
  {
743
- const bucket_traits &rbt = this->priv_bucket_traits();
744
- return rbt.bucket_begin() + rbt.bucket_count();
1045
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(n < this->priv_usable_bucket_count());
1046
+ return this->priv_bucket_pointer()[std::ptrdiff_t(n)];
745
1047
  }
746
1048
 
747
- BOOST_INTRUSIVE_FORCEINLINE siterator priv_invalid_local_it() const
748
- { return this->priv_bucket_traits().bucket_begin()->before_begin(); }
1049
+ inline bucket_ptr priv_bucket_ptr(std::size_t n) const BOOST_NOEXCEPT
1050
+ { return pointer_traits<bucket_ptr>::pointer_to(this->priv_bucket(n)); }
1051
+
1052
+ inline bucket_ptr priv_past_usable_bucket_ptr() const
1053
+ { return this->priv_bucket_pointer() + std::ptrdiff_t(priv_usable_bucket_count()); }
1054
+
1055
+ inline bucket_ptr priv_invalid_bucket_ptr() const
1056
+ {
1057
+ BOOST_IF_CONSTEXPR(LinearBuckets) {
1058
+ return bucket_ptr();
1059
+ }
1060
+ else{
1061
+ return this->priv_past_usable_bucket_ptr();
1062
+ }
1063
+ }
1064
+
1065
+ inline void priv_set_sentinel_bucket() const
1066
+ {
1067
+ BOOST_IF_CONSTEXPR(LinearBuckets) {
1068
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(this->priv_bucket_traits().bucket_count() > 1);
1069
+ bucket_type &b = this->priv_bucket_pointer()[std::ptrdiff_t(this->priv_usable_bucket_count())];
1070
+ slist_node_algorithms::set_sentinel(b.get_node_ptr());
1071
+ }
1072
+ }
1073
+
1074
+ inline void priv_unset_sentinel_bucket() const
1075
+ {
1076
+ BOOST_IF_CONSTEXPR(LinearBuckets) {
1077
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(this->priv_bucket_traits().bucket_count() > 1);
1078
+ bucket_type& b = this->priv_bucket_pointer()[std::ptrdiff_t(this->priv_usable_bucket_count())];
1079
+ slist_node_algorithms::init_header(b.get_node_ptr());
1080
+ }
1081
+ }
1082
+
1083
+ inline siterator priv_end_sit() const
1084
+ { return priv_end_sit(linear_buckets_t()); }
1085
+
1086
+ inline siterator priv_end_sit(detail::true_) const
1087
+ { return siterator(this->priv_bucket_pointer() + std::ptrdiff_t(this->priv_bucket_traits().bucket_count() - bucket_overhead)); }
1088
+
1089
+ inline siterator priv_end_sit(detail::false_) const
1090
+ { return siterator(this->priv_bucket_pointer()->get_node_ptr()); }
1091
+
1092
+ inline siterator priv_bucket_lbegin(std::size_t n) const
1093
+ { siterator s(this->priv_bucket_lbbegin(n)); return ++s; }
1094
+
1095
+ inline siterator priv_bucket_lbbegin(std::size_t n) const
1096
+ { return this->sit_bbegin(this->priv_bucket(n)); }
1097
+
1098
+ inline siterator priv_bucket_lend(std::size_t n) const
1099
+ { return this->sit_end(this->priv_bucket(n)); }
1100
+
1101
+ inline std::size_t priv_bucket_size(std::size_t n) const
1102
+ { return slist_node_algorithms::count(this->priv_bucket(n).get_node_ptr())-1u; }
1103
+
1104
+ inline bool priv_bucket_empty(std::size_t n) const
1105
+ { return slist_node_algorithms::is_empty(this->priv_bucket(n).get_node_ptr()); }
1106
+
1107
+ inline bool priv_bucket_empty(bucket_ptr p) const
1108
+ { return slist_node_algorithms::is_empty(p->get_node_ptr()); }
1109
+
1110
+ static inline siterator priv_bucket_lbegin(bucket_type &b)
1111
+ { return siterator(slist_node_traits::get_next(b.get_node_ptr())); }
1112
+
1113
+ static inline siterator priv_bucket_lbbegin(bucket_type& b)
1114
+ { return siterator(b.get_node_ptr()); }
1115
+
1116
+ static inline siterator priv_bucket_lend(bucket_type& b)
1117
+ { return siterator(slist_node_algorithms::end_node(b.get_node_ptr())); }
1118
+
1119
+ static inline std::size_t priv_bucket_size(const bucket_type& b)
1120
+ { return slist_node_algorithms::count(b.get_node_ptr())-1u; }
1121
+
1122
+ static inline bool priv_bucket_empty(const bucket_type& b)
1123
+ { return slist_node_algorithms::is_empty(b.get_node_ptr()); }
749
1124
 
750
1125
  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
1126
+ static std::size_t priv_erase_from_single_bucket
1127
+ (bucket_type &b, siterator sbefore_first, siterator slast, NodeDisposer node_disposer, detail::true_) //optimize multikey
752
1128
  {
753
1129
  std::size_t n = 0;
754
1130
  siterator const sfirst(++siterator(sbefore_first));
755
1131
  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());
1132
+ node_ptr const nf = dcast_bucket_ptr<node>(sfirst.pointed_node());
1133
+ node_ptr const nl = dcast_bucket_ptr<node>(slast.pointed_node());
1134
+ slist_node_ptr const ne = (priv_bucket_lend(b)).pointed_node();
759
1135
 
760
- if(group_functions_t::next_group_if_first_in_group(nf) != nf) {
761
- // The node is at the beginning of a group.
1136
+ if(group_functions_t::is_first_in_group(nf)) {
1137
+ // The first node is at the beginning of a group.
762
1138
  if(nl != ne){
763
1139
  group_functions_t::split_group(nl);
764
1140
  }
@@ -766,52 +1142,42 @@ struct bucket_plus_vtraits
766
1142
  else {
767
1143
  node_ptr const group1 = group_functions_t::split_group(nf);
768
1144
  if(nl != ne) {
769
- node_ptr const group2 = group_functions_t::split_group(ne);
1145
+ node_ptr const group2 = group_functions_t::split_group(nl);
770
1146
  if(nf == group2) { //Both first and last in the same group
771
1147
  //so join group1 and group2
772
1148
  node_ptr const end1 = group_traits::get_next(group1);
773
1149
  node_ptr const end2 = group_traits::get_next(group2);
774
1150
  group_traits::set_next(group1, end2);
775
- group_traits::set_next(group2, end1);
1151
+ group_traits::set_next(nl, end1);
776
1152
  }
777
1153
  }
778
1154
  }
779
1155
 
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);
1156
+ n = slist_node_algorithms::unlink_after_and_dispose(sbefore_first.pointed_node(), slast.pointed_node(), node_disposer);
786
1157
  }
787
1158
  return n;
788
1159
  }
789
1160
 
790
1161
  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
1162
+ static std::size_t priv_erase_from_single_bucket
1163
+ (bucket_type &, siterator sbefore_first, siterator slast, NodeDisposer node_disposer, detail::false_) //optimize multikey
792
1164
  {
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;
1165
+ return slist_node_algorithms::unlink_after_and_dispose(sbefore_first.pointed_node(), slast.pointed_node(), node_disposer);
801
1166
  }
802
1167
 
803
1168
  template<class NodeDisposer>
804
1169
  static void priv_erase_node(bucket_type &b, siterator i, NodeDisposer node_disposer, detail::true_) //optimize multikey
805
1170
  {
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()));
1171
+ slist_node_ptr const ne(priv_bucket_lend(b).pointed_node());
1172
+ slist_node_ptr const nbb(priv_bucket_lbbegin(b).pointed_node());
1173
+ node_ptr n(dcast_bucket_ptr<node>(i.pointed_node()));
808
1174
  node_ptr pos = node_traits::get_next(group_traits::get_next(n));
809
1175
  node_ptr bn;
810
1176
  node_ptr nn(node_traits::get_next(n));
811
1177
 
812
1178
  if(pos != n) {
813
1179
  //Node is the first of the group
814
- bn = group_functions_t::get_prev_to_first_in_group(ne, n);
1180
+ bn = group_functions_t::get_prev_to_first_in_group(nbb, n);
815
1181
 
816
1182
  //Unlink the rest of the group if it's not the last node of its group
817
1183
  if(nn != ne && group_traits::get_next(nn) == n){
@@ -829,12 +1195,15 @@ struct bucket_plus_vtraits
829
1195
  node_ptr const x(group_algorithms::get_previous_node(n));
830
1196
  group_algorithms::unlink_after(x);
831
1197
  }
832
- b.erase_after_and_dispose(bucket_type::s_iterator_to(*bn), node_disposer);
1198
+ slist_node_algorithms::unlink_after_and_dispose(bn, node_disposer);
833
1199
  }
834
1200
 
835
1201
  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); }
1202
+ inline static void priv_erase_node(bucket_type &b, siterator i, NodeDisposer node_disposer, detail::false_) //!optimize multikey
1203
+ {
1204
+ slist_node_ptr bi = slist_node_algorithms::get_previous_node(b.get_node_ptr(), i.pointed_node());
1205
+ slist_node_algorithms::unlink_after_and_dispose(bi, node_disposer);
1206
+ }
838
1207
 
839
1208
  template<class NodeDisposer, bool OptimizeMultikey>
840
1209
  std::size_t priv_erase_node_range( siterator const &before_first_it, std::size_t const first_bucket
@@ -844,19 +1213,19 @@ struct bucket_plus_vtraits
844
1213
  std::size_t num_erased(0);
845
1214
  siterator last_step_before_it;
846
1215
  if(first_bucket != last_bucket){
847
- bucket_type *b = (&this->priv_bucket_pointer()[0]);
1216
+ bucket_type *b = &this->priv_bucket(0);
848
1217
  num_erased += this->priv_erase_from_single_bucket
849
- (b[first_bucket], before_first_it, b[first_bucket].end(), node_disposer, optimize_multikey_tag);
1218
+ (b[first_bucket], before_first_it, this->priv_bucket_lend(first_bucket), node_disposer, optimize_multikey_tag);
850
1219
  for(std::size_t i = 0, n = (last_bucket - first_bucket - 1); i != n; ++i){
851
1220
  num_erased += this->priv_erase_whole_bucket(b[first_bucket+i+1], node_disposer);
852
1221
  }
853
- last_step_before_it = b[last_bucket].before_begin();
1222
+ last_step_before_it = this->priv_bucket_lbbegin(last_bucket);
854
1223
  }
855
1224
  else{
856
1225
  last_step_before_it = before_first_it;
857
1226
  }
858
1227
  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);
1228
+ (this->priv_bucket(last_bucket), last_step_before_it, last_it, node_disposer, optimize_multikey_tag);
860
1229
  return num_erased;
861
1230
  }
862
1231
 
@@ -865,140 +1234,148 @@ struct bucket_plus_vtraits
865
1234
  //First find the last node of p's group.
866
1235
  //This requires checking the first node of the next group or
867
1236
  //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);
1237
+ slist_node_ptr end_ptr(sit_end(b).pointed_node());
1238
+ slist_node_ptr last_node_group(b.get_node_ptr());
1239
+ slist_node_ptr possible_end(slist_node_traits::get_next(last_node_group));
871
1240
 
872
1241
  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);
1242
+ last_node_group = group_traits::get_next(dcast_bucket_ptr<node>(possible_end));
1243
+ possible_end = slist_node_traits::get_next(last_node_group);
875
1244
  }
876
- return bucket_type::s_iterator_to(*last_node_group);
1245
+ return siterator(last_node_group);
877
1246
  }
878
1247
 
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;
1248
+ inline static siterator priv_get_last(bucket_type &b, detail::false_) //NOT optimize multikey
1249
+ {
1250
+ slist_node_ptr p = b.get_node_ptr();
1251
+ return siterator(slist_node_algorithms::get_previous_node(p, slist_node_algorithms::end_node(p)));
893
1252
  }
894
1253
 
895
- BOOST_INTRUSIVE_FORCEINLINE static siterator priv_get_last(bucket_type &b, detail::false_) //NOT optimize multikey
896
- { return b.previous(b.end()); }
1254
+ template<class NodeDisposer>
1255
+ static inline std::size_t priv_erase_whole_bucket(bucket_type &b, NodeDisposer node_disposer)
1256
+ { return slist_node_algorithms::detach_and_dispose(b.get_node_ptr(), node_disposer); }
897
1257
 
898
1258
  static siterator priv_get_previous(bucket_type &b, siterator i, detail::true_) //optimize multikey
899
1259
  {
900
- node_ptr const elem(detail::dcast_bucket_ptr<node>(i.pointed_node()));
1260
+ node_ptr const elem(dcast_bucket_ptr<node>(i.pointed_node()));
901
1261
  node_ptr const prev_in_group(group_traits::get_next(elem));
902
1262
  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)
1263
+ slist_node_ptr n = first_in_group
1264
+ ? group_functions_t::get_prev_to_first_in_group(b.get_node_ptr(), elem)
1265
+ : group_traits::get_next(elem)
906
1266
  ;
907
- return bucket_type::s_iterator_to(n);
1267
+ return siterator(n);
908
1268
  }
909
1269
 
910
- BOOST_INTRUSIVE_FORCEINLINE static siterator priv_get_previous(bucket_type &b, siterator i, detail::false_) //NOT optimize multikey
911
- { return b.previous(i); }
1270
+ inline static siterator priv_get_previous(bucket_type &b, siterator i, detail::false_) //NOT optimize multikey
1271
+ { return siterator(slist_node_algorithms::get_previous_node(b.get_node_ptr(), i.pointed_node())); }
912
1272
 
913
- std::size_t priv_get_bucket_num_no_hash_store(siterator it, detail::true_) //optimize multikey
1273
+ template<class Disposer>
1274
+ struct typeof_node_disposer
914
1275
  {
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
- }
1276
+ typedef node_cast_adaptor
1277
+ < detail::node_disposer< Disposer, value_traits, CommonSListAlgorithms>
1278
+ , slist_node_ptr, node_ptr > type;
1279
+ };
926
1280
 
927
- std::size_t priv_get_bucket_num_no_hash_store(siterator it, detail::false_) //NO optimize multikey
1281
+ template<class Disposer>
1282
+ inline typename typeof_node_disposer<Disposer>::type
1283
+ make_node_disposer(const Disposer &disposer) const
928
1284
  {
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());
1285
+ typedef typename typeof_node_disposer<Disposer>::type return_t;
1286
+ return return_t(disposer, &this->priv_value_traits());
1287
+ }
932
1288
 
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));
1289
+ static inline bucket_ptr to_ptr(bucket_type &b)
1290
+ { return pointer_traits<bucket_ptr>::pointer_to(b); }
941
1291
 
942
- //Now just calculate the index b has in the bucket array
943
- return static_cast<std::size_t>(&b - &*f);
944
- }
1292
+ static inline siterator sit_bbegin(bucket_type& b)
1293
+ { return siterator(b.get_node_ptr()); }
1294
+
1295
+ static inline siterator sit_begin(bucket_type& b)
1296
+ { return siterator(b.begin_ptr()); }
1297
+
1298
+ static inline siterator sit_end(bucket_type& b)
1299
+ { return siterator(slist_node_algorithms::end_node(b.get_node_ptr())); }
945
1300
 
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)); }
1301
+ inline static std::size_t priv_stored_hash(siterator s, detail::true_) //store_hash
1302
+ { return node_traits::get_hash(dcast_bucket_ptr<node>(s.pointed_node())); }
948
1303
 
949
- BOOST_INTRUSIVE_FORCEINLINE static std::size_t priv_stored_hash(slist_node_ptr, detail::false_) //NO store_hash
1304
+ inline static std::size_t priv_stored_hash(siterator, detail::false_) //NO store_hash
950
1305
  { return std::size_t(-1); }
951
1306
 
952
- BOOST_INTRUSIVE_FORCEINLINE node &priv_value_to_node(reference v)
1307
+ inline node &priv_value_to_node(reference v)
953
1308
  { return *this->priv_value_traits().to_node_ptr(v); }
954
1309
 
955
- BOOST_INTRUSIVE_FORCEINLINE const node &priv_value_to_node(const_reference v) const
1310
+ inline const node &priv_value_to_node(const_reference v) const
956
1311
  { return *this->priv_value_traits().to_node_ptr(v); }
957
1312
 
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)); }
1313
+ inline node_ptr priv_value_to_node_ptr(reference v)
1314
+ { return this->priv_value_traits().to_node_ptr(v); }
960
1315
 
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)); }
1316
+ inline const_node_ptr priv_value_to_node_ptr(const_reference v) const
1317
+ { return this->priv_value_traits().to_node_ptr(v); }
1318
+
1319
+ inline reference priv_value_from_siterator(siterator s)
1320
+ { return *this->priv_value_traits().to_value_ptr(dcast_bucket_ptr<node>(s.pointed_node())); }
1321
+
1322
+ inline const_reference priv_value_from_siterator(siterator s) const
1323
+ { return *this->priv_value_traits().to_value_ptr(dcast_bucket_ptr<node>(s.pointed_node())); }
1324
+
1325
+ static void priv_init_buckets(const bucket_ptr buckets_ptr, const std::size_t bucket_cnt)
1326
+ {
1327
+ bucket_ptr buckets_it = buckets_ptr;
1328
+ for (std::size_t bucket_i = 0; bucket_i != bucket_cnt; ++buckets_it, ++bucket_i) {
1329
+ slist_node_algorithms::init_header(buckets_it->get_node_ptr());
1330
+ }
1331
+ }
963
1332
 
964
1333
  void priv_clear_buckets(const bucket_ptr buckets_ptr, const std::size_t bucket_cnt)
965
1334
  {
966
1335
  bucket_ptr buckets_it = buckets_ptr;
967
1336
  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>());
1337
+ bucket_type &b = *buckets_it;
1338
+ BOOST_IF_CONSTEXPR(safemode_or_autounlink){
1339
+ slist_node_algorithms::detach_and_dispose(b.get_node_ptr(), this->make_node_disposer(detail::null_disposer()));
970
1340
  }
971
1341
  else{
972
- buckets_it->clear();
1342
+ slist_node_algorithms::init_header(b.get_node_ptr());
973
1343
  }
974
1344
  }
975
1345
  }
976
1346
 
977
- BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_stored_or_compute_hash(const value_type &v, detail::true_) const //For store_hash == true
1347
+ inline std::size_t priv_stored_or_compute_hash(const value_type &v, detail::true_) const //For store_hash == true
978
1348
  { return node_traits::get_hash(this->priv_value_traits().to_node_ptr(v)); }
979
1349
 
980
- typedef hashtable_iterator<bucket_plus_vtraits, false> iterator;
981
- typedef hashtable_iterator<bucket_plus_vtraits, true> const_iterator;
1350
+ typedef hashtable_iterator<bucket_plus_vtraits, LinearBuckets, false> iterator;
1351
+ typedef hashtable_iterator<bucket_plus_vtraits, LinearBuckets, true> const_iterator;
982
1352
 
983
- BOOST_INTRUSIVE_FORCEINLINE iterator end()
984
- { return iterator(this->priv_invalid_local_it(), 0); }
1353
+ inline iterator end() BOOST_NOEXCEPT
1354
+ { return this->build_iterator(this->priv_end_sit(), bucket_ptr()); }
985
1355
 
986
- BOOST_INTRUSIVE_FORCEINLINE const_iterator end() const
987
- { return this->cend(); }
1356
+ inline const_iterator end() const BOOST_NOEXCEPT
1357
+ { return this->cend(); }
988
1358
 
989
- BOOST_INTRUSIVE_FORCEINLINE const_iterator cend() const
990
- { return const_iterator(this->priv_invalid_local_it(), 0); }
1359
+ inline const_iterator cend() const BOOST_NOEXCEPT
1360
+ { return this->build_const_iterator(this->priv_end_sit(), bucket_ptr()); }
991
1361
 
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
- {}
1362
+ inline iterator build_iterator(siterator s, bucket_ptr p)
1363
+ { return this->build_iterator(s, p, linear_buckets_t()); }
1364
+
1365
+ inline iterator build_iterator(siterator s, bucket_ptr p, detail::true_) //linear buckets
1366
+ { return iterator(s, p, this->priv_value_traits_ptr()); }
1367
+
1368
+ inline iterator build_iterator(siterator s, bucket_ptr, detail::false_) //!linear buckets
1369
+ { return iterator(s, &this->get_bucket_value_traits()); }
1370
+
1371
+ inline const_iterator build_const_iterator(siterator s, bucket_ptr p) const
1372
+ { return this->build_const_iterator(s, p, linear_buckets_t()); }
999
1373
 
1000
- bucket_traits bucket_traits_;
1001
- } data;
1374
+ inline const_iterator build_const_iterator(siterator s, bucket_ptr p, detail::true_) const //linear buckets
1375
+ { return const_iterator(s, p, this->priv_value_traits_ptr()); }
1376
+
1377
+ inline const_iterator build_const_iterator(siterator s, bucket_ptr, detail::false_) const //!linear buckets
1378
+ { return const_iterator(s, &this->get_bucket_value_traits()); }
1002
1379
  };
1003
1380
 
1004
1381
  template<class Hash, class>
@@ -1010,7 +1387,7 @@ struct get_hash
1010
1387
  template<class T>
1011
1388
  struct get_hash<void, T>
1012
1389
  {
1013
- typedef ::boost::hash<T> type;
1390
+ typedef detail::internal_hash_functor<T> type;
1014
1391
  };
1015
1392
 
1016
1393
  template<class EqualTo, class>
@@ -1022,7 +1399,7 @@ struct get_equal_to
1022
1399
  template<class T>
1023
1400
  struct get_equal_to<void, T>
1024
1401
  {
1025
- typedef std::equal_to<T> type;
1402
+ typedef value_equal<T> type;
1026
1403
  };
1027
1404
 
1028
1405
  template<class KeyOfValue, class T>
@@ -1064,18 +1441,24 @@ struct hash_key_equal
1064
1441
 
1065
1442
  //bucket_hash_t
1066
1443
  //Stores bucket_plus_vtraits plust the hash function
1067
- template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class BucketTraits>
1444
+ template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class BucketTraits, bool LinearBuckets>
1068
1445
  struct bucket_hash_t
1069
1446
  //Use public inheritance to avoid MSVC bugs with closures
1070
1447
  : public detail::ebo_functor_holder
1071
- <typename hash_key_hash < typename bucket_plus_vtraits<ValueTraits,BucketTraits>::value_traits::value_type
1448
+ <typename hash_key_hash < typename bucket_plus_vtraits<ValueTraits,BucketTraits, LinearBuckets >::value_traits::value_type
1072
1449
  , VoidOrKeyOfValue
1073
1450
  , VoidOrKeyHash
1074
1451
  >::type
1075
1452
  >
1076
- , bucket_plus_vtraits<ValueTraits, BucketTraits> //4
1453
+ , bucket_plus_vtraits<ValueTraits, BucketTraits, LinearBuckets> //4
1077
1454
  {
1078
- typedef typename bucket_plus_vtraits<ValueTraits,BucketTraits>::value_traits value_traits;
1455
+ private:
1456
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bucket_hash_t)
1457
+
1458
+ public:
1459
+
1460
+ typedef typename bucket_plus_vtraits
1461
+ <ValueTraits,BucketTraits, LinearBuckets>::value_traits value_traits;
1079
1462
  typedef typename value_traits::value_type value_type;
1080
1463
  typedef typename value_traits::node_traits node_traits;
1081
1464
  typedef hash_key_hash
@@ -1084,31 +1467,41 @@ struct bucket_hash_t
1084
1467
  typedef typename hash_key_types_base<value_type, VoidOrKeyOfValue>::key_of_value key_of_value;
1085
1468
 
1086
1469
  typedef BucketTraits bucket_traits;
1087
- typedef bucket_plus_vtraits<ValueTraits, BucketTraits> bucket_plus_vtraits_t;
1470
+ typedef bucket_plus_vtraits<ValueTraits, BucketTraits, LinearBuckets> bucket_plus_vtraits_t;
1088
1471
  typedef detail::ebo_functor_holder<hasher> base_t;
1089
1472
 
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))
1473
+ inline bucket_hash_t(const ValueTraits &val_traits, const bucket_traits &b_traits, const hasher & h)
1474
+ : base_t(h)
1475
+ , bucket_plus_vtraits_t(val_traits, b_traits)
1476
+ {}
1477
+
1478
+ inline bucket_hash_t(BOOST_RV_REF(bucket_hash_t) other)
1479
+ : base_t(BOOST_MOVE_BASE(base_t, other))
1480
+ , bucket_plus_vtraits_t(BOOST_MOVE_BASE(bucket_plus_vtraits_t, other))
1093
1481
  {}
1094
1482
 
1095
- BOOST_INTRUSIVE_FORCEINLINE const hasher &priv_hasher() const
1483
+ template<class K>
1484
+ inline std::size_t priv_hash(const K &k) const
1485
+ { return this->base_t::operator()(k); }
1486
+
1487
+ inline const hasher &priv_hasher() const
1096
1488
  { return this->base_t::get(); }
1097
1489
 
1098
- hasher &priv_hasher()
1490
+ inline hasher &priv_hasher()
1099
1491
  { return this->base_t::get(); }
1100
1492
 
1101
1493
  using bucket_plus_vtraits_t::priv_stored_or_compute_hash; //For store_hash == true
1102
1494
 
1103
- BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_stored_or_compute_hash(const value_type &v, detail::false_) const //For store_hash == false
1495
+ inline std::size_t priv_stored_or_compute_hash(const value_type &v, detail::false_) const //For store_hash == false
1104
1496
  { return this->priv_hasher()(key_of_value()(v)); }
1105
1497
  };
1106
1498
 
1107
- template<class ValueTraits, class BucketTraits, class VoidOrKeyOfValue, class VoidOrKeyEqual>
1499
+ template<class ValueTraits, class BucketTraits, class VoidOrKeyOfValue, class VoidOrKeyEqual, bool LinearBuckets>
1108
1500
  struct hashtable_equal_holder
1109
1501
  {
1110
1502
  typedef detail::ebo_functor_holder
1111
- < typename hash_key_equal < typename bucket_plus_vtraits<ValueTraits, BucketTraits>::value_traits::value_type
1503
+ < typename hash_key_equal < typename bucket_plus_vtraits
1504
+ <ValueTraits, BucketTraits, LinearBuckets>::value_traits::value_type
1112
1505
  , VoidOrKeyOfValue
1113
1506
  , VoidOrKeyEqual
1114
1507
  >::type
@@ -1119,146 +1512,185 @@ struct hashtable_equal_holder
1119
1512
  //bucket_hash_equal_t
1120
1513
  //Stores bucket_hash_t and the equality function when the first
1121
1514
  //non-empty bucket shall not be cached.
1122
- template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits, bool>
1515
+ template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits, bool LinearBuckets, bool>
1123
1516
  struct bucket_hash_equal_t
1124
1517
  //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
1518
+ : public bucket_hash_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, BucketTraits, LinearBuckets> //3
1519
+ , public hashtable_equal_holder<ValueTraits, BucketTraits, VoidOrKeyOfValue, VoidOrKeyEqual, LinearBuckets>::type //equal
1127
1520
  {
1521
+ private:
1522
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bucket_hash_equal_t)
1523
+
1524
+ public:
1128
1525
  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)
1526
+ < ValueTraits, BucketTraits, VoidOrKeyOfValue
1527
+ , VoidOrKeyEqual, LinearBuckets>::type equal_holder_t;
1528
+ typedef bucket_hash_t< ValueTraits, VoidOrKeyOfValue
1529
+ , VoidOrKeyHash, BucketTraits
1530
+ , LinearBuckets> bucket_hash_type;
1531
+ typedef bucket_plus_vtraits
1532
+ <ValueTraits, BucketTraits, LinearBuckets> bucket_plus_vtraits_t;
1533
+ typedef ValueTraits value_traits;
1534
+ typedef typename equal_holder_t::functor_type key_equal;
1535
+ typedef typename bucket_hash_type::hasher hasher;
1536
+ typedef BucketTraits bucket_traits;
1537
+ typedef typename bucket_plus_vtraits_t::siterator siterator;
1538
+ typedef typename bucket_plus_vtraits_t::const_siterator const_siterator;
1539
+ typedef typename bucket_plus_vtraits_t::bucket_type bucket_type;
1540
+ typedef typename bucket_plus_vtraits_t::slist_node_algorithms slist_node_algorithms;
1541
+ typedef typename unordered_bucket_ptr_impl
1542
+ <value_traits>::type bucket_ptr;
1543
+
1544
+ bucket_hash_equal_t(const ValueTraits &val_traits, const bucket_traits &b_traits, const hasher & h, const key_equal &e)
1545
+ : bucket_hash_type(val_traits, b_traits, h)
1144
1546
  , equal_holder_t(e)
1145
1547
  {}
1146
1548
 
1147
- BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_get_cache()
1148
- { return this->bucket_hash_type::priv_bucket_pointer(); }
1549
+ inline bucket_hash_equal_t(BOOST_RV_REF(bucket_hash_equal_t) other)
1550
+ : bucket_hash_type(BOOST_MOVE_BASE(bucket_hash_type, other))
1551
+ , equal_holder_t(BOOST_MOVE_BASE(equal_holder_t, other))
1552
+ {}
1553
+
1554
+ inline bucket_ptr priv_get_cache()
1555
+ { return this->priv_bucket_pointer(); }
1556
+
1557
+ inline void priv_set_cache(bucket_ptr)
1558
+ {}
1149
1559
 
1150
- BOOST_INTRUSIVE_FORCEINLINE void priv_set_cache(const bucket_ptr &)
1560
+ inline void priv_set_cache_bucket_num(std::size_t)
1151
1561
  {}
1152
1562
 
1153
- BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_get_cache_bucket_num()
1563
+ inline std::size_t priv_get_cache_bucket_num()
1154
1564
  { return 0u; }
1155
1565
 
1156
- BOOST_INTRUSIVE_FORCEINLINE void priv_initialize_cache()
1566
+ inline void priv_init_cache()
1157
1567
  {}
1158
1568
 
1159
- BOOST_INTRUSIVE_FORCEINLINE void priv_swap_cache(bucket_hash_equal_t &)
1569
+ inline void priv_swap_cache(bucket_hash_equal_t &)
1160
1570
  {}
1161
1571
 
1162
- siterator priv_begin() const
1572
+ siterator priv_begin(bucket_ptr &pbucketptr) const
1163
1573
  {
1164
1574
  std::size_t n = 0;
1165
- std::size_t bucket_cnt = this->bucket_hash_type::priv_bucket_count();
1575
+ std::size_t bucket_cnt = this->priv_usable_bucket_count();
1166
1576
  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();
1577
+ bucket_type &b = this->priv_bucket(n);
1578
+ if(!slist_node_algorithms::is_empty(b.get_node_ptr())){
1579
+ pbucketptr = this->to_ptr(b);
1580
+ return siterator(b.begin_ptr());
1170
1581
  }
1171
1582
  }
1172
- return this->bucket_hash_type::priv_invalid_local_it();
1583
+ pbucketptr = this->priv_invalid_bucket_ptr();
1584
+ return this->priv_end_sit();
1173
1585
  }
1174
1586
 
1175
- BOOST_INTRUSIVE_FORCEINLINE void priv_insertion_update_cache(std::size_t)
1587
+ inline void priv_insertion_update_cache(std::size_t)
1588
+ {}
1589
+
1590
+ inline void priv_erasure_update_cache_range(std::size_t, std::size_t)
1176
1591
  {}
1177
1592
 
1178
- BOOST_INTRUSIVE_FORCEINLINE void priv_erasure_update_cache_range(std::size_t, std::size_t)
1593
+ inline void priv_erasure_update_cache(bucket_ptr)
1179
1594
  {}
1180
1595
 
1181
- BOOST_INTRUSIVE_FORCEINLINE void priv_erasure_update_cache()
1596
+ inline void priv_erasure_update_cache()
1182
1597
  {}
1183
1598
 
1184
- BOOST_INTRUSIVE_FORCEINLINE const key_equal &priv_equal() const
1599
+ inline const key_equal &priv_equal() const
1185
1600
  { return this->equal_holder_t::get(); }
1186
1601
 
1187
- BOOST_INTRUSIVE_FORCEINLINE key_equal &priv_equal()
1602
+ inline key_equal &priv_equal()
1188
1603
  { return this->equal_holder_t::get(); }
1189
1604
  };
1190
1605
 
1191
1606
  //bucket_hash_equal_t
1192
1607
  //Stores bucket_hash_t and the equality function when the first
1193
1608
  //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>
1609
+ template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits, bool LinearBuckets> //cache_begin == true version
1610
+ struct bucket_hash_equal_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, LinearBuckets, true>
1196
1611
  //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
1612
+ : public bucket_hash_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, BucketTraits, LinearBuckets> //2
1613
+ , public hashtable_equal_holder<ValueTraits, BucketTraits, VoidOrKeyOfValue, VoidOrKeyEqual, LinearBuckets>::type
1199
1614
  {
1615
+ private:
1616
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(bucket_hash_equal_t)
1617
+
1618
+ public:
1619
+
1200
1620
  typedef typename hashtable_equal_holder
1201
- <ValueTraits, BucketTraits, VoidOrKeyOfValue, VoidOrKeyEqual>::type equal_holder_t;
1621
+ < ValueTraits, BucketTraits
1622
+ , VoidOrKeyOfValue, VoidOrKeyEqual, LinearBuckets>::type equal_holder_t;
1202
1623
 
1203
- typedef bucket_plus_vtraits<ValueTraits,BucketTraits> bucket_plus_vtraits_t;
1624
+ typedef bucket_plus_vtraits
1625
+ < ValueTraits, BucketTraits, LinearBuckets> bucket_plus_vtraits_t;
1204
1626
  typedef ValueTraits value_traits;
1205
1627
  typedef typename equal_holder_t::functor_type key_equal;
1206
- typedef bucket_hash_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, BucketTraits> bucket_hash_type;
1628
+ typedef bucket_hash_t
1629
+ < ValueTraits, VoidOrKeyOfValue
1630
+ , VoidOrKeyHash, BucketTraits, LinearBuckets> bucket_hash_type;
1207
1631
  typedef typename bucket_hash_type::hasher hasher;
1208
1632
  typedef BucketTraits bucket_traits;
1209
- typedef typename bucket_plus_vtraits_t::slist_impl::iterator siterator;
1633
+ typedef typename bucket_plus_vtraits_t::siterator siterator;
1634
+ typedef typename bucket_plus_vtraits_t::slist_node_algorithms slist_node_algorithms;
1210
1635
 
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)
1636
+ bucket_hash_equal_t(const ValueTraits &val_traits, const bucket_traits &b_traits, const hasher & h, const key_equal &e)
1637
+ : bucket_hash_type(val_traits, b_traits, h)
1214
1638
  , equal_holder_t(e)
1215
1639
  {}
1216
1640
 
1217
- typedef typename detail::unordered_bucket_ptr_impl
1218
- <typename bucket_hash_type::value_traits>::type bucket_ptr;
1641
+ inline bucket_hash_equal_t(BOOST_RV_REF(bucket_hash_equal_t) other)
1642
+ : bucket_hash_type(BOOST_MOVE_BASE(bucket_hash_type, other))
1643
+ , equal_holder_t(BOOST_MOVE_BASE(equal_holder_t, other))
1644
+ {}
1219
1645
 
1220
- BOOST_INTRUSIVE_FORCEINLINE bucket_ptr &priv_get_cache()
1221
- { return cached_begin_; }
1646
+ typedef typename unordered_bucket_ptr_impl
1647
+ <typename bucket_hash_type::value_traits>::type bucket_ptr;
1222
1648
 
1223
- BOOST_INTRUSIVE_FORCEINLINE const bucket_ptr &priv_get_cache() const
1649
+ inline bucket_ptr priv_get_cache() const
1224
1650
  { return cached_begin_; }
1225
1651
 
1226
- BOOST_INTRUSIVE_FORCEINLINE void priv_set_cache(const bucket_ptr &p)
1652
+ inline void priv_set_cache(bucket_ptr p)
1227
1653
  { cached_begin_ = p; }
1228
1654
 
1229
- BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_get_cache_bucket_num()
1230
- { return this->cached_begin_ - this->bucket_hash_type::priv_bucket_pointer(); }
1231
-
1232
- BOOST_INTRUSIVE_FORCEINLINE void priv_initialize_cache()
1233
- { this->cached_begin_ = this->bucket_hash_type::priv_invalid_bucket(); }
1234
-
1235
- BOOST_INTRUSIVE_FORCEINLINE void priv_swap_cache(bucket_hash_equal_t &other)
1655
+ inline void priv_set_cache_bucket_num(std::size_t insertion_bucket)
1236
1656
  {
1237
- ::boost::adl_move_swap(this->cached_begin_, other.cached_begin_);
1657
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(insertion_bucket <= this->priv_usable_bucket_count());
1658
+ this->cached_begin_ = this->priv_bucket_pointer() + std::ptrdiff_t(insertion_bucket);
1238
1659
  }
1239
1660
 
1240
- siterator priv_begin() const
1661
+ inline std::size_t priv_get_cache_bucket_num()
1662
+ { return std::size_t(this->cached_begin_ - this->priv_bucket_pointer()); }
1663
+
1664
+ inline void priv_init_cache()
1665
+ { this->cached_begin_ = this->priv_past_usable_bucket_ptr(); }
1666
+
1667
+ inline void priv_swap_cache(bucket_hash_equal_t &other)
1668
+ { ::boost::adl_move_swap(this->cached_begin_, other.cached_begin_); }
1669
+
1670
+ siterator priv_begin(bucket_ptr& pbucketptr) const
1241
1671
  {
1242
- if(this->cached_begin_ == this->bucket_hash_type::priv_invalid_bucket()){
1243
- return this->bucket_hash_type::priv_invalid_local_it();
1672
+ pbucketptr = this->cached_begin_;
1673
+ if(this->cached_begin_ == this->priv_past_usable_bucket_ptr()){
1674
+ return this->priv_end_sit();
1244
1675
  }
1245
1676
  else{
1246
- return this->cached_begin_->begin();
1677
+ return siterator(cached_begin_->begin_ptr());
1247
1678
  }
1248
1679
  }
1249
1680
 
1250
1681
  void priv_insertion_update_cache(std::size_t insertion_bucket)
1251
1682
  {
1252
- bucket_ptr p = this->bucket_hash_type::priv_bucket_pointer() + insertion_bucket;
1683
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(insertion_bucket < this->priv_usable_bucket_count());
1684
+ bucket_ptr p = this->priv_bucket_pointer() + std::ptrdiff_t(insertion_bucket);
1253
1685
  if(p < this->cached_begin_){
1254
1686
  this->cached_begin_ = p;
1255
1687
  }
1256
1688
  }
1257
1689
 
1258
- BOOST_INTRUSIVE_FORCEINLINE const key_equal &priv_equal() const
1690
+ inline const key_equal &priv_equal() const
1259
1691
  { return this->equal_holder_t::get(); }
1260
1692
 
1261
- BOOST_INTRUSIVE_FORCEINLINE key_equal &priv_equal()
1693
+ inline key_equal &priv_equal()
1262
1694
  { return this->equal_holder_t::get(); }
1263
1695
 
1264
1696
  void priv_erasure_update_cache_range(std::size_t first_bucket_num, std::size_t last_bucket_num)
@@ -1266,24 +1698,30 @@ struct bucket_hash_equal_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrK
1266
1698
  //If the last bucket is the end, the cache must be updated
1267
1699
  //to the last position if all
1268
1700
  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);
1701
+ this->priv_bucket_empty(first_bucket_num) ){
1702
+ this->priv_set_cache(this->priv_bucket_pointer() + std::ptrdiff_t(last_bucket_num));
1703
+ this->priv_erasure_update_cache();
1704
+ }
1705
+ }
1706
+
1707
+ void priv_erasure_update_cache(bucket_ptr first_bucket)
1708
+ {
1709
+ //If the last bucket is the end, the cache must be updated
1710
+ //to the last position if all
1711
+ if (this->priv_get_cache() == first_bucket &&
1712
+ this->priv_bucket_empty(first_bucket)) {
1271
1713
  this->priv_erasure_update_cache();
1272
1714
  }
1273
1715
  }
1274
1716
 
1275
1717
  void priv_erasure_update_cache()
1276
1718
  {
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
- }
1719
+ const bucket_ptr cache_end = this->priv_past_usable_bucket_ptr();
1720
+ while( cached_begin_ != cache_end) {
1721
+ if (!slist_node_algorithms::is_empty(cached_begin_->get_node_ptr())) {
1722
+ return;
1285
1723
  }
1286
- this->priv_initialize_cache();
1724
+ ++cached_begin_;
1287
1725
  }
1288
1726
  }
1289
1727
 
@@ -1294,42 +1732,67 @@ struct bucket_hash_equal_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrK
1294
1732
  //to maintain minimal container size with compilers like MSVC
1295
1733
  //that have problems with EBO and multiple empty base classes
1296
1734
  template<class DeriveFrom, class SizeType, bool>
1297
- struct hashtable_size_traits_wrapper
1735
+ struct hashtable_size_wrapper
1298
1736
  : public DeriveFrom
1299
1737
  {
1738
+ private:
1739
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(hashtable_size_wrapper)
1740
+
1741
+ public:
1300
1742
  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))
1743
+ hashtable_size_wrapper( BOOST_FWD_REF(Base) base, BOOST_FWD_REF(Arg0) arg0
1744
+ , BOOST_FWD_REF(Arg1) arg1, BOOST_FWD_REF(Arg2) arg2)
1745
+ : DeriveFrom( ::boost::forward<Base>(base)
1746
+ , ::boost::forward<Arg0>(arg0)
1747
+ , ::boost::forward<Arg1>(arg1)
1748
+ , ::boost::forward<Arg2>(arg2))
1307
1749
  {}
1308
1750
  typedef detail::size_holder < true, SizeType> size_traits;//size_traits
1309
1751
 
1752
+ inline hashtable_size_wrapper(BOOST_RV_REF(hashtable_size_wrapper) other)
1753
+ : DeriveFrom(BOOST_MOVE_BASE(DeriveFrom, other))
1754
+ {}
1755
+
1310
1756
  size_traits size_traits_;
1311
1757
 
1312
1758
  typedef const size_traits & size_traits_const_t;
1313
1759
  typedef size_traits & size_traits_t;
1314
1760
 
1315
- BOOST_INTRUSIVE_FORCEINLINE size_traits_const_t priv_size_traits() const
1316
- { return size_traits_; }
1761
+ inline SizeType get_hashtable_size_wrapper_size() const
1762
+ { return size_traits_.get_size(); }
1763
+
1764
+ inline void set_hashtable_size_wrapper_size(SizeType s)
1765
+ { size_traits_.set_size(s); }
1317
1766
 
1318
- BOOST_INTRUSIVE_FORCEINLINE size_traits_t priv_size_traits()
1767
+ inline void inc_hashtable_size_wrapper_size()
1768
+ { size_traits_.increment(); }
1769
+
1770
+ inline void dec_hashtable_size_wrapper_size()
1771
+ { size_traits_.decrement(); }
1772
+
1773
+ inline size_traits_t priv_size_traits()
1319
1774
  { return size_traits_; }
1320
1775
  };
1321
1776
 
1322
1777
  template<class DeriveFrom, class SizeType>
1323
- struct hashtable_size_traits_wrapper<DeriveFrom, SizeType, false>
1778
+ struct hashtable_size_wrapper<DeriveFrom, SizeType, false>
1324
1779
  : public DeriveFrom
1325
1780
  {
1781
+ private:
1782
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(hashtable_size_wrapper)
1783
+
1784
+ public:
1326
1785
  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))
1786
+ hashtable_size_wrapper( BOOST_FWD_REF(Base) base, BOOST_FWD_REF(Arg0) arg0
1787
+ , BOOST_FWD_REF(Arg1) arg1, BOOST_FWD_REF(Arg2) arg2)
1788
+ : DeriveFrom( ::boost::forward<Base>(base)
1789
+ , ::boost::forward<Arg0>(arg0)
1790
+ , ::boost::forward<Arg1>(arg1)
1791
+ , ::boost::forward<Arg2>(arg2))
1792
+ {}
1793
+
1794
+ inline hashtable_size_wrapper(BOOST_RV_REF(hashtable_size_wrapper) other)
1795
+ : DeriveFrom(BOOST_MOVE_BASE(DeriveFrom, other))
1333
1796
  {}
1334
1797
 
1335
1798
  typedef detail::size_holder< false, SizeType> size_traits;
@@ -1337,38 +1800,61 @@ struct hashtable_size_traits_wrapper<DeriveFrom, SizeType, false>
1337
1800
  typedef size_traits size_traits_const_t;
1338
1801
  typedef size_traits size_traits_t;
1339
1802
 
1340
- BOOST_INTRUSIVE_FORCEINLINE size_traits priv_size_traits() const
1803
+ inline SizeType get_hashtable_size_wrapper_size() const
1804
+ { return 0u; }
1805
+
1806
+ inline void set_hashtable_size_wrapper_size(SizeType)
1807
+ {}
1808
+
1809
+ inline void inc_hashtable_size_wrapper_size()
1810
+ {}
1811
+
1812
+ inline void dec_hashtable_size_wrapper_size()
1813
+ {}
1814
+
1815
+ inline size_traits priv_size_traits()
1341
1816
  { return size_traits(); }
1342
1817
  };
1343
1818
 
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
- >
1819
+ template< class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash
1820
+ , class VoidOrKeyEqual, class BucketTraits, class SizeType
1821
+ , std::size_t BoolFlags>
1822
+ struct get_hashtable_size_wrapper_bucket
1357
1823
  {
1358
- typedef hashtable_size_traits_wrapper
1824
+ typedef hashtable_size_wrapper
1359
1825
  < bucket_hash_equal_t
1360
1826
  < ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual
1361
1827
  , BucketTraits
1828
+ , 0 != (BoolFlags & hash_bool_flags::linear_buckets_pos)
1362
1829
  , 0 != (BoolFlags & hash_bool_flags::cache_begin_pos)
1363
1830
  > //2
1364
1831
  , SizeType
1365
- , (BoolFlags & hash_bool_flags::incremental_pos) != 0
1366
- > internal_type;
1367
- typedef typename internal_type::key_equal key_equal;
1368
- typedef typename internal_type::hasher hasher;
1369
- typedef bucket_plus_vtraits<ValueTraits,BucketTraits> bucket_plus_vtraits_t;
1832
+ , (BoolFlags & hash_bool_flags::incremental_pos) != 0 ||
1833
+ (BoolFlags & hash_bool_flags::fastmod_buckets_pos) != 0
1834
+ > type;
1835
+ };
1836
+
1837
+ //hashdata_internal
1838
+ //Stores bucket_hash_equal_t and split_traits
1839
+ template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits, class SizeType, std::size_t BoolFlags>
1840
+ struct hashdata_internal
1841
+ : public get_hashtable_size_wrapper_bucket
1842
+ <ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, SizeType, BoolFlags>::type
1843
+ {
1844
+ private:
1845
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(hashdata_internal)
1846
+
1847
+ public:
1848
+ static const bool linear_buckets = 0 != (BoolFlags & hash_bool_flags::linear_buckets_pos);
1849
+ typedef typename get_hashtable_size_wrapper_bucket
1850
+ <ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, SizeType, BoolFlags>::type split_bucket_hash_equal_t;
1851
+
1852
+ typedef typename split_bucket_hash_equal_t::key_equal key_equal;
1853
+ typedef typename split_bucket_hash_equal_t::hasher hasher;
1854
+ typedef bucket_plus_vtraits
1855
+ <ValueTraits, BucketTraits, linear_buckets> bucket_plus_vtraits_t;
1370
1856
  typedef SizeType size_type;
1371
- typedef typename internal_type::size_traits split_traits;
1857
+ typedef typename split_bucket_hash_equal_t::size_traits split_traits;
1372
1858
  typedef typename bucket_plus_vtraits_t::bucket_ptr bucket_ptr;
1373
1859
  typedef typename bucket_plus_vtraits_t::const_value_traits_ptr const_value_traits_ptr;
1374
1860
  typedef typename bucket_plus_vtraits_t::siterator siterator;
@@ -1383,15 +1869,10 @@ struct hashdata_internal
1383
1869
  <const_pointer>::reference const_reference;
1384
1870
  typedef typename value_traits::node_traits node_traits;
1385
1871
  typedef typename node_traits::node node;
1386
- typedef typename node_traits::node_ptr node_ptr;
1387
- 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;
1872
+ typedef typename node_traits::node_ptr node_ptr;
1873
+ typedef typename node_traits::const_node_ptr const_node_ptr;
1874
+ typedef typename bucket_plus_vtraits_t::slist_node_algorithms slist_node_algorithms;
1875
+ typedef typename bucket_plus_vtraits_t::slist_node_ptr slist_node_ptr;
1395
1876
 
1396
1877
  typedef hash_key_types_base
1397
1878
  < typename ValueTraits::value_type
@@ -1399,195 +1880,303 @@ struct hashdata_internal
1399
1880
  > hash_types_base;
1400
1881
  typedef typename hash_types_base::key_of_value key_of_value;
1401
1882
 
1402
- static const bool store_hash = detail::store_hash_is_true<node_traits>::value;
1883
+ static const bool store_hash = store_hash_is_true<node_traits>::value;
1403
1884
  static const bool safemode_or_autounlink = is_safe_autounlink<value_traits::link_mode>::value;
1404
1885
  static const bool stateful_value_traits = detail::is_stateful_value_traits<value_traits>::value;
1405
1886
 
1406
1887
  typedef detail::bool_<store_hash> store_hash_t;
1407
1888
 
1408
1889
  typedef detail::transform_iterator
1409
- < typename slist_impl::iterator
1410
- , downcast_node_to_value_t
1411
- < value_traits
1412
- , false> > local_iterator;
1890
+ < siterator
1891
+ , downcast_node_to_value_t<value_traits, false> > local_iterator;
1413
1892
 
1414
1893
  typedef detail::transform_iterator
1415
- < typename slist_impl::iterator
1416
- , downcast_node_to_value_t
1417
- < value_traits
1418
- , true> > const_local_iterator;
1419
- //
1894
+ < siterator
1895
+ , downcast_node_to_value_t<value_traits, true> > const_local_iterator;
1420
1896
 
1421
- template<class BucketTraitsType>
1422
- hashdata_internal( const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits
1897
+ typedef detail::bool_<linear_buckets> linear_buckets_t;
1898
+
1899
+ hashdata_internal( const ValueTraits &val_traits, const bucket_traits &b_traits
1423
1900
  , const hasher & h, const key_equal &e)
1424
- : internal_type(val_traits, ::boost::forward<BucketTraitsType>(b_traits), h, e)
1901
+ : split_bucket_hash_equal_t(val_traits, b_traits, h, e)
1425
1902
  {}
1426
1903
 
1427
- BOOST_INTRUSIVE_FORCEINLINE typename internal_type::size_traits_t priv_split_traits()
1428
- { return this->priv_size_traits(); }
1904
+ inline hashdata_internal(BOOST_RV_REF(hashdata_internal) other)
1905
+ : split_bucket_hash_equal_t(BOOST_MOVE_BASE(split_bucket_hash_equal_t, other))
1906
+ {}
1429
1907
 
1430
- BOOST_INTRUSIVE_FORCEINLINE typename internal_type::size_traits_const_t priv_split_traits() const
1908
+ inline typename split_bucket_hash_equal_t::size_traits_t priv_split_traits()
1431
1909
  { return this->priv_size_traits(); }
1432
1910
 
1433
1911
  ~hashdata_internal()
1434
1912
  { this->priv_clear_buckets(); }
1435
1913
 
1914
+ using split_bucket_hash_equal_t::priv_clear_buckets;
1915
+
1436
1916
  void priv_clear_buckets()
1437
1917
  {
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()));
1918
+ const std::size_t cache_num = this->priv_get_cache_bucket_num();
1919
+ this->priv_clear_buckets(this->priv_get_cache(), this->priv_usable_bucket_count() - cache_num);
1443
1920
  }
1444
1921
 
1445
1922
  void priv_clear_buckets_and_cache()
1446
1923
  {
1447
1924
  this->priv_clear_buckets();
1448
- this->priv_initialize_cache();
1925
+ this->priv_init_cache();
1449
1926
  }
1450
1927
 
1451
- void priv_initialize_buckets_and_cache()
1928
+ void priv_init_buckets_and_cache()
1452
1929
  {
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();
1930
+ this->priv_init_buckets(this->priv_bucket_pointer(), this->priv_usable_bucket_count());
1931
+ this->priv_init_cache();
1457
1932
  }
1933
+
1934
+ typedef typename bucket_plus_vtraits_t::iterator iterator;
1935
+ typedef typename bucket_plus_vtraits_t::const_iterator const_iterator;
1458
1936
 
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); }
1937
+ //public functions
1938
+ inline SizeType split_count() const BOOST_NOEXCEPT
1939
+ { return this->split_bucket_hash_equal_t::get_hashtable_size_wrapper_size(); }
1464
1940
 
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); }
1941
+ inline void split_count(SizeType s) BOOST_NOEXCEPT
1942
+ { this->split_bucket_hash_equal_t::set_hashtable_size_wrapper_size(s); }
1467
1943
 
1468
1944
  //public functions
1469
- BOOST_INTRUSIVE_FORCEINLINE SizeType split_count() const
1945
+ inline void inc_split_count() BOOST_NOEXCEPT
1946
+ { this->split_bucket_hash_equal_t::inc_hashtable_size_wrapper_size(); }
1947
+
1948
+ inline void dec_split_count() BOOST_NOEXCEPT
1949
+ { this->split_bucket_hash_equal_t::dec_hashtable_size_wrapper_size(); }
1950
+
1951
+ inline static SizeType initial_split_from_bucket_count(SizeType bc) BOOST_NOEXCEPT
1952
+ {
1953
+ BOOST_IF_CONSTEXPR(fastmod_buckets) {
1954
+ size_type split;
1955
+ split = static_cast<SizeType>(prime_fmod_size::lower_size_index(bc));
1956
+ //The passed bucket size must be exactly the supported one
1957
+ BOOST_ASSERT(prime_fmod_size::size(split) == bc);
1958
+ return split;
1959
+ }
1960
+ else {
1961
+ BOOST_IF_CONSTEXPR(incremental) {
1962
+ BOOST_ASSERT(0 == (std::size_t(bc) & (std::size_t(bc) - 1u)));
1963
+ return size_type(bc >> 1u);
1964
+ }
1965
+ else{
1966
+ return bc;
1967
+ }
1968
+ }
1969
+ }
1970
+
1971
+ inline static SizeType rehash_split_from_bucket_count(SizeType bc) BOOST_NOEXCEPT
1470
1972
  {
1471
- return this->priv_split_traits().get_size();
1973
+ BOOST_IF_CONSTEXPR(fastmod_buckets) {
1974
+ return (initial_split_from_bucket_count)(bc);
1975
+ }
1976
+ else {
1977
+ BOOST_IF_CONSTEXPR(incremental) {
1978
+ BOOST_ASSERT(0 == (std::size_t(bc) & (std::size_t(bc) - 1u)));
1979
+ return bc;
1980
+ }
1981
+ else{
1982
+ return bc;
1983
+ }
1984
+ }
1472
1985
  }
1473
1986
 
1474
- BOOST_INTRUSIVE_FORCEINLINE iterator iterator_to(reference value)
1987
+ inline iterator iterator_to(reference value) BOOST_NOEXCEPT_IF(!linear_buckets)
1988
+ { return iterator_to(value, linear_buckets_t()); }
1989
+
1990
+ const_iterator iterator_to(const_reference value) const BOOST_NOEXCEPT_IF(!linear_buckets)
1991
+ { return iterator_to(value, linear_buckets_t()); }
1992
+
1993
+ iterator iterator_to(reference value, detail::true_) //linear_buckets
1475
1994
  {
1476
- return iterator(bucket_type::s_iterator_to
1477
- (this->priv_value_to_node(value)), &this->get_bucket_value_traits());
1995
+ const std::size_t h = this->priv_stored_or_compute_hash(value, store_hash_t());
1996
+ siterator sit(this->priv_value_to_node_ptr(value));
1997
+ return this->build_iterator(sit, this->priv_hash_to_bucket_ptr(h));
1478
1998
  }
1479
1999
 
1480
- const_iterator iterator_to(const_reference value) const
2000
+ const_iterator iterator_to(const_reference value, detail::true_) const //linear_buckets
1481
2001
  {
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)))
2002
+ const std::size_t h = this->priv_stored_or_compute_hash(value, store_hash_t());
2003
+ siterator const sit = siterator
2004
+ ( pointer_traits<node_ptr>::const_cast_from(this->priv_value_to_node_ptr(value))
1485
2005
  );
2006
+ return this->build_const_iterator(sit, this->priv_hash_to_bucket_ptr(h));
2007
+ }
2008
+
2009
+ static const bool incremental = 0 != (BoolFlags & hash_bool_flags::incremental_pos);
2010
+ static const bool power_2_buckets = incremental || (0 != (BoolFlags & hash_bool_flags::power_2_buckets_pos));
2011
+ static const bool fastmod_buckets = 0 != (BoolFlags & hash_bool_flags::fastmod_buckets_pos);
2012
+
2013
+ typedef detail::bool_<fastmod_buckets> fastmod_buckets_t;
2014
+
2015
+ inline bucket_type &priv_hash_to_bucket(std::size_t hash_value) const
2016
+ { return this->priv_bucket(this->priv_hash_to_nbucket(hash_value)); }
2017
+
2018
+ inline bucket_ptr priv_hash_to_bucket_ptr(std::size_t hash_value) const
2019
+ { return this->priv_bucket_ptr(this->priv_hash_to_nbucket(hash_value)); }
2020
+
2021
+ inline size_type priv_hash_to_nbucket(std::size_t hash_value) const
2022
+ { return (priv_hash_to_nbucket)(hash_value, fastmod_buckets_t()); }
2023
+
2024
+ inline size_type priv_hash_to_nbucket(std::size_t hash_value, detail::true_) const //fastmod_buckets_t
2025
+ { return static_cast<size_type>(prime_fmod_size::position(hash_value, this->split_count())); }
2026
+
2027
+ inline size_type priv_hash_to_nbucket(std::size_t hash_value, detail::false_) const //!fastmod_buckets_t
2028
+ {
2029
+ return static_cast<size_type>(hash_to_bucket_split<power_2_buckets, incremental>
2030
+ (hash_value, this->priv_usable_bucket_count(), this->split_count(), detail::false_()));
2031
+ }
2032
+
2033
+ inline iterator iterator_to(reference value, detail::false_) BOOST_NOEXCEPT
2034
+ {
2035
+ return iterator( siterator(this->priv_value_to_node_ptr(value))
2036
+ , &this->get_bucket_value_traits());
2037
+ }
2038
+
2039
+ const_iterator iterator_to(const_reference value, detail::false_) const BOOST_NOEXCEPT
2040
+ {
2041
+ siterator const sit = siterator
2042
+ ( pointer_traits<node_ptr>::const_cast_from(this->priv_value_to_node_ptr(value)) );
1486
2043
  return const_iterator(sit, &this->get_bucket_value_traits());
1487
2044
  }
1488
2045
 
1489
- static local_iterator s_local_iterator_to(reference value)
2046
+
2047
+ static local_iterator s_local_iterator_to(reference value) BOOST_NOEXCEPT
1490
2048
  {
1491
- BOOST_STATIC_ASSERT((!stateful_value_traits));
1492
- siterator sit = bucket_type::s_iterator_to(*value_traits::to_node_ptr(value));
2049
+ BOOST_INTRUSIVE_STATIC_ASSERT((!stateful_value_traits));
2050
+ siterator sit(value_traits::to_node_ptr(value));
1493
2051
  return local_iterator(sit, const_value_traits_ptr());
1494
2052
  }
1495
2053
 
1496
- static const_local_iterator s_local_iterator_to(const_reference value)
2054
+ static const_local_iterator s_local_iterator_to(const_reference value) BOOST_NOEXCEPT
1497
2055
  {
1498
- BOOST_STATIC_ASSERT((!stateful_value_traits));
1499
- siterator const sit = bucket_type::s_iterator_to
1500
- ( *pointer_traits<node_ptr>::const_cast_from
2056
+ BOOST_INTRUSIVE_STATIC_ASSERT((!stateful_value_traits));
2057
+ siterator const sit = siterator
2058
+ ( pointer_traits<node_ptr>::const_cast_from
1501
2059
  (value_traits::to_node_ptr(value))
1502
2060
  );
1503
2061
  return const_local_iterator(sit, const_value_traits_ptr());
1504
2062
  }
1505
2063
 
1506
- local_iterator local_iterator_to(reference value)
2064
+ local_iterator local_iterator_to(reference value) BOOST_NOEXCEPT
1507
2065
  {
1508
- siterator sit = bucket_type::s_iterator_to(this->priv_value_to_node(value));
2066
+ siterator sit(this->priv_value_to_node_ptr(value));
1509
2067
  return local_iterator(sit, this->priv_value_traits_ptr());
1510
2068
  }
1511
2069
 
1512
- const_local_iterator local_iterator_to(const_reference value) const
2070
+ const_local_iterator local_iterator_to(const_reference value) const BOOST_NOEXCEPT
1513
2071
  {
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
- );
2072
+ siterator sit
2073
+ ( pointer_traits<node_ptr>::const_cast_from(this->priv_value_to_node_ptr(value)) );
1518
2074
  return const_local_iterator(sit, this->priv_value_traits_ptr());
1519
2075
  }
1520
2076
 
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
- }
2077
+ inline size_type bucket_count() const BOOST_NOEXCEPT
2078
+ { return size_type(this->priv_usable_bucket_count()); }
1527
2079
 
1528
- BOOST_INTRUSIVE_FORCEINLINE size_type bucket_size(size_type n) const
1529
- { return this->priv_bucket_pointer()[n].size(); }
2080
+ inline size_type bucket_size(size_type n) const BOOST_NOEXCEPT
2081
+ { return (size_type)this->priv_bucket_size(n); }
1530
2082
 
1531
- BOOST_INTRUSIVE_FORCEINLINE bucket_ptr bucket_pointer() const
2083
+ inline bucket_ptr bucket_pointer() const BOOST_NOEXCEPT
1532
2084
  { return this->priv_bucket_pointer(); }
1533
2085
 
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()); }
2086
+ inline local_iterator begin(size_type n) BOOST_NOEXCEPT
2087
+ { return local_iterator(this->priv_bucket_lbegin(n), this->priv_value_traits_ptr()); }
1536
2088
 
1537
- BOOST_INTRUSIVE_FORCEINLINE const_local_iterator begin(size_type n) const
2089
+ inline const_local_iterator begin(size_type n) const BOOST_NOEXCEPT
1538
2090
  { return this->cbegin(n); }
1539
2091
 
1540
- static BOOST_INTRUSIVE_FORCEINLINE size_type suggested_upper_bucket_count(size_type n)
2092
+ static inline size_type suggested_upper_bucket_count(size_type n) BOOST_NOEXCEPT
1541
2093
  {
1542
- return prime_list_holder<0>::suggested_upper_bucket_count(n);
2094
+ BOOST_IF_CONSTEXPR(fastmod_buckets){
2095
+ std::size_t s = prime_fmod_size::upper_size_index(n);
2096
+ return static_cast<SizeType>(prime_fmod_size::size(s));
2097
+ }
2098
+ else{
2099
+ return prime_list_holder<0>::suggested_upper_bucket_count(n);
2100
+ }
1543
2101
  }
1544
2102
 
1545
- static BOOST_INTRUSIVE_FORCEINLINE size_type suggested_lower_bucket_count(size_type n)
2103
+ static inline size_type suggested_lower_bucket_count(size_type n) BOOST_NOEXCEPT
1546
2104
  {
1547
- return prime_list_holder<0>::suggested_lower_bucket_count(n);
2105
+ BOOST_IF_CONSTEXPR(fastmod_buckets){
2106
+ std::size_t s = prime_fmod_size::lower_size_index(n);
2107
+ return static_cast<SizeType>(prime_fmod_size::size(s));
2108
+ }
2109
+ else{
2110
+ return prime_list_holder<0>::suggested_lower_bucket_count(n);
2111
+ }
1548
2112
  }
1549
2113
 
1550
- const_local_iterator cbegin(size_type n) const
2114
+ const_local_iterator cbegin(size_type n) const BOOST_NOEXCEPT
1551
2115
  {
1552
2116
  return const_local_iterator
1553
- ( pointer_traits<bucket_ptr>::const_cast_from(this->priv_bucket_pointer())[n].begin()
2117
+ (this->priv_bucket_lbegin(n)
1554
2118
  , this->priv_value_traits_ptr());
1555
2119
  }
1556
2120
 
1557
- using internal_type::end;
1558
- using internal_type::cend;
2121
+ using split_bucket_hash_equal_t::end;
2122
+ using split_bucket_hash_equal_t::cend;
1559
2123
 
1560
- local_iterator end(size_type n)
1561
- { return local_iterator(this->priv_bucket_pointer()[n].end(), this->priv_value_traits_ptr()); }
2124
+ local_iterator end(size_type n) BOOST_NOEXCEPT
2125
+ { return local_iterator(this->priv_bucket_lend(n), this->priv_value_traits_ptr()); }
1562
2126
 
1563
- BOOST_INTRUSIVE_FORCEINLINE const_local_iterator end(size_type n) const
2127
+ inline const_local_iterator end(size_type n) const BOOST_NOEXCEPT
1564
2128
  { return this->cend(n); }
1565
2129
 
1566
- const_local_iterator cend(size_type n) const
2130
+ const_local_iterator cend(size_type n) const BOOST_NOEXCEPT
1567
2131
  {
1568
2132
  return const_local_iterator
1569
- ( pointer_traits<bucket_ptr>::const_cast_from(this->priv_bucket_pointer())[n].end()
2133
+ ( this->priv_bucket_lend(n)
1570
2134
  , this->priv_value_traits_ptr());
1571
2135
  }
1572
2136
 
1573
2137
  //Public functions for hashtable_impl
1574
2138
 
1575
- BOOST_INTRUSIVE_FORCEINLINE iterator begin()
1576
- { return iterator(this->priv_begin(), &this->get_bucket_value_traits()); }
2139
+ inline iterator begin() BOOST_NOEXCEPT
2140
+ {
2141
+ bucket_ptr p;
2142
+ siterator s = this->priv_begin(p);
2143
+ return this->build_iterator(s, p);
2144
+ }
1577
2145
 
1578
- BOOST_INTRUSIVE_FORCEINLINE const_iterator begin() const
2146
+ inline const_iterator begin() const BOOST_NOEXCEPT
1579
2147
  { return this->cbegin(); }
1580
2148
 
1581
- BOOST_INTRUSIVE_FORCEINLINE const_iterator cbegin() const
1582
- { return const_iterator(this->priv_begin(), &this->get_bucket_value_traits()); }
2149
+ inline const_iterator cbegin() const BOOST_NOEXCEPT
2150
+ {
2151
+ bucket_ptr p;
2152
+ siterator s = this->priv_begin(p);
2153
+ return this->build_const_iterator(s, p);
2154
+ }
1583
2155
 
1584
- BOOST_INTRUSIVE_FORCEINLINE hasher hash_function() const
2156
+ inline hasher hash_function() const
1585
2157
  { return this->priv_hasher(); }
1586
2158
 
1587
- BOOST_INTRUSIVE_FORCEINLINE key_equal key_eq() const
2159
+ inline key_equal key_eq() const
1588
2160
  { return this->priv_equal(); }
1589
2161
  };
1590
2162
 
2163
+ template< class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash
2164
+ , class VoidOrKeyEqual, class BucketTraits, class SizeType
2165
+ , std::size_t BoolFlags>
2166
+ struct get_hashtable_size_wrapper_internal
2167
+ {
2168
+ typedef hashtable_size_wrapper
2169
+ < hashdata_internal
2170
+ < ValueTraits
2171
+ , VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual
2172
+ , BucketTraits, SizeType
2173
+ , BoolFlags & ~(hash_bool_flags::constant_time_size_pos) //1
2174
+ >
2175
+ , SizeType
2176
+ , (BoolFlags& hash_bool_flags::constant_time_size_pos) != 0
2177
+ > type;
2178
+ };
2179
+
1591
2180
  /// @endcond
1592
2181
 
1593
2182
  //! The class template hashtable is an intrusive hash table container, that
@@ -1632,27 +2221,13 @@ template<class T, class ...Options>
1632
2221
  template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits, class SizeType, std::size_t BoolFlags>
1633
2222
  #endif
1634
2223
  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
- >
2224
+ : private get_hashtable_size_wrapper_internal
2225
+ <ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, SizeType, BoolFlags>::type
1645
2226
  {
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;
2227
+ static const bool linear_buckets_flag = (BoolFlags & hash_bool_flags::linear_buckets_pos) != 0;
2228
+ typedef typename get_hashtable_size_wrapper_internal
2229
+ <ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, SizeType, BoolFlags>::type
2230
+ internal_type;
1656
2231
  typedef typename internal_type::size_traits size_traits;
1657
2232
  typedef hash_key_types_base
1658
2233
  < typename ValueTraits::value_type
@@ -1664,10 +2239,14 @@ class hashtable_impl
1664
2239
  /// @cond
1665
2240
  typedef BucketTraits bucket_traits;
1666
2241
 
1667
- typedef typename internal_type::slist_impl slist_impl;
1668
- typedef bucket_plus_vtraits<ValueTraits, BucketTraits> bucket_plus_vtraits_t;
2242
+ typedef bucket_plus_vtraits
2243
+ <ValueTraits, BucketTraits, linear_buckets_flag> bucket_plus_vtraits_t;
1669
2244
  typedef typename bucket_plus_vtraits_t::const_value_traits_ptr const_value_traits_ptr;
1670
2245
 
2246
+ typedef detail::bool_<linear_buckets_flag> linear_buckets_t;
2247
+
2248
+ typedef typename internal_type::siterator siterator;
2249
+ typedef typename internal_type::const_siterator const_siterator;
1671
2250
  using internal_type::begin;
1672
2251
  using internal_type::cbegin;
1673
2252
  using internal_type::end;
@@ -1697,10 +2276,8 @@ class hashtable_impl
1697
2276
  typedef SizeType size_type;
1698
2277
  typedef typename internal_type::key_equal key_equal;
1699
2278
  typedef typename internal_type::hasher hasher;
1700
- typedef detail::bucket_impl<slist_impl> bucket_type;
2279
+ typedef typename internal_type::bucket_type bucket_type;
1701
2280
  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
2281
  typedef typename internal_type::iterator iterator;
1705
2282
  typedef typename internal_type::const_iterator const_iterator;
1706
2283
  typedef typename internal_type::local_iterator local_iterator;
@@ -1717,7 +2294,7 @@ class hashtable_impl
1717
2294
  <node_ptr>::reference node_reference;
1718
2295
  typedef typename pointer_traits
1719
2296
  <const_node_ptr>::reference const_node_reference;
1720
- typedef typename slist_impl::node_algorithms node_algorithms;
2297
+ typedef typename internal_type::slist_node_algorithms slist_node_algorithms;
1721
2298
 
1722
2299
  static const bool stateful_value_traits = internal_type::stateful_value_traits;
1723
2300
  static const bool store_hash = internal_type::store_hash;
@@ -1728,9 +2305,10 @@ class hashtable_impl
1728
2305
  static const bool compare_hash = 0 != (BoolFlags & hash_bool_flags::compare_hash_pos);
1729
2306
  static const bool incremental = 0 != (BoolFlags & hash_bool_flags::incremental_pos);
1730
2307
  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;
2308
+ static const bool optimize_multikey = optimize_multikey_is_true<node_traits>::value && !unique_keys;
2309
+ static const bool linear_buckets = linear_buckets_flag;
2310
+ static const bool fastmod_buckets = 0 != (BoolFlags & hash_bool_flags::fastmod_buckets_pos);
2311
+ static const std::size_t bucket_overhead = internal_type::bucket_overhead;
1734
2312
 
1735
2313
  /// @cond
1736
2314
  static const bool is_multikey = !unique_keys;
@@ -1738,9 +2316,13 @@ class hashtable_impl
1738
2316
 
1739
2317
  //Configuration error: compare_hash<> can't be specified without store_hash<>
1740
2318
  //See documentation for more explanations
1741
- BOOST_STATIC_ASSERT((!compare_hash || store_hash));
2319
+ BOOST_INTRUSIVE_STATIC_ASSERT((!compare_hash || store_hash));
2320
+
2321
+ //Configuration error: fasmod_buckets<> can't be specified with incremental<> or power_2_buckets<>
2322
+ //See documentation for more explanations
2323
+ BOOST_INTRUSIVE_STATIC_ASSERT(!(fastmod_buckets && power_2_buckets));
1742
2324
 
1743
- typedef typename slist_impl::node_ptr slist_node_ptr;
2325
+ typedef typename internal_type::slist_node_ptr slist_node_ptr;
1744
2326
  typedef typename pointer_traits
1745
2327
  <slist_node_ptr>::template rebind_pointer
1746
2328
  < void >::type void_pointer;
@@ -1752,9 +2334,11 @@ class hashtable_impl
1752
2334
  typedef detail::bool_<optimize_multikey> optimize_multikey_t;
1753
2335
  typedef detail::bool_<cache_begin> cache_begin_t;
1754
2336
  typedef detail::bool_<power_2_buckets> power_2_buckets_t;
2337
+ typedef detail::bool_<fastmod_buckets> fastmod_buckets_t;
2338
+ typedef detail::bool_<compare_hash> compare_hash_t;
1755
2339
  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;
2340
+ typedef group_functions<node_traits> group_functions_t;
2341
+ typedef node_functions<node_traits> node_functions_t;
1758
2342
 
1759
2343
  private:
1760
2344
  //noncopyable, movable
@@ -1763,31 +2347,41 @@ class hashtable_impl
1763
2347
  static const bool safemode_or_autounlink = internal_type::safemode_or_autounlink;
1764
2348
 
1765
2349
  //Constant-time size is incompatible with auto-unlink hooks!
1766
- BOOST_STATIC_ASSERT(!(constant_time_size && ((int)value_traits::link_mode == (int)auto_unlink)));
2350
+ BOOST_INTRUSIVE_STATIC_ASSERT(!(constant_time_size && ((int)value_traits::link_mode == (int)auto_unlink)));
1767
2351
  //Cache begin is incompatible with auto-unlink hooks!
1768
- BOOST_STATIC_ASSERT(!(cache_begin && ((int)value_traits::link_mode == (int)auto_unlink)));
2352
+ BOOST_INTRUSIVE_STATIC_ASSERT(!(cache_begin && ((int)value_traits::link_mode == (int)auto_unlink)));
1769
2353
 
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
2354
 
1778
- template<class Disposer>
1779
- typename typeof_node_disposer<Disposer>::type
1780
- make_node_disposer(const Disposer &disposer) const
2355
+ /// @endcond
2356
+
2357
+ public:
2358
+ typedef insert_commit_data_impl insert_commit_data;
2359
+
2360
+ private:
2361
+ void default_init_actions()
1781
2362
  {
1782
- typedef typename typeof_node_disposer<Disposer>::type return_t;
1783
- return return_t(disposer, &this->priv_value_traits());
2363
+ this->priv_set_sentinel_bucket();
2364
+ this->priv_init_buckets_and_cache();
2365
+ this->priv_size_count(size_type(0));
2366
+ size_type bucket_sz = this->bucket_count();
2367
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(bucket_sz != 0);
2368
+ //Check power of two bucket array if the option is activated
2369
+ BOOST_INTRUSIVE_INVARIANT_ASSERT
2370
+ (!power_2_buckets || (0 == (bucket_sz & (bucket_sz - 1))));
2371
+ this->split_count(this->initial_split_from_bucket_count(bucket_sz));
1784
2372
  }
1785
2373
 
1786
- /// @endcond
2374
+ inline SizeType priv_size_count() const BOOST_NOEXCEPT
2375
+ { return this->internal_type::get_hashtable_size_wrapper_size(); }
1787
2376
 
1788
- public:
1789
- typedef detail::insert_commit_data_impl insert_commit_data;
2377
+ inline void priv_size_count(SizeType s) BOOST_NOEXCEPT
2378
+ { this->internal_type::set_hashtable_size_wrapper_size(s); }
2379
+
2380
+ inline void priv_size_inc() BOOST_NOEXCEPT
2381
+ { this->internal_type::inc_hashtable_size_wrapper_size(); }
1790
2382
 
2383
+ inline void priv_size_dec() BOOST_NOEXCEPT
2384
+ { this->internal_type::dec_hashtable_size_wrapper_size(); }
1791
2385
 
1792
2386
  public:
1793
2387
 
@@ -1809,16 +2403,7 @@ class hashtable_impl
1809
2403
  , const key_equal &equal_func = key_equal()
1810
2404
  , const value_traits &v_traits = value_traits())
1811
2405
  : 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
- }
2406
+ { this->default_init_actions(); }
1822
2407
 
1823
2408
  //! <b>Requires</b>: buckets must not be being used by any other resource
1824
2409
  //! and dereferencing iterator must yield an lvalue of type value_type.
@@ -1843,14 +2428,8 @@ class hashtable_impl
1843
2428
  , const value_traits &v_traits = value_traits())
1844
2429
  : internal_type(v_traits, b_traits, hash_func, equal_func)
1845
2430
  {
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);
2431
+ this->default_init_actions();
2432
+
1854
2433
  //Now insert
1855
2434
  if(unique)
1856
2435
  this->insert_unique(b, e);
@@ -1868,18 +2447,14 @@ class hashtable_impl
1868
2447
  //! move constructor throws (this does not happen with predefined Boost.Intrusive hooks)
1869
2448
  //! or the move constructor of value traits, bucket traits, hasher or comparison throws.
1870
2449
  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
- )
2450
+ : internal_type(BOOST_MOVE_BASE(internal_type, x))
1876
2451
  {
1877
2452
  this->priv_swap_cache(x);
1878
- x.priv_initialize_cache();
1879
- this->priv_size_traits().set_size(x.priv_size_traits().get_size());
1880
- x.priv_size_traits().set_size(size_type(0));
1881
- this->priv_split_traits().set_size(x.priv_split_traits().get_size());
1882
- x.priv_split_traits().set_size(size_type(0));
2453
+ x.priv_init_cache();
2454
+ this->priv_size_count(x.priv_size_count());
2455
+ x.priv_size_count(size_type(0));
2456
+ this->split_count(x.split_count());
2457
+ x.split_count(size_type(0));
1883
2458
  }
1884
2459
 
1885
2460
  //! <b>Effects</b>: Equivalent to swap.
@@ -1887,7 +2462,6 @@ class hashtable_impl
1887
2462
  hashtable_impl& operator=(BOOST_RV_REF(hashtable_impl) x)
1888
2463
  { this->swap(x); return *this; }
1889
2464
 
1890
- #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1891
2465
  //! <b>Effects</b>: Detaches all elements from this. The objects in the unordered_set
1892
2466
  //! are not deleted (i.e. no destructors are called).
1893
2467
  //!
@@ -1895,15 +2469,17 @@ class hashtable_impl
1895
2469
  //! it's a safe-mode or auto-unlink value. Otherwise constant.
1896
2470
  //!
1897
2471
  //! <b>Throws</b>: Nothing.
1898
- ~hashtable_impl();
2472
+ ~hashtable_impl()
2473
+ {}
1899
2474
 
2475
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1900
2476
  //! <b>Effects</b>: Returns an iterator pointing to the beginning of the unordered_set.
1901
2477
  //!
1902
2478
  //! <b>Complexity</b>: Amortized constant time.
1903
2479
  //! Worst case (empty unordered_set): O(this->bucket_count())
1904
2480
  //!
1905
2481
  //! <b>Throws</b>: Nothing.
1906
- iterator begin();
2482
+ iterator begin() BOOST_NOEXCEPT;
1907
2483
 
1908
2484
  //! <b>Effects</b>: Returns a const_iterator pointing to the beginning
1909
2485
  //! of the unordered_set.
@@ -1912,7 +2488,7 @@ class hashtable_impl
1912
2488
  //! Worst case (empty unordered_set): O(this->bucket_count())
1913
2489
  //!
1914
2490
  //! <b>Throws</b>: Nothing.
1915
- const_iterator begin() const;
2491
+ const_iterator begin() const BOOST_NOEXCEPT;
1916
2492
 
1917
2493
  //! <b>Effects</b>: Returns a const_iterator pointing to the beginning
1918
2494
  //! of the unordered_set.
@@ -1921,28 +2497,28 @@ class hashtable_impl
1921
2497
  //! Worst case (empty unordered_set): O(this->bucket_count())
1922
2498
  //!
1923
2499
  //! <b>Throws</b>: Nothing.
1924
- const_iterator cbegin() const;
2500
+ const_iterator cbegin() const BOOST_NOEXCEPT;
1925
2501
 
1926
2502
  //! <b>Effects</b>: Returns an iterator pointing to the end of the unordered_set.
1927
2503
  //!
1928
2504
  //! <b>Complexity</b>: Constant.
1929
2505
  //!
1930
2506
  //! <b>Throws</b>: Nothing.
1931
- iterator end();
2507
+ iterator end() BOOST_NOEXCEPT;
1932
2508
 
1933
2509
  //! <b>Effects</b>: Returns a const_iterator pointing to the end of the unordered_set.
1934
2510
  //!
1935
2511
  //! <b>Complexity</b>: Constant.
1936
2512
  //!
1937
2513
  //! <b>Throws</b>: Nothing.
1938
- const_iterator end() const;
2514
+ const_iterator end() const BOOST_NOEXCEPT;
1939
2515
 
1940
2516
  //! <b>Effects</b>: Returns a const_iterator pointing to the end of the unordered_set.
1941
2517
  //!
1942
2518
  //! <b>Complexity</b>: Constant.
1943
2519
  //!
1944
2520
  //! <b>Throws</b>: Nothing.
1945
- const_iterator cend() const;
2521
+ const_iterator cend() const BOOST_NOEXCEPT;
1946
2522
 
1947
2523
  //! <b>Effects</b>: Returns the hasher object used by the unordered_set.
1948
2524
  //!
@@ -1967,9 +2543,9 @@ class hashtable_impl
1967
2543
  //! Otherwise constant.
1968
2544
  //!
1969
2545
  //! <b>Throws</b>: Nothing.
1970
- bool empty() const
2546
+ bool empty() const BOOST_NOEXCEPT
1971
2547
  {
1972
- if(constant_time_size){
2548
+ BOOST_IF_CONSTEXPR(constant_time_size){
1973
2549
  return !this->size();
1974
2550
  }
1975
2551
  else if(cache_begin){
@@ -1979,7 +2555,7 @@ class hashtable_impl
1979
2555
  size_type bucket_cnt = this->bucket_count();
1980
2556
  const bucket_type *b = boost::movelib::to_raw_pointer(this->priv_bucket_pointer());
1981
2557
  for (size_type n = 0; n < bucket_cnt; ++n, ++b){
1982
- if(!b->empty()){
2558
+ if(!slist_node_algorithms::is_empty(b->get_node_ptr())){
1983
2559
  return false;
1984
2560
  }
1985
2561
  }
@@ -1993,18 +2569,19 @@ class hashtable_impl
1993
2569
  //! constant_time_size is false. Constant-time otherwise.
1994
2570
  //!
1995
2571
  //! <b>Throws</b>: Nothing.
1996
- size_type size() const
2572
+ size_type size() const BOOST_NOEXCEPT
1997
2573
  {
1998
- if(constant_time_size)
1999
- return this->priv_size_traits().get_size();
2574
+ BOOST_IF_CONSTEXPR(constant_time_size)
2575
+ return this->priv_size_count();
2000
2576
  else{
2001
- size_type len = 0;
2002
- size_type bucket_cnt = this->bucket_count();
2577
+ std::size_t len = 0;
2578
+ std::size_t bucket_cnt = this->bucket_count();
2003
2579
  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();
2580
+ for (std::size_t n = 0; n < bucket_cnt; ++n, ++b){
2581
+ len += slist_node_algorithms::count(b->get_node_ptr()) - 1u;
2006
2582
  }
2007
- return len;
2583
+ BOOST_INTRUSIVE_INVARIANT_ASSERT((len <= SizeType(-1)));
2584
+ return size_type(len);
2008
2585
  }
2009
2586
  }
2010
2587
 
@@ -2051,7 +2628,7 @@ class hashtable_impl
2051
2628
  //! <b>Throws</b>: If cloner or hasher throw or hash or equality predicate copying
2052
2629
  //! throws. Basic guarantee.
2053
2630
  template <class Cloner, class Disposer>
2054
- BOOST_INTRUSIVE_FORCEINLINE void clone_from(const hashtable_impl &src, Cloner cloner, Disposer disposer)
2631
+ inline void clone_from(const hashtable_impl &src, Cloner cloner, Disposer disposer)
2055
2632
  { this->priv_clone_from(src, cloner, disposer); }
2056
2633
 
2057
2634
  //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw
@@ -2074,7 +2651,7 @@ class hashtable_impl
2074
2651
  //! <b>Throws</b>: If cloner or hasher throw or hash or equality predicate copying
2075
2652
  //! throws. Basic guarantee.
2076
2653
  template <class Cloner, class Disposer>
2077
- BOOST_INTRUSIVE_FORCEINLINE void clone_from(BOOST_RV_REF(hashtable_impl) src, Cloner cloner, Disposer disposer)
2654
+ inline void clone_from(BOOST_RV_REF(hashtable_impl) src, Cloner cloner, Disposer disposer)
2078
2655
  { this->priv_clone_from(static_cast<hashtable_impl&>(src), cloner, disposer); }
2079
2656
 
2080
2657
  //! <b>Requires</b>: value must be an lvalue
@@ -2096,7 +2673,7 @@ class hashtable_impl
2096
2673
  siterator prev;
2097
2674
  siterator const it = this->priv_find
2098
2675
  (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();
2676
+ bool const next_is_in_group = optimize_multikey && it != this->priv_end_sit();
2100
2677
  return this->priv_insert_equal_after_find(value, bucket_num, hash_value, prev, next_is_in_group);
2101
2678
  }
2102
2679
 
@@ -2140,7 +2717,7 @@ class hashtable_impl
2140
2717
  insert_commit_data commit_data;
2141
2718
  std::pair<iterator, bool> ret = this->insert_unique_check(key_of_value()(value), commit_data);
2142
2719
  if(ret.second){
2143
- ret.first = this->insert_unique_commit(value, commit_data);
2720
+ ret.first = this->insert_unique_fast_commit(value, commit_data);
2144
2721
  }
2145
2722
  return ret;
2146
2723
  }
@@ -2206,12 +2783,15 @@ class hashtable_impl
2206
2783
  , KeyEqual equal_func
2207
2784
  , insert_commit_data &commit_data)
2208
2785
  {
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());
2786
+ const std::size_t h = hash_func(key);
2787
+ const std::size_t bn = this->priv_hash_to_nbucket(h);
2788
+
2789
+ commit_data.bucket_idx = bn;
2790
+ commit_data.set_hash(h);
2791
+
2792
+ bucket_ptr bp = this->priv_bucket_ptr(bn);
2793
+ siterator const s = this->priv_find_in_bucket(*bp, key, equal_func, h);
2794
+ return std::pair<iterator, bool>(this->build_iterator(s, bp), s == this->priv_end_sit());
2215
2795
  }
2216
2796
 
2217
2797
  //! <b>Effects</b>: Checks if a value can be inserted in the unordered_set, using
@@ -2241,7 +2821,7 @@ class hashtable_impl
2241
2821
  //! objects are inserted or erased from the unordered_set.
2242
2822
  //!
2243
2823
  //! After a successful rehashing insert_commit_data remains valid.
2244
- BOOST_INTRUSIVE_FORCEINLINE std::pair<iterator, bool> insert_unique_check
2824
+ inline std::pair<iterator, bool> insert_unique_check
2245
2825
  ( const key_type &key, insert_commit_data &commit_data)
2246
2826
  { return this->insert_unique_check(key, this->priv_hasher(), this->priv_equal(), commit_data); }
2247
2827
 
@@ -2264,17 +2844,53 @@ class hashtable_impl
2264
2844
  //! erased between the "insert_check" and "insert_commit" calls.
2265
2845
  //!
2266
2846
  //! After a successful rehashing insert_commit_data remains valid.
2267
- iterator insert_unique_commit(reference value, const insert_commit_data &commit_data)
2847
+ iterator insert_unique_commit(reference value, const insert_commit_data& commit_data) BOOST_NOEXCEPT
2268
2848
  {
2269
- size_type bucket_num = this->priv_hash_to_bucket(commit_data.hash);
2270
- bucket_type &b = this->priv_bucket_pointer()[bucket_num];
2849
+ size_type bucket_num = this->priv_hash_to_nbucket(commit_data.get_hash());
2850
+ bucket_type& b = this->priv_bucket(bucket_num);
2271
2851
  this->priv_size_traits().increment();
2272
2852
  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());
2853
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!safemode_or_autounlink || slist_node_algorithms::unique(n));
2854
+ node_functions_t::store_hash(n, commit_data.get_hash(), store_hash_t());
2275
2855
  this->priv_insertion_update_cache(bucket_num);
2276
2856
  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());
2857
+ slist_node_algorithms::link_after(b.get_node_ptr(), n);
2858
+ return this->build_iterator(siterator(n), this->to_ptr(b));
2859
+ }
2860
+
2861
+ //! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
2862
+ //! must have been obtained from a previous call to "insert_check".
2863
+ //! No objects should have been inserted or erased from the unordered_set between
2864
+ //! the "insert_check" that filled "commit_data" and the call to "insert_commit".
2865
+ //!
2866
+ //! No rehashing shall be performed between `insert_check` and `insert_fast_commit`.
2867
+ //!
2868
+ //! <b>Effects</b>: Inserts the value in the unordered_set using the information obtained
2869
+ //! from the "commit_data" that a previous "insert_check" filled.
2870
+ //!
2871
+ //! <b>Returns</b>: An iterator to the newly inserted object.
2872
+ //!
2873
+ //! <b>Complexity</b>: Constant time.
2874
+ //!
2875
+ //! <b>Throws</b>: Nothing.
2876
+ //!
2877
+ //! <b>Notes</b>: This function has only sense if a "insert_check" has been
2878
+ //! previously executed to fill "commit_data". No value should be inserted or
2879
+ //! erased between the "insert_check" and "insert_commit" calls.
2880
+ //!
2881
+ //! Since this commit operation does not support rehashing between the check
2882
+ //! and the commit, it's faster than `insert_commit`.
2883
+ iterator insert_unique_fast_commit(reference value, const insert_commit_data &commit_data) BOOST_NOEXCEPT
2884
+ {
2885
+ this->priv_size_inc();
2886
+ node_ptr const n = this->priv_value_to_node_ptr(value);
2887
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!safemode_or_autounlink || slist_node_algorithms::unique(n));
2888
+ node_functions_t::store_hash(n, commit_data.get_hash(), store_hash_t());
2889
+ this->priv_insertion_update_cache(static_cast<size_type>(commit_data.bucket_idx));
2890
+ group_functions_t::insert_in_group(n, n, optimize_multikey_t());
2891
+ bucket_type& b = this->priv_bucket(commit_data.bucket_idx);
2892
+ slist_node_algorithms::link_after(b.get_node_ptr(), n);
2893
+ return this->build_iterator(siterator(n), this->to_ptr(b));
2278
2894
  }
2279
2895
 
2280
2896
  //! <b>Effects</b>: Erases the element pointed to by i.
@@ -2285,7 +2901,7 @@ class hashtable_impl
2285
2901
  //!
2286
2902
  //! <b>Note</b>: Invalidates the iterators (but not the references)
2287
2903
  //! to the erased element. No destructors are called.
2288
- BOOST_INTRUSIVE_FORCEINLINE void erase(const_iterator i)
2904
+ inline void erase(const_iterator i) BOOST_NOEXCEPT
2289
2905
  { this->erase_and_dispose(i, detail::null_disposer()); }
2290
2906
 
2291
2907
  //! <b>Effects</b>: Erases the range pointed to by b end e.
@@ -2297,7 +2913,7 @@ class hashtable_impl
2297
2913
  //!
2298
2914
  //! <b>Note</b>: Invalidates the iterators (but not the references)
2299
2915
  //! to the erased elements. No destructors are called.
2300
- BOOST_INTRUSIVE_FORCEINLINE void erase(const_iterator b, const_iterator e)
2916
+ inline void erase(const_iterator b, const_iterator e) BOOST_NOEXCEPT
2301
2917
  { this->erase_and_dispose(b, e, detail::null_disposer()); }
2302
2918
 
2303
2919
  //! <b>Effects</b>: Erases all the elements with the given value.
@@ -2312,7 +2928,7 @@ class hashtable_impl
2312
2928
  //!
2313
2929
  //! <b>Note</b>: Invalidates the iterators (but not the references)
2314
2930
  //! to the erased elements. No destructors are called.
2315
- BOOST_INTRUSIVE_FORCEINLINE size_type erase(const key_type &key)
2931
+ inline size_type erase(const key_type &key)
2316
2932
  { return this->erase(key, this->priv_hasher(), this->priv_equal()); }
2317
2933
 
2318
2934
  //! <b>Requires</b>: "hash_func" must be a hash function that induces
@@ -2336,7 +2952,7 @@ class hashtable_impl
2336
2952
  //! <b>Note</b>: Invalidates the iterators (but not the references)
2337
2953
  //! to the erased elements. No destructors are called.
2338
2954
  template<class KeyType, class KeyHasher, class KeyEqual>
2339
- BOOST_INTRUSIVE_FORCEINLINE size_type erase(const KeyType& key, KeyHasher hash_func, KeyEqual equal_func)
2955
+ inline size_type erase(const KeyType& key, KeyHasher hash_func, KeyEqual equal_func)
2340
2956
  { return this->erase_and_dispose(key, hash_func, equal_func, detail::null_disposer()); }
2341
2957
 
2342
2958
  //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
@@ -2353,14 +2969,13 @@ class hashtable_impl
2353
2969
  template<class Disposer>
2354
2970
  BOOST_INTRUSIVE_DOC1ST(void
2355
2971
  , typename detail::disable_if_convertible<Disposer BOOST_INTRUSIVE_I const_iterator>::type)
2356
- erase_and_dispose(const_iterator i, Disposer disposer)
2972
+ erase_and_dispose(const_iterator i, Disposer disposer) BOOST_NOEXCEPT
2357
2973
  {
2358
2974
  //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());
2362
- this->priv_size_traits().decrement();
2363
- this->priv_erasure_update_cache_range(first_bucket_num, first_bucket_num);
2975
+ const bucket_ptr bp = this->priv_get_bucket_ptr(i);
2976
+ this->priv_erase_node(*bp, i.slist_it(), this->make_node_disposer(disposer), optimize_multikey_t());
2977
+ this->priv_size_dec();
2978
+ this->priv_erasure_update_cache(bp);
2364
2979
  }
2365
2980
 
2366
2981
  //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
@@ -2376,33 +2991,31 @@ class hashtable_impl
2376
2991
  //! <b>Note</b>: Invalidates the iterators
2377
2992
  //! to the erased elements.
2378
2993
  template<class Disposer>
2379
- void erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
2994
+ void erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer) BOOST_NOEXCEPT
2380
2995
  {
2381
2996
  if(b != e){
2382
2997
  //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);
2998
+ size_type first_bucket_num = this->priv_get_bucket_num(b);
2385
2999
 
2386
- const bucket_ptr buck_ptr = this->priv_bucket_pointer();
2387
3000
  siterator before_first_local_it
2388
- = this->priv_get_previous(buck_ptr[first_bucket_num], first_local_it);
3001
+ = this->priv_get_previous(this->priv_bucket(first_bucket_num), b.slist_it(), optimize_multikey_t());
2389
3002
  size_type last_bucket_num;
2390
3003
  siterator last_local_it;
2391
3004
 
2392
3005
  //For the end iterator, we will assign the end iterator
2393
3006
  //of the last bucket
2394
3007
  if(e == this->end()){
2395
- last_bucket_num = this->bucket_count() - 1;
2396
- last_local_it = buck_ptr[last_bucket_num].end();
3008
+ last_bucket_num = size_type(this->bucket_count() - 1u);
3009
+ last_local_it = this->sit_end(this->priv_bucket(last_bucket_num));
2397
3010
  }
2398
3011
  else{
2399
3012
  last_local_it = e.slist_it();
2400
- last_bucket_num = this->priv_get_bucket_num(last_local_it);
3013
+ last_bucket_num = this->priv_get_bucket_num(e);
2401
3014
  }
2402
- size_type const num_erased = this->priv_erase_node_range
3015
+ size_type const num_erased = (size_type)this->priv_erase_node_range
2403
3016
  ( 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);
3017
+ , this->make_node_disposer(disposer), optimize_multikey_t());
3018
+ this->priv_size_count(size_type(this->priv_size_count()-num_erased));
2406
3019
  this->priv_erasure_update_cache_range(first_bucket_num, last_bucket_num);
2407
3020
  }
2408
3021
  }
@@ -2423,7 +3036,7 @@ class hashtable_impl
2423
3036
  //! <b>Note</b>: Invalidates the iterators (but not the references)
2424
3037
  //! to the erased elements. No destructors are called.
2425
3038
  template<class Disposer>
2426
- BOOST_INTRUSIVE_FORCEINLINE size_type erase_and_dispose(const key_type &key, Disposer disposer)
3039
+ inline size_type erase_and_dispose(const key_type &key, Disposer disposer)
2427
3040
  { return this->erase_and_dispose(key, this->priv_hasher(), this->priv_equal(), disposer); }
2428
3041
 
2429
3042
  //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
@@ -2449,30 +3062,34 @@ class hashtable_impl
2449
3062
  std::size_t h;
2450
3063
  siterator prev;
2451
3064
  siterator it = this->priv_find(key, hash_func, equal_func, bucket_num, h, prev);
2452
- bool const success = it != this->priv_invalid_local_it();
3065
+ bool const success = it != this->priv_end_sit();
2453
3066
 
2454
- size_type cnt(0);
3067
+ std::size_t cnt(0);
2455
3068
  if(success){
2456
3069
  if(optimize_multikey){
3070
+ siterator past_last_in_group = it;
3071
+ (priv_go_to_last_in_group)(past_last_in_group, optimize_multikey_t());
3072
+ ++past_last_in_group;
2457
3073
  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());
3074
+ ( this->priv_bucket(bucket_num), prev
3075
+ , past_last_in_group
3076
+ , this->make_node_disposer(disposer), optimize_multikey_t());
2459
3077
  }
2460
3078
  else{
2461
- bucket_type &b = this->priv_bucket_pointer()[bucket_num];
2462
- siterator const end_sit = b.end();
3079
+ siterator const end_sit = this->priv_bucket_lend(bucket_num);
2463
3080
  do{
2464
3081
  ++cnt;
2465
3082
  ++it;
2466
3083
  }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));
3084
+ this->priv_is_value_equal_to_key
3085
+ (this->priv_value_from_siterator(it), h, key, equal_func, compare_hash_t()));
3086
+ slist_node_algorithms::unlink_after_and_dispose(prev.pointed_node(), it.pointed_node(), this->make_node_disposer(disposer));
2470
3087
  }
2471
- this->priv_size_traits().set_size(this->priv_size_traits().get_size()-cnt);
3088
+ this->priv_size_count(size_type(this->priv_size_count()-cnt));
2472
3089
  this->priv_erasure_update_cache();
2473
3090
  }
2474
3091
 
2475
- return cnt;
3092
+ return static_cast<size_type>(cnt);
2476
3093
  }
2477
3094
 
2478
3095
  //! <b>Effects</b>: Erases all of the elements.
@@ -2484,10 +3101,10 @@ class hashtable_impl
2484
3101
  //!
2485
3102
  //! <b>Note</b>: Invalidates the iterators (but not the references)
2486
3103
  //! to the erased elements. No destructors are called.
2487
- void clear()
3104
+ void clear() BOOST_NOEXCEPT
2488
3105
  {
2489
3106
  this->priv_clear_buckets_and_cache();
2490
- this->priv_size_traits().set_size(size_type(0));
3107
+ this->priv_size_count(size_type(0));
2491
3108
  }
2492
3109
 
2493
3110
  //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
@@ -2502,18 +3119,19 @@ class hashtable_impl
2502
3119
  //! <b>Note</b>: Invalidates the iterators (but not the references)
2503
3120
  //! to the erased elements. No destructors are called.
2504
3121
  template<class Disposer>
2505
- void clear_and_dispose(Disposer disposer)
3122
+ void clear_and_dispose(Disposer disposer) BOOST_NOEXCEPT
2506
3123
  {
2507
3124
  if(!constant_time_size || !this->empty()){
2508
3125
  size_type num_buckets = this->bucket_count();
2509
3126
  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);
3127
+ typename internal_type::template typeof_node_disposer<Disposer>::type d(disposer, &this->priv_value_traits());
3128
+ for(; num_buckets; ++b){
3129
+ --num_buckets;
3130
+ slist_node_algorithms::detach_and_dispose(b->get_node_ptr(), d);
2513
3131
  }
2514
- this->priv_size_traits().set_size(size_type(0));
3132
+ this->priv_size_count(size_type(0));
2515
3133
  }
2516
- this->priv_initialize_cache();
3134
+ this->priv_init_cache();
2517
3135
  }
2518
3136
 
2519
3137
  //! <b>Effects</b>: Returns the number of contained elements with the given value
@@ -2521,7 +3139,7 @@ class hashtable_impl
2521
3139
  //! <b>Complexity</b>: Average case O(1), worst case O(this->size()).
2522
3140
  //!
2523
3141
  //! <b>Throws</b>: If the internal hasher or the equality functor throws.
2524
- BOOST_INTRUSIVE_FORCEINLINE size_type count(const key_type &key) const
3142
+ inline size_type count(const key_type &key) const
2525
3143
  { return this->count(key, this->priv_hasher(), this->priv_equal()); }
2526
3144
 
2527
3145
  //! <b>Requires</b>: "hash_func" must be a hash function that induces
@@ -2552,7 +3170,7 @@ class hashtable_impl
2552
3170
  //! <b>Complexity</b>: Average case O(1), worst case O(this->size()).
2553
3171
  //!
2554
3172
  //! <b>Throws</b>: If the internal hasher or the equality functor throws.
2555
- BOOST_INTRUSIVE_FORCEINLINE iterator find(const key_type &key)
3173
+ inline iterator find(const key_type &key)
2556
3174
  { return this->find(key, this->priv_hasher(), this->priv_equal()); }
2557
3175
 
2558
3176
  //! <b>Requires</b>: "hash_func" must be a hash function that induces
@@ -2577,11 +3195,10 @@ class hashtable_impl
2577
3195
  template<class KeyType, class KeyHasher, class KeyEqual>
2578
3196
  iterator find(const KeyType &key, KeyHasher hash_func, KeyEqual equal_func)
2579
3197
  {
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());
3198
+ std::size_t h = hash_func(key);
3199
+ bucket_ptr bp = this->priv_hash_to_bucket_ptr(h);
3200
+ siterator s = this->priv_find_in_bucket(*bp, key, equal_func, h);
3201
+ return this->build_iterator(s, bp);
2585
3202
  }
2586
3203
 
2587
3204
  //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
@@ -2590,7 +3207,7 @@ class hashtable_impl
2590
3207
  //! <b>Complexity</b>: Average case O(1), worst case O(this->size()).
2591
3208
  //!
2592
3209
  //! <b>Throws</b>: If the internal hasher or the equality functor throws.
2593
- BOOST_INTRUSIVE_FORCEINLINE const_iterator find(const key_type &key) const
3210
+ inline const_iterator find(const key_type &key) const
2594
3211
  { return this->find(key, this->priv_hasher(), this->priv_equal()); }
2595
3212
 
2596
3213
  //! <b>Requires</b>: "hash_func" must be a hash function that induces
@@ -2616,11 +3233,10 @@ class hashtable_impl
2616
3233
  const_iterator find
2617
3234
  (const KeyType &key, KeyHasher hash_func, KeyEqual equal_func) const
2618
3235
  {
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());
3236
+ std::size_t h = hash_func(key);
3237
+ bucket_ptr bp = this->priv_hash_to_bucket_ptr(h);
3238
+ siterator s = this->priv_find_in_bucket(*bp, key, equal_func, h);
3239
+ return this->build_const_iterator(s, bp);
2624
3240
  }
2625
3241
 
2626
3242
  //! <b>Effects</b>: Returns a range containing all elements with values equivalent
@@ -2630,7 +3246,7 @@ class hashtable_impl
2630
3246
  //! <b>Complexity</b>: Average case O(this->count(value)). Worst case O(this->size()).
2631
3247
  //!
2632
3248
  //! <b>Throws</b>: If the internal hasher or the equality functor throws.
2633
- BOOST_INTRUSIVE_FORCEINLINE std::pair<iterator,iterator> equal_range(const key_type &key)
3249
+ inline std::pair<iterator,iterator> equal_range(const key_type &key)
2634
3250
  { return this->equal_range(key, this->priv_hasher(), this->priv_equal()); }
2635
3251
 
2636
3252
  //! <b>Requires</b>: "hash_func" must be a hash function that induces
@@ -2657,11 +3273,11 @@ class hashtable_impl
2657
3273
  std::pair<iterator,iterator> equal_range
2658
3274
  (const KeyType &key, KeyHasher hash_func, KeyEqual equal_func)
2659
3275
  {
2660
- std::pair<siterator, siterator> ret =
3276
+ priv_equal_range_result ret =
2661
3277
  this->priv_equal_range(key, hash_func, equal_func);
2662
3278
  return std::pair<iterator, iterator>
2663
- ( iterator(ret.first, &this->get_bucket_value_traits())
2664
- , iterator(ret.second, &this->get_bucket_value_traits()));
3279
+ ( this->build_iterator(ret.first, ret.bucket_first)
3280
+ , this->build_iterator(ret.second, ret.bucket_second));
2665
3281
  }
2666
3282
 
2667
3283
  //! <b>Effects</b>: Returns a range containing all elements with values equivalent
@@ -2671,7 +3287,7 @@ class hashtable_impl
2671
3287
  //! <b>Complexity</b>: Average case O(this->count(value)). Worst case O(this->size()).
2672
3288
  //!
2673
3289
  //! <b>Throws</b>: If the internal hasher or the equality functor throws.
2674
- BOOST_INTRUSIVE_FORCEINLINE std::pair<const_iterator, const_iterator>
3290
+ inline std::pair<const_iterator, const_iterator>
2675
3291
  equal_range(const key_type &key) const
2676
3292
  { return this->equal_range(key, this->priv_hasher(), this->priv_equal()); }
2677
3293
 
@@ -2699,11 +3315,11 @@ class hashtable_impl
2699
3315
  std::pair<const_iterator,const_iterator> equal_range
2700
3316
  (const KeyType &key, KeyHasher hash_func, KeyEqual equal_func) const
2701
3317
  {
2702
- std::pair<siterator, siterator> ret =
3318
+ priv_equal_range_result ret =
2703
3319
  this->priv_equal_range(key, hash_func, equal_func);
2704
3320
  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()));
3321
+ ( this->build_const_iterator(ret.first, ret.bucket_first)
3322
+ , this->build_const_iterator(ret.second, ret.bucket_second));
2707
3323
  }
2708
3324
 
2709
3325
  #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
@@ -2717,7 +3333,7 @@ class hashtable_impl
2717
3333
  //! <b>Complexity</b>: Constant.
2718
3334
  //!
2719
3335
  //! <b>Throws</b>: If the internal hash function throws.
2720
- iterator iterator_to(reference value);
3336
+ iterator iterator_to(reference value) BOOST_NOEXCEPT;
2721
3337
 
2722
3338
  //! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
2723
3339
  //! appropriate type. Otherwise the behavior is undefined.
@@ -2728,7 +3344,7 @@ class hashtable_impl
2728
3344
  //! <b>Complexity</b>: Constant.
2729
3345
  //!
2730
3346
  //! <b>Throws</b>: If the internal hash function throws.
2731
- const_iterator iterator_to(const_reference value) const;
3347
+ const_iterator iterator_to(const_reference value) const BOOST_NOEXCEPT;
2732
3348
 
2733
3349
  //! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
2734
3350
  //! appropriate type. Otherwise the behavior is undefined.
@@ -2742,7 +3358,7 @@ class hashtable_impl
2742
3358
  //!
2743
3359
  //! <b>Note</b>: This static function is available only if the <i>value traits</i>
2744
3360
  //! is stateless.
2745
- static local_iterator s_local_iterator_to(reference value);
3361
+ static local_iterator s_local_iterator_to(reference value) BOOST_NOEXCEPT;
2746
3362
 
2747
3363
  //! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
2748
3364
  //! appropriate type. Otherwise the behavior is undefined.
@@ -2756,7 +3372,7 @@ class hashtable_impl
2756
3372
  //!
2757
3373
  //! <b>Note</b>: This static function is available only if the <i>value traits</i>
2758
3374
  //! is stateless.
2759
- static const_local_iterator s_local_iterator_to(const_reference value);
3375
+ static const_local_iterator s_local_iterator_to(const_reference value) BOOST_NOEXCEPT;
2760
3376
 
2761
3377
  //! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
2762
3378
  //! appropriate type. Otherwise the behavior is undefined.
@@ -2767,7 +3383,7 @@ class hashtable_impl
2767
3383
  //! <b>Complexity</b>: Constant.
2768
3384
  //!
2769
3385
  //! <b>Throws</b>: Nothing.
2770
- local_iterator local_iterator_to(reference value);
3386
+ local_iterator local_iterator_to(reference value) BOOST_NOEXCEPT;
2771
3387
 
2772
3388
  //! <b>Requires</b>: value must be an lvalue and shall be in a unordered_set of
2773
3389
  //! appropriate type. Otherwise the behavior is undefined.
@@ -2778,7 +3394,7 @@ class hashtable_impl
2778
3394
  //! <b>Complexity</b>: Constant.
2779
3395
  //!
2780
3396
  //! <b>Throws</b>: Nothing.
2781
- const_local_iterator local_iterator_to(const_reference value) const;
3397
+ const_local_iterator local_iterator_to(const_reference value) const BOOST_NOEXCEPT;
2782
3398
 
2783
3399
  //! <b>Effects</b>: Returns the number of buckets passed in the constructor
2784
3400
  //! or the last rehash function.
@@ -2786,7 +3402,7 @@ class hashtable_impl
2786
3402
  //! <b>Complexity</b>: Constant.
2787
3403
  //!
2788
3404
  //! <b>Throws</b>: Nothing.
2789
- size_type bucket_count() const;
3405
+ size_type bucket_count() const BOOST_NOEXCEPT;
2790
3406
 
2791
3407
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2792
3408
  //!
@@ -2795,7 +3411,7 @@ class hashtable_impl
2795
3411
  //! <b>Complexity</b>: Constant.
2796
3412
  //!
2797
3413
  //! <b>Throws</b>: Nothing.
2798
- size_type bucket_size(size_type n) const;
3414
+ size_type bucket_size(size_type n) const BOOST_NOEXCEPT;
2799
3415
  #endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2800
3416
 
2801
3417
  //! <b>Effects</b>: Returns the index of the bucket in which elements
@@ -2806,8 +3422,8 @@ class hashtable_impl
2806
3422
  //! <b>Throws</b>: If the hash functor throws.
2807
3423
  //!
2808
3424
  //! <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
2810
- { return this->bucket(k, this->priv_hasher()); }
3425
+ inline size_type bucket(const key_type& k) const
3426
+ { return this->priv_hash_to_nbucket(this->priv_hash(k)); }
2811
3427
 
2812
3428
  //! <b>Requires</b>: "hash_func" must be a hash function that induces
2813
3429
  //! the same hash values as the stored hasher. The difference is that
@@ -2822,8 +3438,8 @@ class hashtable_impl
2822
3438
  //!
2823
3439
  //! <b>Note</b>: the return value is in the range [0, this->bucket_count()).
2824
3440
  template<class KeyType, class KeyHasher>
2825
- BOOST_INTRUSIVE_FORCEINLINE size_type bucket(const KeyType& k, KeyHasher hash_func) const
2826
- { return this->priv_hash_to_bucket(hash_func(k)); }
3441
+ inline size_type bucket(const KeyType& k, KeyHasher hash_func) const
3442
+ { return this->priv_hash_to_nbucket(hash_func(k)); }
2827
3443
 
2828
3444
  #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2829
3445
  //! <b>Effects</b>: Returns the bucket array pointer passed in the constructor
@@ -2832,7 +3448,7 @@ class hashtable_impl
2832
3448
  //! <b>Complexity</b>: Constant.
2833
3449
  //!
2834
3450
  //! <b>Throws</b>: Nothing.
2835
- bucket_ptr bucket_pointer() const;
3451
+ bucket_ptr bucket_pointer() const BOOST_NOEXCEPT;
2836
3452
 
2837
3453
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2838
3454
  //!
@@ -2845,7 +3461,7 @@ class hashtable_impl
2845
3461
  //!
2846
3462
  //! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
2847
3463
  //! containing all of the elements in the nth bucket.
2848
- local_iterator begin(size_type n);
3464
+ local_iterator begin(size_type n) BOOST_NOEXCEPT;
2849
3465
 
2850
3466
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2851
3467
  //!
@@ -2858,7 +3474,7 @@ class hashtable_impl
2858
3474
  //!
2859
3475
  //! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
2860
3476
  //! containing all of the elements in the nth bucket.
2861
- const_local_iterator begin(size_type n) const;
3477
+ const_local_iterator begin(size_type n) const BOOST_NOEXCEPT;
2862
3478
 
2863
3479
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2864
3480
  //!
@@ -2871,7 +3487,7 @@ class hashtable_impl
2871
3487
  //!
2872
3488
  //! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
2873
3489
  //! containing all of the elements in the nth bucket.
2874
- const_local_iterator cbegin(size_type n) const;
3490
+ const_local_iterator cbegin(size_type n) const BOOST_NOEXCEPT;
2875
3491
 
2876
3492
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2877
3493
  //!
@@ -2884,7 +3500,7 @@ class hashtable_impl
2884
3500
  //!
2885
3501
  //! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
2886
3502
  //! containing all of the elements in the nth bucket.
2887
- local_iterator end(size_type n);
3503
+ local_iterator end(size_type n) BOOST_NOEXCEPT;
2888
3504
 
2889
3505
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2890
3506
  //!
@@ -2897,7 +3513,7 @@ class hashtable_impl
2897
3513
  //!
2898
3514
  //! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
2899
3515
  //! containing all of the elements in the nth bucket.
2900
- const_local_iterator end(size_type n) const;
3516
+ const_local_iterator end(size_type n) const BOOST_NOEXCEPT;
2901
3517
 
2902
3518
  //! <b>Requires</b>: n is in the range [0, this->bucket_count()).
2903
3519
  //!
@@ -2910,7 +3526,7 @@ class hashtable_impl
2910
3526
  //!
2911
3527
  //! <b>Note</b>: [this->begin(n), this->end(n)) is a valid range
2912
3528
  //! containing all of the elements in the nth bucket.
2913
- const_local_iterator cend(size_type n) const;
3529
+ const_local_iterator cend(size_type n) const BOOST_NOEXCEPT;
2914
3530
  #endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2915
3531
 
2916
3532
  //! <b>Requires</b>: new_bucket_traits can hold a pointer to a new bucket array
@@ -2940,8 +3556,8 @@ class hashtable_impl
2940
3556
  //! <b>Complexity</b>: Average case linear in this->size(), worst case quadratic.
2941
3557
  //!
2942
3558
  //! <b>Throws</b>: If the hasher functor throws. Basic guarantee.
2943
- BOOST_INTRUSIVE_FORCEINLINE void rehash(const bucket_traits &new_bucket_traits)
2944
- { this->rehash_impl(new_bucket_traits, false); }
3559
+ inline void rehash(const bucket_traits &new_bucket_traits)
3560
+ { this->priv_rehash_impl(new_bucket_traits, false); }
2945
3561
 
2946
3562
  //! <b>Note</b>: This function is used when keys from inserted elements are changed
2947
3563
  //! (e.g. a language change when key is a string) but uniqueness and hash properties are
@@ -2963,8 +3579,8 @@ class hashtable_impl
2963
3579
  //! <b>Complexity</b>: Average case linear in this->size(), worst case quadratic.
2964
3580
  //!
2965
3581
  //! <b>Throws</b>: If the hasher functor throws. Basic guarantee.
2966
- BOOST_INTRUSIVE_FORCEINLINE void full_rehash()
2967
- { this->rehash_impl(this->priv_bucket_traits(), true); }
3582
+ inline void full_rehash()
3583
+ { this->priv_rehash_impl(this->priv_bucket_traits(), true); }
2968
3584
 
2969
3585
  //! <b>Requires</b>:
2970
3586
  //!
@@ -2978,48 +3594,50 @@ class hashtable_impl
2978
3594
  bool incremental_rehash(bool grow = true)
2979
3595
  {
2980
3596
  //This function is only available for containers with incremental hashing
2981
- 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();
3597
+ BOOST_INTRUSIVE_STATIC_ASSERT(( incremental && power_2_buckets ));
3598
+ const std::size_t split_idx = this->split_count();
3599
+ const std::size_t bucket_cnt = this->bucket_count();
2985
3600
  bool ret = false;
2986
3601
 
2987
3602
  if(grow){
2988
3603
  //Test if the split variable can be changed
2989
3604
  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];
2992
- this->priv_split_traits().increment();
3605
+ const std::size_t bucket_to_rehash = split_idx - bucket_cnt/2u;
3606
+ bucket_type &old_bucket = this->priv_bucket(bucket_to_rehash);
3607
+ this->inc_split_count();
2993
3608
 
2994
3609
  //Anti-exception stuff: if an exception is thrown while
2995
3610
  //moving elements from old_bucket to the target bucket, all moved
2996
3611
  //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());
3612
+ incremental_rehash_rollback<bucket_type, split_traits, slist_node_algorithms> rollback
3613
+ ( this->priv_bucket(split_idx), old_bucket, this->priv_split_traits());
3614
+ siterator before_i(old_bucket.get_node_ptr());
3615
+ siterator i(before_i); ++i;
3616
+ siterator end_sit = linear_buckets ? siterator() : before_i;
3617
+ for( ; i != end_sit; i = before_i, ++i){
3618
+ const value_type &v = this->priv_value_from_siterator(i);
3002
3619
  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);
3620
+ const std::size_t new_n = this->priv_hash_to_nbucket(hash_value);
3621
+ siterator last = i;
3622
+ (priv_go_to_last_in_group)(last, optimize_multikey_t());
3005
3623
  if(new_n == bucket_to_rehash){
3006
3624
  before_i = last;
3007
3625
  }
3008
3626
  else{
3009
- bucket_type &new_b = buck_ptr[new_n];
3010
- new_b.splice_after(new_b.before_begin(), old_bucket, before_i, last);
3627
+ bucket_type &new_b = this->priv_bucket(new_n);
3628
+ slist_node_algorithms::transfer_after(new_b.get_node_ptr(), before_i.pointed_node(), last.pointed_node());
3011
3629
  }
3012
3630
  }
3013
3631
  rollback.release();
3014
3632
  this->priv_erasure_update_cache();
3015
3633
  }
3016
3634
  }
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);
3022
- this->priv_split_traits().decrement();
3635
+ else if((ret = split_idx > bucket_cnt/2u)){ //!grow
3636
+ const std::size_t target_bucket_num = split_idx - 1u - bucket_cnt/2u;
3637
+ bucket_type &target_bucket = this->priv_bucket(target_bucket_num);
3638
+ bucket_type &source_bucket = this->priv_bucket(split_idx-1u);
3639
+ slist_node_algorithms::transfer_after(target_bucket.get_node_ptr(), source_bucket.get_node_ptr());
3640
+ this->dec_split_count();
3023
3641
  this->priv_insertion_update_cache(target_bucket_num);
3024
3642
  }
3025
3643
  return ret;
@@ -3038,40 +3656,50 @@ class hashtable_impl
3038
3656
  //! <b>Throws</b>: Nothing
3039
3657
  //!
3040
3658
  //! <b>Note</b>: this method is only available if incremental<true> option is activated.
3041
- bool incremental_rehash(const bucket_traits &new_bucket_traits)
3659
+ bool incremental_rehash(const bucket_traits &new_bucket_traits) BOOST_NOEXCEPT
3042
3660
  {
3043
3661
  //This function is only available for containers with incremental hashing
3044
- 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();
3662
+ BOOST_INTRUSIVE_STATIC_ASSERT(( incremental && power_2_buckets ));
3663
+ const bucket_ptr new_buckets = new_bucket_traits.bucket_begin();
3664
+ const size_type new_bucket_count_stdszt = static_cast<SizeType>(new_bucket_traits.bucket_count() - bucket_overhead);
3665
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(sizeof(size_type) >= sizeof(std::size_t) || new_bucket_count_stdszt <= size_type(-1));
3666
+ size_type new_bucket_count = static_cast<size_type>(new_bucket_count_stdszt);
3667
+ const size_type old_bucket_count = static_cast<size_type>(this->priv_usable_bucket_count());
3047
3668
  const size_type split_idx = this->split_count();
3048
3669
 
3049
3670
  //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))
3671
+ if(new_bucket_count/2 == old_bucket_count){
3672
+ if(!(split_idx >= old_bucket_count))
3052
3673
  return false;
3053
3674
  }
3054
- else if(new_bucket_traits_size == cur_bucket_traits/2){
3055
- if(!(split_idx <= new_bucket_traits_size))
3675
+ else if(new_bucket_count == old_bucket_count/2){
3676
+ if(!(split_idx <= new_bucket_count))
3056
3677
  return false;
3057
3678
  }
3058
3679
  else{
3059
3680
  return false;
3060
3681
  }
3061
3682
 
3062
- const size_type ini_n = this->priv_get_cache_bucket_num();
3683
+ const size_type ini_n = (size_type)this->priv_get_cache_bucket_num();
3063
3684
  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){
3685
+
3686
+
3687
+ this->priv_unset_sentinel_bucket();
3688
+ this->priv_initialize_new_buckets(old_buckets, old_bucket_count, new_buckets, new_bucket_count);
3689
+ if (&new_bucket_traits != &this->priv_bucket_traits())
3690
+ this->priv_bucket_traits() = new_bucket_traits;
3691
+
3692
+ if(old_buckets != new_buckets){
3066
3693
  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);
3694
+ slist_node_ptr new_bucket_nodeptr = new_bucket_traits.bucket_begin()[difference_type(n)].get_node_ptr();
3695
+ slist_node_ptr old_bucket_node_ptr = old_buckets[difference_type(n)].get_node_ptr();
3696
+ slist_node_algorithms::transfer_after(new_bucket_nodeptr, old_bucket_node_ptr);
3070
3697
  }
3071
- //Put cache to safe position
3072
- this->priv_initialize_cache();
3073
- this->priv_insertion_update_cache(ini_n);
3698
+ //Reset cache to safe position
3699
+ this->priv_set_cache_bucket_num(ini_n);
3074
3700
  }
3701
+
3702
+ this->priv_set_sentinel_bucket();
3075
3703
  return true;
3076
3704
  }
3077
3705
 
@@ -3084,7 +3712,7 @@ class hashtable_impl
3084
3712
  //! <b>Complexity</b>: Constant
3085
3713
  //!
3086
3714
  //! <b>Throws</b>: Nothing
3087
- size_type split_count() const;
3715
+ size_type split_count() const BOOST_NOEXCEPT;
3088
3716
 
3089
3717
  //! <b>Effects</b>: Returns the nearest new bucket count optimized for
3090
3718
  //! the container that is bigger or equal than n. This suggestion can be
@@ -3095,7 +3723,7 @@ class hashtable_impl
3095
3723
  //! <b>Complexity</b>: Amortized constant time.
3096
3724
  //!
3097
3725
  //! <b>Throws</b>: Nothing.
3098
- static size_type suggested_upper_bucket_count(size_type n);
3726
+ static size_type suggested_upper_bucket_count(size_type n) BOOST_NOEXCEPT;
3099
3727
 
3100
3728
  //! <b>Effects</b>: Returns the nearest new bucket count optimized for
3101
3729
  //! the container that is smaller or equal than n. This suggestion can be
@@ -3106,7 +3734,7 @@ class hashtable_impl
3106
3734
  //! <b>Complexity</b>: Amortized constant time.
3107
3735
  //!
3108
3736
  //! <b>Throws</b>: Nothing.
3109
- static size_type suggested_lower_bucket_count(size_type n);
3737
+ static size_type suggested_lower_bucket_count(size_type n) BOOST_NOEXCEPT;
3110
3738
  #endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
3111
3739
 
3112
3740
 
@@ -3116,6 +3744,10 @@ class hashtable_impl
3116
3744
  if(constant_time_size && x.size() != y.size()){
3117
3745
  return false;
3118
3746
  }
3747
+
3748
+ if (boost::intrusive::iterator_udistance(x.begin(), x.end()) != x.size())
3749
+ return false;
3750
+
3119
3751
  for (const_iterator ix = x.cbegin(), ex = x.cend(); ix != ex; ++ix){
3120
3752
  std::pair<const_iterator, const_iterator> eqx(x.equal_range(key_of_value()(*ix))),
3121
3753
  eqy(y.equal_range(key_of_value()(*ix)));
@@ -3145,21 +3777,48 @@ class hashtable_impl
3145
3777
  { return !(x < y); }
3146
3778
 
3147
3779
  /// @cond
3148
- BOOST_INTRUSIVE_FORCEINLINE void check() const {}
3780
+ inline void check() const {}
3149
3781
  private:
3150
3782
 
3151
- void rehash_impl(const bucket_traits &new_bucket_traits, bool do_full_rehash)
3783
+ static void priv_initialize_new_buckets
3784
+ ( bucket_ptr old_buckets, size_type old_bucket_count
3785
+ , bucket_ptr new_buckets, size_type new_bucket_count)
3786
+ {
3787
+ //Initialize new buckets
3788
+ const bool same_buffer = old_buckets == new_buckets;
3789
+ if (same_buffer && new_bucket_count <= old_bucket_count) {
3790
+ //Nothing to do here
3791
+ }
3792
+ else {
3793
+ bucket_ptr p;
3794
+ size_type c;
3795
+
3796
+ if (same_buffer) {
3797
+ p = old_buckets + std::ptrdiff_t(old_bucket_count);
3798
+ c = size_type(new_bucket_count - old_bucket_count);
3799
+ }
3800
+ else {
3801
+ p = new_buckets;
3802
+ c = new_bucket_count;
3803
+ }
3804
+ internal_type::priv_init_buckets(p, c);
3805
+ }
3806
+ }
3807
+
3808
+ void priv_rehash_impl(const bucket_traits &new_bucket_traits, bool do_full_rehash)
3152
3809
  {
3810
+ const std::size_t nbc = new_bucket_traits.bucket_count() - bucket_overhead;
3811
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(sizeof(SizeType) >= sizeof(std::size_t) || nbc <= SizeType(-1));
3812
+
3153
3813
  const bucket_ptr new_buckets = new_bucket_traits.bucket_begin();
3154
- size_type new_bucket_count = new_bucket_traits.bucket_count();
3814
+ const size_type new_bucket_count = static_cast<SizeType>(nbc);
3155
3815
  const bucket_ptr old_buckets = this->priv_bucket_pointer();
3156
- size_type old_bucket_count = this->bucket_count();
3816
+ const size_type old_bucket_count = this->bucket_count();
3157
3817
 
3158
3818
  //Check power of two bucket array if the option is activated
3159
3819
  BOOST_INTRUSIVE_INVARIANT_ASSERT
3160
3820
  (!power_2_buckets || (0 == (new_bucket_count & (new_bucket_count-1u))));
3161
3821
 
3162
- size_type n = this->priv_get_cache_bucket_num();
3163
3822
  const bool same_buffer = old_buckets == new_buckets;
3164
3823
  //If the new bucket length is a common factor
3165
3824
  //of the old one we can avoid hash calculations.
@@ -3168,86 +3827,95 @@ class hashtable_impl
3168
3827
  //If we are shrinking the same bucket array and it's
3169
3828
  //is a fast shrink, just rehash the last nodes
3170
3829
  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;
3830
+ size_type old_bucket_cache = (size_type)this->priv_get_cache_bucket_num();
3831
+ if(same_buffer && fast_shrink && (old_bucket_cache < new_bucket_count)){
3832
+ new_first_bucket_num = old_bucket_cache;
3833
+ old_bucket_cache = new_bucket_count;
3174
3834
  }
3175
3835
 
3836
+ if (!do_full_rehash)
3837
+ this->priv_initialize_new_buckets(old_buckets, old_bucket_count, new_buckets, new_bucket_count);
3838
+
3176
3839
  //Anti-exception stuff: they destroy the elements if something goes wrong.
3177
3840
  //If the source and destination buckets are the same, the second rollback function
3178
3841
  //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);
3842
+
3843
+ typedef typename internal_type::template typeof_node_disposer<detail::null_disposer>::type NodeDisposer;
3844
+ typedef exception_bucket_disposer<bucket_type, slist_node_algorithms, NodeDisposer, size_type> ArrayDisposer;
3845
+ NodeDisposer nd(this->make_node_disposer(detail::null_disposer()));
3846
+ ArrayDisposer rollback1(new_buckets[0], nd, new_bucket_count);
3847
+ ArrayDisposer rollback2(old_buckets[0], nd, old_bucket_count);
3184
3848
 
3185
3849
  //Put size in a safe value for rollback exception
3186
- size_type const size_backup = this->priv_size_traits().get_size();
3187
- this->priv_size_traits().set_size(0);
3850
+ size_type const size_backup = this->priv_size_count();
3851
+ this->priv_size_count(0);
3188
3852
  //Put cache to safe position
3189
- this->priv_initialize_cache();
3190
- this->priv_insertion_update_cache(size_type(0u));
3853
+ this->priv_init_cache();
3854
+ this->priv_unset_sentinel_bucket();
3855
+
3856
+ const size_type split = this->rehash_split_from_bucket_count(new_bucket_count);
3191
3857
 
3192
3858
  //Iterate through nodes
3193
- for(; n < old_bucket_count; ++n){
3194
- bucket_type &old_bucket = old_buckets[n];
3859
+ for(size_type n = old_bucket_cache; n < old_bucket_count; ++n){
3860
+ bucket_type &old_bucket = old_buckets[difference_type(n)];
3195
3861
  if(!fast_shrink){
3196
- for( siterator before_i(old_bucket.before_begin()), i(old_bucket.begin()), end_sit(old_bucket.end())
3862
+ siterator before_i(old_bucket.get_node_ptr());
3863
+ siterator i(before_i); ++i;
3864
+ siterator end_sit(this->sit_end(old_bucket));
3865
+ for( //
3197
3866
  ; i != end_sit
3198
3867
  ; i = before_i, ++i){
3199
3868
 
3200
3869
  //First obtain hash value (and store it if do_full_rehash)
3201
3870
  std::size_t hash_value;
3202
3871
  if(do_full_rehash){
3203
- value_type &v = this->priv_value_from_slist_node(i.pointed_node());
3872
+ value_type &v = this->priv_value_from_siterator(i);
3204
3873
  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());
3874
+ node_functions_t::store_hash(this->priv_value_to_node_ptr(v), hash_value, store_hash_t());
3206
3875
  }
3207
3876
  else{
3208
- const value_type &v = this->priv_value_from_slist_node(i.pointed_node());
3877
+ const value_type &v = this->priv_value_from_siterator(i);
3209
3878
  hash_value = this->priv_stored_or_compute_hash(v, store_hash_t());
3210
3879
  }
3211
3880
 
3212
3881
  //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);
3882
+ const size_type new_n = (size_type)hash_to_bucket_split<power_2_buckets, incremental>
3883
+ (hash_value, new_bucket_count, split, fastmod_buckets_t());
3215
3884
 
3216
3885
  //Update first used bucket cache
3217
3886
  if(cache_begin && new_n < new_first_bucket_num)
3218
3887
  new_first_bucket_num = new_n;
3219
3888
 
3220
3889
  //If the target bucket is new, transfer the whole group
3221
- siterator const last = (priv_last_in_group)(i);
3890
+ siterator last = i;
3891
+ (priv_go_to_last_in_group)(i, optimize_multikey_t());
3222
3892
 
3223
3893
  if(same_buffer && new_n == n){
3224
3894
  before_i = last;
3225
3895
  }
3226
3896
  else{
3227
- bucket_type &new_b = new_buckets[new_n];
3228
- new_b.splice_after(new_b.before_begin(), old_bucket, before_i, last);
3897
+ bucket_type &new_b = new_buckets[difference_type(new_n)];
3898
+ slist_node_algorithms::transfer_after(new_b.get_node_ptr(), before_i.pointed_node(), last.pointed_node());
3229
3899
  }
3230
3900
  }
3231
3901
  }
3232
3902
  else{
3233
- const size_type new_n = detail::hash_to_bucket_split<power_2_buckets, incremental>(n, new_bucket_count, new_bucket_count);
3903
+ const size_type new_n = (size_type)hash_to_bucket_split<power_2_buckets, incremental>
3904
+ (n, new_bucket_count, split, fastmod_buckets_t());
3234
3905
  if(cache_begin && new_n < new_first_bucket_num)
3235
3906
  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()));
3907
+ bucket_type &new_b = new_buckets[difference_type(new_n)];
3908
+ siterator last = this->priv_get_last(old_bucket, optimize_multikey_t());
3909
+ slist_node_algorithms::transfer_after(new_b.get_node_ptr(), old_bucket.get_node_ptr(), last.pointed_node());
3241
3910
  }
3242
3911
  }
3243
3912
 
3244
- 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()){
3913
+ this->priv_size_count(size_backup);
3914
+ this->split_count(split);
3915
+ if(&new_bucket_traits != &this->priv_bucket_traits())
3247
3916
  this->priv_bucket_traits() = new_bucket_traits;
3248
- }
3249
- this->priv_initialize_cache();
3250
- this->priv_insertion_update_cache(new_first_bucket_num);
3917
+ this->priv_set_sentinel_bucket();
3918
+ this->priv_set_cache_bucket_num(new_first_bucket_num);
3251
3919
  rollback1.release();
3252
3920
  rollback2.release();
3253
3921
  }
@@ -3282,8 +3950,8 @@ class hashtable_impl
3282
3950
  for(; b != e; ++b){
3283
3951
  //No need to check for duplicates and insert it in the first position
3284
3952
  //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);
3953
+ std::size_t const hash_to_store = this->priv_stored_or_compute_hash(*b, store_hash_t());
3954
+ size_type const bucket_number = this->priv_hash_to_nbucket(hash_to_store);
3287
3955
  typedef typename detail::if_c
3288
3956
  <detail::is_const<MaybeConstHashtableImpl>::value, const_reference, reference>::type reference_type;
3289
3957
  reference_type r = *b;
@@ -3301,16 +3969,14 @@ class hashtable_impl
3301
3969
  {
3302
3970
  //No need to check for duplicates and insert it in the first position
3303
3971
  //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());
3972
+ bucket_type &cur_bucket = this->priv_bucket(bucket_number);
3973
+ siterator const prev(cur_bucket.get_node_ptr());
3308
3974
  //Just check if the cloned node is equal to the first inserted value in the new bucket
3309
3975
  //as equal src values were contiguous and they should be already inserted in the
3310
3976
  //destination bucket.
3311
- bool const next_is_in_group = optimize_multikey && !cur_bucket.empty() &&
3977
+ bool const next_is_in_group = optimize_multikey && !this->priv_bucket_empty(bucket_number) &&
3312
3978
  this->priv_equal()( key_of_value()(src_ref)
3313
- , key_of_value()(this->priv_value_from_slist_node((++siterator(prev)).pointed_node())));
3979
+ , key_of_value()(this->priv_value_from_siterator(++siterator(prev))));
3314
3980
  this->priv_insert_equal_after_find(*cloner(src_ref), bucket_number, hash_to_store, prev, next_is_in_group);
3315
3981
  }
3316
3982
 
@@ -3320,108 +3986,122 @@ class hashtable_impl
3320
3986
  //First clone the first ones
3321
3987
  const size_type src_bucket_count = src.bucket_count();
3322
3988
  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
3989
  size_type constructed = 0;
3326
- typedef node_cast_adaptor< detail::node_disposer<Disposer, value_traits, CircularSListAlgorithms>
3327
- , slist_node_ptr, node_ptr > NodeDisposer;
3990
+ typedef typename internal_type::template typeof_node_disposer<Disposer>::type NodeDisposer;
3328
3991
  NodeDisposer node_disp(disposer, &this->priv_value_traits());
3329
3992
 
3330
- detail::exception_array_disposer<bucket_type, NodeDisposer, size_type>
3331
- rollback(dst_buckets[0], node_disp, constructed);
3993
+ exception_bucket_disposer<bucket_type, slist_node_algorithms, NodeDisposer, size_type>
3994
+ rollback(this->priv_bucket(0), node_disp, constructed);
3332
3995
  //Now insert the remaining ones using the modulo trick
3333
3996
  for( //"constructed" already initialized
3334
3997
  ; constructed < src_bucket_count
3335
3998
  ; ++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());
3999
+
4000
+ const size_type new_n = (size_type)hash_to_bucket_split<power_2_buckets, incremental>
4001
+ (constructed, dst_bucket_count, this->split_count(), fastmod_buckets_t());
4002
+ bucket_type &src_b = src.priv_bucket(constructed);
4003
+ for( siterator b(this->priv_bucket_lbegin(src_b)), e(this->priv_bucket_lend(src_b)); b != e; ++b){
3341
4004
  typedef typename detail::if_c
3342
4005
  <detail::is_const<MaybeConstHashtableImpl>::value, const_reference, reference>::type reference_type;
3343
- reference_type r = this->priv_value_from_slist_node(n);
4006
+ reference_type r = this->priv_value_from_siterator(b);
3344
4007
  this->priv_clone_front_in_bucket<reference_type>
3345
- (new_n, r, this->priv_stored_hash(n, store_hash_t()), cloner);
4008
+ (new_n, r, this->priv_stored_hash(b, store_hash_t()), cloner);
3346
4009
  }
3347
4010
  }
3348
4011
  this->priv_hasher() = src.priv_hasher();
3349
4012
  this->priv_equal() = src.priv_equal();
3350
4013
  rollback.release();
3351
- this->priv_size_traits().set_size(src.priv_size_traits().get_size());
3352
- this->priv_split_traits().set_size(dst_bucket_count);
3353
- this->priv_insertion_update_cache(0u);
4014
+ this->priv_size_count(src.priv_size_count());
4015
+ this->split_count(dst_bucket_count);
4016
+ this->priv_set_cache_bucket_num(0u);
3354
4017
  this->priv_erasure_update_cache();
3355
4018
  }
3356
4019
 
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
4020
  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
4021
  {
3365
4022
  //Now store hash if needed
3366
- node_ptr n = pointer_traits<node_ptr>::pointer_to(this->priv_value_to_node(value));
4023
+ node_ptr n = this->priv_value_to_node_ptr(value);
3367
4024
  node_functions_t::store_hash(n, hash_value, store_hash_t());
3368
4025
  //Checks for some modes
3369
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!safemode_or_autounlink || node_algorithms::unique(n));
4026
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!safemode_or_autounlink || slist_node_algorithms::unique(n));
3370
4027
  //Shortcut to optimize_multikey cases
3371
4028
  group_functions_t::insert_in_group
3372
- ( next_is_in_group ? detail::dcast_bucket_ptr<node>((++siterator(prev)).pointed_node()) : n
4029
+ ( next_is_in_group ? dcast_bucket_ptr<node>((++siterator(prev)).pointed_node()) : n
3373
4030
  , n, optimize_multikey_t());
3374
4031
  //Update cache and increment size if needed
3375
4032
  this->priv_insertion_update_cache(bucket_num);
3376
- 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());
4033
+ this->priv_size_inc();
4034
+ slist_node_algorithms::link_after(prev.pointed_node(), n);
4035
+ return this->build_iterator(siterator(n), this->priv_bucket_ptr(bucket_num));
3379
4036
  }
3380
4037
 
3381
4038
  template<class KeyType, class KeyHasher, class KeyEqual>
3382
- siterator priv_find //In case it is not found previt is bucket.before_begin()
4039
+ siterator priv_find //In case it is not found previt is priv_end_sit()
3383
4040
  ( const KeyType &key, KeyHasher hash_func
3384
4041
  , KeyEqual equal_func, size_type &bucket_number, std::size_t &h, siterator &previt) const
3385
4042
  {
3386
4043
  h = hash_func(key);
3387
- return this->priv_find_with_hash(key, equal_func, bucket_number, h, previt);
3388
- }
3389
4044
 
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
- }
4045
+ bucket_number = this->priv_hash_to_nbucket(h);
4046
+ bucket_type& b = this->priv_bucket(bucket_number);
4047
+ siterator prev = this->sit_bbegin(b);
4048
+ siterator it = prev;
4049
+ siterator const endit = this->sit_end(b);
3396
4050
 
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()));
4051
+ while (++it != endit) {
4052
+ if (this->priv_is_value_equal_to_key
4053
+ (this->priv_value_from_siterator(it), h, key, equal_func, compare_hash_t())) {
4054
+ previt = prev;
4055
+ return it;
4056
+ }
4057
+ (priv_go_to_last_in_group)(it, optimize_multikey_t());
4058
+ prev = it;
4059
+ }
4060
+ previt = b.get_node_ptr();
4061
+ return this->priv_end_sit();
3403
4062
  }
3404
4063
 
4064
+
3405
4065
  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
4066
+ siterator priv_find_in_bucket //In case it is not found previt is priv_end_sit()
4067
+ (bucket_type &b, const KeyType& key, KeyEqual equal_func, const std::size_t h) const
3408
4068
  {
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();
4069
+ siterator it(this->sit_begin(b));
4070
+ siterator const endit(this->sit_end(b));
3414
4071
 
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)){
4072
+ for (; it != endit; (priv_go_to_last_in_group)(it, optimize_multikey_t()), ++it) {
4073
+ if (BOOST_LIKELY(this->priv_is_value_equal_to_key
4074
+ (this->priv_value_from_siterator(it), h, key, equal_func, compare_hash_t()))) {
3417
4075
  return it;
3418
4076
  }
3419
- previt = it = (priv_last_in_group)(it);
3420
4077
  }
3421
- previt = b.before_begin();
3422
- return this->priv_invalid_local_it();
4078
+ return this->priv_end_sit();
4079
+ }
4080
+
4081
+ template<class KeyType, class KeyEqual>
4082
+ inline bool priv_is_value_equal_to_key
4083
+ (const value_type &v, const std::size_t h, const KeyType &key, KeyEqual equal_func, detail::true_) const //compare_hash
4084
+ { return this->priv_stored_or_compute_hash(v, store_hash_t()) == h && equal_func(key, key_of_value()(v)); }
4085
+
4086
+ template<class KeyType, class KeyEqual>
4087
+ inline bool priv_is_value_equal_to_key
4088
+ (const value_type& v, const std::size_t , const KeyType& key, KeyEqual equal_func, detail::false_) const //compare_hash
4089
+ { return equal_func(key, key_of_value()(v)); }
4090
+
4091
+ //return previous iterator to the next equal range group in case
4092
+ inline static void priv_go_to_last_in_group
4093
+ (siterator &it_first_in_group, detail::true_) BOOST_NOEXCEPT //optimize_multikey
4094
+ {
4095
+ it_first_in_group =
4096
+ (group_functions_t::get_last_in_group
4097
+ (dcast_bucket_ptr<node>(it_first_in_group.pointed_node()), optimize_multikey_t()));
3423
4098
  }
3424
4099
 
4100
+ //return previous iterator to the next equal range group in case
4101
+ inline static void priv_go_to_last_in_group //!optimize_multikey
4102
+ (siterator /*&it_first_in_group*/, detail::false_) BOOST_NOEXCEPT
4103
+ { }
4104
+
3425
4105
  template<class KeyType, class KeyHasher, class KeyEqual>
3426
4106
  std::pair<siterator, siterator> priv_local_equal_range
3427
4107
  ( const KeyType &key
@@ -3430,7 +4110,7 @@ class hashtable_impl
3430
4110
  , size_type &found_bucket
3431
4111
  , size_type &cnt) const
3432
4112
  {
3433
- size_type internal_cnt = 0;
4113
+ std::size_t internal_cnt = 0;
3434
4114
  //Let's see if the element is present
3435
4115
 
3436
4116
  siterator prev;
@@ -3438,34 +4118,47 @@ class hashtable_impl
3438
4118
  std::size_t h;
3439
4119
  std::pair<siterator, siterator> to_return
3440
4120
  ( this->priv_find(key, hash_func, equal_func, n_bucket, h, prev)
3441
- , this->priv_invalid_local_it());
4121
+ , this->priv_end_sit());
3442
4122
 
3443
4123
  if(to_return.first != to_return.second){
3444
4124
  found_bucket = n_bucket;
3445
4125
  //If it's present, find the first that it's not equal in
3446
4126
  //the same bucket
3447
- bucket_type &b = this->priv_bucket_pointer()[n_bucket];
3448
4127
  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);
4128
+ siterator const bend = this->priv_bucket_lend(n_bucket);
4129
+ BOOST_IF_CONSTEXPR(optimize_multikey){
4130
+ siterator past_last_in_group_it = it;
4131
+ (priv_go_to_last_in_group)(past_last_in_group_it, optimize_multikey_t());
4132
+ ++past_last_in_group_it;
4133
+ internal_cnt += boost::intrusive::iterator_udistance(++it, past_last_in_group_it) + 1u;
4134
+ if (past_last_in_group_it != bend)
4135
+ to_return.second = past_last_in_group_it;
3453
4136
  }
3454
4137
  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;
4138
+ do {
4139
+ ++internal_cnt; //At least one is found
4140
+ ++it;
4141
+ } while(it != bend &&
4142
+ this->priv_is_value_equal_to_key
4143
+ (this->priv_value_from_siterator(it), h, key, equal_func, compare_hash_t()));
4144
+ if (it != bend)
4145
+ to_return.second = it;
3461
4146
  }
3462
4147
  }
3463
- cnt = internal_cnt;
4148
+ cnt = size_type(internal_cnt);
3464
4149
  return to_return;
3465
4150
  }
3466
4151
 
4152
+ struct priv_equal_range_result
4153
+ {
4154
+ siterator first;
4155
+ siterator second;
4156
+ bucket_ptr bucket_first;
4157
+ bucket_ptr bucket_second;
4158
+ };
4159
+
3467
4160
  template<class KeyType, class KeyHasher, class KeyEqual>
3468
- std::pair<siterator, siterator> priv_equal_range
4161
+ priv_equal_range_result priv_equal_range
3469
4162
  ( const KeyType &key
3470
4163
  , KeyHasher hash_func
3471
4164
  , KeyEqual equal_func) const
@@ -3474,75 +4167,103 @@ class hashtable_impl
3474
4167
  size_type cnt;
3475
4168
 
3476
4169
  //Let's see if the element is present
3477
- std::pair<siterator, siterator> to_return
4170
+ const std::pair<siterator, siterator> to_return
3478
4171
  (this->priv_local_equal_range(key, hash_func, equal_func, n_bucket, cnt));
4172
+ priv_equal_range_result r;
4173
+ r.first = to_return.first;
4174
+ r.second = to_return.second;
4175
+
3479
4176
  //If not, find the next element as ".second" if ".second" local iterator
3480
4177
  //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
- }
4178
+ if(to_return.first == to_return.second) {
4179
+ r.bucket_first = r.bucket_second = this->priv_invalid_bucket_ptr();
4180
+ }
4181
+ else if (to_return.second != this->priv_end_sit()) {
4182
+ r.bucket_first = this->priv_bucket_ptr(n_bucket);
4183
+ }
4184
+ else{
4185
+ r.bucket_first = this->priv_bucket_ptr(n_bucket);
4186
+ const size_type max_bucket = this->bucket_count();
4187
+ do{
4188
+ ++n_bucket;
4189
+ } while (n_bucket != max_bucket && this->priv_bucket_empty(n_bucket));
4190
+
4191
+ if (n_bucket == max_bucket){
4192
+ r.bucket_second = this->priv_invalid_bucket_ptr();
4193
+ }
4194
+ else{
4195
+ r.bucket_second = this->priv_bucket_ptr(n_bucket);
4196
+ r.second = siterator(r.bucket_second->begin_ptr());
3494
4197
  }
3495
4198
  }
3496
- return to_return;
4199
+
4200
+ return r;
3497
4201
  }
3498
4202
 
3499
- std::size_t priv_get_bucket_num(siterator it)
3500
- { return this->priv_get_bucket_num_hash_dispatch(it, store_hash_t()); }
4203
+ inline size_type priv_get_bucket_num(const_iterator it) BOOST_NOEXCEPT
4204
+ { return this->priv_get_bucket_num(it, linear_buckets_t()); }
3501
4205
 
3502
- std::size_t priv_get_bucket_num_hash_dispatch(siterator it, detail::true_) //store_hash
4206
+ inline size_type priv_get_bucket_num(const_iterator it, detail::true_) BOOST_NOEXCEPT //linear
4207
+ { return size_type(it.get_bucket_ptr() - this->priv_bucket_pointer()); }
4208
+
4209
+ inline size_type priv_get_bucket_num(const_iterator it, detail::false_) BOOST_NOEXCEPT //!linear
4210
+ { return this->priv_get_bucket_num_hash_dispatch(it.slist_it(), store_hash_t()); }
4211
+
4212
+ inline size_type priv_get_bucket_num_hash_dispatch(siterator it, detail::true_) BOOST_NOEXCEPT //store_hash
4213
+ { return (size_type)this->priv_hash_to_nbucket(this->priv_stored_hash(it, store_hash_t())); }
4214
+
4215
+ size_type priv_get_bucket_num_hash_dispatch(siterator it, detail::false_) BOOST_NOEXCEPT //NO store_hash
3503
4216
  {
3504
- return this->priv_hash_to_bucket
3505
- (this->priv_stored_hash(it.pointed_node(), store_hash_t()));
4217
+ const bucket_type &f = this->priv_bucket(0u);
4218
+ slist_node_ptr bb = group_functions_t::get_bucket_before_begin
4219
+ ( this->priv_bucket_lbbegin(0u).pointed_node()
4220
+ , this->priv_bucket_lbbegin(this->priv_usable_bucket_count() - 1u).pointed_node()
4221
+ , it.pointed_node()
4222
+ , optimize_multikey_t());
4223
+
4224
+ //Now get the bucket_impl from the iterator
4225
+ const bucket_type &b = static_cast<const bucket_type&>(*bb);
4226
+ //Now just calculate the index b has in the bucket array
4227
+ return static_cast<size_type>(&b - &f);
3506
4228
  }
3507
4229
 
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
4230
 
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()); }
4231
+ inline bucket_ptr priv_get_bucket_ptr(const_iterator it) BOOST_NOEXCEPT
4232
+ { return this->priv_get_bucket_ptr(it, linear_buckets_t()); }
4233
+
4234
+ inline bucket_ptr priv_get_bucket_ptr(const_iterator it, detail::true_) BOOST_NOEXCEPT //linear
4235
+ { return it.get_bucket_ptr(); }
4236
+
4237
+ inline bucket_ptr priv_get_bucket_ptr(const_iterator it, detail::false_) BOOST_NOEXCEPT //!linear
4238
+ { return this->priv_bucket_ptr(this->priv_get_bucket_num_hash_dispatch(it.slist_it(), store_hash_t())); }
3513
4239
 
3514
4240
  /// @endcond
3515
4241
  };
3516
4242
 
3517
4243
  /// @cond
3518
- #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
3519
4244
  template < class T
3520
- , bool UniqueKeys
3521
4245
  , class PackedOptions
3522
4246
  >
3523
- #else
3524
- template <class T, bool UniqueKeys, class ...Options>
3525
- #endif
3526
4247
  struct make_bucket_traits
3527
4248
  {
3528
4249
  //Real value traits must be calculated from options
3529
4250
  typedef typename detail::get_value_traits
3530
- <T, typename PackedOptions::proto_value_traits>::type value_traits;
4251
+ <T, typename PackedOptions::proto_value_traits>::type value_traits;
3531
4252
 
3532
4253
  typedef typename PackedOptions::bucket_traits specified_bucket_traits;
3533
4254
 
3534
4255
  //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;
4256
+ typedef bucket_traits_impl
4257
+ < typename unordered_bucket_ptr_impl
4258
+ <value_traits>::type
4259
+ , std::size_t> bucket_traits_t;
3539
4260
 
3540
4261
  typedef typename
3541
4262
  detail::if_c< detail::is_same
3542
4263
  < specified_bucket_traits
3543
4264
  , default_bucket_traits
3544
4265
  >::value
3545
- , detail::bucket_traits_impl<slist_impl>
4266
+ , bucket_traits_t
3546
4267
  , specified_bucket_traits
3547
4268
  >::type type;
3548
4269
  };
@@ -3558,6 +4279,7 @@ template<class T, class O1 = void, class O2 = void
3558
4279
  , class O5 = void, class O6 = void
3559
4280
  , class O7 = void, class O8 = void
3560
4281
  , class O9 = void, class O10= void
4282
+ , class O11= void
3561
4283
  >
3562
4284
  #endif
3563
4285
  struct make_hashtable
@@ -3566,7 +4288,7 @@ struct make_hashtable
3566
4288
  typedef typename pack_options
3567
4289
  < hashtable_defaults,
3568
4290
  #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
3569
- O1, O2, O3, O4, O5, O6, O7, O8, O9, O10
4291
+ O1, O2, O3, O4, O5, O6, O7, O8, O9, O10, O11
3570
4292
  #else
3571
4293
  Options...
3572
4294
  #endif
@@ -3576,7 +4298,7 @@ struct make_hashtable
3576
4298
  <T, typename packed_options::proto_value_traits>::type value_traits;
3577
4299
 
3578
4300
  typedef typename make_bucket_traits
3579
- <T, false, packed_options>::type bucket_traits;
4301
+ <T, packed_options>::type bucket_traits;
3580
4302
 
3581
4303
  typedef hashtable_impl
3582
4304
  < value_traits
@@ -3591,6 +4313,8 @@ struct make_hashtable
3591
4313
  |(std::size_t(packed_options::cache_begin)*hash_bool_flags::cache_begin_pos)
3592
4314
  |(std::size_t(packed_options::compare_hash)*hash_bool_flags::compare_hash_pos)
3593
4315
  |(std::size_t(packed_options::incremental)*hash_bool_flags::incremental_pos)
4316
+ |(std::size_t(packed_options::linear_buckets)*hash_bool_flags::linear_buckets_pos)
4317
+ |(std::size_t(packed_options::fastmod_buckets)*hash_bool_flags::fastmod_buckets_pos)
3594
4318
  > implementation_defined;
3595
4319
 
3596
4320
  /// @endcond
@@ -3633,28 +4357,28 @@ class hashtable
3633
4357
  typedef typename Base::key_equal key_equal;
3634
4358
 
3635
4359
  //Assert if passed value traits are compatible with the type
3636
- BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
4360
+ BOOST_INTRUSIVE_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
3637
4361
 
3638
- BOOST_INTRUSIVE_FORCEINLINE explicit hashtable ( const bucket_traits &b_traits
4362
+ inline explicit hashtable ( const bucket_traits &b_traits
3639
4363
  , const hasher & hash_func = hasher()
3640
4364
  , const key_equal &equal_func = key_equal()
3641
4365
  , const value_traits &v_traits = value_traits())
3642
4366
  : Base(b_traits, hash_func, equal_func, v_traits)
3643
4367
  {}
3644
4368
 
3645
- BOOST_INTRUSIVE_FORCEINLINE hashtable(BOOST_RV_REF(hashtable) x)
4369
+ inline hashtable(BOOST_RV_REF(hashtable) x)
3646
4370
  : Base(BOOST_MOVE_BASE(Base, x))
3647
4371
  {}
3648
4372
 
3649
- BOOST_INTRUSIVE_FORCEINLINE hashtable& operator=(BOOST_RV_REF(hashtable) x)
4373
+ inline hashtable& operator=(BOOST_RV_REF(hashtable) x)
3650
4374
  { return static_cast<hashtable&>(this->Base::operator=(BOOST_MOVE_BASE(Base, x))); }
3651
4375
 
3652
4376
  template <class Cloner, class Disposer>
3653
- BOOST_INTRUSIVE_FORCEINLINE void clone_from(const hashtable &src, Cloner cloner, Disposer disposer)
4377
+ inline void clone_from(const hashtable &src, Cloner cloner, Disposer disposer)
3654
4378
  { Base::clone_from(src, cloner, disposer); }
3655
4379
 
3656
4380
  template <class Cloner, class Disposer>
3657
- BOOST_INTRUSIVE_FORCEINLINE void clone_from(BOOST_RV_REF(hashtable) src, Cloner cloner, Disposer disposer)
4381
+ inline void clone_from(BOOST_RV_REF(hashtable) src, Cloner cloner, Disposer disposer)
3658
4382
  { Base::clone_from(BOOST_MOVE_BASE(Base, src), cloner, disposer); }
3659
4383
  };
3660
4384