passenger 5.3.7 → 6.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3185) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG +651 -19
  3. data/CONTRIBUTING.md +1 -1
  4. data/CONTRIBUTORS +26 -0
  5. data/LICENSE +1 -1
  6. data/README.md +5 -12
  7. data/Rakefile +15 -4
  8. data/bin/passenger +2 -2
  9. data/bin/passenger-config +2 -2
  10. data/bin/passenger-install-apache2-module +7 -2
  11. data/bin/passenger-install-nginx-module +25 -8
  12. data/bin/passenger-memory-stats +67 -14
  13. data/bin/passenger-status +46 -6
  14. data/build/agent.rb +5 -3
  15. data/build/apache2.rb +3 -3
  16. data/build/basics.rb +12 -6
  17. data/build/common_library.rb +8 -7
  18. data/build/cxx_tests.rb +20 -9
  19. data/build/integration_tests.rb +10 -9
  20. data/build/misc.rb +5 -3
  21. data/build/nginx.rb +2 -2
  22. data/build/node_tests.rb +2 -2
  23. data/build/oxt_tests.rb +2 -2
  24. data/build/packaging.rb +6 -4
  25. data/build/ruby_extension.rb +2 -2
  26. data/build/ruby_tests.rb +3 -3
  27. data/build/schema_printer.rb +2 -2
  28. data/build/support/cplusplus.rb +2 -2
  29. data/build/support/cxx_dependency_map.rb +329 -59
  30. data/build/support/general.rb +2 -2
  31. data/build/support/vendor/cxx_hinted_parser/LICENSE.md +1 -1
  32. data/build/support/vendor/cxx_hinted_parser/lib/cxx_hinted_parser/parser.rb +2 -2
  33. data/build/support/vendor/cxx_hinted_parser/lib/cxx_hinted_parser.rb +2 -2
  34. data/build/support/vendor/cxxcodebuilder/LICENSE.md +1 -1
  35. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +57 -4
  36. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/initializer_builder.rb +2 -2
  37. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder.rb +2 -2
  38. data/build/test_basics.rb +29 -15
  39. data/dev/copy_boost_headers +142 -79
  40. data/dev/index_cxx_dependencies.rb +1 -1
  41. data/dev/nginx_version_sha256 +72 -0
  42. data/dev/websocketpp.patch +39 -0
  43. data/doc/DesignAspects/LimitedGemDependencies.md +39 -0
  44. data/doc/DesignAspects/NoGemActivationDuringRubyLoaderInitialization.md +27 -0
  45. data/doc/templates/markdown.html.erb +2 -6
  46. data/package.json +20 -18
  47. data/passenger.gemspec +17 -3
  48. data/resources/mime.types +1 -0
  49. data/resources/release.txt +1 -0
  50. data/resources/templates/apache2/deployment_example.txt.erb +1 -1
  51. data/resources/templates/config/installation_utils/user_support_binaries_dir_not_writable.txt.erb +1 -0
  52. data/resources/templates/error_renderer/with_details/dist/bundle.js +2 -33
  53. data/resources/templates/error_renderer/with_details/dist/styles.css +2 -2
  54. data/resources/templates/error_renderer/with_details/src/GetHelpView.jsx +1 -1
  55. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.css +0 -0
  56. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.js +0 -0
  57. data/resources/templates/error_renderer/with_details/src/bootstrap/config.json +0 -0
  58. data/resources/templates/error_renderer/with_details/src/index.html.template +0 -2
  59. data/resources/templates/error_renderer/with_details/webpack.config.js +13 -16
  60. data/resources/templates/error_renderer/without_details/dist/bundle.js +0 -1
  61. data/resources/templates/error_renderer/without_details/dist/styles.css +1 -1
  62. data/resources/templates/error_renderer/without_details/webpack.config.js +13 -16
  63. data/resources/templates/nginx/deployment_example.txt.erb +1 -1
  64. data/resources/templates/standalone/global.erb +4 -0
  65. data/resources/templates/standalone/http.erb +3 -0
  66. data/resources/templates/standalone/rails_asset_pipeline.erb +1 -1
  67. data/resources/templates/standalone/server.erb +4 -0
  68. data/src/agent/AgentMain.cpp +7 -9
  69. data/src/agent/Core/AdminPanelConnector.h +5 -6
  70. data/src/agent/Core/ApiServer.h +38 -3
  71. data/src/agent/Core/ApplicationPool/AbstractSession.h +2 -2
  72. data/src/agent/Core/ApplicationPool/BasicGroupInfo.h +2 -2
  73. data/src/agent/Core/ApplicationPool/BasicProcessInfo.h +2 -2
  74. data/src/agent/Core/ApplicationPool/Common.h +2 -2
  75. data/src/agent/Core/ApplicationPool/Context.h +7 -4
  76. data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +10 -2
  77. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +14 -6
  78. data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +10 -2
  79. data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +11 -2
  80. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +12 -3
  81. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +86 -6
  82. data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +42 -12
  83. data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +10 -2
  84. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +15 -4
  85. data/src/agent/Core/ApplicationPool/Group/Verification.cpp +10 -2
  86. data/src/agent/Core/ApplicationPool/Group.h +19 -8
  87. data/src/agent/Core/ApplicationPool/Implementation.cpp +2 -3
  88. data/src/agent/Core/ApplicationPool/Options.h +36 -13
  89. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +7 -2
  90. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +8 -3
  91. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +7 -2
  92. data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +7 -2
  93. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +7 -2
  94. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +7 -2
  95. data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +8 -3
  96. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +18 -4
  97. data/src/agent/Core/ApplicationPool/Pool.h +12 -6
  98. data/src/agent/Core/ApplicationPool/Process.cpp +2 -2
  99. data/src/agent/Core/ApplicationPool/Process.h +27 -8
  100. data/src/agent/Core/ApplicationPool/Session.h +8 -3
  101. data/src/agent/Core/ApplicationPool/Socket.h +2 -2
  102. data/src/agent/Core/ApplicationPool/TestSession.h +2 -2
  103. data/src/agent/Core/Config.h +39 -8
  104. data/src/agent/Core/ConfigChange.cpp +2 -2
  105. data/src/agent/Core/ConfigChange.h +2 -2
  106. data/src/agent/Core/Controller/AppResponse.h +2 -3
  107. data/src/agent/Core/Controller/BufferBody.cpp +2 -2
  108. data/src/agent/Core/Controller/CheckoutSession.cpp +50 -16
  109. data/src/agent/Core/Controller/Client.h +2 -2
  110. data/src/agent/Core/Controller/Config.cpp +2 -2
  111. data/src/agent/Core/Controller/Config.h +55 -13
  112. data/src/agent/Core/Controller/ForwardResponse.cpp +15 -2
  113. data/src/agent/Core/Controller/Hooks.cpp +2 -2
  114. data/src/agent/Core/Controller/Implementation.cpp +2 -2
  115. data/src/agent/Core/Controller/InitRequest.cpp +21 -10
  116. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +5 -2
  117. data/src/agent/Core/Controller/InternalUtils.cpp +34 -8
  118. data/src/agent/Core/Controller/Miscellaneous.cpp +2 -2
  119. data/src/agent/Core/Controller/Request.h +2 -2
  120. data/src/agent/Core/Controller/SendRequest.cpp +4 -4
  121. data/src/agent/Core/Controller/StateInspection.cpp +2 -2
  122. data/src/agent/Core/Controller/TurboCaching.h +2 -2
  123. data/src/agent/Core/Controller.h +8 -3
  124. data/src/agent/Core/CoreMain.cpp +78 -54
  125. data/src/agent/Core/OptionParser.h +23 -2
  126. data/src/agent/Core/ResponseCache.h +5 -4
  127. data/src/agent/Core/SecurityUpdateChecker.h +7 -7
  128. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h +22 -2
  129. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h.cxxcodebuilder +2 -2
  130. data/src/agent/Core/SpawningKit/Config.h +26 -2
  131. data/src/agent/Core/SpawningKit/Context.h +3 -2
  132. data/src/agent/Core/SpawningKit/DirectSpawner.h +2 -2
  133. data/src/agent/Core/SpawningKit/DummySpawner.h +2 -2
  134. data/src/agent/Core/SpawningKit/ErrorRenderer.h +7 -2
  135. data/src/agent/Core/SpawningKit/Exceptions.h +2 -2
  136. data/src/agent/Core/SpawningKit/Factory.h +2 -2
  137. data/src/agent/Core/SpawningKit/Handshake/BackgroundIOCapturer.h +3 -3
  138. data/src/agent/Core/SpawningKit/Handshake/Perform.h +8 -7
  139. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +8 -56
  140. data/src/agent/Core/SpawningKit/Handshake/Session.h +5 -2
  141. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +12 -6
  142. data/src/agent/Core/SpawningKit/Journey.h +2 -2
  143. data/src/agent/Core/SpawningKit/PipeWatcher.h +21 -6
  144. data/src/agent/Core/SpawningKit/Result/AutoGeneratedCode.h +2 -2
  145. data/src/agent/Core/SpawningKit/Result/AutoGeneratedCode.h.cxxcodebuilder +2 -2
  146. data/src/agent/Core/SpawningKit/Result.h +2 -2
  147. data/src/agent/Core/SpawningKit/SmartSpawner.h +9 -5
  148. data/src/agent/Core/SpawningKit/Spawner.h +29 -7
  149. data/src/agent/Core/SpawningKit/UserSwitchingRules.h +17 -10
  150. data/src/agent/Core/TelemetryCollector.h +4 -3
  151. data/src/agent/ExecHelper/ExecHelperMain.cpp +12 -14
  152. data/src/agent/FileReadHelper/FileReadHelperMain.cpp +195 -0
  153. data/src/agent/MainFunctions.h +38 -0
  154. data/src/agent/Shared/ApiAccountUtils.h +2 -2
  155. data/src/agent/Shared/ApiServerUtils.h +6 -5
  156. data/src/agent/Shared/ApplicationPoolApiKey.h +4 -2
  157. data/src/agent/Shared/Fundamentals/AbortHandler.cpp +90 -11
  158. data/src/agent/Shared/Fundamentals/AbortHandler.h +4 -2
  159. data/src/agent/Shared/Fundamentals/Initialization.cpp +12 -6
  160. data/src/agent/Shared/Fundamentals/Initialization.h +5 -5
  161. data/src/agent/Shared/Fundamentals/Utils.cpp +2 -2
  162. data/src/agent/Shared/Fundamentals/Utils.h +2 -2
  163. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +36 -12
  164. data/src/agent/SystemMetrics/SystemMetricsMain.cpp +3 -2
  165. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +10 -6
  166. data/src/agent/Watchdog/AgentWatcher.cpp +2 -2
  167. data/src/agent/Watchdog/ApiServer.h +3 -3
  168. data/src/agent/Watchdog/Config.h +22 -3
  169. data/src/agent/Watchdog/CoreWatcher.cpp +2 -2
  170. data/src/agent/Watchdog/InstanceDirToucher.cpp +3 -3
  171. data/src/agent/Watchdog/WatchdogMain.cpp +23 -22
  172. data/src/apache2_module/Bucket.cpp +2 -2
  173. data/src/apache2_module/Bucket.h +2 -2
  174. data/src/apache2_module/CBindings.cpp +2 -2
  175. data/src/apache2_module/Config.cpp +3 -3
  176. data/src/apache2_module/Config.h +2 -2
  177. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +68 -28
  178. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp.cxxcodebuilder +2 -2
  179. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +32 -2
  180. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp.cxxcodebuilder +2 -2
  181. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +121 -3
  182. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp.cxxcodebuilder +2 -2
  183. data/src/apache2_module/ConfigGeneral/Common.h +2 -2
  184. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +7 -5
  185. data/src/apache2_module/ConfigGeneral/SetterFuncs.h +2 -2
  186. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +25 -2
  187. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp.cxxcodebuilder +2 -2
  188. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +14 -2
  189. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp.cxxcodebuilder +2 -2
  190. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +65 -2
  191. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +2 -2
  192. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +37 -2
  193. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp.cxxcodebuilder +2 -2
  194. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +84 -4
  195. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +5 -2
  196. data/src/apache2_module/DirectoryMapper.h +16 -5
  197. data/src/apache2_module/Hooks.cpp +51 -7
  198. data/src/apache2_module/Hooks.h +2 -2
  199. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +31 -2
  200. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +2 -2
  201. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +57 -21
  202. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +4 -3
  203. data/src/apache2_module/Utils.h +2 -2
  204. data/src/apache2_module/mod_passenger.c +2 -2
  205. data/src/cxx_supportlib/Algorithms/Hasher.cpp +2 -2
  206. data/src/cxx_supportlib/Algorithms/Hasher.h +2 -2
  207. data/src/cxx_supportlib/Algorithms/MovingAverage.h +2 -8
  208. data/src/cxx_supportlib/AppLocalConfigFileUtils.h +148 -0
  209. data/src/cxx_supportlib/AppTypeDetector/CBindings.cpp +14 -3
  210. data/src/cxx_supportlib/AppTypeDetector/CBindings.h +4 -2
  211. data/src/cxx_supportlib/AppTypeDetector/Detector.h +40 -6
  212. data/src/cxx_supportlib/BackgroundEventLoop.cpp +7 -3
  213. data/src/cxx_supportlib/BackgroundEventLoop.h +2 -2
  214. data/src/cxx_supportlib/ConfigKit/AsyncUtils.h +2 -2
  215. data/src/cxx_supportlib/ConfigKit/Common.h +3 -3
  216. data/src/cxx_supportlib/ConfigKit/ConfigKit.h +2 -2
  217. data/src/cxx_supportlib/ConfigKit/DummyTranslator.h +2 -2
  218. data/src/cxx_supportlib/ConfigKit/PrefixTranslator.h +2 -2
  219. data/src/cxx_supportlib/ConfigKit/Schema.h +3 -3
  220. data/src/cxx_supportlib/ConfigKit/SchemaUtils.h +2 -2
  221. data/src/cxx_supportlib/ConfigKit/Store.h +2 -2
  222. data/src/cxx_supportlib/ConfigKit/SubComponentUtils.h +2 -2
  223. data/src/cxx_supportlib/ConfigKit/TableTranslator.h +2 -2
  224. data/src/cxx_supportlib/ConfigKit/Translator.h +3 -3
  225. data/src/cxx_supportlib/ConfigKit/Utils.h +2 -2
  226. data/src/cxx_supportlib/Constants.h +7 -5
  227. data/src/cxx_supportlib/Constants.h.cxxcodebuilder +2 -2
  228. data/src/cxx_supportlib/DataStructures/HashMap.h +2 -2
  229. data/src/cxx_supportlib/DataStructures/HashedStaticString.h +4 -2
  230. data/src/cxx_supportlib/DataStructures/LString.cpp +2 -2
  231. data/src/cxx_supportlib/DataStructures/LString.h +6 -2
  232. data/src/cxx_supportlib/DataStructures/StringKeyTable.h +3 -3
  233. data/src/cxx_supportlib/DataStructures/StringMap.h +2 -3
  234. data/src/cxx_supportlib/Exceptions.cpp +2 -2
  235. data/src/cxx_supportlib/Exceptions.h +2 -2
  236. data/src/cxx_supportlib/FileDescriptor.h +10 -2
  237. data/src/cxx_supportlib/FileTools/FileManip.cpp +12 -3
  238. data/src/cxx_supportlib/FileTools/FileManip.h +18 -2
  239. data/src/cxx_supportlib/FileTools/LargeFiles.h +2 -2
  240. data/src/cxx_supportlib/FileTools/PathManip.cpp +13 -4
  241. data/src/cxx_supportlib/FileTools/PathManip.h +2 -2
  242. data/src/cxx_supportlib/FileTools/PathManipCBindings.cpp +2 -2
  243. data/src/cxx_supportlib/FileTools/PathManipCBindings.h +2 -2
  244. data/src/cxx_supportlib/FileTools/PathSecurityCheck.cpp +2 -2
  245. data/src/cxx_supportlib/FileTools/PathSecurityCheck.h +2 -2
  246. data/src/cxx_supportlib/Hooks.h +3 -2
  247. data/src/cxx_supportlib/IOTools/BufferedIO.h +3 -3
  248. data/src/cxx_supportlib/IOTools/IOUtils.cpp +8 -12
  249. data/src/cxx_supportlib/IOTools/IOUtils.h +2 -2
  250. data/src/cxx_supportlib/IOTools/MessageIO.h +3 -3
  251. data/src/cxx_supportlib/IOTools/MessageSerialization.h +2 -2
  252. data/src/cxx_supportlib/InstanceDirectory.h +2 -2
  253. data/src/cxx_supportlib/Integrations/LibevJsonUtils.h +5 -5
  254. data/src/cxx_supportlib/JsonTools/Autocast.h +2 -2
  255. data/src/cxx_supportlib/JsonTools/CBindings.cpp +2 -4
  256. data/src/cxx_supportlib/JsonTools/CBindings.h +2 -2
  257. data/src/cxx_supportlib/JsonTools/JsonUtils.h +6 -6
  258. data/src/cxx_supportlib/LoggingKit/Assert.h +2 -2
  259. data/src/cxx_supportlib/LoggingKit/Config.h +4 -2
  260. data/src/cxx_supportlib/LoggingKit/Context.h +18 -23
  261. data/src/cxx_supportlib/LoggingKit/Forward.h +2 -4
  262. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +53 -83
  263. data/src/cxx_supportlib/LoggingKit/Logging.h +2 -2
  264. data/src/cxx_supportlib/LoggingKit/LoggingKit.h +2 -2
  265. data/src/cxx_supportlib/LveLoggingDecorator.h +2 -2
  266. data/src/cxx_supportlib/MemoryKit/mbuf.cpp +14 -6
  267. data/src/cxx_supportlib/MemoryKit/mbuf.h +3 -3
  268. data/src/cxx_supportlib/MemoryKit/palloc.cpp +1 -1
  269. data/src/cxx_supportlib/MemoryKit/palloc.h +1 -1
  270. data/src/cxx_supportlib/ProcessManagement/Ruby.cpp +2 -2
  271. data/src/cxx_supportlib/ProcessManagement/Ruby.h +2 -2
  272. data/src/cxx_supportlib/ProcessManagement/Spawn.cpp +2 -2
  273. data/src/cxx_supportlib/ProcessManagement/Spawn.h +2 -2
  274. data/src/cxx_supportlib/ProcessManagement/Utils.cpp +3 -3
  275. data/src/cxx_supportlib/ProcessManagement/Utils.h +2 -2
  276. data/src/cxx_supportlib/RandomGenerator.h +2 -2
  277. data/src/cxx_supportlib/ResourceLocator.h +3 -3
  278. data/src/cxx_supportlib/SafeLibev.h +6 -6
  279. data/src/cxx_supportlib/SecurityKit/Crypto.cpp +5 -96
  280. data/src/cxx_supportlib/SecurityKit/Crypto.h +2 -10
  281. data/src/cxx_supportlib/SecurityKit/MemZeroGuard.h +2 -2
  282. data/src/cxx_supportlib/ServerKit/AcceptLoadBalancer.h +3 -3
  283. data/src/cxx_supportlib/ServerKit/Channel.h +2 -2
  284. data/src/cxx_supportlib/ServerKit/Client.h +2 -2
  285. data/src/cxx_supportlib/ServerKit/ClientRef.h +2 -2
  286. data/src/cxx_supportlib/ServerKit/Config.h +2 -2
  287. data/src/cxx_supportlib/ServerKit/Context.h +8 -2
  288. data/src/cxx_supportlib/ServerKit/CookieUtils.h +2 -2
  289. data/src/cxx_supportlib/ServerKit/Errors.h +5 -4
  290. data/src/cxx_supportlib/ServerKit/FdSinkChannel.h +2 -2
  291. data/src/cxx_supportlib/ServerKit/FdSourceChannel.h +2 -2
  292. data/src/cxx_supportlib/ServerKit/FileBufferedChannel.h +2 -2
  293. data/src/cxx_supportlib/ServerKit/FileBufferedFdSinkChannel.h +2 -2
  294. data/src/cxx_supportlib/ServerKit/HeaderTable.h +2 -2
  295. data/src/cxx_supportlib/ServerKit/Hooks.h +4 -4
  296. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParser.h +3 -3
  297. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParserState.h +2 -2
  298. data/src/cxx_supportlib/ServerKit/HttpClient.h +2 -2
  299. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +103 -71
  300. data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +6 -3
  301. data/src/cxx_supportlib/ServerKit/HttpRequest.h +4 -4
  302. data/src/cxx_supportlib/ServerKit/HttpRequestRef.h +2 -2
  303. data/src/cxx_supportlib/ServerKit/HttpServer.h +20 -14
  304. data/src/cxx_supportlib/ServerKit/Implementation.cpp +2 -2
  305. data/src/cxx_supportlib/ServerKit/Server.h +2 -8
  306. data/src/cxx_supportlib/ServerKit/llerrors.h +84 -0
  307. data/src/cxx_supportlib/ServerKit/llhttp.c +10168 -0
  308. data/src/cxx_supportlib/ServerKit/llhttp.h +903 -0
  309. data/src/cxx_supportlib/ServerKit/llhttp_api.c +510 -0
  310. data/src/cxx_supportlib/ServerKit/llhttp_http.c +170 -0
  311. data/src/cxx_supportlib/ServerKit/llversion.h +12 -0
  312. data/src/cxx_supportlib/ServerKit/url_parser.c +574 -0
  313. data/src/cxx_supportlib/ServerKit/url_parser.h +74 -0
  314. data/src/cxx_supportlib/StaticString.h +7 -3
  315. data/src/cxx_supportlib/StrIntTools/DateParsing.h +3 -3
  316. data/src/cxx_supportlib/StrIntTools/StrIntUtils.cpp +14 -5
  317. data/src/cxx_supportlib/StrIntTools/StrIntUtils.h +7 -2
  318. data/src/cxx_supportlib/StrIntTools/StrIntUtilsNoStrictAliasing.cpp +2 -2
  319. data/src/cxx_supportlib/StrIntTools/StringScanning.h +2 -2
  320. data/src/cxx_supportlib/StrIntTools/Template.h +2 -2
  321. data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +59 -4
  322. data/src/cxx_supportlib/SystemTools/ProcessMetricsCollector.h +3 -3
  323. data/src/cxx_supportlib/SystemTools/SystemMetricsCollector.h +4 -4
  324. data/src/cxx_supportlib/SystemTools/SystemTime.cpp +2 -2
  325. data/src/cxx_supportlib/SystemTools/SystemTime.h +2 -2
  326. data/src/cxx_supportlib/SystemTools/UserDatabase.cpp +16 -16
  327. data/src/cxx_supportlib/SystemTools/UserDatabase.h +8 -12
  328. data/src/cxx_supportlib/Utils/AnsiColorConstants.h +13 -11
  329. data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +4 -2
  330. data/src/cxx_supportlib/Utils/BlockingQueue.h +2 -2
  331. data/src/cxx_supportlib/Utils/CachedFileStat.cpp +2 -2
  332. data/src/cxx_supportlib/Utils/CachedFileStat.h +2 -2
  333. data/src/cxx_supportlib/Utils/CachedFileStat.hpp +2 -2
  334. data/src/cxx_supportlib/Utils/ClassUtils.h +2 -2
  335. data/src/cxx_supportlib/Utils/Curl.h +2 -2
  336. data/src/cxx_supportlib/Utils/FastStringStream.h +2 -2
  337. data/src/cxx_supportlib/Utils/FileChangeChecker.h +2 -2
  338. data/src/cxx_supportlib/Utils/HttpConstants.h +3 -3
  339. data/src/cxx_supportlib/Utils/IniFile.h +2 -2
  340. data/src/cxx_supportlib/Utils/MessagePassing.h +2 -2
  341. data/src/cxx_supportlib/Utils/OptionParsing.h +2 -2
  342. data/src/cxx_supportlib/Utils/ReleaseableScopedPointer.h +2 -2
  343. data/src/cxx_supportlib/Utils/ScopeGuard.h +2 -2
  344. data/src/cxx_supportlib/Utils/SpeedMeter.h +2 -5
  345. data/src/cxx_supportlib/Utils/Timer.h +2 -2
  346. data/src/cxx_supportlib/Utils/VariantMap.h +2 -2
  347. data/src/cxx_supportlib/Utils.cpp +3 -3
  348. data/src/cxx_supportlib/Utils.h +2 -2
  349. data/src/cxx_supportlib/WatchdogLauncher.cpp +2 -2
  350. data/src/cxx_supportlib/WatchdogLauncher.h +3 -5
  351. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +22 -21
  352. data/src/cxx_supportlib/WrapperRegistry/CBindings.cpp +2 -2
  353. data/src/cxx_supportlib/WrapperRegistry/CBindings.h +2 -2
  354. data/src/cxx_supportlib/WrapperRegistry/Entry.h +2 -2
  355. data/src/cxx_supportlib/WrapperRegistry/Registry.h +2 -2
  356. data/src/cxx_supportlib/oxt/backtrace.hpp +1 -1
  357. data/src/cxx_supportlib/oxt/detail/backtrace_disabled.hpp +1 -1
  358. data/src/cxx_supportlib/oxt/detail/backtrace_enabled.hpp +1 -1
  359. data/src/cxx_supportlib/oxt/detail/context.hpp +1 -1
  360. data/src/cxx_supportlib/oxt/detail/spin_lock_darwin.hpp +1 -1
  361. data/src/cxx_supportlib/oxt/detail/spin_lock_gcc_x86.hpp +1 -1
  362. data/src/cxx_supportlib/oxt/detail/spin_lock_portable.hpp +1 -1
  363. data/src/cxx_supportlib/oxt/detail/spin_lock_pthreads.hpp +1 -1
  364. data/src/cxx_supportlib/oxt/detail/tracable_exception_disabled.hpp +1 -1
  365. data/src/cxx_supportlib/oxt/detail/tracable_exception_enabled.hpp +1 -1
  366. data/src/cxx_supportlib/oxt/dynamic_thread_group.hpp +6 -2
  367. data/src/cxx_supportlib/oxt/implementation.cpp +13 -3
  368. data/src/cxx_supportlib/oxt/initialize.hpp +1 -1
  369. data/src/cxx_supportlib/oxt/macros.hpp +1 -1
  370. data/src/cxx_supportlib/oxt/spin_lock.hpp +1 -1
  371. data/src/cxx_supportlib/oxt/system_calls.cpp +22 -15
  372. data/src/cxx_supportlib/oxt/system_calls.hpp +1 -1
  373. data/src/cxx_supportlib/oxt/thread.hpp +3 -3
  374. data/src/cxx_supportlib/oxt/tracable_exception.hpp +1 -1
  375. data/src/cxx_supportlib/vendor-copy/adhoc_lve.h +2 -2
  376. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/compare.hpp +3 -3
  377. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/case_conv.hpp +5 -2
  378. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/classification.hpp +3 -1
  379. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_format_all.hpp +2 -0
  380. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_iterator.hpp +11 -3
  381. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/finder.hpp +15 -15
  382. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/formatter.hpp +1 -1
  383. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/trim.hpp +3 -3
  384. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/find_format.hpp +1 -2
  385. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/find_iterator.hpp +27 -1
  386. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/finder.hpp +0 -4
  387. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/formatter.hpp +0 -1
  388. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/iter_find.hpp +8 -0
  389. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/predicate.hpp +4 -3
  390. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/split.hpp +12 -0
  391. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +47 -0
  392. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_posix.hpp +41 -0
  393. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_sunos.hpp +34 -0
  394. data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +28 -0
  395. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_executor.hpp +338 -0
  396. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_handler.hpp +824 -0
  397. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +353 -0
  398. data/src/cxx_supportlib/vendor-modified/boost/asio/append.hpp +67 -0
  399. data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +154 -0
  400. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +115 -32
  401. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +223 -0
  402. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +119 -33
  403. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +283 -0
  404. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +37 -0
  405. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +834 -107
  406. data/src/cxx_supportlib/vendor-modified/boost/asio/awaitable.hpp +144 -0
  407. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +651 -329
  408. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +206 -124
  409. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_file.hpp +826 -0
  410. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +4 -8
  411. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +691 -0
  412. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +657 -331
  413. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +628 -0
  414. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +376 -171
  415. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +413 -114
  416. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +325 -68
  417. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +427 -248
  418. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +1239 -517
  419. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +22 -121
  420. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +16 -81
  421. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +746 -0
  422. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +494 -252
  423. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +13 -15
  424. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +3 -3
  425. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +251 -132
  426. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +624 -0
  427. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +598 -0
  428. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +615 -0
  429. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +235 -182
  430. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +618 -0
  431. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +961 -370
  432. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +320 -0
  433. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +55 -39
  434. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +1 -1
  435. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +61 -47
  436. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +1 -1
  437. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +55 -39
  438. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +1 -1
  439. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +4 -4
  440. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
  441. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
  442. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_signal.hpp +247 -0
  443. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_state.hpp +237 -0
  444. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_type.hpp +159 -0
  445. data/src/cxx_supportlib/vendor-modified/boost/asio/co_composed.hpp +1323 -0
  446. data/src/cxx_supportlib/vendor-modified/boost/asio/co_spawn.hpp +525 -0
  447. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +50 -1
  448. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +130 -0
  449. data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
  450. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +468 -181
  451. data/src/cxx_supportlib/vendor-modified/boost/asio/connect_pipe.hpp +85 -0
  452. data/src/cxx_supportlib/vendor-modified/boost/asio/consign.hpp +77 -0
  453. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +7 -7
  454. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +1 -1
  455. data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
  456. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +154 -43
  457. data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +721 -0
  458. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +107 -0
  459. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +2 -10
  460. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +2 -4
  461. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +1 -1
  462. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +24 -10
  463. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_cancellation_state.hpp +166 -0
  464. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +4 -3
  465. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +265 -370
  466. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/blocking_executor_op.hpp +109 -0
  467. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +1 -1
  468. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +300 -7
  469. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +2 -2
  470. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +1 -1
  471. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +2 -23
  472. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +1 -1
  473. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +12 -7
  474. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_message.hpp +129 -0
  475. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_payload.hpp +222 -0
  476. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_payload_handler.hpp +81 -0
  477. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/composed_work.hpp +254 -0
  478. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +1 -1
  479. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +9 -1
  480. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +1 -1
  481. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +700 -722
  482. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +40 -11
  483. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +1 -5
  484. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +3 -23
  485. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +1 -1
  486. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +74 -13
  487. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +1 -1
  488. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +65 -7
  489. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +76 -16
  490. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +75 -16
  491. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +36 -7
  492. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +36 -7
  493. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +3 -5
  494. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +2 -2
  495. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/exception.hpp +31 -0
  496. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_function.hpp +154 -0
  497. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +6 -6
  498. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +1 -1
  499. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +3 -43
  500. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/functional.hpp +5 -10
  501. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +32 -0
  502. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +3 -5
  503. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +31 -145
  504. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +1 -1
  505. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +27 -1
  506. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +24 -27
  507. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +452 -36
  508. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +1 -1
  509. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +1 -1
  510. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +605 -85
  511. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +21 -1
  512. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +28 -5
  513. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +21 -1
  514. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +47 -8
  515. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +20 -14
  516. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +47 -7
  517. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_descriptor_service.ipp +207 -0
  518. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_file_service.ipp +142 -0
  519. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.hpp +114 -0
  520. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.ipp +916 -0
  521. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_socket_service_base.ipp +251 -0
  522. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +21 -1
  523. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +49 -7
  524. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +1 -1
  525. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +11 -6
  526. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +8 -4
  527. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +1 -1
  528. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_serial_port_service.ipp +170 -0
  529. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +1 -1
  530. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +1 -1
  531. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +23 -13
  532. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +32 -20
  533. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +39 -35
  534. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/scheduler.ipp +110 -6
  535. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +25 -1
  536. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +74 -7
  537. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +2 -3
  538. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +1 -1
  539. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +185 -28
  540. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +828 -355
  541. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +19 -10
  542. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +209 -42
  543. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +25 -1
  544. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +8 -40
  545. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +34 -9
  546. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/thread_context.ipp +37 -0
  547. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +10 -6
  548. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +17 -11
  549. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +1 -1
  550. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_defer.hpp +209 -0
  551. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_dispatch.hpp +195 -0
  552. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_post.hpp +209 -0
  553. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
  554. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +1 -1
  555. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_object_impl.hpp +179 -0
  556. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_at_op.hpp +197 -0
  557. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_op.hpp +192 -0
  558. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_service.hpp +689 -0
  559. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_at_op.hpp +191 -0
  560. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_op.hpp +187 -0
  561. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_file_service.hpp +263 -0
  562. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_null_buffers_op.hpp +116 -0
  563. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_operation.hpp +86 -0
  564. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_service.hpp +321 -0
  565. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_accept_op.hpp +282 -0
  566. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_connect_op.hpp +142 -0
  567. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recv_op.hpp +207 -0
  568. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvfrom_op.hpp +208 -0
  569. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvmsg_op.hpp +194 -0
  570. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_send_op.hpp +193 -0
  571. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_sendto_op.hpp +196 -0
  572. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service.hpp +631 -0
  573. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service_base.hpp +665 -0
  574. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_wait_op.hpp +114 -0
  575. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +89 -32
  576. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +1 -1
  577. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +1 -1
  578. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +37 -8
  579. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/limits.hpp +1 -6
  580. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +1 -1
  581. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +83 -27
  582. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +3 -5
  583. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/non_const_lvalue.hpp +45 -0
  584. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +1 -1
  585. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +7 -1
  586. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +1 -1
  587. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +1 -1
  588. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +1 -5
  589. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +19 -4
  590. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +1 -1
  591. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +63 -52
  592. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +1 -1
  593. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +1 -1
  594. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +1 -1
  595. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +1 -1
  596. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +1 -1
  597. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +1 -1
  598. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +2 -2
  599. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +30 -8
  600. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +15 -2
  601. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +1 -1
  602. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +1 -1
  603. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +1 -1
  604. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_serial_port_service.hpp +251 -0
  605. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +1 -1
  606. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +1 -1
  607. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +1 -1
  608. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +1 -1
  609. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +60 -7
  610. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +237 -55
  611. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +49 -8
  612. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +139 -33
  613. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +59 -10
  614. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +81 -19
  615. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +81 -16
  616. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +65 -13
  617. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +86 -20
  618. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +81 -17
  619. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +198 -91
  620. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +319 -75
  621. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +49 -8
  622. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +29 -5
  623. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +8 -2
  624. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +45 -1
  625. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +26 -16
  626. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +4 -4
  627. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +35 -17
  628. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +1 -1
  629. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +35 -19
  630. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +24 -22
  631. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +37 -19
  632. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler.hpp +36 -8
  633. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_operation.hpp +1 -1
  634. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_task.hpp +51 -0
  635. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_thread_info.hpp +1 -1
  636. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +1 -1
  637. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +1 -1
  638. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +1 -1
  639. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +59 -6
  640. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +2 -3
  641. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +1 -1
  642. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +11 -7
  643. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +1 -1
  644. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +5 -1
  645. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +90 -15
  646. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +1 -1
  647. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +71 -33
  648. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +1 -1
  649. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +2 -2
  650. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +12 -1
  651. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/source_location.hpp +47 -0
  652. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +3 -5
  653. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +13 -6
  654. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +1 -6
  655. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +1 -6
  656. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +1 -6
  657. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +1 -6
  658. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +1 -6
  659. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +36 -5
  660. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +8 -6
  661. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +1 -1
  662. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +7 -9
  663. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +10 -1
  664. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +11 -1
  665. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +164 -25
  666. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +18 -9
  667. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +7 -3
  668. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
  669. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +33 -2
  670. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +1 -1
  671. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +6 -2
  672. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +1 -1
  673. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +3 -1
  674. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +3 -1
  675. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +1 -1
  676. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +132 -40
  677. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/utility.hpp +85 -0
  678. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +13 -8
  679. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +6 -2
  680. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +2 -2
  681. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +85 -14
  682. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +33 -129
  683. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +136 -47
  684. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +30 -1
  685. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +280 -0
  686. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +1935 -0
  687. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bad_executor.hpp +48 -0
  688. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1362 -0
  689. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1082 -0
  690. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +193 -0
  691. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +192 -0
  692. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +118 -0
  693. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/bad_executor.ipp +42 -0
  694. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/invocable_archetype.hpp +45 -0
  695. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1004 -0
  696. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +186 -0
  697. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +755 -0
  698. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/prefer_only.hpp +330 -0
  699. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +753 -0
  700. data/src/cxx_supportlib/vendor-modified/boost/asio/execution.hpp +33 -0
  701. data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +3 -26
  702. data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +66 -44
  703. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +239 -47
  704. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/append.hpp +38 -0
  705. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_single.hpp +134 -0
  706. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_tuple.hpp +38 -0
  707. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/awaitable_operators.hpp +538 -0
  708. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +516 -0
  709. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +516 -0
  710. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/cancellation_condition.hpp +154 -0
  711. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel.hpp +72 -0
  712. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_error.hpp +88 -0
  713. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_traits.hpp +303 -0
  714. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +35 -0
  715. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_spawn.hpp +138 -177
  716. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/concurrent_channel.hpp +72 -0
  717. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +295 -0
  718. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro_traits.hpp +230 -0
  719. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/deferred.hpp +38 -0
  720. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_operation.hpp +363 -0
  721. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +128 -0
  722. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +202 -0
  723. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +149 -0
  724. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +681 -0
  725. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_completion_handler.hpp +171 -0
  726. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +142 -0
  727. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/has_signature.hpp +56 -0
  728. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +625 -0
  729. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +199 -0
  730. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +183 -0
  731. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/channel_error.ipp +63 -0
  732. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1224 -0
  733. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +790 -0
  734. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +257 -0
  735. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_coro.hpp +216 -0
  736. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_promise.hpp +68 -0
  737. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +457 -0
  738. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/prepend.hpp +38 -0
  739. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +226 -0
  740. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +191 -0
  741. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +113 -0
  742. data/src/cxx_supportlib/vendor-modified/boost/asio/file_base.hpp +168 -0
  743. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +2 -6
  744. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +4 -4
  745. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +1 -1
  746. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +1 -1
  747. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +4 -4
  748. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +4 -4
  749. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +4 -4
  750. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +1 -1
  751. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +1 -6
  752. data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
  753. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_completion_executor.ipp +128 -0
  754. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_io_executor.ipp +136 -0
  755. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +171 -0
  756. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +278 -0
  757. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +1198 -0
  758. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +160 -185
  759. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +154 -181
  760. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
  761. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
  762. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancellation_signal.ipp +98 -0
  763. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +459 -0
  764. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +281 -438
  765. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.hpp +75 -0
  766. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.ipp +151 -0
  767. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +146 -0
  768. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/deferred.hpp +149 -0
  769. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +79 -0
  770. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +4 -4
  771. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +7 -37
  772. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +1 -1
  773. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +72 -141
  774. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +8 -3
  775. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +220 -132
  776. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +5 -3
  777. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/multiple_exceptions.ipp +47 -0
  778. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +172 -0
  779. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +529 -342
  780. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +202 -280
  781. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +1840 -672
  782. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +289 -0
  783. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +1 -1
  784. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +1 -1
  785. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1183 -318
  786. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +15 -3
  787. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +2 -2
  788. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +26 -7
  789. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +115 -21
  790. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +198 -48
  791. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +74 -8
  792. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_awaitable.hpp +303 -0
  793. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +186 -417
  794. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +446 -340
  795. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +171 -263
  796. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +699 -70
  797. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +87 -75
  798. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +1 -1
  799. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +1 -1
  800. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +52 -31
  801. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +124 -32
  802. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +13 -19
  803. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +16 -22
  804. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +114 -43
  805. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +13 -18
  806. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +15 -20
  807. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +19 -4
  808. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +46 -27
  809. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +337 -243
  810. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +1 -1
  811. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +4 -8
  812. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +17 -1
  813. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +12 -16
  814. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +21 -19
  815. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +10 -14
  816. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +2 -2
  817. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +1 -1
  818. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +7 -7
  819. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +1 -1
  820. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +23 -22
  821. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +1 -1
  822. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +11 -15
  823. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +1 -1
  824. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +28 -36
  825. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +1 -1
  826. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +1 -1
  827. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +1 -1
  828. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +6 -4
  829. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +1 -1
  830. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +6 -4
  831. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +8 -8
  832. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +17 -21
  833. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +14 -18
  834. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +1 -1
  835. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +1 -1
  836. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +9 -9
  837. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +7 -7
  838. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +3 -3
  839. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +4 -4
  840. data/src/cxx_supportlib/vendor-modified/boost/asio/is_applicable_property.hpp +63 -0
  841. data/src/cxx_supportlib/vendor-modified/boost/asio/is_contiguous_iterator.hpp +47 -0
  842. data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +1 -1
  843. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +1 -1
  844. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +1 -1
  845. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +10 -6
  846. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +14 -19
  847. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +4 -4
  848. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +7 -1
  849. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +10 -8
  850. data/src/cxx_supportlib/vendor-modified/boost/asio/local/seq_packet_protocol.hpp +86 -0
  851. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +4 -4
  852. data/src/cxx_supportlib/vendor-modified/boost/asio/multiple_exceptions.hpp +54 -0
  853. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +4 -64
  854. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +35 -105
  855. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +273 -82
  856. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +283 -86
  857. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +5 -612
  858. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +2 -2
  859. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +3 -326
  860. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +149 -43
  861. data/src/cxx_supportlib/vendor-modified/boost/asio/prefer.hpp +581 -0
  862. data/src/cxx_supportlib/vendor-modified/boost/asio/prepend.hpp +68 -0
  863. data/src/cxx_supportlib/vendor-modified/boost/asio/query.hpp +315 -0
  864. data/src/cxx_supportlib/vendor-modified/boost/asio/random_access_file.hpp +37 -0
  865. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +777 -177
  866. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +231 -74
  867. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +1849 -471
  868. data/src/cxx_supportlib/vendor-modified/boost/asio/readable_pipe.hpp +37 -0
  869. data/src/cxx_supportlib/vendor-modified/boost/asio/recycling_allocator.hpp +140 -0
  870. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +106 -0
  871. data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +346 -0
  872. data/src/cxx_supportlib/vendor-modified/boost/asio/require.hpp +437 -0
  873. data/src/cxx_supportlib/vendor-modified/boost/asio/require_concept.hpp +347 -0
  874. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +3 -736
  875. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +1 -1
  876. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +3 -422
  877. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_base.hpp +173 -0
  878. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +26 -26
  879. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +640 -105
  880. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +7 -3
  881. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +38 -21
  882. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +7 -2
  883. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +10 -1
  884. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +7 -2
  885. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +65 -10
  886. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +9 -5
  887. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +75 -71
  888. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +1 -1
  889. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +5 -1
  890. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +1 -1
  891. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +7 -2
  892. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +17 -2
  893. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +89 -6
  894. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +2 -2
  895. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +12 -3
  896. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +21 -7
  897. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/host_name_verification.hpp +92 -0
  898. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +1 -1
  899. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +242 -79
  900. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +29 -5
  901. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/host_name_verification.ipp +75 -0
  902. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +5 -1
  903. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +2 -1
  904. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +7 -3
  905. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +423 -142
  906. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +1 -1
  907. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +1 -1
  908. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +1 -1
  909. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +2 -1
  910. data/src/cxx_supportlib/vendor-modified/boost/asio/static_thread_pool.hpp +33 -0
  911. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +1 -6
  912. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +311 -40
  913. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_file.hpp +37 -0
  914. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +1 -1
  915. data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +18 -6
  916. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +570 -28
  917. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +1 -6
  918. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +269 -0
  919. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +773 -42
  920. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +1 -1
  921. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/equality_comparable.hpp +102 -0
  922. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_member.hpp +106 -0
  923. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_free.hpp +106 -0
  924. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_member.hpp +106 -0
  925. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_free.hpp +106 -0
  926. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_member.hpp +106 -0
  927. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_static_constexpr_member.hpp +103 -0
  928. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_free.hpp +106 -0
  929. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_member.hpp +106 -0
  930. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_free.hpp +106 -0
  931. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_member.hpp +106 -0
  932. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_query.hpp +104 -0
  933. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require.hpp +117 -0
  934. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require_concept.hpp +118 -0
  935. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +1 -1
  936. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +2 -2
  937. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +1 -1
  938. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +1 -1
  939. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +1 -1
  940. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +82 -43
  941. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +1 -1
  942. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +1 -1
  943. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +1 -1
  944. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +163 -0
  945. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +21 -21
  946. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +3 -7
  947. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +2 -2
  948. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +1 -1
  949. data/src/cxx_supportlib/vendor-modified/boost/asio/writable_pipe.hpp +37 -0
  950. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +772 -173
  951. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +237 -73
  952. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +1 -1
  953. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +72 -28
  954. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +197 -0
  955. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +170 -11
  956. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_flag.hpp +12 -3
  957. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +97 -0
  958. data/src/cxx_supportlib/vendor-modified/boost/atomic/capabilities.hpp +2 -191
  959. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +8 -1
  960. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/aligned_variable.hpp +57 -0
  961. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag_impl.hpp +129 -0
  962. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_impl.hpp +1265 -0
  963. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +1228 -0
  964. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +102 -12
  965. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +43 -11
  966. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/capabilities.hpp +217 -0
  967. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_aarch32.hpp +53 -0
  968. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_aarch64.hpp +65 -0
  969. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_alpha.hpp +34 -0
  970. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_arm.hpp +103 -0
  971. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_ppc.hpp +55 -0
  972. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_sparc.hpp +34 -0
  973. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_x86.hpp +74 -0
  974. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_msvc_arm.hpp +34 -0
  975. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_msvc_x86.hpp +61 -0
  976. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_atomic.hpp +100 -75
  977. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_sync.hpp +0 -7
  978. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/cas_based_exchange.hpp +50 -0
  979. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/classify.hpp +90 -0
  980. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +57 -64
  981. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_operations.hpp +50 -0
  982. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_operations_fwd.hpp +38 -0
  983. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch32.hpp +1121 -0
  984. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch64.hpp +1909 -0
  985. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_alpha.hpp +867 -0
  986. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_arm.hpp +1417 -0
  987. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_ppc.hpp +1218 -0
  988. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_sparc.hpp +215 -0
  989. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +1110 -0
  990. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_arm.hpp +828 -0
  991. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +903 -0
  992. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations.hpp +49 -0
  993. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +194 -0
  994. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated_fwd.hpp +38 -0
  995. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_fwd.hpp +38 -0
  996. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_cas_based.hpp +94 -0
  997. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_atomic.hpp +306 -0
  998. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_sync.hpp +263 -0
  999. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_linux_arm.hpp +169 -0
  1000. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extending_cas_based_arithmetic.hpp +72 -0
  1001. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_operations_fwd.hpp +4 -1
  1002. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +22 -12
  1003. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +13 -10
  1004. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_operations_fwd.hpp +4 -1
  1005. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +59 -40
  1006. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch32.hpp +1060 -0
  1007. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch64.hpp +1330 -0
  1008. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_arm.hpp +363 -355
  1009. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +167 -163
  1010. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_x86.hpp +232 -102
  1011. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_generic.hpp +9 -17
  1012. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_arm.hpp +6 -4
  1013. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_x86.hpp +119 -92
  1014. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_operations.hpp +41 -0
  1015. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch32.hpp +60 -0
  1016. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch64.hpp +58 -0
  1017. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_alpha.hpp +53 -0
  1018. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp +90 -0
  1019. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_ppc.hpp +68 -0
  1020. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_sparc.hpp +70 -0
  1021. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_x86.hpp +69 -0
  1022. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_arm.hpp +66 -0
  1023. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_x86.hpp +66 -0
  1024. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations.hpp +41 -0
  1025. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations_emulated.hpp +50 -0
  1026. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_atomic.hpp +75 -0
  1027. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_sync.hpp +53 -0
  1028. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_linux_arm.hpp +64 -0
  1029. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/float_sizes.hpp +122 -35
  1030. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/footer.hpp +24 -0
  1031. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_operations_fwd.hpp +4 -1
  1032. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +13 -8
  1033. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_generic.hpp +6 -3
  1034. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +185 -0
  1035. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_arm_asm_common.hpp +79 -0
  1036. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_atomic_memory_order_utils.hpp +66 -0
  1037. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_ppc_asm_common.hpp +33 -0
  1038. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/header.hpp +72 -0
  1039. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +25 -1
  1040. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_conversions.hpp +108 -0
  1041. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +35 -11
  1042. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/intptr.hpp +46 -0
  1043. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lock_pool.hpp +151 -0
  1044. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/memory_order_utils.hpp +47 -0
  1045. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/once_flag.hpp +43 -0
  1046. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_aarch32_common.hpp +53 -0
  1047. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_aarch64_common.hpp +53 -0
  1048. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm_common.hpp +8 -79
  1049. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc_common.hpp +4 -1
  1050. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_common.hpp +7 -2
  1051. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +30 -5
  1052. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +80 -34
  1053. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_traits.hpp +187 -0
  1054. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/alignment_of.hpp +51 -0
  1055. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/has_unique_object_representations.hpp +143 -0
  1056. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_enum.hpp +42 -0
  1057. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_floating_point.hpp +3 -2
  1058. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp +46 -0
  1059. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_copyable.hpp +45 -0
  1060. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +42 -0
  1061. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_capabilities.hpp +363 -0
  1062. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_darwin_ulock.hpp +58 -0
  1063. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_dragonfly_umtx.hpp +30 -0
  1064. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_freebsd_umtx.hpp +40 -0
  1065. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_futex.hpp +31 -0
  1066. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +64 -0
  1067. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_operations.hpp +28 -0
  1068. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_operations_fwd.hpp +43 -0
  1069. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_darwin_ulock.hpp +158 -0
  1070. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_dragonfly_umtx.hpp +75 -0
  1071. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +96 -0
  1072. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_freebsd_umtx.hpp +119 -0
  1073. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_futex.hpp +111 -0
  1074. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_generic.hpp +143 -0
  1075. data/src/cxx_supportlib/vendor-modified/boost/atomic/fences.hpp +7 -18
  1076. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +90 -0
  1077. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_flag.hpp +40 -0
  1078. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +97 -0
  1079. data/src/cxx_supportlib/vendor-modified/boost/atomic.hpp +9 -0
  1080. data/src/cxx_supportlib/vendor-modified/boost/bind/apply.hpp +4 -49
  1081. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +263 -1815
  1082. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_cc.hpp +117 -0
  1083. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf2_cc.hpp +210 -0
  1084. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf_cc.hpp +405 -0
  1085. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/integer_sequence.hpp +111 -0
  1086. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/result_traits.hpp +165 -0
  1087. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/tuple_for_each.hpp +64 -0
  1088. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +143 -279
  1089. data/src/cxx_supportlib/vendor-modified/boost/bind/placeholders.hpp +13 -14
  1090. data/src/cxx_supportlib/vendor-modified/boost/bind/protect.hpp +24 -259
  1091. data/src/cxx_supportlib/vendor-modified/boost/bind/std_placeholders.hpp +33 -0
  1092. data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +4 -320
  1093. data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +2 -0
  1094. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +14 -14
  1095. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp +34 -34
  1096. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/thread_clock.hpp +4 -4
  1097. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/chrono.hpp +34 -14
  1098. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp +27 -27
  1099. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/thread_clock.hpp +4 -4
  1100. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/is_evenly_divisible_by.hpp +1 -7
  1101. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/requires_cxx11.hpp +23 -0
  1102. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/scan_keyword.hpp +4 -2
  1103. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/system.hpp +5 -4
  1104. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +10 -6
  1105. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_get.hpp +1 -1
  1106. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +4 -4
  1107. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_put.hpp +5 -5
  1108. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_style.hpp +1 -1
  1109. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +3 -2
  1110. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +4 -4
  1111. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/timezone.hpp +2 -1
  1112. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/ios_base_state_ptr.hpp +7 -7
  1113. data/src/cxx_supportlib/vendor-modified/boost/chrono/io_v1/chrono_io.hpp +3 -3
  1114. data/src/cxx_supportlib/vendor-modified/boost/chrono/system_clocks.hpp +3 -2
  1115. data/src/cxx_supportlib/vendor-modified/boost/chrono/time_point.hpp +1 -1
  1116. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +178 -167
  1117. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +39 -47
  1118. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/space_optimized.hpp +32 -38
  1119. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer.hpp +12 -9
  1120. data/src/cxx_supportlib/vendor-modified/boost/concept/assert.hpp +2 -2
  1121. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/general.hpp +24 -3
  1122. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/has_constraints.hpp +3 -3
  1123. data/src/cxx_supportlib/vendor-modified/boost/concept/usage.hpp +8 -1
  1124. data/src/cxx_supportlib/vendor-modified/boost/concept_check.hpp +20 -20
  1125. data/src/cxx_supportlib/vendor-modified/boost/config/abi_prefix.hpp +1 -1
  1126. data/src/cxx_supportlib/vendor-modified/boost/config/abi_suffix.hpp +1 -3
  1127. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +211 -0
  1128. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +212 -0
  1129. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +47 -0
  1130. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +65 -0
  1131. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +59 -0
  1132. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +41 -0
  1133. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx98.hpp +23 -0
  1134. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +78 -19
  1135. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +13 -3
  1136. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +38 -4
  1137. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +89 -0
  1138. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +164 -10
  1139. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/comeau.hpp +1 -1
  1140. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +40 -11
  1141. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +374 -52
  1142. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +10 -1
  1143. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +41 -11
  1144. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +9 -2
  1145. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/greenhills.hpp +1 -1
  1146. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +7 -1
  1147. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +14 -1
  1148. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/kai.hpp +1 -1
  1149. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +10 -1
  1150. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +10 -1
  1151. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +9 -3
  1152. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +9 -0
  1153. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +15 -0
  1154. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +10 -1
  1155. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +54 -10
  1156. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +22 -0
  1157. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +5 -0
  1158. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +218 -0
  1159. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_compiler_config.hpp +1 -2
  1160. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_platform_config.hpp +5 -0
  1161. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_stdlib_config.hpp +13 -2
  1162. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +303 -5
  1163. data/src/cxx_supportlib/vendor-modified/boost/config/header_deprecated.hpp +1 -1
  1164. data/src/cxx_supportlib/vendor-modified/boost/config/platform/bsd.hpp +5 -8
  1165. data/src/cxx_supportlib/vendor-modified/boost/config/platform/vxworks.hpp +63 -74
  1166. data/src/cxx_supportlib/vendor-modified/boost/config/platform/wasm.hpp +23 -0
  1167. data/src/cxx_supportlib/vendor-modified/boost/config/requires_threads.hpp +1 -1
  1168. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +76 -10
  1169. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcomo.hpp +1 -0
  1170. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +51 -4
  1171. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +144 -11
  1172. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/modena.hpp +1 -0
  1173. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/msl.hpp +1 -0
  1174. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/roguewave.hpp +2 -1
  1175. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/sgi.hpp +1 -0
  1176. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/stlport.hpp +6 -5
  1177. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/vacpp.hpp +1 -0
  1178. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/xlcpp_zos.hpp +1 -0
  1179. data/src/cxx_supportlib/vendor-modified/boost/config/user.hpp +2 -2
  1180. data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +26 -0
  1181. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +291 -18
  1182. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +43 -35
  1183. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +205 -41
  1184. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +132 -38
  1185. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +981 -361
  1186. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +25 -22
  1187. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +838 -463
  1188. data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -10
  1189. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +199 -133
  1190. data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +28 -0
  1191. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +4 -4
  1192. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
  1193. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +16 -16
  1194. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +4 -3
  1195. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +4 -3
  1196. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +73 -13
  1197. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +11 -3
  1198. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +3 -0
  1199. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +52 -16
  1200. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_or_allocator_rebind.hpp +4 -0
  1201. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +21 -116
  1202. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +991 -148
  1203. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +181 -57
  1204. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +68 -68
  1205. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +443 -239
  1206. data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
  1207. data/src/cxx_supportlib/vendor-modified/boost/container/detail/guards_dended.hpp +198 -0
  1208. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +18 -1
  1209. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +36 -1
  1210. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +91 -0
  1211. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +24 -0
  1212. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +228 -194
  1213. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +55 -2
  1214. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +60 -2
  1215. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +135 -40
  1216. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +48 -23
  1217. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +28 -9
  1218. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +352 -152
  1219. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +3 -3
  1220. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +12 -12
  1221. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +152 -105
  1222. data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +1 -7
  1223. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
  1224. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +3 -3
  1225. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +7 -11
  1226. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +6 -0
  1227. data/src/cxx_supportlib/vendor-modified/boost/container/detail/thread_mutex.hpp +181 -0
  1228. data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +28 -28
  1229. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +464 -351
  1230. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +5 -0
  1231. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_functors.hpp +9 -13
  1232. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +3 -3
  1233. data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +1 -1
  1234. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +6 -15
  1235. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +138 -4
  1236. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +3041 -0
  1237. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +874 -314
  1238. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +391 -126
  1239. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +150 -120
  1240. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +634 -254
  1241. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +33 -13
  1242. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +30 -24
  1243. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +35 -22
  1244. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +433 -7
  1245. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/devector.hpp +51 -0
  1246. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_set.hpp +3 -3
  1247. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/global_resource.hpp +1 -4
  1248. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +37 -3
  1249. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +10 -7
  1250. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +9 -9
  1251. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +92 -8
  1252. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/synchronized_pool_resource.hpp +7 -6
  1253. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/unsynchronized_pool_resource.hpp +4 -4
  1254. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +79 -81
  1255. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +445 -180
  1256. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +142 -113
  1257. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +325 -263
  1258. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +386 -228
  1259. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +243 -161
  1260. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +601 -455
  1261. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +155 -41
  1262. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
  1263. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +977 -1017
  1264. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_integral.hpp +146 -0
  1265. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_mix.hpp +113 -0
  1266. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_range.hpp +408 -0
  1267. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple_like.hpp +62 -0
  1268. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/mulx.hpp +79 -0
  1269. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +395 -580
  1270. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +25 -24
  1271. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_contiguous_range.hpp +98 -0
  1272. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_described_class.hpp +37 -0
  1273. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_range.hpp +41 -0
  1274. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_tuple_like.hpp +36 -0
  1275. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_unordered_range.hpp +38 -0
  1276. data/src/cxx_supportlib/vendor-modified/boost/core/addressof.hpp +2 -2
  1277. data/src/cxx_supportlib/vendor-modified/boost/core/alignof.hpp +57 -0
  1278. data/src/cxx_supportlib/vendor-modified/boost/core/alloc_construct.hpp +95 -0
  1279. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_access.hpp +834 -0
  1280. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_traits.hpp +112 -0
  1281. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +954 -0
  1282. data/src/cxx_supportlib/vendor-modified/boost/core/checked_delete.hpp +35 -7
  1283. data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +298 -0
  1284. data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +46 -0
  1285. data/src/cxx_supportlib/vendor-modified/boost/core/default_allocator.hpp +158 -0
  1286. data/src/cxx_supportlib/vendor-modified/boost/core/detail/is_same.hpp +39 -0
  1287. data/src/cxx_supportlib/vendor-modified/boost/core/detail/lwt_unattended.hpp +66 -0
  1288. data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
  1289. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_pause.hpp +71 -0
  1290. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_sleep.hpp +122 -0
  1291. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_yield.hpp +100 -0
  1292. data/src/cxx_supportlib/vendor-modified/boost/core/detail/splitmix64.hpp +54 -0
  1293. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +1272 -0
  1294. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +203 -0
  1295. data/src/cxx_supportlib/vendor-modified/boost/core/exchange.hpp +49 -0
  1296. data/src/cxx_supportlib/vendor-modified/boost/core/explicit_operator_bool.hpp +9 -0
  1297. data/src/cxx_supportlib/vendor-modified/boost/core/fclose_deleter.hpp +53 -0
  1298. data/src/cxx_supportlib/vendor-modified/boost/core/first_scalar.hpp +45 -0
  1299. data/src/cxx_supportlib/vendor-modified/boost/core/functor.hpp +41 -0
  1300. data/src/cxx_supportlib/vendor-modified/boost/core/identity.hpp +61 -0
  1301. data/src/cxx_supportlib/vendor-modified/boost/core/ignore_unused.hpp +32 -2
  1302. data/src/cxx_supportlib/vendor-modified/boost/core/invoke_swap.hpp +93 -0
  1303. data/src/cxx_supportlib/vendor-modified/boost/core/is_same.hpp +10 -15
  1304. data/src/cxx_supportlib/vendor-modified/boost/core/launder.hpp +69 -0
  1305. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +269 -145
  1306. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +43 -8
  1307. data/src/cxx_supportlib/vendor-modified/boost/core/make_span.hpp +59 -0
  1308. data/src/cxx_supportlib/vendor-modified/boost/core/max_align.hpp +82 -0
  1309. data/src/cxx_supportlib/vendor-modified/boost/core/memory_resource.hpp +108 -0
  1310. data/src/cxx_supportlib/vendor-modified/boost/core/no_exceptions_support.hpp +14 -2
  1311. data/src/cxx_supportlib/vendor-modified/boost/core/noinit_adaptor.hpp +90 -0
  1312. data/src/cxx_supportlib/vendor-modified/boost/core/noncopyable.hpp +16 -1
  1313. data/src/cxx_supportlib/vendor-modified/boost/core/null_deleter.hpp +7 -0
  1314. data/src/cxx_supportlib/vendor-modified/boost/core/nvp.hpp +57 -0
  1315. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
  1316. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_traits.hpp +112 -60
  1317. data/src/cxx_supportlib/vendor-modified/boost/core/quick_exit.hpp +59 -0
  1318. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +61 -17
  1319. data/src/cxx_supportlib/vendor-modified/boost/core/serialization.hpp +131 -0
  1320. data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +31 -0
  1321. data/src/cxx_supportlib/vendor-modified/boost/core/snprintf.hpp +173 -0
  1322. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +401 -0
  1323. data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +12 -32
  1324. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +1186 -0
  1325. data/src/cxx_supportlib/vendor-modified/boost/core/typeinfo.hpp +26 -10
  1326. data/src/cxx_supportlib/vendor-modified/boost/core/uncaught_exceptions.hpp +155 -0
  1327. data/src/cxx_supportlib/vendor-modified/boost/core/use_default.hpp +17 -0
  1328. data/src/cxx_supportlib/vendor-modified/boost/core/verbose_terminate_handler.hpp +88 -0
  1329. data/src/cxx_supportlib/vendor-modified/boost/core/yield_primitives.hpp +12 -0
  1330. data/src/cxx_supportlib/vendor-modified/boost/cregex.hpp +4 -0
  1331. data/src/cxx_supportlib/vendor-modified/boost/cstdint.hpp +5 -5
  1332. data/src/cxx_supportlib/vendor-modified/boost/current_function.hpp +3 -3
  1333. data/src/cxx_supportlib/vendor-modified/boost/date_time/c_time.hpp +9 -4
  1334. data/src/cxx_supportlib/vendor-modified/boost/date_time/compiler_config.hpp +9 -41
  1335. data/src/cxx_supportlib/vendor-modified/boost/date_time/constrained_value.hpp +19 -11
  1336. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +24 -24
  1337. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration.hpp +17 -22
  1338. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration_types.hpp +44 -49
  1339. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_facet.hpp +5 -6
  1340. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_generators.hpp +24 -19
  1341. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_iterator.hpp +8 -8
  1342. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_parsing.hpp +51 -25
  1343. data/src/cxx_supportlib/vendor-modified/boost/date_time/dst_rules.hpp +56 -56
  1344. data/src/cxx_supportlib/vendor-modified/boost/date_time/dst_transition_generators.hpp +2 -2
  1345. data/src/cxx_supportlib/vendor-modified/boost/date_time/find_match.hpp +42 -0
  1346. data/src/cxx_supportlib/vendor-modified/boost/date_time/format_date_parser.hpp +98 -98
  1347. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters.hpp +3 -3
  1348. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters_limited.hpp +3 -3
  1349. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +34 -27
  1350. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day.hpp +4 -4
  1351. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration.hpp +44 -32
  1352. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration_types.hpp +2 -2
  1353. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_month.hpp +51 -23
  1354. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_serialize.hpp +29 -27
  1355. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_weekday.hpp +43 -9
  1356. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_year.hpp +3 -3
  1357. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/parsers.hpp +34 -15
  1358. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.hpp +15 -17
  1359. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.ipp +30 -25
  1360. data/src/cxx_supportlib/vendor-modified/boost/date_time/int_adapter.hpp +57 -37
  1361. data/src/cxx_supportlib/vendor-modified/boost/date_time/iso_format.hpp +13 -13
  1362. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +2 -2
  1363. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_time_io.hpp +3 -0
  1364. data/src/cxx_supportlib/vendor-modified/boost/date_time/locale_config.hpp +3 -3
  1365. data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +44 -47
  1366. data/src/cxx_supportlib/vendor-modified/boost/date_time/period_formatter.hpp +34 -31
  1367. data/src/cxx_supportlib/vendor-modified/boost/date_time/period_parser.hpp +27 -28
  1368. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/conversion.hpp +1 -1
  1369. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/date_duration_operators.hpp +8 -8
  1370. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_config.hpp +13 -26
  1371. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +7 -7
  1372. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_io.hpp +1 -1
  1373. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/ptime.hpp +22 -4
  1374. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters.hpp +4 -4
  1375. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters_limited.hpp +2 -2
  1376. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_parsers.hpp +4 -0
  1377. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_serialize.hpp +28 -12
  1378. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_formatter.hpp +1 -0
  1379. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +1 -6
  1380. data/src/cxx_supportlib/vendor-modified/boost/date_time/string_parse_tree.hpp +5 -3
  1381. data/src/cxx_supportlib/vendor-modified/boost/date_time/strings_from_facet.hpp +4 -2
  1382. data/src/cxx_supportlib/vendor-modified/boost/date_time/time.hpp +24 -3
  1383. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +56 -44
  1384. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +9 -12
  1385. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_iterator.hpp +8 -8
  1386. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +5 -10
  1387. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_resolution_traits.hpp +18 -18
  1388. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_system_counted.hpp +65 -50
  1389. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_system_split.hpp +43 -30
  1390. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_base.hpp +1 -1
  1391. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_names.hpp +1 -1
  1392. data/src/cxx_supportlib/vendor-modified/boost/date_time/tz_db_base.hpp +0 -1
  1393. data/src/cxx_supportlib/vendor-modified/boost/date_time/wrapping_int.hpp +16 -15
  1394. data/src/cxx_supportlib/vendor-modified/boost/date_time/year_month_day.hpp +7 -5
  1395. data/src/cxx_supportlib/vendor-modified/boost/describe/bases.hpp +50 -0
  1396. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +40 -0
  1397. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/cx_streq.hpp +30 -0
  1398. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/void_t.hpp +32 -0
  1399. data/src/cxx_supportlib/vendor-modified/boost/describe/members.hpp +161 -0
  1400. data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +33 -0
  1401. data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +7 -11
  1402. data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +38 -47
  1403. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +6 -97
  1404. data/src/cxx_supportlib/vendor-modified/boost/detail/reference_content.hpp +7 -7
  1405. data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +3 -3
  1406. data/src/cxx_supportlib/vendor-modified/boost/exception/current_exception_cast.hpp +10 -4
  1407. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/clone_current_exception.hpp +10 -4
  1408. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +12 -7
  1409. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +135 -34
  1410. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/is_output_streamable.hpp +9 -4
  1411. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/object_hex_dump.hpp +9 -4
  1412. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +24 -0
  1413. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/shared_ptr.hpp +2 -2
  1414. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +11 -5
  1415. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +18 -9
  1416. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +118 -70
  1417. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +9 -4
  1418. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +12 -10
  1419. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string.hpp +10 -5
  1420. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string_stub.hpp +9 -4
  1421. data/src/cxx_supportlib/vendor-modified/boost/exception_ptr.hpp +2 -2
  1422. data/src/cxx_supportlib/vendor-modified/boost/foreach.hpp +16 -9
  1423. data/src/cxx_supportlib/vendor-modified/boost/function/function0.hpp +1 -3
  1424. data/src/cxx_supportlib/vendor-modified/boost/function/function1.hpp +1 -3
  1425. data/src/cxx_supportlib/vendor-modified/boost/function/function10.hpp +1 -3
  1426. data/src/cxx_supportlib/vendor-modified/boost/function/function2.hpp +1 -3
  1427. data/src/cxx_supportlib/vendor-modified/boost/function/function3.hpp +1 -3
  1428. data/src/cxx_supportlib/vendor-modified/boost/function/function4.hpp +1 -3
  1429. data/src/cxx_supportlib/vendor-modified/boost/function/function5.hpp +1 -3
  1430. data/src/cxx_supportlib/vendor-modified/boost/function/function6.hpp +1 -3
  1431. data/src/cxx_supportlib/vendor-modified/boost/function/function7.hpp +1 -3
  1432. data/src/cxx_supportlib/vendor-modified/boost/function/function8.hpp +1 -3
  1433. data/src/cxx_supportlib/vendor-modified/boost/function/function9.hpp +1 -3
  1434. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +77 -237
  1435. data/src/cxx_supportlib/vendor-modified/boost/function/function_fwd.hpp +36 -41
  1436. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +456 -464
  1437. data/src/cxx_supportlib/vendor-modified/boost/function/function_typeof.hpp +1 -31
  1438. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +5 -61
  1439. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor.hpp +2 -2
  1440. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_ct.hpp +3 -3
  1441. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +35 -33
  1442. data/src/cxx_supportlib/vendor-modified/boost/integer/extended_euclidean.hpp +83 -0
  1443. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_log2.hpp +86 -81
  1444. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_mask.hpp +2 -2
  1445. data/src/cxx_supportlib/vendor-modified/boost/integer/mod_inverse.hpp +53 -0
  1446. data/src/cxx_supportlib/vendor-modified/boost/integer/static_log2.hpp +4 -5
  1447. data/src/cxx_supportlib/vendor-modified/boost/integer/static_min_max.hpp +3 -2
  1448. data/src/cxx_supportlib/vendor-modified/boost/integer.hpp +4 -4
  1449. data/src/cxx_supportlib/vendor-modified/boost/integer_fwd.hpp +2 -2
  1450. data/src/cxx_supportlib/vendor-modified/boost/integer_traits.hpp +3 -3
  1451. data/src/cxx_supportlib/vendor-modified/boost/intrusive/any_hook.hpp +4 -4
  1452. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +99 -100
  1453. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +51 -52
  1454. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +83 -83
  1455. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +101 -102
  1456. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +155 -164
  1457. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +164 -158
  1458. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +36 -28
  1459. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +88 -19
  1460. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +5 -5
  1461. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
  1462. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +44 -44
  1463. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/array_initializer.hpp +10 -8
  1464. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +23 -23
  1465. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +38 -40
  1466. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +85 -16
  1467. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +1 -0
  1468. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +3 -3
  1469. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +27 -27
  1470. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/empty_node_checker.hpp +1 -1
  1471. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +1 -1
  1472. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +1 -32
  1473. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +14 -15
  1474. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +277 -0
  1475. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_combine.hpp +54 -0
  1476. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_integral.hpp +119 -0
  1477. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_mix.hpp +130 -0
  1478. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +204 -115
  1479. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +26 -22
  1480. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +6 -6
  1481. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +126 -80
  1482. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +7 -7
  1483. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +30 -18
  1484. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +6 -6
  1485. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/math.hpp +11 -64
  1486. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +8 -1
  1487. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +4 -4
  1488. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_to_value.hpp +1 -1
  1489. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +6 -17
  1490. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +24 -24
  1491. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/reverse_iterator.hpp +3 -140
  1492. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +3 -1
  1493. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +14 -14
  1494. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +36 -17
  1495. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +3 -3
  1496. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +22 -22
  1497. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +38 -26
  1498. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +9 -9
  1499. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +45 -26
  1500. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/twin.hpp +49 -0
  1501. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/value_functors.hpp +52 -0
  1502. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +66 -4
  1503. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +1763 -1039
  1504. data/src/cxx_supportlib/vendor-modified/boost/intrusive/intrusive_fwd.hpp +5 -0
  1505. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +98 -18
  1506. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +113 -111
  1507. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list_hook.hpp +10 -10
  1508. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +4 -4
  1509. data/src/cxx_supportlib/vendor-modified/boost/intrusive/options.hpp +26 -4
  1510. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +21 -11
  1511. data/src/cxx_supportlib/vendor-modified/boost/intrusive/parent_from_member.hpp +2 -2
  1512. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +7 -4
  1513. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +31 -23
  1514. data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +13 -6
  1515. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +51 -52
  1516. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +74 -74
  1517. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +101 -102
  1518. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set_hook.hpp +12 -12
  1519. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +109 -110
  1520. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +68 -77
  1521. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +81 -81
  1522. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +178 -186
  1523. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist_hook.hpp +8 -6
  1524. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +107 -108
  1525. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +54 -55
  1526. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +99 -97
  1527. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +141 -115
  1528. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +88 -83
  1529. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +158 -152
  1530. data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +6 -4
  1531. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +128 -114
  1532. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +17 -17
  1533. data/src/cxx_supportlib/vendor-modified/boost/io/ios_state.hpp +361 -315
  1534. data/src/cxx_supportlib/vendor-modified/boost/io_fwd.hpp +45 -49
  1535. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +12 -1
  1536. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +10 -10
  1537. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +1 -1
  1538. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +5 -5
  1539. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +13 -13
  1540. data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +65 -0
  1541. data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +148 -0
  1542. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +3 -3
  1543. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +2 -2
  1544. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +107 -26
  1545. data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +8 -4
  1546. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +24 -25
  1547. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +59 -0
  1548. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +154 -172
  1549. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +619 -647
  1550. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +89 -77
  1551. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +35 -45
  1552. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +23 -29
  1553. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +73 -0
  1554. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +2 -2
  1555. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +33 -28
  1556. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +10 -9
  1557. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +23 -157
  1558. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +10 -13
  1559. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/chrono.cpp +4 -2
  1560. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/process_cpu_clocks.cpp +3 -1
  1561. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/thread_clock.cpp +3 -1
  1562. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +4 -2
  1563. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +20 -25
  1564. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +13 -122
  1565. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/static_mutex.cpp +8 -2
  1566. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +24 -22
  1567. data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +16 -5
  1568. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/future.cpp +1 -1
  1569. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once.cpp +0 -1
  1570. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +4 -3
  1571. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +50 -29
  1572. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/tss_null.cpp +2 -2
  1573. data/src/cxx_supportlib/vendor-modified/boost/limits.hpp +12 -12
  1574. data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +6 -12
  1575. data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +5 -5
  1576. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +107 -62
  1577. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +119 -86
  1578. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +322 -489
  1579. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +11 -10
  1580. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/heap_sort.hpp +22 -11
  1581. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +9 -0
  1582. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +463 -120
  1583. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +87 -10
  1584. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +16 -5
  1585. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/search.hpp +79 -0
  1586. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/set_difference.hpp +9 -3
  1587. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +8 -5
  1588. data/src/cxx_supportlib/vendor-modified/boost/move/algo/predicate.hpp +24 -9
  1589. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +0 -1
  1590. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +32 -11
  1591. data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +32 -6
  1592. data/src/cxx_supportlib/vendor-modified/boost/move/detail/addressof.hpp +61 -0
  1593. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +1 -1
  1594. data/src/cxx_supportlib/vendor-modified/boost/move/detail/force_ptr.hpp +36 -0
  1595. data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +12 -0
  1596. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +109 -9
  1597. data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
  1598. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +10 -32
  1599. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils_core.hpp +11 -6
  1600. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
  1601. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +268 -0
  1602. data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +40 -33
  1603. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +5 -1
  1604. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_end.hpp +2 -0
  1605. data/src/cxx_supportlib/vendor-modified/boost/move/detail/to_raw_pointer.hpp +1 -1
  1606. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +341 -70
  1607. data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +1 -27
  1608. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +90 -3
  1609. data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +21 -21
  1610. data/src/cxx_supportlib/vendor-modified/boost/move/make_unique.hpp +10 -0
  1611. data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +65 -66
  1612. data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +2 -2
  1613. data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +38 -33
  1614. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +1386 -0
  1615. data/src/cxx_supportlib/vendor-modified/boost/mp11/bind.hpp +120 -0
  1616. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/config.hpp +149 -0
  1617. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_append.hpp +321 -0
  1618. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_copy_if.hpp +48 -0
  1619. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_count.hpp +147 -0
  1620. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_defer.hpp +119 -0
  1621. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_fold.hpp +166 -0
  1622. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_front.hpp +50 -0
  1623. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_list.hpp +39 -0
  1624. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_value_list.hpp +41 -0
  1625. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list.hpp +24 -0
  1626. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list_v.hpp +27 -0
  1627. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +87 -0
  1628. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_min_element.hpp +51 -0
  1629. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_plus.hpp +84 -0
  1630. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_remove_if.hpp +48 -0
  1631. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_rename.hpp +54 -0
  1632. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_value.hpp +25 -0
  1633. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_void.hpp +32 -0
  1634. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_with_index.hpp +385 -0
  1635. data/src/cxx_supportlib/vendor-modified/boost/mp11/function.hpp +222 -0
  1636. data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +121 -0
  1637. data/src/cxx_supportlib/vendor-modified/boost/mp11/integral.hpp +51 -0
  1638. data/src/cxx_supportlib/vendor-modified/boost/mp11/list.hpp +481 -0
  1639. data/src/cxx_supportlib/vendor-modified/boost/mp11/set.hpp +188 -0
  1640. data/src/cxx_supportlib/vendor-modified/boost/mp11/utility.hpp +169 -0
  1641. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +16 -0
  1642. data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +1 -1
  1643. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +31 -11
  1644. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/common_name_wknd.hpp +2 -2
  1645. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/adl.hpp +1 -1
  1646. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/arrays.hpp +1 -1
  1647. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/bcc.hpp +2 -2
  1648. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/bind.hpp +1 -1
  1649. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/compiler.hpp +2 -2
  1650. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/ctps.hpp +1 -1
  1651. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/dtp.hpp +3 -3
  1652. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/forwarding.hpp +1 -1
  1653. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/integral.hpp +1 -1
  1654. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/operators.hpp +1 -1
  1655. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/overload_resolution.hpp +1 -1
  1656. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/preprocessor.hpp +1 -1
  1657. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/ttp.hpp +2 -2
  1658. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/count_impl.hpp +1 -1
  1659. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/fold_impl_body.hpp +3 -3
  1660. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/has_rebind.hpp +4 -4
  1661. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +3 -2
  1662. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/lambda_support.hpp +3 -3
  1663. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/nested_type_wknd.hpp +1 -1
  1664. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +1 -1
  1665. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/enum.hpp +12 -0
  1666. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/params.hpp +12 -0
  1667. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/size_impl.hpp +1 -1
  1668. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/static_cast.hpp +1 -1
  1669. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/template_arity.hpp +1 -1
  1670. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/yes_no.hpp +2 -1
  1671. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +1 -1
  1672. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +1 -1
  1673. data/src/cxx_supportlib/vendor-modified/boost/mpl/has_xxx.hpp +4 -4
  1674. data/src/cxx_supportlib/vendor-modified/boost/mpl/if.hpp +1 -1
  1675. data/src/cxx_supportlib/vendor-modified/boost/mpl/integral_c.hpp +1 -1
  1676. data/src/cxx_supportlib/vendor-modified/boost/mpl/lower_bound.hpp +1 -1
  1677. data/src/cxx_supportlib/vendor-modified/boost/mpl/numeric_cast.hpp +1 -1
  1678. data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +1 -1
  1679. data/src/cxx_supportlib/vendor-modified/boost/mpl/string.hpp +6 -6
  1680. data/src/cxx_supportlib/vendor-modified/boost/mpl/upper_bound.hpp +1 -1
  1681. data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/at.hpp +1 -1
  1682. data/src/cxx_supportlib/vendor-modified/boost/next_prior.hpp +3 -44
  1683. data/src/cxx_supportlib/vendor-modified/boost/nondet_random.hpp +22 -0
  1684. data/src/cxx_supportlib/vendor-modified/boost/none.hpp +5 -5
  1685. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +11 -1
  1686. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/cast.hpp +1 -1
  1687. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/converter_policies.hpp +5 -5
  1688. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/converter.hpp +1 -1
  1689. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/int_float_mixture.hpp +5 -5
  1690. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/meta.hpp +1 -1
  1691. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/sign_mixture.hpp +5 -5
  1692. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +5 -5
  1693. data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +33 -24
  1694. data/src/cxx_supportlib/vendor-modified/boost/optional/bad_optional_access.hpp +9 -0
  1695. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/experimental_traits.hpp +9 -3
  1696. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +17 -17
  1697. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +1 -1
  1698. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +4 -4
  1699. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_hash.hpp +49 -0
  1700. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +30 -4
  1701. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +1 -1
  1702. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +6 -6
  1703. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +41 -30
  1704. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +304 -128
  1705. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +3 -2
  1706. data/src/cxx_supportlib/vendor-modified/boost/parameter/are_tagged_arguments.hpp +125 -0
  1707. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/always_true_predicate.hpp +42 -0
  1708. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/arg_list.hpp +1253 -359
  1709. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/as_lvalue.hpp +25 -0
  1710. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/augment_predicate.hpp +198 -0
  1711. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/cast.hpp +7 -136
  1712. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/default.hpp +101 -59
  1713. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/has_nested_template_fn.hpp +111 -0
  1714. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/is_maybe.hpp +42 -16
  1715. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/is_placeholder.hpp +64 -0
  1716. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/is_tagged_argument.hpp +95 -0
  1717. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/lambda_tag.hpp +16 -0
  1718. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/maybe.hpp +128 -97
  1719. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/name.hpp +93 -0
  1720. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/as_parameter_requirements.hpp +32 -0
  1721. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/deduce_tag.hpp +217 -0
  1722. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/deduced_item.hpp +34 -0
  1723. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/insert_tagged.hpp +23 -0
  1724. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/is_named_argument.hpp +43 -0
  1725. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/item.hpp +47 -0
  1726. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_arg_list.hpp +438 -0
  1727. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_deduced_items.hpp +53 -0
  1728. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_items.hpp +45 -0
  1729. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_parameter_spec_items.hpp +244 -0
  1730. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/parameter_requirements.hpp +25 -0
  1731. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/predicate.hpp +87 -0
  1732. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/satisfies.hpp +142 -0
  1733. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_deduced.hpp +59 -0
  1734. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_keyword_arg.hpp +30 -0
  1735. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp +67 -0
  1736. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_template_keyword_arg.hpp +30 -0
  1737. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_type.hpp +89 -0
  1738. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/unmatched_argument.hpp +41 -0
  1739. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/parameter_requirements.hpp +7 -20
  1740. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/parenthesized_type.hpp +8 -31
  1741. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pp_impl/argument_pack.hpp +91 -0
  1742. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pp_impl/match.hpp +55 -0
  1743. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pp_impl/unwrap_predicate.hpp +97 -0
  1744. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/binary_seq_for_each.hpp +1638 -0
  1745. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/binary_seq_for_each_inc.hpp +1796 -0
  1746. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/binary_seq_to_args.hpp +65 -0
  1747. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/convert_binary_seq.hpp +57 -0
  1748. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/flatten.hpp +7 -110
  1749. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/for_each.hpp +7 -98
  1750. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/for_each_pred.hpp +1029 -0
  1751. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/argument_specs.hpp +24 -0
  1752. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/arity_range.hpp +42 -0
  1753. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/flatten.hpp +143 -0
  1754. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/for_each.hpp +152 -0
  1755. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/forwarding_overloads.hpp +509 -0
  1756. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_cast.hpp +730 -0
  1757. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_dispatch_layer.hpp +474 -0
  1758. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_dispatch_tuple.hpp +33 -0
  1759. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_forward_match.hpp +43 -0
  1760. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_name.hpp +152 -0
  1761. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/no_spec_overloads.hpp +331 -0
  1762. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/parenthesized_return_type.hpp +122 -0
  1763. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/parenthesized_type.hpp +34 -0
  1764. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/specification.hpp +109 -0
  1765. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/split_args.hpp +71 -0
  1766. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/inc_binary_seq.hpp +78 -0
  1767. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/is_binary.hpp +31 -0
  1768. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/is_nullary.hpp +32 -0
  1769. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/no_perfect_forwarding_begin.hpp +165 -0
  1770. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/no_perfect_forwarding_end.hpp +24 -0
  1771. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/nullptr.hpp +18 -0
  1772. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/overloads.hpp +92 -0
  1773. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/qualifier.hpp +88 -0
  1774. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/seq_enum.hpp +26 -0
  1775. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/seq_merge.hpp +1807 -0
  1776. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/result_of0.hpp +46 -29
  1777. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/set.hpp +94 -42
  1778. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tag.hpp +156 -34
  1779. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tagged_argument.hpp +874 -159
  1780. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tagged_argument_fwd.hpp +38 -0
  1781. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/template_keyword.hpp +76 -34
  1782. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/unwrap_cv_reference.hpp +161 -78
  1783. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/use_default.hpp +17 -0
  1784. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/use_default_tag.hpp +29 -0
  1785. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/void.hpp +26 -17
  1786. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/yesno.hpp +30 -14
  1787. data/src/cxx_supportlib/vendor-modified/boost/parameter/binding.hpp +158 -74
  1788. data/src/cxx_supportlib/vendor-modified/boost/parameter/compose.hpp +210 -0
  1789. data/src/cxx_supportlib/vendor-modified/boost/parameter/config.hpp +75 -6
  1790. data/src/cxx_supportlib/vendor-modified/boost/parameter/deduced.hpp +132 -0
  1791. data/src/cxx_supportlib/vendor-modified/boost/parameter/is_argument_pack.hpp +29 -0
  1792. data/src/cxx_supportlib/vendor-modified/boost/parameter/keyword.hpp +724 -102
  1793. data/src/cxx_supportlib/vendor-modified/boost/parameter/keyword_fwd.hpp +23 -0
  1794. data/src/cxx_supportlib/vendor-modified/boost/parameter/macros.hpp +205 -72
  1795. data/src/cxx_supportlib/vendor-modified/boost/parameter/match.hpp +37 -44
  1796. data/src/cxx_supportlib/vendor-modified/boost/parameter/name.hpp +100 -126
  1797. data/src/cxx_supportlib/vendor-modified/boost/parameter/nested_keyword.hpp +111 -0
  1798. data/src/cxx_supportlib/vendor-modified/boost/parameter/optional.hpp +67 -0
  1799. data/src/cxx_supportlib/vendor-modified/boost/parameter/parameters.hpp +556 -887
  1800. data/src/cxx_supportlib/vendor-modified/boost/parameter/preprocessor.hpp +156 -1016
  1801. data/src/cxx_supportlib/vendor-modified/boost/parameter/preprocessor_no_spec.hpp +74 -0
  1802. data/src/cxx_supportlib/vendor-modified/boost/parameter/python.hpp +5 -6
  1803. data/src/cxx_supportlib/vendor-modified/boost/parameter/required.hpp +66 -0
  1804. data/src/cxx_supportlib/vendor-modified/boost/parameter/template_keyword.hpp +87 -0
  1805. data/src/cxx_supportlib/vendor-modified/boost/parameter/value_type.hpp +156 -74
  1806. data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +119 -25
  1807. data/src/cxx_supportlib/vendor-modified/boost/pool/object_pool.hpp +2 -2
  1808. data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +22 -9
  1809. data/src/cxx_supportlib/vendor-modified/boost/pool/pool_alloc.hpp +1 -1
  1810. data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +13 -0
  1811. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/alpha.h +19 -13
  1812. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +97 -28
  1813. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/blackfin.h +16 -10
  1814. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/convex.h +19 -13
  1815. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/e2k.h +54 -0
  1816. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ia64.h +19 -13
  1817. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/loongarch.h +41 -0
  1818. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/m68k.h +33 -27
  1819. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/mips.h +31 -20
  1820. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/parisc.h +24 -18
  1821. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ppc.h +82 -30
  1822. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ptx.h +50 -0
  1823. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/pyramid.h +13 -7
  1824. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/riscv.h +48 -0
  1825. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/rs6k.h +23 -12
  1826. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sparc.h +26 -13
  1827. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/superh.h +29 -15
  1828. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sys370.h +15 -9
  1829. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sys390.h +15 -9
  1830. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86/32.h +31 -25
  1831. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86/64.h +19 -13
  1832. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86.h +4 -4
  1833. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/z.h +14 -8
  1834. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +4 -1
  1835. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/borland.h +12 -11
  1836. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/clang.h +10 -9
  1837. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/comeau.h +10 -9
  1838. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/compaq.h +13 -12
  1839. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/diab.h +10 -9
  1840. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/digitalmars.h +10 -9
  1841. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/dignus.h +10 -9
  1842. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/edg.h +10 -9
  1843. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/ekopath.h +10 -9
  1844. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/gcc.h +11 -10
  1845. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/gcc_xml.h +9 -8
  1846. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/greenhills.h +12 -11
  1847. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/hp_acc.h +10 -9
  1848. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/iar.h +10 -9
  1849. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/ibm.h +15 -14
  1850. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/intel.h +18 -17
  1851. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/kai.h +10 -9
  1852. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/llvm.h +9 -8
  1853. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/metaware.h +9 -8
  1854. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/metrowerks.h +14 -13
  1855. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/microtec.h +9 -8
  1856. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/mpw.h +12 -11
  1857. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/nvcc.h +74 -0
  1858. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/palm.h +10 -9
  1859. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/pgi.h +10 -9
  1860. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/sgi_mipspro.h +12 -11
  1861. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/sunpro.h +14 -13
  1862. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/tendra.h +9 -8
  1863. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/visualc.h +13 -12
  1864. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/watcom.h +10 -9
  1865. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler.h +1 -0
  1866. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/arm/versions.h +16 -10
  1867. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/arm.h +21 -19
  1868. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/ppc/versions.h +27 -21
  1869. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/ppc.h +21 -19
  1870. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86/versions.h +73 -67
  1871. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86.h +39 -37
  1872. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd/versions.h +24 -19
  1873. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd.h +25 -23
  1874. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd.h +95 -46
  1875. data/src/cxx_supportlib/vendor-modified/boost/predef/language/cuda.h +53 -0
  1876. data/src/cxx_supportlib/vendor-modified/boost/predef/language/objc.h +9 -8
  1877. data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdc.h +11 -10
  1878. data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdcpp.h +41 -34
  1879. data/src/cxx_supportlib/vendor-modified/boost/predef/language.h +1 -0
  1880. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/cloudabi.h +10 -9
  1881. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/gnu.h +12 -11
  1882. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/uc.h +10 -9
  1883. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/vms.h +9 -8
  1884. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/zos.h +10 -9
  1885. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/cxx.h +11 -10
  1886. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/dinkumware.h +11 -10
  1887. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/libcomo.h +10 -9
  1888. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/modena.h +10 -9
  1889. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/msl.h +12 -11
  1890. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/msvc.h +53 -0
  1891. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/roguewave.h +11 -10
  1892. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/sgi.h +10 -9
  1893. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/stdcpp3.h +12 -11
  1894. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/stlport.h +13 -12
  1895. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/vacpp.h +9 -8
  1896. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std.h +1 -0
  1897. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +107 -33
  1898. data/src/cxx_supportlib/vendor-modified/boost/predef/os/aix.h +14 -13
  1899. data/src/cxx_supportlib/vendor-modified/boost/predef/os/amigaos.h +10 -9
  1900. data/src/cxx_supportlib/vendor-modified/boost/predef/os/beos.h +9 -8
  1901. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/bsdi.h +10 -8
  1902. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/dragonfly.h +10 -8
  1903. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/free.h +11 -9
  1904. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/net.h +17 -15
  1905. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/open.h +60 -58
  1906. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd.h +22 -23
  1907. data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +15 -9
  1908. data/src/cxx_supportlib/vendor-modified/boost/predef/os/haiku.h +9 -8
  1909. data/src/cxx_supportlib/vendor-modified/boost/predef/os/hpux.h +11 -10
  1910. data/src/cxx_supportlib/vendor-modified/boost/predef/os/ios.h +12 -11
  1911. data/src/cxx_supportlib/vendor-modified/boost/predef/os/irix.h +10 -9
  1912. data/src/cxx_supportlib/vendor-modified/boost/predef/os/linux.h +14 -10
  1913. data/src/cxx_supportlib/vendor-modified/boost/predef/os/macos.h +14 -13
  1914. data/src/cxx_supportlib/vendor-modified/boost/predef/os/os400.h +9 -8
  1915. data/src/cxx_supportlib/vendor-modified/boost/predef/os/qnxnto.h +12 -11
  1916. data/src/cxx_supportlib/vendor-modified/boost/predef/os/solaris.h +10 -9
  1917. data/src/cxx_supportlib/vendor-modified/boost/predef/os/unix.h +24 -22
  1918. data/src/cxx_supportlib/vendor-modified/boost/predef/os/vms.h +11 -10
  1919. data/src/cxx_supportlib/vendor-modified/boost/predef/os/windows.h +16 -15
  1920. data/src/cxx_supportlib/vendor-modified/boost/predef/os.h +0 -1
  1921. data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +19 -21
  1922. data/src/cxx_supportlib/vendor-modified/boost/predef/other/wordsize.h +73 -0
  1923. data/src/cxx_supportlib/vendor-modified/boost/predef/other/workaround.h +22 -14
  1924. data/src/cxx_supportlib/vendor-modified/boost/predef/other.h +3 -2
  1925. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/android.h +44 -0
  1926. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/cloudabi.h +9 -8
  1927. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/ios.h +14 -9
  1928. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw.h +12 -11
  1929. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw32.h +10 -9
  1930. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw64.h +10 -9
  1931. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_desktop.h +10 -9
  1932. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_phone.h +9 -8
  1933. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_runtime.h +10 -9
  1934. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_server.h +9 -8
  1935. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_store.h +10 -9
  1936. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_system.h +9 -8
  1937. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_uwp.h +12 -11
  1938. data/src/cxx_supportlib/vendor-modified/boost/predef/platform.h +1 -1
  1939. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  1940. data/src/cxx_supportlib/vendor-modified/boost/predef/version_number.h +16 -14
  1941. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/add.hpp +54 -1
  1942. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/dec.hpp +33 -0
  1943. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/is_1_number.hpp +21 -0
  1944. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/is_maximum_number.hpp +22 -0
  1945. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/is_minimum_number.hpp +21 -0
  1946. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/maximum_number.hpp +19 -0
  1947. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/div.hpp +37 -1
  1948. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/inc.hpp +33 -0
  1949. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/dec_1024.hpp +531 -0
  1950. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/dec_256.hpp +276 -0
  1951. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/dec_512.hpp +275 -0
  1952. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/inc_1024.hpp +536 -0
  1953. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/inc_256.hpp +275 -0
  1954. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/inc_512.hpp +280 -0
  1955. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/mod.hpp +37 -1
  1956. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/mul.hpp +60 -1
  1957. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/sub.hpp +51 -1
  1958. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/detail/get_data.hpp +21 -21
  1959. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/enum.hpp +17 -1
  1960. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/insert.hpp +71 -0
  1961. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/remove.hpp +66 -0
  1962. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/replace.hpp +58 -0
  1963. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/to_list.hpp +7 -7
  1964. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/to_seq.hpp +7 -7
  1965. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/to_tuple.hpp +7 -7
  1966. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/limits/not_equal_1024.hpp +1044 -0
  1967. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/limits/not_equal_256.hpp +793 -0
  1968. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/limits/not_equal_512.hpp +532 -0
  1969. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/not_equal.hpp +44 -1
  1970. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +26 -34
  1971. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/limits.hpp +136 -3
  1972. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/deduce_d.hpp +27 -0
  1973. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/dmc/while.hpp +2 -3
  1974. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/limits/while_1024.hpp +1044 -0
  1975. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/limits/while_256.hpp +533 -0
  1976. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/limits/while_512.hpp +532 -0
  1977. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/while.hpp +27 -0
  1978. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/limits/while_1024.hpp +1044 -0
  1979. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/limits/while_256.hpp +533 -0
  1980. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/limits/while_512.hpp +532 -0
  1981. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/while.hpp +27 -0
  1982. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/limits/while_1024.hpp +531 -0
  1983. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/limits/while_256.hpp +275 -0
  1984. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/limits/while_512.hpp +275 -0
  1985. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/while.hpp +75 -0
  1986. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/auto_rec.hpp +41 -0
  1987. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/dmc/auto_rec.hpp +2 -2
  1988. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/limits/auto_rec_1024.hpp +532 -0
  1989. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/limits/auto_rec_256.hpp +280 -0
  1990. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/limits/auto_rec_512.hpp +276 -0
  1991. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/check_empty.hpp +19 -0
  1992. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/detail/is_empty.hpp +3 -3
  1993. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/intercept.hpp +29 -0
  1994. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/is_empty.hpp +0 -37
  1995. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/is_empty_variadic.hpp +28 -5
  1996. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/limits/intercept_1024.hpp +530 -0
  1997. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/limits/intercept_256.hpp +273 -0
  1998. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/limits/intercept_512.hpp +274 -0
  1999. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/overload.hpp +1 -3
  2000. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/va_opt.hpp +34 -0
  2001. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities.hpp +2 -0
  2002. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward1.hpp +27 -0
  2003. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward2.hpp +27 -0
  2004. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward3.hpp +27 -0
  2005. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward4.hpp +27 -0
  2006. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward5.hpp +27 -0
  2007. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward1_1024.hpp +2573 -0
  2008. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward1_256.hpp +1296 -0
  2009. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward1_512.hpp +1293 -0
  2010. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward2_1024.hpp +2573 -0
  2011. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward2_256.hpp +1296 -0
  2012. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward2_512.hpp +1293 -0
  2013. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward3_1024.hpp +2573 -0
  2014. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward3_256.hpp +1296 -0
  2015. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward3_512.hpp +1293 -0
  2016. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward4_1024.hpp +2573 -0
  2017. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward4_256.hpp +1296 -0
  2018. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward4_512.hpp +1293 -0
  2019. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward5_1024.hpp +2573 -0
  2020. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward5_256.hpp +1296 -0
  2021. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward5_512.hpp +1293 -0
  2022. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse1_1024.hpp +2571 -0
  2023. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse1_256.hpp +1296 -0
  2024. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse1_512.hpp +1291 -0
  2025. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse2_1024.hpp +2571 -0
  2026. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse2_256.hpp +1296 -0
  2027. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse2_512.hpp +1293 -0
  2028. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse3_1024.hpp +2571 -0
  2029. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse3_256.hpp +1296 -0
  2030. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse3_512.hpp +1293 -0
  2031. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse4_1024.hpp +2571 -0
  2032. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse4_256.hpp +1296 -0
  2033. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse4_512.hpp +1293 -0
  2034. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse5_1024.hpp +2571 -0
  2035. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse5_256.hpp +1296 -0
  2036. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse5_512.hpp +1293 -0
  2037. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse1.hpp +25 -0
  2038. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse2.hpp +25 -0
  2039. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse3.hpp +25 -0
  2040. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse4.hpp +25 -0
  2041. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse5.hpp +25 -0
  2042. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/local_1024.hpp +1549 -0
  2043. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/local_256.hpp +782 -0
  2044. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/local_512.hpp +781 -0
  2045. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/rlocal_1024.hpp +1549 -0
  2046. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/rlocal_256.hpp +782 -0
  2047. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/rlocal_512.hpp +781 -0
  2048. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/local.hpp +27 -0
  2049. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/rlocal.hpp +25 -0
  2050. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/dmc/fold_left.hpp +3 -2
  2051. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/fold_left.hpp +28 -0
  2052. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/fold_right.hpp +29 -0
  2053. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_left_1024.hpp +1044 -0
  2054. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_left_256.hpp +533 -0
  2055. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_left_512.hpp +532 -0
  2056. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_right_1024.hpp +1557 -0
  2057. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_right_256.hpp +791 -0
  2058. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_right_512.hpp +789 -0
  2059. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/fold_left.hpp +28 -0
  2060. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/fold_right.hpp +26 -0
  2061. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_left_1024.hpp +532 -0
  2062. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_left_256.hpp +275 -0
  2063. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_left_512.hpp +276 -0
  2064. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_right_1024.hpp +532 -0
  2065. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_right_256.hpp +275 -0
  2066. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_right_512.hpp +276 -0
  2067. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/enum.hpp +13 -1
  2068. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/fold_left.hpp +60 -0
  2069. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/fold_right.hpp +44 -0
  2070. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/for_each_product.hpp +25 -6
  2071. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/limits/fold_left_1024.hpp +531 -0
  2072. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/limits/fold_left_256.hpp +275 -0
  2073. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/limits/fold_left_512.hpp +275 -0
  2074. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/reverse.hpp +35 -0
  2075. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/size.hpp +56 -1
  2076. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/to_array.hpp +21 -88
  2077. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/to_tuple.hpp +14 -14
  2078. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/bool.hpp +22 -0
  2079. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/limits/bool_1024.hpp +531 -0
  2080. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/limits/bool_256.hpp +275 -0
  2081. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/limits/bool_512.hpp +275 -0
  2082. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/punctuation/is_begin_parens.hpp +1 -5
  2083. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/punctuation/remove_parens.hpp +0 -4
  2084. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/deduce_r.hpp +27 -0
  2085. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/dmc/for.hpp +3 -2
  2086. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/for.hpp +26 -0
  2087. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/limits/for_1024.hpp +1044 -0
  2088. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/limits/for_256.hpp +533 -0
  2089. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/limits/for_512.hpp +532 -0
  2090. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/for.hpp +28 -0
  2091. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/limits/for_1024.hpp +1044 -0
  2092. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/limits/for_256.hpp +533 -0
  2093. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/limits/for_512.hpp +532 -0
  2094. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/msvc/for.hpp +1 -0
  2095. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/for.hpp +121 -7
  2096. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/for_1024.hpp +531 -0
  2097. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/for_256.hpp +275 -0
  2098. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/for_512.hpp +275 -0
  2099. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/repeat_1024.hpp +1557 -0
  2100. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/repeat_256.hpp +791 -0
  2101. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/repeat_512.hpp +789 -0
  2102. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/repeat.hpp +22 -0
  2103. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/repeat_from_to.hpp +27 -0
  2104. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/binary_transform.hpp +6 -11
  2105. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/is_empty.hpp +11 -11
  2106. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/limits/split_1024.hpp +530 -0
  2107. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/limits/split_256.hpp +272 -0
  2108. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/limits/split_512.hpp +274 -0
  2109. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/split.hpp +23 -0
  2110. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/elem.hpp +23 -0
  2111. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/enum.hpp +23 -0
  2112. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/fold_left.hpp +52 -0
  2113. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/fold_right.hpp +37 -0
  2114. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/for_each.hpp +27 -27
  2115. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/for_each_i.hpp +28 -28
  2116. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/elem_1024.hpp +530 -0
  2117. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/elem_256.hpp +272 -0
  2118. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/elem_512.hpp +274 -0
  2119. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/enum_1024.hpp +530 -0
  2120. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/enum_256.hpp +272 -0
  2121. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/enum_512.hpp +274 -0
  2122. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_left_1024.hpp +1556 -0
  2123. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_left_256.hpp +1053 -0
  2124. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_left_512.hpp +788 -0
  2125. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_right_1024.hpp +530 -0
  2126. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_right_256.hpp +273 -0
  2127. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_right_512.hpp +274 -0
  2128. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/size_1024.hpp +1043 -0
  2129. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/size_256.hpp +532 -0
  2130. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/size_512.hpp +531 -0
  2131. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/replace.hpp +7 -7
  2132. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/rest_n.hpp +16 -10
  2133. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/size.hpp +23 -0
  2134. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/variadic_seq_to_seq.hpp +0 -2
  2135. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/stringize.hpp +1 -1
  2136. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/detail/is_single_return.hpp +5 -5
  2137. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/eat.hpp +4 -18
  2138. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/elem.hpp +11 -157
  2139. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/insert.hpp +2 -7
  2140. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/reverse_128.hpp +403 -0
  2141. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/reverse_256.hpp +1171 -0
  2142. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/reverse_64.hpp +83 -0
  2143. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_list_128.hpp +595 -0
  2144. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_list_256.hpp +1747 -0
  2145. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_list_64.hpp +83 -0
  2146. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_128.hpp +403 -0
  2147. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_256.hpp +1171 -0
  2148. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_64.hpp +84 -0
  2149. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/pop_back.hpp +16 -21
  2150. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/pop_front.hpp +16 -21
  2151. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/push_back.hpp +1 -6
  2152. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/push_front.hpp +1 -7
  2153. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/rem.hpp +21 -43
  2154. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/remove.hpp +16 -21
  2155. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/replace.hpp +2 -7
  2156. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/reverse.hpp +38 -25
  2157. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/size.hpp +13 -6
  2158. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_array.hpp +15 -12
  2159. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_list.hpp +37 -25
  2160. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_seq.hpp +38 -24
  2161. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/detail/has_opt.hpp +39 -0
  2162. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/detail/is_single_return.hpp +5 -5
  2163. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/elem.hpp +93 -71
  2164. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +34 -0
  2165. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/elem_128.hpp +275 -0
  2166. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/elem_256.hpp +723 -0
  2167. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/elem_64.hpp +81 -0
  2168. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/size_128.hpp +47 -0
  2169. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/size_256.hpp +53 -0
  2170. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/size_64.hpp +23 -0
  2171. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/size.hpp +39 -4
  2172. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_array.hpp +15 -9
  2173. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_list.hpp +9 -2
  2174. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_seq.hpp +1 -3
  2175. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_tuple.hpp +1 -3
  2176. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic.hpp +1 -0
  2177. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/wstringize.hpp +1 -1
  2178. data/src/cxx_supportlib/vendor-modified/boost/random/additive_combine.hpp +2 -2
  2179. data/src/cxx_supportlib/vendor-modified/boost/random/detail/gray_coded_qrng.hpp +190 -0
  2180. data/src/cxx_supportlib/vendor-modified/boost/random/detail/int_float_pair.hpp +3 -4
  2181. data/src/cxx_supportlib/vendor-modified/boost/random/detail/integer_log2.hpp +1 -1
  2182. data/src/cxx_supportlib/vendor-modified/boost/random/detail/mixmax_skip_N17.ipp +287 -0
  2183. data/src/cxx_supportlib/vendor-modified/boost/random/detail/niederreiter_base2_table.hpp +514 -0
  2184. data/src/cxx_supportlib/vendor-modified/boost/random/detail/operators.hpp +1 -1
  2185. data/src/cxx_supportlib/vendor-modified/boost/random/detail/qrng_base.hpp +291 -0
  2186. data/src/cxx_supportlib/vendor-modified/boost/random/detail/seed.hpp +9 -11
  2187. data/src/cxx_supportlib/vendor-modified/boost/random/detail/seed_impl.hpp +13 -14
  2188. data/src/cxx_supportlib/vendor-modified/boost/random/detail/sobol_table.hpp +4107 -0
  2189. data/src/cxx_supportlib/vendor-modified/boost/random/discard_block.hpp +2 -2
  2190. data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +4 -0
  2191. data/src/cxx_supportlib/vendor-modified/boost/random/faure.hpp +367 -0
  2192. data/src/cxx_supportlib/vendor-modified/boost/random/generate_canonical.hpp +2 -3
  2193. data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +3 -3
  2194. data/src/cxx_supportlib/vendor-modified/boost/random/independent_bits.hpp +3 -3
  2195. data/src/cxx_supportlib/vendor-modified/boost/random/inversive_congruential.hpp +3 -4
  2196. data/src/cxx_supportlib/vendor-modified/boost/random/lagged_fibonacci.hpp +4 -4
  2197. data/src/cxx_supportlib/vendor-modified/boost/random/linear_congruential.hpp +5 -7
  2198. data/src/cxx_supportlib/vendor-modified/boost/random/linear_feedback_shift.hpp +3 -3
  2199. data/src/cxx_supportlib/vendor-modified/boost/random/mersenne_twister.hpp +2 -2
  2200. data/src/cxx_supportlib/vendor-modified/boost/random/mixmax.hpp +313 -0
  2201. data/src/cxx_supportlib/vendor-modified/boost/random/niederreiter_base2.hpp +360 -0
  2202. data/src/cxx_supportlib/vendor-modified/boost/random/random_device.hpp +2 -2
  2203. data/src/cxx_supportlib/vendor-modified/boost/random/shuffle_order.hpp +2 -2
  2204. data/src/cxx_supportlib/vendor-modified/boost/random/sobol.hpp +238 -0
  2205. data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +203 -0
  2206. data/src/cxx_supportlib/vendor-modified/boost/random/subtract_with_carry.hpp +18 -18
  2207. data/src/cxx_supportlib/vendor-modified/boost/random/traits.hpp +3 -3
  2208. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int_distribution.hpp +7 -7
  2209. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real_distribution.hpp +4 -5
  2210. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_smallint.hpp +4 -5
  2211. data/src/cxx_supportlib/vendor-modified/boost/random/xor_combine.hpp +4 -2
  2212. data/src/cxx_supportlib/vendor-modified/boost/random.hpp +2 -0
  2213. data/src/cxx_supportlib/vendor-modified/boost/range/as_literal.hpp +43 -6
  2214. data/src/cxx_supportlib/vendor-modified/boost/range/begin.hpp +17 -15
  2215. data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +2 -2
  2216. data/src/cxx_supportlib/vendor-modified/boost/range/config.hpp +1 -1
  2217. data/src/cxx_supportlib/vendor-modified/boost/range/detail/common.hpp +1 -3
  2218. data/src/cxx_supportlib/vendor-modified/boost/range/detail/implementation_help.hpp +2 -2
  2219. data/src/cxx_supportlib/vendor-modified/boost/range/distance.hpp +11 -5
  2220. data/src/cxx_supportlib/vendor-modified/boost/range/end.hpp +18 -16
  2221. data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +3 -3
  2222. data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +0 -32
  2223. data/src/cxx_supportlib/vendor-modified/boost/range/rbegin.hpp +0 -13
  2224. data/src/cxx_supportlib/vendor-modified/boost/range/rend.hpp +0 -13
  2225. data/src/cxx_supportlib/vendor-modified/boost/range/size.hpp +1 -1
  2226. data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +4 -78
  2227. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/gcd_lcm.hpp +53 -0
  2228. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_evenly_divisible_by.hpp +32 -0
  2229. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_ratio.hpp +28 -0
  2230. data/src/cxx_supportlib/vendor-modified/boost/ratio/include.hpp +1 -3
  2231. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio.hpp +5 -249
  2232. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_fwd.hpp +30 -56
  2233. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_io.hpp +0 -533
  2234. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +95 -51
  2235. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +82 -76
  2236. data/src/cxx_supportlib/vendor-modified/boost/regex/config/borland.hpp +1 -1
  2237. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +104 -101
  2238. data/src/cxx_supportlib/vendor-modified/boost/regex/pattern_except.hpp +4 -72
  2239. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +4 -140
  2240. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +8 -761
  2241. data/src/cxx_supportlib/vendor-modified/boost/regex/regex_traits.hpp +4 -0
  2242. data/src/cxx_supportlib/vendor-modified/boost/regex/user.hpp +2 -0
  2243. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +32 -16
  2244. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +50 -25
  2245. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +64 -30
  2246. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/c_regex_traits.hpp +342 -42
  2247. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +111 -28
  2248. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cregex.hpp +0 -117
  2249. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +1516 -0
  2250. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/indexed_bit_flag.hpp +54 -0
  2251. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +18 -7
  2252. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +21 -12
  2253. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +39 -1
  2254. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/object_cache.hpp +171 -0
  2255. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +128 -0
  2256. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +42 -18
  2257. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +24 -10
  2258. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +57 -54
  2259. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +12 -12
  2260. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/primary_transform.hpp +1 -1
  2261. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/protected_call.hpp +3 -1
  2262. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex.hpp +0 -36
  2263. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +10 -8
  2264. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +2 -8
  2265. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +38 -7
  2266. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +3 -1
  2267. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +9 -15
  2268. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +1 -1
  2269. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +653 -36
  2270. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -4
  2271. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/states.hpp +1 -1
  2272. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/sub_match.hpp +1 -1
  2273. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +1 -9
  2274. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +3 -11
  2275. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/unicode_iterator.hpp +871 -0
  2276. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +526 -40
  2277. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex.hpp +734 -0
  2278. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +1576 -0
  2279. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +3130 -0
  2280. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/c_regex_traits.hpp +474 -0
  2281. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/char_regex_traits.hpp +59 -0
  2282. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cpp_regex_traits.hpp +1040 -0
  2283. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cregex.hpp +195 -0
  2284. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/error_type.hpp +59 -0
  2285. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +1402 -0
  2286. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_category.hpp +84 -0
  2287. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_traits.hpp +32 -0
  2288. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_flags.hpp +156 -0
  2289. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_results.hpp +667 -0
  2290. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +173 -0
  2291. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/object_cache.hpp +160 -0
  2292. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +106 -0
  2293. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher.hpp +576 -0
  2294. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +921 -0
  2295. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +1874 -0
  2296. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/primary_transform.hpp +120 -0
  2297. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regbase.hpp +158 -0
  2298. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex.hpp +106 -0
  2299. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_format.hpp +1124 -0
  2300. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_fwd.hpp +73 -0
  2301. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_grep.hpp +98 -0
  2302. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_iterator.hpp +173 -0
  2303. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_match.hpp +92 -0
  2304. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_merge.hpp +71 -0
  2305. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_raw_buffer.hpp +213 -0
  2306. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_replace.hpp +77 -0
  2307. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_search.hpp +103 -0
  2308. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_split.hpp +152 -0
  2309. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_token_iterator.hpp +255 -0
  2310. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits.hpp +130 -0
  2311. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits_defaults.hpp +996 -0
  2312. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +159 -0
  2313. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/states.hpp +299 -0
  2314. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/sub_match.hpp +382 -0
  2315. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/syntax_type.hpp +105 -0
  2316. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_iterator.hpp +177 -0
  2317. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_token_iterator.hpp +312 -0
  2318. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/unicode_iterator.hpp +862 -0
  2319. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +1311 -0
  2320. data/src/cxx_supportlib/vendor-modified/boost/regex.hpp +4 -0
  2321. data/src/cxx_supportlib/vendor-modified/boost/regex_fwd.hpp +4 -0
  2322. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +94 -444
  2323. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +5 -5
  2324. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +8 -4
  2325. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc.hpp +7 -0
  2326. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +63 -0
  2327. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +11 -0
  2328. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_nt.hpp +7 -0
  2329. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_pt.hpp +7 -0
  2330. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_spin.hpp +7 -0
  2331. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_std_atomic.hpp +8 -1
  2332. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_sync.hpp +13 -2
  2333. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +9 -9
  2334. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_sp_deleter.hpp +3 -3
  2335. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +23 -0
  2336. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +88 -48
  2337. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_convertible.hpp +1 -1
  2338. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +12 -16
  2339. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +15 -4
  2340. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +12 -4
  2341. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +17 -4
  2342. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +148 -0
  2343. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +15 -4
  2344. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +15 -4
  2345. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +15 -4
  2346. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +15 -4
  2347. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +15 -4
  2348. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +27 -17
  2349. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +18 -9
  2350. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +16 -5
  2351. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +12 -4
  2352. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +27 -18
  2353. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +12 -4
  2354. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +15 -4
  2355. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +48 -31
  2356. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +30 -0
  2357. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +69 -0
  2358. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_typeinfo_.hpp +58 -0
  2359. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +7 -9
  2360. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +7 -0
  2361. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_atomic.hpp +94 -0
  2362. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_nt.hpp +7 -0
  2363. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_pt.hpp +7 -0
  2364. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_std_atomic.hpp +13 -5
  2365. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_sync.hpp +8 -1
  2366. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +13 -141
  2367. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +1 -0
  2368. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +49 -12
  2369. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared.hpp +1 -0
  2370. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +23 -22
  2371. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +2 -1
  2372. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_unique.hpp +70 -0
  2373. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +3 -2
  2374. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +3 -2
  2375. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +6 -4
  2376. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +120 -40
  2377. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +80 -8
  2378. data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +5 -4
  2379. data/src/cxx_supportlib/vendor-modified/boost/system/config.hpp +4 -24
  2380. data/src/cxx_supportlib/vendor-modified/boost/system/detail/append_int.hpp +32 -0
  2381. data/src/cxx_supportlib/vendor-modified/boost/system/detail/cerrno.hpp +329 -0
  2382. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +83 -0
  2383. data/src/cxx_supportlib/vendor-modified/boost/system/detail/enable_if.hpp +23 -0
  2384. data/src/cxx_supportlib/vendor-modified/boost/system/detail/errc.hpp +126 -0
  2385. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +183 -0
  2386. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +166 -0
  2387. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +659 -0
  2388. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +326 -0
  2389. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +123 -0
  2390. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +120 -0
  2391. data/src/cxx_supportlib/vendor-modified/boost/system/detail/interop_category.hpp +107 -0
  2392. data/src/cxx_supportlib/vendor-modified/boost/system/detail/is_same.hpp +23 -0
  2393. data/src/cxx_supportlib/vendor-modified/boost/system/detail/mutex.hpp +128 -0
  2394. data/src/cxx_supportlib/vendor-modified/boost/system/detail/snprintf.hpp +28 -0
  2395. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category.hpp +84 -0
  2396. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category_impl.hpp +97 -0
  2397. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category.hpp +110 -0
  2398. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_impl.hpp +61 -0
  2399. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_message.hpp +71 -0
  2400. data/src/cxx_supportlib/vendor-modified/boost/system/detail/throws.hpp +59 -0
  2401. data/src/cxx_supportlib/vendor-modified/boost/system/errc.hpp +57 -0
  2402. data/src/cxx_supportlib/vendor-modified/boost/system/error_category.hpp +13 -0
  2403. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +12 -760
  2404. data/src/cxx_supportlib/vendor-modified/boost/system/error_condition.hpp +13 -0
  2405. data/src/cxx_supportlib/vendor-modified/boost/system/generic_category.hpp +13 -0
  2406. data/src/cxx_supportlib/vendor-modified/boost/system/is_error_code_enum.hpp +30 -0
  2407. data/src/cxx_supportlib/vendor-modified/boost/system/is_error_condition_enum.hpp +30 -0
  2408. data/src/cxx_supportlib/vendor-modified/boost/system/system_category.hpp +14 -0
  2409. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +30 -59
  2410. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/deque_adaptor.hpp +1 -1
  2411. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/deque_base.hpp +1 -1
  2412. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +9 -21
  2413. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +9 -21
  2414. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_adaptor.hpp +1 -1
  2415. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_base.hpp +1 -1
  2416. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_op_status.hpp +3 -1
  2417. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_bounded_queue.hpp +1 -1
  2418. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_deque.hpp +3 -3
  2419. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_priority_queue.hpp +4 -4
  2420. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_queue.hpp +3 -3
  2421. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_timed_queue.hpp +80 -14
  2422. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/deque.hpp +1 -24
  2423. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/functional.hpp +1 -14
  2424. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/list.hpp +1 -14
  2425. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_arg.hpp +2 -12
  2426. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_traits.hpp +0 -11
  2427. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/config.hpp +0 -2
  2428. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/default_delete.hpp +0 -16
  2429. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/pointer_traits.hpp +0 -11
  2430. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/scoped_allocator.hpp +0 -11
  2431. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/shared_ptr.hpp +0 -19
  2432. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/unique_ptr.hpp +4 -6
  2433. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/queue.hpp +1 -24
  2434. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/tuple.hpp +1 -18
  2435. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/vector.hpp +1 -14
  2436. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +18 -3
  2437. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/invoke.hpp +27 -21
  2438. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/move.hpp +13 -6
  2439. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/nullary_function.hpp +8 -3
  2440. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/platform_time.hpp +8 -8
  2441. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_to_unsigned.hpp +55 -0
  2442. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_trim.hpp +29 -0
  2443. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +33 -12
  2444. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread_safety.hpp +160 -0
  2445. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/tss_hooks.hpp +2 -2
  2446. data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +3 -3
  2447. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/basic_thread_pool.hpp +27 -1
  2448. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor.hpp +2 -0
  2449. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor_adaptor.hpp +2 -0
  2450. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/generic_executor_ref.hpp +2 -0
  2451. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/inline_executor.hpp +8 -0
  2452. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/loop_executor.hpp +4 -0
  2453. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduled_thread_pool.hpp +4 -0
  2454. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduler.hpp +2 -0
  2455. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduling_adaptor.hpp +3 -0
  2456. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/serial_executor.hpp +4 -0
  2457. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/serial_executor_cont.hpp +9 -2
  2458. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/thread_executor.hpp +6 -0
  2459. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/work.hpp +3 -1
  2460. data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v2/task_region.hpp +6 -2
  2461. data/src/cxx_supportlib/vendor-modified/boost/thread/externally_locked.hpp +6 -5
  2462. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +12 -3
  2463. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_any.hpp +4 -2
  2464. data/src/cxx_supportlib/vendor-modified/boost/thread/interruption.hpp +22 -0
  2465. data/src/cxx_supportlib/vendor-modified/boost/thread/lock_guard.hpp +4 -4
  2466. data/src/cxx_supportlib/vendor-modified/boost/thread/lockable_traits.hpp +31 -0
  2467. data/src/cxx_supportlib/vendor-modified/boost/thread/poly_lockable.hpp +7 -2
  2468. data/src/cxx_supportlib/vendor-modified/boost/thread/poly_shared_lockable.hpp +16 -12
  2469. data/src/cxx_supportlib/vendor-modified/boost/thread/poly_shared_lockable_adapter.hpp +3 -4
  2470. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +20 -26
  2471. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +8 -15
  2472. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/mutex.hpp +17 -88
  2473. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once.hpp +29 -28
  2474. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once_atomic.hpp +1 -1
  2475. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_helpers.hpp +163 -18
  2476. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +5 -4
  2477. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/recursive_mutex.hpp +25 -25
  2478. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +1 -1
  2479. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +21 -13
  2480. data/src/cxx_supportlib/vendor-modified/boost/thread/scoped_thread.hpp +9 -0
  2481. data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +4 -4
  2482. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_guard.hpp +5 -0
  2483. data/src/cxx_supportlib/vendor-modified/boost/thread/tss.hpp +23 -41
  2484. data/src/cxx_supportlib/vendor-modified/boost/thread/user_scheduler.hpp +3 -0
  2485. data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +1 -1
  2486. data/src/cxx_supportlib/vendor-modified/boost/thread/xtime.hpp +6 -6
  2487. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +232 -56
  2488. data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +3 -2
  2489. data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +35 -30
  2490. data/src/cxx_supportlib/vendor-modified/boost/tuple/tuple.hpp +52 -1
  2491. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_pointer.hpp +1 -1
  2492. data/src/cxx_supportlib/vendor-modified/boost/type_traits/aligned_storage.hpp +1 -1
  2493. data/src/cxx_supportlib/vendor-modified/boost/type_traits/alignment_of.hpp +3 -3
  2494. data/src/cxx_supportlib/vendor-modified/boost/type_traits/conjunction.hpp +40 -0
  2495. data/src/cxx_supportlib/vendor-modified/boost/type_traits/copy_cv_ref.hpp +31 -0
  2496. data/src/cxx_supportlib/vendor-modified/boost/type_traits/copy_reference.hpp +35 -0
  2497. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +3 -1
  2498. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +36 -3
  2499. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/detector.hpp +1 -1
  2500. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_binary_operator.hpp +6 -6
  2501. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_postfix_operator.hpp +55 -0
  2502. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_prefix_operator.hpp +72 -0
  2503. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_03.hpp +108 -0
  2504. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_11.hpp +676 -0
  2505. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_msvc10_fix.hpp +30 -0
  2506. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +27 -27
  2507. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_tester.hpp +415 -255
  2508. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_likely_lambda.hpp +4 -3
  2509. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +27 -27
  2510. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp +1345 -1542
  2511. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_03.hpp +117 -0
  2512. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_11.hpp +697 -0
  2513. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_rvalue_reference_msvc10_fix.hpp +43 -0
  2514. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_swappable_cxx_11.hpp +70 -0
  2515. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected.hpp +1 -1
  2516. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected_or.hpp +1 -1
  2517. data/src/cxx_supportlib/vendor-modified/boost/type_traits/disjunction.hpp +40 -0
  2518. data/src/cxx_supportlib/vendor-modified/boost/type_traits/enable_if.hpp +37 -0
  2519. data/src/cxx_supportlib/vendor-modified/boost/type_traits/extent.hpp +2 -2
  2520. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_dereference.hpp +344 -0
  2521. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus.hpp +11 -6
  2522. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus_assign.hpp +11 -6
  2523. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_copy.hpp +1 -1
  2524. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus_assign.hpp +11 -6
  2525. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_decrement.hpp +21 -0
  2526. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_increment.hpp +21 -0
  2527. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_decrement.hpp +21 -0
  2528. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_increment.hpp +22 -0
  2529. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +1 -1
  2530. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +2 -1
  2531. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +6 -16
  2532. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_promotion.hpp +2 -2
  2533. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +39 -15
  2534. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_array.hpp +2 -2
  2535. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_base_and_derived.hpp +2 -2
  2536. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_bounded_array.hpp +42 -0
  2537. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +6 -3
  2538. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_compound.hpp +1 -1
  2539. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_const.hpp +1 -1
  2540. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_constructible.hpp +1 -1
  2541. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_convertible.hpp +4 -4
  2542. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_assignable.hpp +3 -4
  2543. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_constructible.hpp +4 -6
  2544. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_default_constructible.hpp +1 -1
  2545. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_destructible.hpp +1 -1
  2546. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected.hpp +1 -1
  2547. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_convertible.hpp +1 -1
  2548. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_exact.hpp +1 -1
  2549. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_empty.hpp +4 -4
  2550. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_enum.hpp +4 -4
  2551. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_final.hpp +1 -1
  2552. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_floating_point.hpp +22 -0
  2553. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_function.hpp +4 -79
  2554. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_fundamental.hpp +1 -1
  2555. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_integral.hpp +6 -3
  2556. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_lvalue_reference.hpp +1 -1
  2557. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_function_pointer.hpp +3 -97
  2558. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_pointer.hpp +1 -1
  2559. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_noncopyable.hpp +39 -0
  2560. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +2 -2
  2561. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +2 -2
  2562. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_swappable.hpp +4 -24
  2563. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_pointer.hpp +1 -1
  2564. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +4 -0
  2565. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_same.hpp +1 -1
  2566. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_scoped_enum.hpp +26 -0
  2567. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_signed.hpp +2 -2
  2568. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_swappable.hpp +92 -0
  2569. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_trivially_copyable.hpp +31 -0
  2570. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_unbounded_array.hpp +41 -0
  2571. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_unscoped_enum.hpp +25 -0
  2572. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_unsigned.hpp +2 -2
  2573. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +105 -64
  2574. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_volatile.hpp +1 -1
  2575. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_void.hpp +1 -1
  2576. data/src/cxx_supportlib/vendor-modified/boost/type_traits/negation.hpp +23 -0
  2577. data/src/cxx_supportlib/vendor-modified/boost/type_traits/nonesuch.hpp +1 -1
  2578. data/src/cxx_supportlib/vendor-modified/boost/type_traits/rank.hpp +4 -4
  2579. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_all_extents.hpp +1 -1
  2580. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_const.hpp +1 -1
  2581. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv.hpp +1 -1
  2582. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_extent.hpp +1 -1
  2583. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_volatile.hpp +1 -1
  2584. data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +3 -3
  2585. data/src/cxx_supportlib/vendor-modified/boost/typeof/constant.hpp +26 -0
  2586. data/src/cxx_supportlib/vendor-modified/boost/typeof/decltype.hpp +2 -3
  2587. data/src/cxx_supportlib/vendor-modified/boost/typeof/incr_registration_group.hpp +1 -10
  2588. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +9 -10
  2589. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/bitset.hpp +2 -4
  2590. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/complex.hpp +2 -4
  2591. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/deque.hpp +2 -5
  2592. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/fstream.hpp +2 -15
  2593. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/functional.hpp +4 -51
  2594. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iostream.hpp +2 -6
  2595. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/istream.hpp +2 -9
  2596. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iterator.hpp +2 -46
  2597. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/list.hpp +2 -5
  2598. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/locale.hpp +2 -29
  2599. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/map.hpp +2 -9
  2600. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/memory.hpp +4 -9
  2601. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/ostream.hpp +2 -6
  2602. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/queue.hpp +2 -5
  2603. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/set.hpp +2 -9
  2604. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/sstream.hpp +2 -19
  2605. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/stack.hpp +2 -5
  2606. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/streambuf.hpp +2 -5
  2607. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/string.hpp +2 -12
  2608. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/utility.hpp +2 -4
  2609. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/valarray.hpp +2 -10
  2610. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/vector.hpp +2 -5
  2611. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof.hpp +8 -202
  2612. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +872 -0
  2613. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +66 -0
  2614. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +728 -0
  2615. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +67 -0
  2616. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocator_constructed.hpp +59 -0
  2617. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/archive_constructed.hpp +71 -0
  2618. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/bad_archive_exception.hpp +27 -0
  2619. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/concurrent_static_asserts.hpp +105 -0
  2620. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +900 -0
  2621. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +1792 -0
  2622. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2380 -0
  2623. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
  2624. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/element_type.hpp +64 -0
  2625. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_map_types.hpp +86 -0
  2626. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_set_types.hpp +44 -0
  2627. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/ignore_wshadow.hpp +35 -0
  2628. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_handle.hpp +204 -0
  2629. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_map_types.hpp +139 -0
  2630. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_set_types.hpp +92 -0
  2631. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/reentrancy_check.hpp +138 -0
  2632. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/restore_wshadow.hpp +11 -0
  2633. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/rw_spinlock.hpp +179 -0
  2634. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +661 -0
  2635. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/tuple_rotate_right.hpp +52 -0
  2636. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +1462 -3502
  2637. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +10 -14
  2638. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/mulx.hpp +129 -0
  2639. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/narrow_cast.hpp +44 -0
  2640. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/opt_storage.hpp +30 -0
  2641. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +214 -0
  2642. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialization_version.hpp +74 -0
  2643. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_container.hpp +204 -0
  2644. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_fca_container.hpp +156 -0
  2645. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_tracked_address.hpp +104 -0
  2646. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +8 -13
  2647. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/static_assert.hpp +16 -0
  2648. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/throw_exception.hpp +30 -0
  2649. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +226 -0
  2650. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/xmx.hpp +75 -0
  2651. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +70 -0
  2652. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +812 -0
  2653. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +59 -0
  2654. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +622 -0
  2655. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +58 -0
  2656. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +768 -1002
  2657. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +35 -13
  2658. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +907 -0
  2659. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +59 -0
  2660. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +711 -0
  2661. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +58 -0
  2662. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +547 -672
  2663. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +35 -15
  2664. data/src/cxx_supportlib/vendor-modified/boost/utility/base_from_member.hpp +2 -1
  2665. data/src/cxx_supportlib/vendor-modified/boost/utility/binary.hpp +3 -2
  2666. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +4 -43
  2667. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/result_of_iterate.hpp +3 -3
  2668. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/result_of_variadic.hpp +190 -0
  2669. data/src/cxx_supportlib/vendor-modified/boost/utility/in_place_factory.hpp +6 -0
  2670. data/src/cxx_supportlib/vendor-modified/boost/utility/result_of.hpp +33 -11
  2671. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +11 -44
  2672. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +56 -52
  2673. data/src/cxx_supportlib/vendor-modified/boost/utility/swap.hpp +4 -1
  2674. data/src/cxx_supportlib/vendor-modified/boost/utility/typed_in_place_factory.hpp +6 -1
  2675. data/src/cxx_supportlib/vendor-modified/boost/utility/value_init.hpp +41 -75
  2676. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  2677. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +2 -9
  2678. data/src/cxx_supportlib/vendor-modified/modp_b64_data.h +0 -4
  2679. data/src/cxx_supportlib/vendor-modified/modp_b64_strict_aliasing.cpp +7 -3
  2680. data/src/cxx_supportlib/vendor-modified/websocketpp/changelog.md +444 -0
  2681. data/src/cxx_supportlib/vendor-modified/websocketpp/readme.md +49 -0
  2682. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/close.hpp +353 -0
  2683. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/asio.hpp +141 -0
  2684. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/functional.hpp +100 -0
  2685. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/md5.hpp +448 -0
  2686. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/memory.hpp +88 -0
  2687. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/thread.hpp +88 -0
  2688. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/core.hpp +297 -0
  2689. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/connection.hpp +1642 -0
  2690. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/endpoint.hpp +700 -0
  2691. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp +129 -0
  2692. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/extensions/permessage_deflate/enabled.hpp +817 -0
  2693. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/frame.hpp +853 -0
  2694. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/impl/parser.hpp +200 -0
  2695. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/parser.hpp +629 -0
  2696. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/impl/connection_impl.hpp +2375 -0
  2697. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/impl/endpoint_impl.hpp +269 -0
  2698. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/base.hpp +299 -0
  2699. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi13.hpp +1072 -0
  2700. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/roles/client_endpoint.hpp +173 -0
  2701. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/roles/server_endpoint.hpp +195 -0
  2702. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/sha1/sha1.hpp +189 -0
  2703. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/connection.hpp +1197 -0
  2704. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/endpoint.hpp +1182 -0
  2705. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/security/none.hpp +372 -0
  2706. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/security/tls.hpp +474 -0
  2707. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/base/endpoint.hpp +77 -0
  2708. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/debug/connection.hpp +412 -0
  2709. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/debug/endpoint.hpp +140 -0
  2710. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/iostream/connection.hpp +714 -0
  2711. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/iostream/endpoint.hpp +222 -0
  2712. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/stub/connection.hpp +286 -0
  2713. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/uri.hpp +356 -0
  2714. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/utilities.hpp +180 -0
  2715. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/version.hpp +61 -0
  2716. data/src/helper-scripts/backtrace-sanitizer.rb +2 -2
  2717. data/src/helper-scripts/crash-watch.rb +1 -1
  2718. data/src/helper-scripts/download_binaries/extconf.rb +2 -2
  2719. data/src/helper-scripts/meteor-loader.rb +9 -4
  2720. data/src/helper-scripts/node-loader.js +3 -3
  2721. data/src/helper-scripts/prespawn +3 -2
  2722. data/src/helper-scripts/rack-loader.rb +2 -2
  2723. data/src/helper-scripts/rack-preloader.rb +2 -2
  2724. data/src/helper-scripts/wsgi-loader.py +36 -19
  2725. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +98 -2
  2726. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c.cxxcodebuilder +2 -2
  2727. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +59 -2
  2728. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c.cxxcodebuilder +2 -2
  2729. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +122 -2
  2730. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c.cxxcodebuilder +2 -2
  2731. data/src/nginx_module/ConfigGeneral/ManifestGeneration.c +2 -2
  2732. data/src/nginx_module/Configuration.c +40 -11
  2733. data/src/nginx_module/Configuration.h +1 -1
  2734. data/src/nginx_module/ContentHandler.c +306 -24
  2735. data/src/nginx_module/ContentHandler.h +6 -1
  2736. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +49 -2
  2737. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder +2 -2
  2738. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +86 -2
  2739. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c.cxxcodebuilder +2 -2
  2740. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +111 -2
  2741. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +2 -2
  2742. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +23 -2
  2743. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c.cxxcodebuilder +2 -2
  2744. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +36 -2
  2745. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -2
  2746. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +18 -2
  2747. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder +2 -2
  2748. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +36 -2
  2749. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +2 -2
  2750. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +14 -2
  2751. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -2
  2752. data/src/nginx_module/StaticContentHandler.c +1 -1
  2753. data/src/nginx_module/StaticContentHandler.h +1 -1
  2754. data/src/nginx_module/config +2 -0
  2755. data/src/nginx_module/ngx_http_passenger_module.c +7 -4
  2756. data/src/nginx_module/ngx_http_passenger_module.h +6 -1
  2757. data/src/nodejs_supportlib/phusion_passenger/line_reader.js +2 -2
  2758. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/common.js +50 -29
  2759. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/cli-config.js +20 -20
  2760. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/npm-config.js +11 -11
  2761. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/syslog-config.js +3 -3
  2762. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config.js +8 -2
  2763. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/container.js +2 -1
  2764. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/logger.js +174 -146
  2765. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/console.js +4 -2
  2766. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/file.js +15 -5
  2767. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/http.js +14 -4
  2768. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports.js +26 -24
  2769. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston.js +5 -5
  2770. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/async/package.json +4 -13
  2771. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/package.json +19 -33
  2772. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/cycle/package.json +11 -29
  2773. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/eyes/package.json +12 -40
  2774. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/isstream/package.json +3 -12
  2775. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/stack-trace/lib/stack-trace.js +49 -24
  2776. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/stack-trace/package.json +4 -16
  2777. data/src/nodejs_supportlib/vendor-copy/winston/package.json +11 -55
  2778. data/src/ruby_native_extension/extconf.rb +9 -2
  2779. data/src/ruby_native_extension/passenger_native_support.c +3 -2
  2780. data/src/ruby_supportlib/phusion_passenger/abstract_installer.rb +2 -2
  2781. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance.rb +2 -2
  2782. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +15 -3
  2783. data/src/ruby_supportlib/phusion_passenger/admin_tools/memory_stats.rb +3 -3
  2784. data/src/ruby_supportlib/phusion_passenger/admin_tools.rb +3 -3
  2785. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +55 -2
  2786. data/src/ruby_supportlib/phusion_passenger/apache2/config_utils.rb +2 -2
  2787. data/src/ruby_supportlib/phusion_passenger/common_library.rb +19 -6
  2788. data/src/ruby_supportlib/phusion_passenger/config/about_command.rb +2 -2
  2789. data/src/ruby_supportlib/phusion_passenger/config/agent_compiler.rb +2 -2
  2790. data/src/ruby_supportlib/phusion_passenger/config/api_call_command.rb +2 -2
  2791. data/src/ruby_supportlib/phusion_passenger/config/build_native_support_command.rb +2 -2
  2792. data/src/ruby_supportlib/phusion_passenger/config/command.rb +2 -2
  2793. data/src/ruby_supportlib/phusion_passenger/config/compile_agent_command.rb +2 -2
  2794. data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +8 -4
  2795. data/src/ruby_supportlib/phusion_passenger/config/detach_process_command.rb +2 -2
  2796. data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +3 -3
  2797. data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +3 -3
  2798. data/src/ruby_supportlib/phusion_passenger/config/install_agent_command.rb +2 -2
  2799. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +12 -2
  2800. data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +2 -2
  2801. data/src/ruby_supportlib/phusion_passenger/config/list_instances_command.rb +2 -2
  2802. data/src/ruby_supportlib/phusion_passenger/config/main.rb +2 -2
  2803. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +16 -7
  2804. data/src/ruby_supportlib/phusion_passenger/config/reopen_logs_command.rb +2 -2
  2805. data/src/ruby_supportlib/phusion_passenger/config/restart_app_command.rb +18 -14
  2806. data/src/ruby_supportlib/phusion_passenger/config/system_metrics_command.rb +2 -2
  2807. data/src/ruby_supportlib/phusion_passenger/config/system_properties_command.rb +2 -2
  2808. data/src/ruby_supportlib/phusion_passenger/config/utils.rb +2 -2
  2809. data/src/ruby_supportlib/phusion_passenger/config/validate_install_command.rb +2 -2
  2810. data/src/ruby_supportlib/phusion_passenger/console_text_template.rb +9 -4
  2811. data/src/ruby_supportlib/phusion_passenger/constants.rb +6 -4
  2812. data/src/ruby_supportlib/phusion_passenger/debug_logging.rb +2 -2
  2813. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +39 -12
  2814. data/src/ruby_supportlib/phusion_passenger/message_channel.rb +2 -2
  2815. data/src/ruby_supportlib/phusion_passenger/message_client.rb +2 -2
  2816. data/src/ruby_supportlib/phusion_passenger/native_support.rb +12 -7
  2817. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +84 -2
  2818. data/src/ruby_supportlib/phusion_passenger/packaging.rb +5 -3
  2819. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +12 -15
  2820. data/src/ruby_supportlib/phusion_passenger/platform_info/apache_detector.rb +2 -2
  2821. data/src/ruby_supportlib/phusion_passenger/platform_info/binary_compatibility.rb +25 -21
  2822. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +49 -8
  2823. data/src/ruby_supportlib/phusion_passenger/platform_info/crypto.rb +2 -2
  2824. data/src/ruby_supportlib/phusion_passenger/platform_info/curl.rb +5 -2
  2825. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +10 -4
  2826. data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -0
  2827. data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/libs.rb +10 -6
  2828. data/src/ruby_supportlib/phusion_passenger/platform_info/linux.rb +4 -3
  2829. data/src/ruby_supportlib/phusion_passenger/platform_info/networking.rb +2 -2
  2830. data/src/ruby_supportlib/phusion_passenger/platform_info/openssl.rb +7 -2
  2831. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +49 -30
  2832. data/src/ruby_supportlib/phusion_passenger/platform_info/pcre.rb +64 -0
  2833. data/src/ruby_supportlib/phusion_passenger/platform_info/ruby.rb +4 -4
  2834. data/src/ruby_supportlib/phusion_passenger/platform_info/zlib.rb +2 -2
  2835. data/src/ruby_supportlib/phusion_passenger/platform_info.rb +2 -2
  2836. data/src/ruby_supportlib/phusion_passenger/plugin.rb +2 -2
  2837. data/src/ruby_supportlib/phusion_passenger/preloader_shared_helpers.rb +14 -8
  2838. data/src/ruby_supportlib/phusion_passenger/public_api.rb +5 -2
  2839. data/src/ruby_supportlib/phusion_passenger/rack/handler.rb +73 -0
  2840. data/src/ruby_supportlib/phusion_passenger/rack/out_of_band_gc.rb +2 -2
  2841. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +24 -3
  2842. data/src/ruby_supportlib/phusion_passenger/rack_handler.rb +32 -58
  2843. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +25 -20
  2844. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +13 -9
  2845. data/src/ruby_supportlib/phusion_passenger/ruby_core_enhancements.rb +7 -2
  2846. data/src/ruby_supportlib/phusion_passenger/ruby_core_io_enhancements.rb +2 -2
  2847. data/src/ruby_supportlib/phusion_passenger/simple_benchmarking.rb +2 -2
  2848. data/src/ruby_supportlib/phusion_passenger/standalone/app_finder.rb +3 -2
  2849. data/src/ruby_supportlib/phusion_passenger/standalone/command.rb +2 -2
  2850. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +53 -3
  2851. data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +2 -2
  2852. data/src/ruby_supportlib/phusion_passenger/standalone/control_utils.rb +2 -2
  2853. data/src/ruby_supportlib/phusion_passenger/standalone/main.rb +2 -2
  2854. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +13 -5
  2855. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +32 -21
  2856. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +3 -7
  2857. data/src/ruby_supportlib/phusion_passenger/standalone/status_command.rb +3 -4
  2858. data/src/ruby_supportlib/phusion_passenger/standalone/stop_command.rb +9 -3
  2859. data/src/ruby_supportlib/phusion_passenger/standalone/version_command.rb +2 -2
  2860. data/src/ruby_supportlib/phusion_passenger/utils/ansi_colors.rb +2 -2
  2861. data/src/ruby_supportlib/phusion_passenger/utils/download.rb +2 -2
  2862. data/src/ruby_supportlib/phusion_passenger/utils/file_system_watcher.rb +2 -2
  2863. data/src/ruby_supportlib/phusion_passenger/utils/hosts_file_parser.rb +2 -2
  2864. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +7 -198
  2865. data/src/ruby_supportlib/phusion_passenger/utils/lock.rb +2 -2
  2866. data/src/ruby_supportlib/phusion_passenger/utils/native_support_utils.rb +2 -2
  2867. data/src/ruby_supportlib/phusion_passenger/utils/progress_bar.rb +2 -2
  2868. data/src/ruby_supportlib/phusion_passenger/utils/strscan.rb +67 -0
  2869. data/src/ruby_supportlib/phusion_passenger/utils/tee_input.rb +6 -0
  2870. data/src/ruby_supportlib/phusion_passenger/utils/terminal_choice_menu.rb +2 -2
  2871. data/src/ruby_supportlib/phusion_passenger/utils/unseekable_socket.rb +17 -13
  2872. data/src/ruby_supportlib/phusion_passenger/utils.rb +8 -17
  2873. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/app.rb +2 -2
  2874. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/base.rb +1 -1
  2875. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +5 -1
  2876. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/lldb_controller.rb +6 -2
  2877. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/utils.rb +1 -1
  2878. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/version.rb +1 -1
  2879. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/lock_file.rb +1 -1
  2880. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/spawn.rb +1 -1
  2881. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/version.rb +1 -1
  2882. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +1 -1
  2883. data/src/ruby_supportlib/phusion_passenger.rb +12 -11
  2884. data/src/schema_printer/SchemaPrinterMain.cpp +2 -2
  2885. data/src/schema_printer/SchemaPrinterMain.cpp.cxxcodebuilder +2 -2
  2886. metadata +935 -308
  2887. data/src/cxx_supportlib/ServerKit/http_parser.cpp +0 -2265
  2888. data/src/cxx_supportlib/ServerKit/http_parser.h +0 -330
  2889. data/src/cxx_supportlib/vendor-copy/websocketpp/changelog.md +0 -342
  2890. data/src/cxx_supportlib/vendor-copy/websocketpp/readme.md +0 -49
  2891. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/close.hpp +0 -342
  2892. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/asio.hpp +0 -131
  2893. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/functional.hpp +0 -105
  2894. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/md5.hpp +0 -448
  2895. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/memory.hpp +0 -89
  2896. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/common/thread.hpp +0 -84
  2897. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/config/core.hpp +0 -285
  2898. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/connection.hpp +0 -1651
  2899. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/endpoint.hpp +0 -700
  2900. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp +0 -128
  2901. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/extensions/permessage_deflate/enabled.hpp +0 -752
  2902. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/frame.hpp +0 -861
  2903. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/impl/parser.hpp +0 -196
  2904. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/http/parser.hpp +0 -619
  2905. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/impl/connection_impl.hpp +0 -2372
  2906. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/impl/endpoint_impl.hpp +0 -269
  2907. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/base.hpp +0 -299
  2908. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/processors/hybi13.hpp +0 -1056
  2909. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/roles/client_endpoint.hpp +0 -173
  2910. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/roles/server_endpoint.hpp +0 -190
  2911. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/sha1/sha1.hpp +0 -189
  2912. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/connection.hpp +0 -1204
  2913. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/endpoint.hpp +0 -1147
  2914. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/security/none.hpp +0 -370
  2915. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/asio/security/tls.hpp +0 -484
  2916. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/base/endpoint.hpp +0 -77
  2917. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/debug/connection.hpp +0 -412
  2918. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/debug/endpoint.hpp +0 -140
  2919. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/iostream/connection.hpp +0 -714
  2920. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/iostream/endpoint.hpp +0 -222
  2921. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/transport/stub/connection.hpp +0 -286
  2922. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/uri.hpp +0 -355
  2923. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/utilities.hpp +0 -182
  2924. data/src/cxx_supportlib/vendor-copy/websocketpp/websocketpp/version.hpp +0 -61
  2925. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +0 -457
  2926. data/src/cxx_supportlib/vendor-modified/boost/asio/datagram_socket_service.hpp +0 -468
  2927. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer_service.hpp +0 -175
  2928. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +0 -93
  2929. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +0 -70
  2930. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +0 -67
  2931. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +0 -101
  2932. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +0 -57
  2933. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_serial_port_service.ipp +0 -154
  2934. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +0 -64
  2935. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +0 -216
  2936. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_serial_port_service.hpp +0 -238
  2937. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_fwd.hpp +0 -42
  2938. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +0 -64
  2939. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +0 -119
  2940. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detached.hpp +0 -67
  2941. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_spawn.hpp +0 -878
  2942. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/detached.hpp +0 -93
  2943. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/redirect_error.hpp +0 -296
  2944. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/redirect_error.hpp +0 -69
  2945. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental.hpp +0 -22
  2946. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +0 -83
  2947. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +0 -87
  2948. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_type.hpp +0 -52
  2949. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +0 -79
  2950. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +0 -80
  2951. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +0 -54
  2952. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +0 -79
  2953. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.cpp +0 -25
  2954. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_service.hpp +0 -202
  2955. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor_service.hpp +0 -281
  2956. data/src/cxx_supportlib/vendor-modified/boost/asio/raw_socket_service.hpp +0 -468
  2957. data/src/cxx_supportlib/vendor-modified/boost/asio/seq_packet_socket_service.hpp +0 -418
  2958. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_service.hpp +0 -251
  2959. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_service.hpp +0 -144
  2960. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_acceptor_service.hpp +0 -374
  2961. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_socket_service.hpp +0 -414
  2962. data/src/cxx_supportlib/vendor-modified/boost/asio/waitable_timer_service.hpp +0 -212
  2963. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_handle.hpp +0 -275
  2964. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +0 -184
  2965. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +0 -378
  2966. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +0 -361
  2967. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +0 -383
  2968. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle_service.hpp +0 -185
  2969. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +0 -333
  2970. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +0 -118
  2971. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +0 -380
  2972. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle_service.hpp +0 -216
  2973. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +0 -364
  2974. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle_service.hpp +0 -212
  2975. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag.hpp +0 -71
  2976. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_template.hpp +0 -1248
  2977. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_alpha.hpp +0 -34
  2978. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_arm.hpp +0 -39
  2979. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_ppc.hpp +0 -37
  2980. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_sparc.hpp +0 -34
  2981. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_x86.hpp +0 -40
  2982. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_msvc_arm.hpp +0 -34
  2983. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_msvc_x86.hpp +0 -55
  2984. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_arm.hpp +0 -67
  2985. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_ppc.hpp +0 -42
  2986. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_x86.hpp +0 -58
  2987. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_extend.hpp +0 -105
  2988. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lockpool.hpp +0 -51
  2989. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations.hpp +0 -24
  2990. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations_fwd.hpp +0 -35
  2991. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations_lockfree.hpp +0 -30
  2992. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_cas_based.hpp +0 -107
  2993. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_emulated.hpp +0 -162
  2994. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_extending_cas_based.hpp +0 -69
  2995. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_alpha.hpp +0 -876
  2996. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm.hpp +0 -1397
  2997. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_atomic.hpp +0 -392
  2998. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc.hpp +0 -1232
  2999. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sparc.hpp +0 -240
  3000. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sync.hpp +0 -240
  3001. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86.hpp +0 -563
  3002. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +0 -555
  3003. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_linux_arm.hpp +0 -180
  3004. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_arm.hpp +0 -824
  3005. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_x86.hpp +0 -908
  3006. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_type.hpp +0 -207
  3007. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_cc.hpp +0 -117
  3008. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf2_cc.hpp +0 -228
  3009. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf_cc.hpp +0 -441
  3010. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_template.hpp +0 -345
  3011. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_cc.hpp +0 -103
  3012. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_template.hpp +0 -1047
  3013. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_vw.hpp +0 -130
  3014. data/src/cxx_supportlib/vendor-modified/boost/bind/storage.hpp +0 -475
  3015. data/src/cxx_supportlib/vendor-modified/boost/bind.hpp +0 -41
  3016. data/src/cxx_supportlib/vendor-modified/boost/call_traits.hpp +0 -20
  3017. data/src/cxx_supportlib/vendor-modified/boost/checked_delete.hpp +0 -17
  3018. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +0 -68
  3019. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/float_functions.hpp +0 -336
  3020. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_float.hpp +0 -271
  3021. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/limits.hpp +0 -62
  3022. data/src/cxx_supportlib/vendor-modified/boost/container_hash/extensions.hpp +0 -414
  3023. data/src/cxx_supportlib/vendor-modified/boost/detail/atomic_count.hpp +0 -21
  3024. data/src/cxx_supportlib/vendor-modified/boost/detail/call_traits.hpp +0 -172
  3025. data/src/cxx_supportlib/vendor-modified/boost/detail/container_fwd.hpp +0 -157
  3026. data/src/cxx_supportlib/vendor-modified/boost/detail/endian.hpp +0 -11
  3027. data/src/cxx_supportlib/vendor-modified/boost/detail/iterator.hpp +0 -39
  3028. data/src/cxx_supportlib/vendor-modified/boost/detail/no_exceptions_support.hpp +0 -17
  3029. data/src/cxx_supportlib/vendor-modified/boost/detail/sp_typeinfo.hpp +0 -36
  3030. data/src/cxx_supportlib/vendor-modified/boost/function/detail/function_iterate.hpp +0 -16
  3031. data/src/cxx_supportlib/vendor-modified/boost/function/detail/gen_maybe_include.pl +0 -39
  3032. data/src/cxx_supportlib/vendor-modified/boost/function/detail/maybe_include.hpp +0 -369
  3033. data/src/cxx_supportlib/vendor-modified/boost/function/detail/prologue.hpp +0 -26
  3034. data/src/cxx_supportlib/vendor-modified/boost/function/gen_function_N.pl +0 -26
  3035. data/src/cxx_supportlib/vendor-modified/boost/functional/hash_fwd.hpp +0 -6
  3036. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/c_regex_traits.cpp +0 -206
  3037. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cpp_regex_traits.cpp +0 -117
  3038. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cregex.cpp +0 -660
  3039. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/instances.cpp +0 -32
  3040. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_raw_buffer.cpp +0 -72
  3041. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_traits_defaults.cpp +0 -692
  3042. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wc_regex_traits.cpp +0 -314
  3043. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/winstances.cpp +0 -35
  3044. data/src/cxx_supportlib/vendor-modified/boost/math/policies/policy.hpp +0 -1040
  3045. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +0 -581
  3046. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/round_fwd.hpp +0 -93
  3047. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/fpclassify.hpp +0 -640
  3048. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +0 -1651
  3049. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/sign.hpp +0 -194
  3050. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +0 -469
  3051. data/src/cxx_supportlib/vendor-modified/boost/math/tools/promotion.hpp +0 -182
  3052. data/src/cxx_supportlib/vendor-modified/boost/math/tools/real_cast.hpp +0 -31
  3053. data/src/cxx_supportlib/vendor-modified/boost/math/tools/user.hpp +0 -105
  3054. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/overloads.hpp +0 -88
  3055. data/src/cxx_supportlib/vendor-modified/boost/pointer_to_other.hpp +0 -55
  3056. data/src/cxx_supportlib/vendor-modified/boost/predef/detail/endian_compat.h +0 -26
  3057. data/src/cxx_supportlib/vendor-modified/boost/predef/os/android.h +0 -45
  3058. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/abs.hpp +0 -89
  3059. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/gcd.hpp +0 -124
  3060. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/lcm.hpp +0 -126
  3061. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/sign.hpp +0 -89
  3062. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/overflow_helpers.hpp +0 -367
  3063. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/ratio_io.hpp +0 -1342
  3064. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/abs.hpp +0 -30
  3065. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/arithmetic.hpp +0 -22
  3066. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/comparison.hpp +0 -19
  3067. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/divides.hpp +0 -30
  3068. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/equal_to.hpp +0 -30
  3069. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/gcd.hpp +0 -30
  3070. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater.hpp +0 -30
  3071. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater_equal.hpp +0 -30
  3072. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/lcm.hpp +0 -30
  3073. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less.hpp +0 -30
  3074. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less_equal.hpp +0 -30
  3075. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/minus.hpp +0 -30
  3076. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/negate.hpp +0 -30
  3077. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/not_equal_to.hpp +0 -30
  3078. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/numeric_cast.hpp +0 -31
  3079. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/plus.hpp +0 -30
  3080. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_c_tag.hpp +0 -25
  3081. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_constant.hpp +0 -15
  3082. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/sign.hpp +0 -30
  3083. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/times.hpp +0 -30
  3084. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +0 -455
  3085. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +0 -225
  3086. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_solaris.hpp +0 -59
  3087. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +0 -150
  3088. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +0 -160
  3089. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +0 -115
  3090. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync.hpp +0 -69
  3091. data/src/cxx_supportlib/vendor-modified/boost/swap.hpp +0 -17
  3092. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.ipp +0 -496
  3093. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +0 -276
  3094. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +0 -297
  3095. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +0 -265
  3096. data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +0 -100
  3097. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -61
  3098. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +0 -34
  3099. data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +0 -118
  3100. data/src/cxx_supportlib/vendor-modified/boost/typeof/integral_template_param.hpp +0 -80
  3101. data/src/cxx_supportlib/vendor-modified/boost/typeof/message.hpp +0 -8
  3102. data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +0 -121
  3103. data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +0 -60
  3104. data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +0 -38
  3105. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions.hpp +0 -50
  3106. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +0 -135
  3107. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +0 -61
  3108. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +0 -32
  3109. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +0 -160
  3110. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +0 -149
  3111. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +0 -27
  3112. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_template_param.hpp +0 -37
  3113. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +0 -186
  3114. data/src/cxx_supportlib/vendor-modified/boost/typeof/unsupported.hpp +0 -29
  3115. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +0 -166
  3116. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +0 -321
  3117. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +0 -471
  3118. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +0 -621
  3119. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +0 -171
  3120. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +0 -63
  3121. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/daily-rotate-file.js +0 -601
  3122. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/webhook.js +0 -146
  3123. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/LICENSE +0 -19
  3124. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/lib/pkginfo.js +0 -136
  3125. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/package.json +0 -56
  3126. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/COPYING +0 -0
  3127. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/base64/base64.hpp +0 -0
  3128. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/client.hpp +0 -0
  3129. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/asio_ssl.hpp +0 -0
  3130. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/chrono.hpp +0 -0
  3131. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/connection_hdl.hpp +0 -0
  3132. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/cpp11.hpp +0 -0
  3133. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/network.hpp +0 -0
  3134. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/platforms.hpp +0 -0
  3135. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/random.hpp +0 -0
  3136. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/regex.hpp +0 -0
  3137. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/stdint.hpp +0 -0
  3138. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/system_error.hpp +0 -0
  3139. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/time.hpp +0 -0
  3140. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/common/type_traits.hpp +0 -0
  3141. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/concurrency/basic.hpp +0 -0
  3142. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/concurrency/none.hpp +0 -0
  3143. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/asio.hpp +0 -0
  3144. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/asio_client.hpp +0 -0
  3145. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/asio_no_tls.hpp +0 -0
  3146. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/asio_no_tls_client.hpp +0 -0
  3147. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/boost_config.hpp +0 -0
  3148. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/core_client.hpp +0 -0
  3149. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/debug.hpp +0 -0
  3150. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/debug_asio.hpp +0 -0
  3151. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/debug_asio_no_tls.hpp +0 -0
  3152. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/minimal_client.hpp +0 -0
  3153. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/config/minimal_server.hpp +0 -0
  3154. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/connection_base.hpp +0 -0
  3155. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/endpoint_base.hpp +0 -0
  3156. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/error.hpp +0 -0
  3157. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/extensions/extension.hpp +0 -0
  3158. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/constants.hpp +0 -0
  3159. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/impl/request.hpp +0 -0
  3160. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/impl/response.hpp +0 -0
  3161. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/request.hpp +0 -0
  3162. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/http/response.hpp +0 -0
  3163. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/impl/utilities_impl.hpp +0 -0
  3164. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/logger/basic.hpp +0 -0
  3165. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/logger/levels.hpp +0 -0
  3166. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/logger/stub.hpp +0 -0
  3167. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/logger/syslog.hpp +0 -0
  3168. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/message_buffer/alloc.hpp +0 -0
  3169. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/message_buffer/message.hpp +0 -0
  3170. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/message_buffer/pool.hpp +0 -0
  3171. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/hybi00.hpp +0 -0
  3172. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/hybi07.hpp +0 -0
  3173. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/hybi08.hpp +0 -0
  3174. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/processors/processor.hpp +0 -0
  3175. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/random/none.hpp +0 -0
  3176. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/random/random_device.hpp +0 -0
  3177. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/server.hpp +0 -0
  3178. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/asio/base.hpp +0 -0
  3179. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/asio/security/base.hpp +0 -0
  3180. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/base/connection.hpp +0 -0
  3181. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/debug/base.hpp +0 -0
  3182. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/iostream/base.hpp +0 -0
  3183. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/stub/base.hpp +0 -0
  3184. /data/src/cxx_supportlib/{vendor-copy → vendor-modified}/websocketpp/websocketpp/transport/stub/endpoint.hpp +0 -0
  3185. /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
- (const slist_node_ptr &bucket_beg, const slist_node_ptr &bucket_end, const 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
 
409
- static node_ptr get_prev_to_first_in_group(const slist_node_ptr &bucket_node, const node_ptr &first_in_group)
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_)
410
656
  {
411
- node_ptr nb = detail::dcast_bucket_ptr<node>(bucket_node);
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
+
665
+ static node_ptr get_prev_to_first_in_group(slist_node_ptr bucket_node, node_ptr first_in_group)
666
+ {
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
@@ -416,7 +672,7 @@ struct group_functions
416
672
  return nb;
417
673
  }
418
674
 
419
- static void erase_from_group(const slist_node_ptr &end_ptr, const node_ptr &to_erase_ptr, detail::true_)
675
+ static void erase_from_group(slist_node_ptr end_ptr, node_ptr to_erase_ptr, detail::true_)
420
676
  {
421
677
  node_ptr const nxt_ptr(node_traits::get_next(to_erase_ptr));
422
678
  //Check if the next node is in the group (not end node) and reverse linked to
@@ -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(const 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(const 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(const node_ptr &first_in_group, const 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;
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
+
676
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;
987
+
988
+ static const std::size_t bucket_overhead = LinearBuckets ? 1u : 0u;
695
989
 
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))
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()); }
945
1297
 
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)); }
1298
+ static inline siterator sit_end(bucket_type& b)
1299
+ { return siterator(slist_node_algorithms::end_node(b.get_node_ptr())); }
948
1300
 
949
- BOOST_INTRUSIVE_FORCEINLINE static std::size_t priv_stored_hash(slist_node_ptr, detail::false_) //NO store_hash
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())); }
1303
+
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); }
1315
+
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())); }
960
1321
 
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)); }
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()); }
999
1370
 
1000
- bucket_traits bucket_traits_;
1001
- } data;
1371
+ inline const_iterator build_const_iterator(siterator s, bucket_ptr p) const
1372
+ { return this->build_const_iterator(s, p, linear_buckets_t()); }
1373
+
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)
1093
1476
  {}
1094
1477
 
1095
- BOOST_INTRUSIVE_FORCEINLINE const hasher &priv_hasher() const
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))
1481
+ {}
1482
+
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)
1176
1588
  {}
1177
1589
 
1178
- BOOST_INTRUSIVE_FORCEINLINE void priv_erasure_update_cache_range(std::size_t, std::size_t)
1590
+ inline void priv_erasure_update_cache_range(std::size_t, std::size_t)
1179
1591
  {}
1180
1592
 
1181
- BOOST_INTRUSIVE_FORCEINLINE void priv_erasure_update_cache()
1593
+ inline void priv_erasure_update_cache(bucket_ptr)
1182
1594
  {}
1183
1595
 
1184
- BOOST_INTRUSIVE_FORCEINLINE const key_equal &priv_equal() const
1596
+ inline void priv_erasure_update_cache()
1597
+ {}
1598
+
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(); }
1317
1763
 
1318
- BOOST_INTRUSIVE_FORCEINLINE size_traits_t priv_size_traits()
1764
+ inline void set_hashtable_size_wrapper_size(SizeType s)
1765
+ { size_traits_.set_size(s); }
1766
+
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;
@@ -1385,13 +1871,8 @@ struct hashdata_internal
1385
1871
  typedef typename node_traits::node node;
1386
1872
  typedef typename node_traits::node_ptr node_ptr;
1387
1873
  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;
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