passenger 6.0.14 → 6.0.27

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 (1978) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG +380 -85
  3. data/CONTRIBUTING.md +2 -2
  4. data/CONTRIBUTORS +8 -0
  5. data/LICENSE +1 -1
  6. data/README.md +3 -3
  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 +24 -8
  12. data/bin/passenger-memory-stats +2 -2
  13. data/bin/passenger-status +2 -2
  14. data/build/agent.rb +2 -4
  15. data/build/apache2.rb +3 -3
  16. data/build/basics.rb +14 -6
  17. data/build/common_library.rb +3 -8
  18. data/build/cxx_tests.rb +20 -9
  19. data/build/integration_tests.rb +10 -9
  20. data/build/misc.rb +2 -4
  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 +2 -2
  25. data/build/ruby_extension.rb +2 -2
  26. data/build/ruby_tests.rb +3 -3
  27. data/build/schema_printer.rb +2 -4
  28. data/build/support/cplusplus.rb +2 -2
  29. data/build/support/cxx_dependency_map.rb +249 -311
  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 +2 -2
  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 +27 -13
  39. data/dev/copy_boost_headers +96 -77
  40. data/dev/index_cxx_dependencies.rb +1 -1
  41. data/dev/nginx_version_sha256 +72 -0
  42. data/doc/AiInstructions.md +112 -0
  43. data/doc/CxxMockingStrategy.md +42 -0
  44. data/doc/CxxTestingGuide.md +110 -0
  45. data/doc/DesignAspects/LimitedGemDependencies.md +47 -0
  46. data/doc/DesignAspects/NoGemActivationDuringRubyLoaderInitialization.md +27 -0
  47. data/doc/TempFileHandling.md +15 -0
  48. data/package.json +15 -15
  49. data/passenger.gemspec +8 -2
  50. data/resources/templates/apache2/deployment_example.txt.erb +1 -1
  51. data/resources/templates/nginx/deployment_example.txt.erb +1 -1
  52. data/resources/templates/standalone/http.erb +1 -0
  53. data/resources/templates/standalone/server.erb +2 -0
  54. data/src/agent/AgentMain.cpp +4 -10
  55. data/src/agent/Core/ApiServer.h +3 -4
  56. data/src/agent/Core/ApplicationPool/AbstractSession.h +12 -3
  57. data/src/agent/Core/ApplicationPool/BasicGroupInfo.h +2 -2
  58. data/src/agent/Core/ApplicationPool/BasicProcessInfo.h +2 -2
  59. data/src/agent/Core/ApplicationPool/Common.h +2 -2
  60. data/src/agent/Core/ApplicationPool/Context.h +7 -4
  61. data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +10 -2
  62. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +12 -4
  63. data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +10 -2
  64. data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +11 -2
  65. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +11 -2
  66. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +85 -5
  67. data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +66 -21
  68. data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +10 -2
  69. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +11 -3
  70. data/src/agent/Core/ApplicationPool/Group/Verification.cpp +10 -2
  71. data/src/agent/Core/ApplicationPool/Group.h +18 -8
  72. data/src/agent/Core/ApplicationPool/Implementation.cpp +2 -5
  73. data/src/agent/Core/ApplicationPool/Options.h +3 -4
  74. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +7 -2
  75. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +7 -2
  76. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +7 -2
  77. data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +7 -2
  78. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +7 -2
  79. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +7 -2
  80. data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +7 -2
  81. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +17 -3
  82. data/src/agent/Core/ApplicationPool/Pool.h +2 -4
  83. data/src/agent/Core/ApplicationPool/Process.cpp +2 -2
  84. data/src/agent/Core/ApplicationPool/Process.h +24 -8
  85. data/src/agent/Core/ApplicationPool/Session.h +22 -22
  86. data/src/agent/Core/ApplicationPool/Socket.h +17 -7
  87. data/src/agent/Core/ApplicationPool/TestSession.h +76 -17
  88. data/src/agent/Core/Config.h +17 -40
  89. data/src/agent/Core/ConfigChange.cpp +3 -43
  90. data/src/agent/Core/ConfigChange.h +2 -2
  91. data/src/agent/Core/Controller/AppResponse.h +2 -3
  92. data/src/agent/Core/Controller/BufferBody.cpp +2 -2
  93. data/src/agent/Core/Controller/CheckoutSession.cpp +125 -16
  94. data/src/agent/Core/Controller/Client.h +2 -3
  95. data/src/agent/Core/Controller/Config.cpp +2 -2
  96. data/src/agent/Core/Controller/Config.h +14 -5
  97. data/src/agent/Core/Controller/ForwardResponse.cpp +2 -2
  98. data/src/agent/Core/Controller/Hooks.cpp +15 -2
  99. data/src/agent/Core/Controller/Implementation.cpp +2 -2
  100. data/src/agent/Core/Controller/InitRequest.cpp +4 -3
  101. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +2 -2
  102. data/src/agent/Core/Controller/InternalUtils.cpp +14 -2
  103. data/src/agent/Core/Controller/Miscellaneous.cpp +2 -2
  104. data/src/agent/Core/Controller/Request.h +5 -4
  105. data/src/agent/Core/Controller/SendRequest.cpp +4 -4
  106. data/src/agent/Core/Controller/StateInspection.cpp +2 -2
  107. data/src/agent/Core/Controller/TurboCaching.h +2 -2
  108. data/src/agent/Core/Controller.h +15 -15
  109. data/src/agent/Core/CoreMain.cpp +14 -75
  110. data/src/agent/Core/OptionParser.h +11 -9
  111. data/src/agent/Core/ResponseCache.h +5 -4
  112. data/src/agent/Core/SecurityUpdateChecker.h +7 -8
  113. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h +2 -2
  114. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h.cxxcodebuilder +2 -2
  115. data/src/agent/Core/SpawningKit/Config.h +2 -2
  116. data/src/agent/Core/SpawningKit/Context.h +2 -2
  117. data/src/agent/Core/SpawningKit/DirectSpawner.h +2 -2
  118. data/src/agent/Core/SpawningKit/DummySpawner.h +2 -2
  119. data/src/agent/Core/SpawningKit/ErrorRenderer.h +7 -2
  120. data/src/agent/Core/SpawningKit/Exceptions.h +2 -2
  121. data/src/agent/Core/SpawningKit/Factory.h +2 -2
  122. data/src/agent/Core/SpawningKit/Handshake/BackgroundIOCapturer.h +2 -2
  123. data/src/agent/Core/SpawningKit/Handshake/Perform.h +6 -6
  124. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +3 -55
  125. data/src/agent/Core/SpawningKit/Handshake/Session.h +5 -2
  126. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +7 -4
  127. data/src/agent/Core/SpawningKit/Journey.h +2 -2
  128. data/src/agent/Core/SpawningKit/PipeWatcher.h +20 -5
  129. data/src/agent/Core/SpawningKit/Result/AutoGeneratedCode.h +2 -2
  130. data/src/agent/Core/SpawningKit/Result/AutoGeneratedCode.h.cxxcodebuilder +2 -2
  131. data/src/agent/Core/SpawningKit/Result.h +2 -2
  132. data/src/agent/Core/SpawningKit/SmartSpawner.h +8 -4
  133. data/src/agent/Core/SpawningKit/Spawner.h +6 -2
  134. data/src/agent/Core/SpawningKit/UserSwitchingRules.h +4 -4
  135. data/src/agent/Core/TelemetryCollector.h +2 -2
  136. data/src/agent/ExecHelper/ExecHelperMain.cpp +12 -14
  137. data/src/agent/FileReadHelper/FileReadHelperMain.cpp +9 -12
  138. data/src/{cxx_supportlib/FileTools/LargeFiles.h → agent/MainFunctions.h} +12 -17
  139. data/src/agent/Shared/ApiAccountUtils.h +2 -2
  140. data/src/agent/Shared/ApiServerUtils.h +5 -4
  141. data/src/agent/Shared/ApplicationPoolApiKey.h +2 -2
  142. data/src/agent/Shared/Fundamentals/AbortHandler.cpp +90 -11
  143. data/src/agent/Shared/Fundamentals/AbortHandler.h +4 -2
  144. data/src/agent/Shared/Fundamentals/Initialization.cpp +12 -6
  145. data/src/agent/Shared/Fundamentals/Initialization.h +5 -5
  146. data/src/agent/Shared/Fundamentals/Utils.cpp +2 -2
  147. data/src/agent/Shared/Fundamentals/Utils.h +2 -2
  148. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +33 -13
  149. data/src/agent/SystemMetrics/SystemMetricsMain.cpp +3 -2
  150. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +8 -6
  151. data/src/agent/Watchdog/AgentWatcher.cpp +2 -2
  152. data/src/agent/Watchdog/ApiServer.h +3 -3
  153. data/src/agent/Watchdog/Config.h +6 -23
  154. data/src/agent/Watchdog/CoreWatcher.cpp +2 -2
  155. data/src/agent/Watchdog/InstanceDirToucher.cpp +2 -2
  156. data/src/agent/Watchdog/WatchdogMain.cpp +15 -23
  157. data/src/apache2_module/Bucket.cpp +2 -2
  158. data/src/apache2_module/Bucket.h +2 -2
  159. data/src/apache2_module/CBindings.cpp +2 -2
  160. data/src/apache2_module/Config.cpp +2 -2
  161. data/src/apache2_module/Config.h +2 -2
  162. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +12 -22
  163. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp.cxxcodebuilder +2 -2
  164. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +7 -2
  165. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp.cxxcodebuilder +2 -2
  166. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +32 -62
  167. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp.cxxcodebuilder +2 -2
  168. data/src/apache2_module/ConfigGeneral/Common.h +2 -2
  169. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +7 -5
  170. data/src/apache2_module/ConfigGeneral/SetterFuncs.h +2 -2
  171. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +7 -2
  172. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp.cxxcodebuilder +2 -2
  173. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +5 -2
  174. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp.cxxcodebuilder +2 -2
  175. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +15 -2
  176. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +2 -2
  177. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +9 -2
  178. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp.cxxcodebuilder +2 -2
  179. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +18 -2
  180. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +5 -2
  181. data/src/apache2_module/DirectoryMapper.h +2 -2
  182. data/src/apache2_module/Hooks.cpp +29 -7
  183. data/src/apache2_module/Hooks.h +2 -2
  184. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +11 -46
  185. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +2 -2
  186. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +15 -55
  187. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +4 -3
  188. data/src/apache2_module/Utils.h +2 -2
  189. data/src/apache2_module/mod_passenger.c +2 -2
  190. data/src/cxx_supportlib/Algorithms/Hasher.cpp +3 -3
  191. data/src/cxx_supportlib/Algorithms/Hasher.h +6 -9
  192. data/src/cxx_supportlib/Algorithms/MovingAverage.h +3 -168
  193. data/src/cxx_supportlib/AppLocalConfigFileUtils.h +2 -2
  194. data/src/cxx_supportlib/AppTypeDetector/CBindings.cpp +2 -2
  195. data/src/cxx_supportlib/AppTypeDetector/CBindings.h +2 -2
  196. data/src/cxx_supportlib/AppTypeDetector/Detector.h +2 -2
  197. data/src/cxx_supportlib/BackgroundEventLoop.cpp +6 -2
  198. data/src/cxx_supportlib/BackgroundEventLoop.h +2 -2
  199. data/src/cxx_supportlib/ConfigKit/AsyncUtils.h +2 -2
  200. data/src/cxx_supportlib/ConfigKit/Common.h +3 -3
  201. data/src/cxx_supportlib/ConfigKit/ConfigKit.h +2 -2
  202. data/src/cxx_supportlib/ConfigKit/DummyTranslator.h +2 -2
  203. data/src/cxx_supportlib/ConfigKit/PrefixTranslator.h +2 -2
  204. data/src/cxx_supportlib/ConfigKit/Schema.h +2 -2
  205. data/src/cxx_supportlib/ConfigKit/SchemaUtils.h +2 -2
  206. data/src/cxx_supportlib/ConfigKit/Store.h +2 -2
  207. data/src/cxx_supportlib/ConfigKit/SubComponentUtils.h +2 -2
  208. data/src/cxx_supportlib/ConfigKit/TableTranslator.h +2 -2
  209. data/src/cxx_supportlib/ConfigKit/Translator.h +2 -2
  210. data/src/cxx_supportlib/ConfigKit/Utils.h +2 -2
  211. data/src/cxx_supportlib/Constants.h +4 -3
  212. data/src/cxx_supportlib/Constants.h.cxxcodebuilder +2 -2
  213. data/src/cxx_supportlib/DataStructures/HashedStaticString.h +2 -2
  214. data/src/cxx_supportlib/DataStructures/LString.cpp +2 -2
  215. data/src/cxx_supportlib/DataStructures/LString.h +6 -2
  216. data/src/cxx_supportlib/DataStructures/StringKeyTable.h +3 -3
  217. data/src/cxx_supportlib/DataStructures/StringMap.h +4 -6
  218. data/src/cxx_supportlib/Exceptions.cpp +2 -2
  219. data/src/cxx_supportlib/Exceptions.h +2 -2
  220. data/src/cxx_supportlib/FileDescriptor.h +2 -2
  221. data/src/cxx_supportlib/FileTools/FileManip.cpp +2 -2
  222. data/src/cxx_supportlib/FileTools/FileManip.h +4 -2
  223. data/src/cxx_supportlib/FileTools/PathManip.cpp +13 -4
  224. data/src/cxx_supportlib/FileTools/PathManip.h +2 -2
  225. data/src/cxx_supportlib/FileTools/PathManipCBindings.cpp +2 -2
  226. data/src/cxx_supportlib/FileTools/PathManipCBindings.h +2 -2
  227. data/src/cxx_supportlib/FileTools/PathSecurityCheck.cpp +2 -2
  228. data/src/cxx_supportlib/FileTools/PathSecurityCheck.h +2 -2
  229. data/src/cxx_supportlib/Hooks.h +2 -3
  230. data/src/cxx_supportlib/IOTools/BufferedIO.h +2 -2
  231. data/src/cxx_supportlib/IOTools/IOUtils.cpp +53 -68
  232. data/src/cxx_supportlib/IOTools/IOUtils.h +67 -75
  233. data/src/cxx_supportlib/IOTools/MessageIO.h +2 -2
  234. data/src/cxx_supportlib/IOTools/MessageSerialization.h +2 -2
  235. data/src/cxx_supportlib/InstanceDirectory.h +2 -2
  236. data/src/cxx_supportlib/Integrations/LibevJsonUtils.h +5 -5
  237. data/src/cxx_supportlib/JsonTools/Autocast.h +2 -2
  238. data/src/cxx_supportlib/JsonTools/CBindings.cpp +2 -4
  239. data/src/cxx_supportlib/JsonTools/CBindings.h +2 -2
  240. data/src/cxx_supportlib/JsonTools/JsonUtils.h +6 -6
  241. data/src/cxx_supportlib/LoggingKit/Assert.h +2 -2
  242. data/src/cxx_supportlib/LoggingKit/Config.h +2 -2
  243. data/src/cxx_supportlib/LoggingKit/Context.h +18 -23
  244. data/src/cxx_supportlib/LoggingKit/Forward.h +2 -4
  245. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +38 -74
  246. data/src/cxx_supportlib/LoggingKit/Logging.h +2 -2
  247. data/src/cxx_supportlib/LoggingKit/LoggingKit.h +2 -2
  248. data/src/cxx_supportlib/LveLoggingDecorator.h +2 -2
  249. data/src/cxx_supportlib/MemoryKit/mbuf.cpp +14 -6
  250. data/src/cxx_supportlib/MemoryKit/mbuf.h +3 -3
  251. data/src/cxx_supportlib/MemoryKit/palloc.cpp +1 -1
  252. data/src/cxx_supportlib/MemoryKit/palloc.h +1 -1
  253. data/src/cxx_supportlib/ProcessManagement/Ruby.cpp +2 -2
  254. data/src/cxx_supportlib/ProcessManagement/Ruby.h +2 -2
  255. data/src/cxx_supportlib/ProcessManagement/Spawn.cpp +2 -2
  256. data/src/cxx_supportlib/ProcessManagement/Spawn.h +2 -2
  257. data/src/cxx_supportlib/ProcessManagement/Utils.cpp +3 -3
  258. data/src/cxx_supportlib/ProcessManagement/Utils.h +2 -2
  259. data/src/cxx_supportlib/RandomGenerator.h +2 -2
  260. data/src/cxx_supportlib/ResourceLocator.h +3 -3
  261. data/src/cxx_supportlib/SafeLibev.h +5 -5
  262. data/src/cxx_supportlib/SecurityKit/Crypto.cpp +5 -96
  263. data/src/cxx_supportlib/SecurityKit/Crypto.h +2 -10
  264. data/src/cxx_supportlib/SecurityKit/MemZeroGuard.h +2 -2
  265. data/src/cxx_supportlib/ServerKit/AcceptLoadBalancer.h +4 -2
  266. data/src/cxx_supportlib/ServerKit/Channel.h +2 -2
  267. data/src/cxx_supportlib/ServerKit/Client.h +2 -2
  268. data/src/cxx_supportlib/ServerKit/ClientRef.h +2 -2
  269. data/src/cxx_supportlib/ServerKit/Config.h +2 -2
  270. data/src/cxx_supportlib/ServerKit/Context.h +8 -2
  271. data/src/cxx_supportlib/ServerKit/CookieUtils.h +2 -2
  272. data/src/cxx_supportlib/ServerKit/Errors.h +5 -4
  273. data/src/cxx_supportlib/ServerKit/FdSinkChannel.h +2 -2
  274. data/src/cxx_supportlib/ServerKit/FdSourceChannel.h +2 -2
  275. data/src/cxx_supportlib/ServerKit/FileBufferedChannel.h +2 -2
  276. data/src/cxx_supportlib/ServerKit/FileBufferedFdSinkChannel.h +2 -2
  277. data/src/cxx_supportlib/ServerKit/HeaderTable.h +2 -2
  278. data/src/cxx_supportlib/ServerKit/Hooks.h +4 -4
  279. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParser.h +2 -2
  280. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParserState.h +2 -2
  281. data/src/cxx_supportlib/ServerKit/HttpClient.h +2 -2
  282. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +105 -71
  283. data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +6 -3
  284. data/src/cxx_supportlib/ServerKit/HttpRequest.h +4 -4
  285. data/src/cxx_supportlib/ServerKit/HttpRequestRef.h +2 -2
  286. data/src/cxx_supportlib/ServerKit/HttpServer.h +20 -14
  287. data/src/cxx_supportlib/ServerKit/Implementation.cpp +2 -2
  288. data/src/cxx_supportlib/ServerKit/Server.h +2 -8
  289. data/src/cxx_supportlib/ServerKit/llerrors.h +84 -0
  290. data/src/cxx_supportlib/ServerKit/llhttp.c +10168 -0
  291. data/src/cxx_supportlib/ServerKit/llhttp.h +903 -0
  292. data/src/cxx_supportlib/ServerKit/llhttp_api.c +510 -0
  293. data/src/cxx_supportlib/ServerKit/llhttp_http.c +170 -0
  294. data/src/cxx_supportlib/ServerKit/llversion.h +12 -0
  295. data/src/cxx_supportlib/ServerKit/url_parser.c +574 -0
  296. data/src/cxx_supportlib/ServerKit/url_parser.h +74 -0
  297. data/src/cxx_supportlib/StaticString.h +5 -3
  298. data/src/cxx_supportlib/StrIntTools/DateParsing.h +3 -3
  299. data/src/cxx_supportlib/StrIntTools/StrIntUtils.cpp +14 -5
  300. data/src/cxx_supportlib/StrIntTools/StrIntUtils.h +9 -4
  301. data/src/cxx_supportlib/StrIntTools/StrIntUtilsNoStrictAliasing.cpp +2 -2
  302. data/src/cxx_supportlib/StrIntTools/StringScanning.h +2 -2
  303. data/src/cxx_supportlib/StrIntTools/Template.h +2 -2
  304. data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +2 -2
  305. data/src/cxx_supportlib/SystemTools/ProcessMetricsCollector.h +2 -2
  306. data/src/cxx_supportlib/SystemTools/SystemMetricsCollector.h +4 -6
  307. data/src/cxx_supportlib/SystemTools/SystemTime.cpp +2 -2
  308. data/src/cxx_supportlib/SystemTools/SystemTime.h +2 -2
  309. data/src/cxx_supportlib/SystemTools/UserDatabase.cpp +16 -16
  310. data/src/cxx_supportlib/SystemTools/UserDatabase.h +8 -12
  311. data/src/cxx_supportlib/Utils/AnsiColorConstants.h +13 -11
  312. data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +4 -2
  313. data/src/cxx_supportlib/Utils/BlockingQueue.h +2 -2
  314. data/src/cxx_supportlib/Utils/CachedFileStat.cpp +2 -2
  315. data/src/cxx_supportlib/Utils/CachedFileStat.h +2 -2
  316. data/src/cxx_supportlib/Utils/CachedFileStat.hpp +2 -2
  317. data/src/cxx_supportlib/Utils/ClassUtils.h +2 -2
  318. data/src/cxx_supportlib/Utils/Curl.h +2 -2
  319. data/src/cxx_supportlib/Utils/FastStringStream.h +9 -9
  320. data/src/cxx_supportlib/Utils/FileChangeChecker.h +2 -2
  321. data/src/cxx_supportlib/Utils/HttpConstants.h +2 -2
  322. data/src/cxx_supportlib/Utils/IniFile.h +26 -27
  323. data/src/cxx_supportlib/Utils/MessagePassing.h +2 -2
  324. data/src/cxx_supportlib/Utils/OptionParsing.h +2 -2
  325. data/src/cxx_supportlib/Utils/ReleaseableScopedPointer.h +2 -2
  326. data/src/cxx_supportlib/Utils/ScopeGuard.h +2 -2
  327. data/src/cxx_supportlib/Utils/SpeedMeter.h +2 -5
  328. data/src/cxx_supportlib/Utils/Timer.h +2 -2
  329. data/src/cxx_supportlib/Utils/VariantMap.h +2 -2
  330. data/src/cxx_supportlib/Utils.cpp +3 -3
  331. data/src/cxx_supportlib/Utils.h +2 -32
  332. data/src/cxx_supportlib/WatchdogLauncher.cpp +2 -2
  333. data/src/cxx_supportlib/WatchdogLauncher.h +3 -5
  334. data/src/cxx_supportlib/WrapperRegistry/CBindings.cpp +2 -2
  335. data/src/cxx_supportlib/WrapperRegistry/CBindings.h +2 -2
  336. data/src/cxx_supportlib/WrapperRegistry/Entry.h +2 -2
  337. data/src/cxx_supportlib/WrapperRegistry/Registry.h +2 -2
  338. data/src/cxx_supportlib/oxt/backtrace.hpp +1 -1
  339. data/src/cxx_supportlib/oxt/detail/backtrace_disabled.hpp +1 -1
  340. data/src/cxx_supportlib/oxt/detail/backtrace_enabled.hpp +1 -1
  341. data/src/cxx_supportlib/oxt/detail/context.hpp +1 -1
  342. data/src/cxx_supportlib/oxt/detail/spin_lock_darwin.hpp +1 -1
  343. data/src/cxx_supportlib/oxt/detail/spin_lock_gcc_x86.hpp +1 -1
  344. data/src/cxx_supportlib/oxt/detail/spin_lock_portable.hpp +1 -1
  345. data/src/cxx_supportlib/oxt/detail/spin_lock_pthreads.hpp +1 -1
  346. data/src/cxx_supportlib/oxt/detail/tracable_exception_disabled.hpp +5 -1
  347. data/src/cxx_supportlib/oxt/detail/tracable_exception_enabled.hpp +2 -1
  348. data/src/cxx_supportlib/oxt/dynamic_thread_group.hpp +1 -1
  349. data/src/cxx_supportlib/oxt/implementation.cpp +53 -4
  350. data/src/cxx_supportlib/oxt/initialize.hpp +1 -1
  351. data/src/cxx_supportlib/oxt/macros.hpp +1 -1
  352. data/src/cxx_supportlib/oxt/spin_lock.hpp +1 -1
  353. data/src/cxx_supportlib/oxt/system_calls.cpp +13 -5
  354. data/src/cxx_supportlib/oxt/system_calls.hpp +4 -5
  355. data/src/cxx_supportlib/oxt/thread.hpp +2 -2
  356. data/src/cxx_supportlib/oxt/tracable_exception.hpp +1 -1
  357. data/src/cxx_supportlib/vendor-copy/adhoc_lve.h +2 -2
  358. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_iterator.hpp +11 -3
  359. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/find_iterator.hpp +27 -1
  360. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +1 -1
  361. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_sunos.hpp +34 -0
  362. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +124 -26
  363. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +10 -18
  364. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +4 -5
  365. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +5 -1
  366. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_impl.hpp +183 -64
  367. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +170 -68
  368. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +83 -12
  369. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +40 -11
  370. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_aarch32.hpp +8 -1
  371. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_aarch64.hpp +8 -1
  372. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_arch_gcc_arm.hpp +8 -1
  373. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/classify.hpp +19 -10
  374. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +19 -54
  375. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_ppc.hpp +105 -100
  376. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +107 -40
  377. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +32 -5
  378. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +12 -13
  379. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +7 -8
  380. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +1 -1
  381. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +26 -27
  382. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +73 -72
  383. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/float_sizes.hpp +122 -35
  384. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +2 -3
  385. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +50 -12
  386. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_arm_asm_common.hpp +4 -0
  387. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_ppc_asm_common.hpp +33 -0
  388. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +7 -0
  389. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +15 -6
  390. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/alignment_of.hpp +3 -3
  391. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/has_unique_object_representations.hpp +143 -0
  392. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_enum.hpp +42 -0
  393. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp +46 -0
  394. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +42 -0
  395. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_darwin_ulock.hpp +58 -0
  396. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +64 -0
  397. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_darwin_ulock.hpp +158 -0
  398. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +3 -4
  399. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +10 -5
  400. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +4 -5
  401. data/src/cxx_supportlib/vendor-modified/boost/bind/apply.hpp +2 -60
  402. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +257 -1789
  403. data/src/cxx_supportlib/vendor-modified/boost/bind/{bind_cc.hpp → detail/bind_cc.hpp} +20 -20
  404. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf2_cc.hpp +210 -0
  405. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf_cc.hpp +405 -0
  406. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/integer_sequence.hpp +111 -0
  407. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/result_traits.hpp +13 -2
  408. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/tuple_for_each.hpp +64 -0
  409. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +140 -290
  410. data/src/cxx_supportlib/vendor-modified/boost/bind/placeholders.hpp +3 -16
  411. data/src/cxx_supportlib/vendor-modified/boost/bind/protect.hpp +0 -279
  412. data/src/cxx_supportlib/vendor-modified/boost/bind/std_placeholders.hpp +0 -6
  413. data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +2 -0
  414. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +4 -4
  415. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/is_evenly_divisible_by.hpp +1 -7
  416. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/requires_cxx11.hpp +23 -0
  417. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/scan_keyword.hpp +4 -2
  418. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +10 -6
  419. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_get.hpp +1 -1
  420. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +4 -4
  421. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_put.hpp +5 -5
  422. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_style.hpp +1 -1
  423. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +3 -2
  424. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +3 -3
  425. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/timezone.hpp +2 -1
  426. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/ios_base_state_ptr.hpp +7 -7
  427. data/src/cxx_supportlib/vendor-modified/boost/chrono/io_v1/chrono_io.hpp +3 -3
  428. data/src/cxx_supportlib/vendor-modified/boost/chrono/system_clocks.hpp +1 -0
  429. data/src/cxx_supportlib/vendor-modified/boost/chrono/time_point.hpp +1 -1
  430. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +5 -1
  431. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +1 -1
  432. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +4 -4
  433. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +1 -1
  434. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +7 -1
  435. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +4 -1
  436. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +41 -0
  437. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +6 -1
  438. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +4 -0
  439. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +20 -3
  440. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +89 -0
  441. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +5 -0
  442. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +4 -1
  443. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +1 -0
  444. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +4 -0
  445. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +16 -5
  446. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +4 -2
  447. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +5 -0
  448. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +1 -0
  449. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +4 -0
  450. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +4 -0
  451. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +6 -0
  452. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +4 -0
  453. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +10 -0
  454. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +4 -0
  455. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +23 -3
  456. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +13 -0
  457. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +2 -0
  458. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +19 -3
  459. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +139 -34
  460. data/src/cxx_supportlib/vendor-modified/boost/config/header_deprecated.hpp +1 -1
  461. data/src/cxx_supportlib/vendor-modified/boost/config/platform/wasm.hpp +6 -0
  462. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +45 -18
  463. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +11 -45
  464. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +42 -3
  465. data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +11 -0
  466. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +26 -21
  467. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +30 -26
  468. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +178 -39
  469. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +12 -12
  470. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +827 -303
  471. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
  472. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +57 -57
  473. data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -10
  474. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +155 -179
  475. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +6 -6
  476. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
  477. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +14 -15
  478. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
  479. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
  480. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +24 -21
  481. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +12 -0
  482. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +3 -0
  483. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +52 -16
  484. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_or_allocator_rebind.hpp +1 -2
  485. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +23 -13
  486. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +891 -182
  487. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +121 -66
  488. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +42 -42
  489. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +310 -231
  490. data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
  491. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
  492. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +16 -12
  493. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +91 -0
  494. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +8 -0
  495. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +213 -195
  496. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +10 -11
  497. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
  498. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +98 -12
  499. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +48 -12
  500. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +8 -10
  501. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +268 -120
  502. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
  503. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +12 -12
  504. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +49 -122
  505. data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +1 -7
  506. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
  507. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
  508. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +7 -11
  509. data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +28 -28
  510. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +265 -354
  511. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +1 -0
  512. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +3 -3
  513. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
  514. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +93 -11
  515. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +1364 -1296
  516. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +367 -260
  517. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +112 -93
  518. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +80 -125
  519. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +136 -119
  520. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +19 -14
  521. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +27 -21
  522. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +35 -22
  523. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +158 -45
  524. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +8 -3
  525. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +4 -4
  526. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +1 -0
  527. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +7 -7
  528. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/synchronized_pool_resource.hpp +3 -3
  529. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/unsynchronized_pool_resource.hpp +3 -3
  530. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +81 -83
  531. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +93 -90
  532. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +82 -127
  533. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +229 -245
  534. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +198 -175
  535. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +131 -87
  536. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +373 -374
  537. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +6 -7
  538. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
  539. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +618 -631
  540. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_integral.hpp +146 -0
  541. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_mix.hpp +113 -0
  542. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_range.hpp +408 -0
  543. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple_like.hpp +62 -0
  544. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/mulx.hpp +79 -0
  545. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +395 -581
  546. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +25 -24
  547. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_contiguous_range.hpp +98 -0
  548. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_described_class.hpp +37 -0
  549. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_range.hpp +41 -0
  550. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_tuple_like.hpp +36 -0
  551. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_unordered_range.hpp +38 -0
  552. data/src/cxx_supportlib/vendor-modified/boost/core/alignof.hpp +57 -0
  553. data/src/cxx_supportlib/vendor-modified/boost/core/alloc_construct.hpp +7 -81
  554. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_access.hpp +448 -215
  555. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_traits.hpp +112 -0
  556. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +418 -45
  557. data/src/cxx_supportlib/vendor-modified/boost/core/checked_delete.hpp +29 -3
  558. data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +100 -1
  559. data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +46 -0
  560. data/src/cxx_supportlib/vendor-modified/boost/core/default_allocator.hpp +19 -9
  561. data/src/cxx_supportlib/vendor-modified/boost/core/detail/is_same.hpp +39 -0
  562. data/src/cxx_supportlib/vendor-modified/boost/core/detail/lwt_unattended.hpp +66 -0
  563. data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
  564. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_pause.hpp +71 -0
  565. data/src/cxx_supportlib/vendor-modified/boost/{smart_ptr → core}/detail/sp_thread_sleep.hpp +39 -21
  566. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_yield.hpp +100 -0
  567. data/src/cxx_supportlib/vendor-modified/boost/core/detail/splitmix64.hpp +3 -3
  568. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +1272 -0
  569. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +78 -21
  570. data/src/cxx_supportlib/vendor-modified/boost/core/fclose_deleter.hpp +53 -0
  571. data/src/cxx_supportlib/vendor-modified/boost/core/functor.hpp +41 -0
  572. data/src/cxx_supportlib/vendor-modified/boost/core/identity.hpp +61 -0
  573. data/src/cxx_supportlib/vendor-modified/boost/core/invoke_swap.hpp +93 -0
  574. data/src/cxx_supportlib/vendor-modified/boost/core/is_same.hpp +10 -15
  575. data/src/cxx_supportlib/vendor-modified/boost/core/launder.hpp +69 -0
  576. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +41 -37
  577. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +8 -54
  578. data/src/cxx_supportlib/vendor-modified/boost/core/make_span.hpp +59 -0
  579. data/src/cxx_supportlib/vendor-modified/boost/core/max_align.hpp +82 -0
  580. data/src/cxx_supportlib/vendor-modified/boost/core/memory_resource.hpp +108 -0
  581. data/src/cxx_supportlib/vendor-modified/boost/core/noinit_adaptor.hpp +3 -0
  582. data/src/cxx_supportlib/vendor-modified/boost/core/noncopyable.hpp +1 -1
  583. data/src/cxx_supportlib/vendor-modified/boost/core/null_deleter.hpp +7 -0
  584. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
  585. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_traits.hpp +111 -60
  586. data/src/cxx_supportlib/vendor-modified/boost/core/quick_exit.hpp +1 -1
  587. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +23 -16
  588. data/src/cxx_supportlib/vendor-modified/boost/core/serialization.hpp +131 -0
  589. data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +31 -0
  590. data/src/cxx_supportlib/vendor-modified/boost/core/snprintf.hpp +173 -0
  591. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +401 -0
  592. data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +10 -40
  593. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +1186 -0
  594. data/src/cxx_supportlib/vendor-modified/boost/core/verbose_terminate_handler.hpp +88 -0
  595. data/src/cxx_supportlib/vendor-modified/boost/core/yield_primitives.hpp +12 -0
  596. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +1 -1
  597. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters.hpp +3 -3
  598. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters_limited.hpp +3 -3
  599. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +12 -13
  600. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/parsers.hpp +2 -2
  601. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.ipp +3 -3
  602. data/src/cxx_supportlib/vendor-modified/boost/date_time/iso_format.hpp +13 -13
  603. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +2 -2
  604. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/conversion.hpp +1 -1
  605. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_io.hpp +1 -1
  606. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters.hpp +4 -4
  607. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters_limited.hpp +2 -2
  608. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +1 -1
  609. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +1 -1
  610. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +2 -2
  611. data/src/cxx_supportlib/vendor-modified/boost/describe/bases.hpp +50 -0
  612. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +40 -0
  613. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/cx_streq.hpp +30 -0
  614. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/void_t.hpp +32 -0
  615. data/src/cxx_supportlib/vendor-modified/boost/describe/members.hpp +161 -0
  616. data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +33 -0
  617. data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +3 -7
  618. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +24 -126
  619. data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +3 -3
  620. data/src/cxx_supportlib/vendor-modified/boost/exception/current_exception_cast.hpp +1 -1
  621. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/clone_current_exception.hpp +1 -1
  622. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +1 -1
  623. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +58 -30
  624. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/is_output_streamable.hpp +1 -1
  625. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/object_hex_dump.hpp +1 -1
  626. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +24 -0
  627. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +1 -1
  628. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +4 -4
  629. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +85 -3
  630. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +1 -1
  631. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +2 -2
  632. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string.hpp +2 -2
  633. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string_stub.hpp +1 -1
  634. data/src/cxx_supportlib/vendor-modified/boost/function/function0.hpp +1 -3
  635. data/src/cxx_supportlib/vendor-modified/boost/function/function1.hpp +1 -3
  636. data/src/cxx_supportlib/vendor-modified/boost/function/function10.hpp +1 -3
  637. data/src/cxx_supportlib/vendor-modified/boost/function/function2.hpp +1 -3
  638. data/src/cxx_supportlib/vendor-modified/boost/function/function3.hpp +1 -3
  639. data/src/cxx_supportlib/vendor-modified/boost/function/function4.hpp +1 -3
  640. data/src/cxx_supportlib/vendor-modified/boost/function/function5.hpp +1 -3
  641. data/src/cxx_supportlib/vendor-modified/boost/function/function6.hpp +1 -3
  642. data/src/cxx_supportlib/vendor-modified/boost/function/function7.hpp +1 -3
  643. data/src/cxx_supportlib/vendor-modified/boost/function/function8.hpp +1 -3
  644. data/src/cxx_supportlib/vendor-modified/boost/function/function9.hpp +1 -3
  645. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +71 -223
  646. data/src/cxx_supportlib/vendor-modified/boost/function/function_fwd.hpp +36 -41
  647. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +428 -452
  648. data/src/cxx_supportlib/vendor-modified/boost/function/function_typeof.hpp +1 -31
  649. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +5 -61
  650. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +6 -10
  651. data/src/cxx_supportlib/vendor-modified/boost/integer/extended_euclidean.hpp +2 -2
  652. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_log2.hpp +85 -80
  653. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +32 -25
  654. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +16 -13
  655. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +45 -45
  656. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +32 -25
  657. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +104 -97
  658. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +87 -90
  659. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +29 -20
  660. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +77 -8
  661. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +2 -2
  662. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
  663. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +30 -30
  664. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/array_initializer.hpp +8 -7
  665. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +14 -14
  666. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +38 -39
  667. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +84 -15
  668. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +3 -3
  669. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +24 -24
  670. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/empty_node_checker.hpp +1 -1
  671. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +1 -1
  672. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +1 -32
  673. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/function_detector.hpp +1 -1
  674. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +14 -15
  675. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +277 -0
  676. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_combine.hpp +11 -49
  677. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_integral.hpp +119 -0
  678. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_mix.hpp +130 -0
  679. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +195 -115
  680. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +22 -26
  681. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +6 -6
  682. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +121 -75
  683. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +7 -7
  684. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +20 -20
  685. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +4 -4
  686. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/math.hpp +3 -3
  687. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +7 -1
  688. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +3 -3
  689. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_to_value.hpp +1 -1
  690. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +7 -17
  691. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +18 -18
  692. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/reverse_iterator.hpp +3 -140
  693. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +1 -1
  694. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +14 -14
  695. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +26 -19
  696. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +2 -2
  697. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +22 -22
  698. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +21 -21
  699. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +6 -6
  700. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +28 -28
  701. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/value_functors.hpp +10 -0
  702. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +70 -3
  703. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +1722 -995
  704. data/src/cxx_supportlib/vendor-modified/boost/intrusive/intrusive_fwd.hpp +2 -0
  705. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +84 -11
  706. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +68 -63
  707. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +2 -2
  708. data/src/cxx_supportlib/vendor-modified/boost/intrusive/options.hpp +17 -3
  709. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +15 -11
  710. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +12 -4
  711. data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +11 -4
  712. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +16 -13
  713. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +38 -38
  714. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +32 -25
  715. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +32 -25
  716. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +18 -15
  717. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +22 -22
  718. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +80 -79
  719. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +32 -25
  720. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +16 -13
  721. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +38 -36
  722. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +22 -19
  723. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +25 -21
  724. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +44 -37
  725. data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +2 -2
  726. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +64 -54
  727. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +11 -11
  728. data/src/cxx_supportlib/vendor-modified/boost/io/ios_state.hpp +2 -2
  729. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +11 -0
  730. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +6 -6
  731. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +1 -1
  732. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +5 -5
  733. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +10 -11
  734. data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +148 -0
  735. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +2 -2
  736. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +106 -25
  737. data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +8 -4
  738. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +7 -13
  739. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +59 -0
  740. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +113 -131
  741. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +618 -646
  742. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +83 -74
  743. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +26 -33
  744. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +22 -29
  745. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +73 -0
  746. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
  747. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +23 -18
  748. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +7 -9
  749. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +22 -161
  750. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +9 -12
  751. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/chrono.cpp +4 -2
  752. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/process_cpu_clocks.cpp +3 -1
  753. data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/thread_clock.cpp +3 -1
  754. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
  755. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +10 -18
  756. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +13 -14
  757. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +24 -14
  758. data/src/cxx_supportlib/vendor-modified/boost/limits.hpp +12 -12
  759. data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +7 -5
  760. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +48 -33
  761. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +92 -75
  762. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +216 -185
  763. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +11 -10
  764. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/heap_sort.hpp +22 -11
  765. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +9 -0
  766. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +125 -165
  767. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +24 -15
  768. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +16 -5
  769. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/search.hpp +79 -0
  770. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/set_difference.hpp +8 -2
  771. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +8 -5
  772. data/src/cxx_supportlib/vendor-modified/boost/move/algo/predicate.hpp +11 -11
  773. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +0 -1
  774. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +22 -1
  775. data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +5 -6
  776. data/src/cxx_supportlib/vendor-modified/boost/move/detail/addressof.hpp +61 -0
  777. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
  778. data/src/cxx_supportlib/vendor-modified/boost/move/detail/force_ptr.hpp +36 -0
  779. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +3 -3
  780. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +108 -9
  781. data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
  782. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +9 -52
  783. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils_core.hpp +15 -0
  784. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
  785. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +70 -26
  786. data/src/cxx_supportlib/vendor-modified/boost/move/detail/placement_new.hpp +2 -0
  787. data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +40 -33
  788. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +7 -3
  789. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_end.hpp +5 -0
  790. data/src/cxx_supportlib/vendor-modified/boost/move/detail/to_raw_pointer.hpp +1 -1
  791. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +90 -30
  792. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +90 -3
  793. data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +22 -22
  794. data/src/cxx_supportlib/vendor-modified/boost/move/make_unique.hpp +10 -0
  795. data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +65 -66
  796. data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +2 -2
  797. data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +38 -33
  798. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +1386 -0
  799. data/src/cxx_supportlib/vendor-modified/boost/mp11/bind.hpp +120 -0
  800. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/config.hpp +149 -0
  801. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_append.hpp +321 -0
  802. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_copy_if.hpp +48 -0
  803. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_count.hpp +147 -0
  804. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_defer.hpp +119 -0
  805. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_fold.hpp +166 -0
  806. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_front.hpp +50 -0
  807. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_list.hpp +39 -0
  808. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_value_list.hpp +41 -0
  809. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list.hpp +24 -0
  810. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list_v.hpp +27 -0
  811. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +87 -0
  812. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_min_element.hpp +51 -0
  813. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_plus.hpp +84 -0
  814. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_remove_if.hpp +48 -0
  815. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_rename.hpp +54 -0
  816. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_value.hpp +25 -0
  817. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_void.hpp +32 -0
  818. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_with_index.hpp +385 -0
  819. data/src/cxx_supportlib/vendor-modified/boost/mp11/function.hpp +222 -0
  820. data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +121 -0
  821. data/src/cxx_supportlib/vendor-modified/boost/mp11/integral.hpp +51 -0
  822. data/src/cxx_supportlib/vendor-modified/boost/mp11/list.hpp +481 -0
  823. data/src/cxx_supportlib/vendor-modified/boost/mp11/set.hpp +188 -0
  824. data/src/cxx_supportlib/vendor-modified/boost/mp11/utility.hpp +169 -0
  825. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +16 -0
  826. data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +1 -1
  827. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +6 -6
  828. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
  829. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +1 -1
  830. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/template_arity.hpp +1 -1
  831. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/yes_no.hpp +2 -1
  832. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +1 -1
  833. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +1 -1
  834. data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +1 -1
  835. data/src/cxx_supportlib/vendor-modified/boost/next_prior.hpp +3 -44
  836. data/src/cxx_supportlib/vendor-modified/boost/nondet_random.hpp +22 -0
  837. data/src/cxx_supportlib/vendor-modified/boost/none.hpp +1 -1
  838. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +15 -1
  839. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/int_float_mixture.hpp +5 -5
  840. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/sign_mixture.hpp +5 -5
  841. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +5 -5
  842. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/experimental_traits.hpp +4 -49
  843. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +3 -4
  844. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +16 -7
  845. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_hash.hpp +49 -0
  846. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +49 -48
  847. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +11 -11
  848. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +9 -9
  849. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +31 -260
  850. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_utility.hpp +41 -0
  851. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +169 -599
  852. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +4 -7
  853. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp +2 -2
  854. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/unmatched_argument.hpp +1 -1
  855. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/overloads.hpp +1 -1
  856. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tag.hpp +4 -4
  857. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/unwrap_cv_reference.hpp +1 -1
  858. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/void.hpp +1 -1
  859. data/src/cxx_supportlib/vendor-modified/boost/parameter/binding.hpp +3 -3
  860. data/src/cxx_supportlib/vendor-modified/boost/parameter/match.hpp +1 -1
  861. data/src/cxx_supportlib/vendor-modified/boost/parameter/template_keyword.hpp +1 -1
  862. data/src/cxx_supportlib/vendor-modified/boost/parameter/value_type.hpp +3 -3
  863. data/src/cxx_supportlib/vendor-modified/boost/pointer_cast.hpp +12 -24
  864. data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +22 -9
  865. data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +13 -0
  866. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/loongarch.h +41 -0
  867. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sparc.h +2 -2
  868. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +1 -0
  869. data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdc.h +1 -1
  870. data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdcpp.h +2 -2
  871. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/msvc.h +53 -0
  872. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std.h +1 -0
  873. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
  874. data/src/cxx_supportlib/vendor-modified/boost/predef/os/vms.h +1 -1
  875. data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +1 -0
  876. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  877. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +8 -2
  878. data/src/cxx_supportlib/vendor-modified/boost/random/beta_distribution.hpp +5 -5
  879. data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +15 -15
  880. data/src/cxx_supportlib/vendor-modified/boost/random/inversive_congruential.hpp +1 -1
  881. data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +203 -0
  882. data/src/cxx_supportlib/vendor-modified/boost/random/subtract_with_carry.hpp +14 -14
  883. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real_distribution.hpp +2 -2
  884. data/src/cxx_supportlib/vendor-modified/boost/random.hpp +1 -0
  885. data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +4 -82
  886. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/gcd_lcm.hpp +53 -0
  887. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_evenly_divisible_by.hpp +32 -0
  888. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_ratio.hpp +28 -0
  889. data/src/cxx_supportlib/vendor-modified/boost/ratio/include.hpp +1 -3
  890. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio.hpp +5 -249
  891. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_fwd.hpp +30 -56
  892. data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_io.hpp +0 -533
  893. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +8 -1
  894. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +1 -1
  895. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +3 -2
  896. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +1 -0
  897. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -7
  898. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +4 -3
  899. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +23 -13
  900. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +10 -10
  901. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +2 -0
  902. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +3 -2
  903. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +6 -0
  904. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +3 -1
  905. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +7 -7
  906. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +235 -104
  907. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +37 -43
  908. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +1 -23
  909. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +1 -0
  910. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/deprecated_macros.hpp +52 -0
  911. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +14 -18
  912. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_sp_deleter.hpp +7 -15
  913. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +40 -91
  914. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_convertible.hpp +0 -16
  915. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +1 -0
  916. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +4 -2
  917. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +1 -1
  918. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +13 -14
  919. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +16 -17
  920. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +17 -56
  921. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
  922. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_noexcept.hpp +5 -14
  923. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_type_traits.hpp +55 -0
  924. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +1 -0
  925. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_atomic.hpp +11 -2
  926. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_std_atomic.hpp +5 -6
  927. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +4 -6
  928. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +7 -9
  929. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +32 -119
  930. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ref_counter.hpp +17 -18
  931. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared.hpp +2 -5
  932. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +10 -8
  933. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +28 -564
  934. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_unique.hpp +64 -0
  935. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +17 -20
  936. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +20 -21
  937. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +34 -66
  938. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +79 -370
  939. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +31 -88
  940. data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +2 -1
  941. data/src/cxx_supportlib/vendor-modified/boost/system/detail/append_int.hpp +32 -0
  942. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +26 -8
  943. data/src/cxx_supportlib/vendor-modified/boost/system/detail/enable_if.hpp +3 -12
  944. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +38 -50
  945. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +76 -49
  946. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +261 -159
  947. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +145 -58
  948. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +7 -7
  949. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +17 -5
  950. data/src/cxx_supportlib/vendor-modified/boost/system/detail/interop_category.hpp +7 -7
  951. data/src/cxx_supportlib/vendor-modified/boost/system/detail/is_same.hpp +3 -13
  952. data/src/cxx_supportlib/vendor-modified/boost/system/detail/mutex.hpp +128 -0
  953. data/src/cxx_supportlib/vendor-modified/boost/system/detail/snprintf.hpp +1 -43
  954. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category.hpp +20 -77
  955. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category_impl.hpp +97 -0
  956. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category.hpp +7 -7
  957. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_impl.hpp +8 -20
  958. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_message.hpp +71 -0
  959. data/src/cxx_supportlib/vendor-modified/boost/system/errc.hpp +9 -2
  960. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +30 -59
  961. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/deque.hpp +1 -24
  962. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/functional.hpp +1 -14
  963. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/list.hpp +1 -14
  964. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_arg.hpp +2 -12
  965. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_traits.hpp +0 -11
  966. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/config.hpp +0 -2
  967. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/default_delete.hpp +0 -16
  968. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/pointer_traits.hpp +0 -11
  969. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/scoped_allocator.hpp +0 -11
  970. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/shared_ptr.hpp +0 -19
  971. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/unique_ptr.hpp +4 -6
  972. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/queue.hpp +2 -26
  973. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/tuple.hpp +1 -18
  974. data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/vector.hpp +1 -14
  975. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/invoke.hpp +11 -4
  976. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_to_unsigned.hpp +55 -0
  977. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_trim.hpp +29 -0
  978. data/src/cxx_supportlib/vendor-modified/boost/thread/externally_locked.hpp +5 -5
  979. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +0 -1
  980. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_any.hpp +3 -2
  981. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +1 -1
  982. data/src/cxx_supportlib/vendor-modified/boost/thread/scoped_thread.hpp +9 -0
  983. data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +4 -4
  984. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_guard.hpp +5 -0
  985. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +104 -6
  986. data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +2 -2
  987. data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +25 -24
  988. data/src/cxx_supportlib/vendor-modified/boost/tuple/tuple.hpp +1 -1
  989. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +4 -1
  990. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +27 -27
  991. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +27 -27
  992. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_swappable_cxx_11.hpp +70 -0
  993. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +22 -8
  994. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +2 -1
  995. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_floating_point.hpp +22 -0
  996. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_function.hpp +1 -1
  997. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_integral.hpp +3 -0
  998. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_function_pointer.hpp +1 -1
  999. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_swappable.hpp +4 -24
  1000. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_swappable.hpp +92 -0
  1001. data/src/cxx_supportlib/vendor-modified/boost/typeof/decltype.hpp +2 -3
  1002. data/src/cxx_supportlib/vendor-modified/boost/typeof/incr_registration_group.hpp +1 -10
  1003. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +5 -6
  1004. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/bitset.hpp +2 -4
  1005. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/complex.hpp +2 -4
  1006. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/deque.hpp +2 -5
  1007. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/fstream.hpp +2 -15
  1008. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/functional.hpp +4 -51
  1009. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iostream.hpp +2 -6
  1010. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/istream.hpp +2 -9
  1011. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iterator.hpp +2 -46
  1012. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/list.hpp +2 -5
  1013. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/locale.hpp +2 -29
  1014. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/map.hpp +2 -9
  1015. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/memory.hpp +4 -9
  1016. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/ostream.hpp +2 -6
  1017. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/queue.hpp +2 -5
  1018. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/set.hpp +2 -9
  1019. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/sstream.hpp +2 -19
  1020. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/stack.hpp +2 -5
  1021. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/streambuf.hpp +2 -5
  1022. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/string.hpp +2 -12
  1023. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/utility.hpp +2 -4
  1024. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/valarray.hpp +2 -10
  1025. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/vector.hpp +2 -5
  1026. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof.hpp +8 -202
  1027. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +1055 -0
  1028. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +66 -0
  1029. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +917 -0
  1030. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +67 -0
  1031. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_map.hpp +1202 -0
  1032. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_map_fwd.hpp +67 -0
  1033. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_set.hpp +1065 -0
  1034. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_set_fwd.hpp +67 -0
  1035. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocator_constructed.hpp +59 -0
  1036. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/archive_constructed.hpp +71 -0
  1037. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/bad_archive_exception.hpp +27 -0
  1038. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/concurrent_static_asserts.hpp +127 -0
  1039. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +900 -0
  1040. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +1993 -0
  1041. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2404 -0
  1042. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
  1043. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/element_type.hpp +64 -0
  1044. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_map_types.hpp +94 -0
  1045. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_set_types.hpp +50 -0
  1046. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/ignore_wshadow.hpp +35 -0
  1047. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_handle.hpp +319 -0
  1048. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_map_handle.hpp +56 -0
  1049. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_map_types.hpp +150 -0
  1050. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_set_handle.hpp +48 -0
  1051. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_set_types.hpp +101 -0
  1052. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/reentrancy_check.hpp +138 -0
  1053. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/restore_wshadow.hpp +11 -0
  1054. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/rw_spinlock.hpp +179 -0
  1055. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +661 -0
  1056. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/tuple_rotate_right.hpp +53 -0
  1057. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/types_constructibility.hpp +172 -0
  1058. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +1463 -3502
  1059. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +10 -31
  1060. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/mulx.hpp +129 -0
  1061. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/narrow_cast.hpp +44 -0
  1062. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/opt_storage.hpp +30 -0
  1063. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +214 -0
  1064. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialization_version.hpp +74 -0
  1065. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_container.hpp +204 -0
  1066. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_fca_container.hpp +156 -0
  1067. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_tracked_address.hpp +104 -0
  1068. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +8 -30
  1069. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/static_assert.hpp +16 -0
  1070. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/throw_exception.hpp +30 -0
  1071. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +237 -0
  1072. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/xmx.hpp +75 -0
  1073. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +70 -0
  1074. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +821 -0
  1075. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +59 -0
  1076. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +631 -0
  1077. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +58 -0
  1078. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +760 -994
  1079. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +35 -13
  1080. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +895 -0
  1081. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +59 -0
  1082. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +707 -0
  1083. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +58 -0
  1084. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_printers.hpp +414 -0
  1085. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +539 -664
  1086. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +35 -15
  1087. data/src/cxx_supportlib/vendor-modified/boost/utility/base_from_member.hpp +2 -1
  1088. data/src/cxx_supportlib/vendor-modified/boost/utility/binary.hpp +3 -2
  1089. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
  1090. data/src/cxx_supportlib/vendor-modified/boost/utility/in_place_factory.hpp +6 -0
  1091. data/src/cxx_supportlib/vendor-modified/boost/utility/result_of.hpp +13 -2
  1092. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +6 -2
  1093. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +24 -3
  1094. data/src/cxx_supportlib/vendor-modified/boost/utility/swap.hpp +4 -1
  1095. data/src/cxx_supportlib/vendor-modified/boost/utility/typed_in_place_factory.hpp +6 -1
  1096. data/src/cxx_supportlib/vendor-modified/boost/utility/value_init.hpp +12 -8
  1097. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  1098. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +2 -9
  1099. data/src/cxx_supportlib/vendor-modified/modp_b64_strict_aliasing.cpp +3 -3
  1100. data/src/helper-scripts/backtrace-sanitizer.rb +2 -2
  1101. data/src/helper-scripts/crash-watch.rb +1 -1
  1102. data/src/helper-scripts/download_binaries/extconf.rb +2 -2
  1103. data/src/helper-scripts/meteor-loader.rb +9 -4
  1104. data/src/helper-scripts/node-loader.js +2 -2
  1105. data/src/helper-scripts/prespawn +2 -2
  1106. data/src/helper-scripts/rack-loader.rb +2 -2
  1107. data/src/helper-scripts/rack-preloader.rb +2 -2
  1108. data/src/helper-scripts/wsgi-loader.py +36 -19
  1109. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +26 -34
  1110. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c.cxxcodebuilder +2 -2
  1111. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +14 -2
  1112. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c.cxxcodebuilder +2 -2
  1113. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +38 -50
  1114. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c.cxxcodebuilder +2 -2
  1115. data/src/nginx_module/ConfigGeneral/ManifestGeneration.c +2 -2
  1116. data/src/nginx_module/Configuration.c +8 -3
  1117. data/src/nginx_module/Configuration.h +1 -1
  1118. data/src/nginx_module/ContentHandler.c +1 -1
  1119. data/src/nginx_module/ContentHandler.h +1 -1
  1120. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +13 -2
  1121. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder +2 -2
  1122. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +38 -2
  1123. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c.cxxcodebuilder +2 -2
  1124. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +29 -2
  1125. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +2 -2
  1126. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +8 -2
  1127. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c.cxxcodebuilder +2 -2
  1128. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +10 -2
  1129. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -2
  1130. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +7 -26
  1131. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c.cxxcodebuilder +2 -2
  1132. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +13 -50
  1133. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c.cxxcodebuilder +2 -2
  1134. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +6 -18
  1135. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -2
  1136. data/src/nginx_module/StaticContentHandler.c +1 -1
  1137. data/src/nginx_module/StaticContentHandler.h +1 -1
  1138. data/src/nginx_module/ngx_http_passenger_module.c +2 -6
  1139. data/src/nginx_module/ngx_http_passenger_module.h +1 -1
  1140. data/src/nodejs_supportlib/phusion_passenger/line_reader.js +2 -2
  1141. data/src/ruby_native_extension/extconf.rb +3 -3
  1142. data/src/ruby_native_extension/passenger_native_support.c +22 -5
  1143. data/src/ruby_supportlib/phusion_passenger/abstract_installer.rb +2 -2
  1144. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance.rb +2 -2
  1145. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +2 -2
  1146. data/src/ruby_supportlib/phusion_passenger/admin_tools/memory_stats.rb +2 -2
  1147. data/src/ruby_supportlib/phusion_passenger/admin_tools.rb +2 -2
  1148. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +22 -26
  1149. data/src/ruby_supportlib/phusion_passenger/apache2/config_utils.rb +2 -2
  1150. data/src/ruby_supportlib/phusion_passenger/common_library.rb +18 -10
  1151. data/src/ruby_supportlib/phusion_passenger/config/about_command.rb +2 -2
  1152. data/src/ruby_supportlib/phusion_passenger/config/agent_compiler.rb +2 -2
  1153. data/src/ruby_supportlib/phusion_passenger/config/api_call_command.rb +2 -2
  1154. data/src/ruby_supportlib/phusion_passenger/config/build_native_support_command.rb +2 -2
  1155. data/src/ruby_supportlib/phusion_passenger/config/command.rb +2 -2
  1156. data/src/ruby_supportlib/phusion_passenger/config/compile_agent_command.rb +2 -2
  1157. data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +8 -4
  1158. data/src/ruby_supportlib/phusion_passenger/config/detach_process_command.rb +2 -2
  1159. data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +2 -2
  1160. data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +2 -2
  1161. data/src/ruby_supportlib/phusion_passenger/config/install_agent_command.rb +2 -2
  1162. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +12 -2
  1163. data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +2 -2
  1164. data/src/ruby_supportlib/phusion_passenger/config/list_instances_command.rb +2 -2
  1165. data/src/ruby_supportlib/phusion_passenger/config/main.rb +2 -2
  1166. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +15 -7
  1167. data/src/ruby_supportlib/phusion_passenger/config/reopen_logs_command.rb +2 -2
  1168. data/src/ruby_supportlib/phusion_passenger/config/restart_app_command.rb +2 -2
  1169. data/src/ruby_supportlib/phusion_passenger/config/system_metrics_command.rb +2 -2
  1170. data/src/ruby_supportlib/phusion_passenger/config/system_properties_command.rb +2 -2
  1171. data/src/ruby_supportlib/phusion_passenger/config/utils.rb +2 -2
  1172. data/src/ruby_supportlib/phusion_passenger/config/validate_install_command.rb +2 -2
  1173. data/src/ruby_supportlib/phusion_passenger/console_text_template.rb +2 -2
  1174. data/src/ruby_supportlib/phusion_passenger/constants.rb +3 -2
  1175. data/src/ruby_supportlib/phusion_passenger/debug_logging.rb +2 -2
  1176. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +15 -5
  1177. data/src/ruby_supportlib/phusion_passenger/message_channel.rb +2 -2
  1178. data/src/ruby_supportlib/phusion_passenger/message_client.rb +2 -2
  1179. data/src/ruby_supportlib/phusion_passenger/native_support.rb +12 -7
  1180. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +21 -30
  1181. data/src/ruby_supportlib/phusion_passenger/packaging.rb +3 -2
  1182. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +11 -12
  1183. data/src/ruby_supportlib/phusion_passenger/platform_info/apache_detector.rb +2 -2
  1184. data/src/ruby_supportlib/phusion_passenger/platform_info/binary_compatibility.rb +3 -3
  1185. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +56 -14
  1186. data/src/ruby_supportlib/phusion_passenger/platform_info/crypto.rb +2 -2
  1187. data/src/ruby_supportlib/phusion_passenger/platform_info/curl.rb +2 -2
  1188. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +9 -31
  1189. data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -0
  1190. data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/libs.rb +6 -6
  1191. data/src/ruby_supportlib/phusion_passenger/platform_info/linux.rb +2 -2
  1192. data/src/ruby_supportlib/phusion_passenger/platform_info/networking.rb +2 -2
  1193. data/src/ruby_supportlib/phusion_passenger/platform_info/openssl.rb +2 -2
  1194. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +7 -37
  1195. data/src/ruby_supportlib/phusion_passenger/platform_info/pcre.rb +13 -14
  1196. data/src/ruby_supportlib/phusion_passenger/platform_info/ruby.rb +4 -4
  1197. data/src/ruby_supportlib/phusion_passenger/platform_info/zlib.rb +2 -2
  1198. data/src/ruby_supportlib/phusion_passenger/platform_info.rb +2 -2
  1199. data/src/ruby_supportlib/phusion_passenger/plugin.rb +2 -2
  1200. data/src/ruby_supportlib/phusion_passenger/preloader_shared_helpers.rb +14 -8
  1201. data/src/ruby_supportlib/phusion_passenger/public_api.rb +5 -2
  1202. data/src/ruby_supportlib/phusion_passenger/rack/handler.rb +73 -0
  1203. data/src/ruby_supportlib/phusion_passenger/rack/out_of_band_gc.rb +2 -2
  1204. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +14 -3
  1205. data/src/ruby_supportlib/phusion_passenger/rack_handler.rb +32 -58
  1206. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -2
  1207. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +2 -2
  1208. data/src/ruby_supportlib/phusion_passenger/ruby_core_enhancements.rb +7 -2
  1209. data/src/ruby_supportlib/phusion_passenger/ruby_core_io_enhancements.rb +2 -2
  1210. data/src/ruby_supportlib/phusion_passenger/simple_benchmarking.rb +2 -2
  1211. data/src/ruby_supportlib/phusion_passenger/standalone/app_finder.rb +2 -2
  1212. data/src/ruby_supportlib/phusion_passenger/standalone/command.rb +2 -2
  1213. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +27 -23
  1214. data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +2 -2
  1215. data/src/ruby_supportlib/phusion_passenger/standalone/control_utils.rb +2 -2
  1216. data/src/ruby_supportlib/phusion_passenger/standalone/main.rb +2 -2
  1217. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +6 -3
  1218. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +3 -3
  1219. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +2 -6
  1220. data/src/ruby_supportlib/phusion_passenger/standalone/status_command.rb +3 -4
  1221. data/src/ruby_supportlib/phusion_passenger/standalone/stop_command.rb +9 -3
  1222. data/src/ruby_supportlib/phusion_passenger/standalone/version_command.rb +2 -2
  1223. data/src/ruby_supportlib/phusion_passenger/utils/ansi_colors.rb +2 -2
  1224. data/src/ruby_supportlib/phusion_passenger/utils/download.rb +2 -2
  1225. data/src/ruby_supportlib/phusion_passenger/utils/file_system_watcher.rb +2 -2
  1226. data/src/ruby_supportlib/phusion_passenger/utils/hosts_file_parser.rb +2 -2
  1227. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +7 -198
  1228. data/src/ruby_supportlib/phusion_passenger/utils/lock.rb +2 -2
  1229. data/src/ruby_supportlib/phusion_passenger/utils/native_support_utils.rb +2 -2
  1230. data/src/ruby_supportlib/phusion_passenger/utils/progress_bar.rb +2 -2
  1231. data/src/ruby_supportlib/phusion_passenger/utils/strscan.rb +67 -0
  1232. data/src/ruby_supportlib/phusion_passenger/utils/terminal_choice_menu.rb +2 -2
  1233. data/src/ruby_supportlib/phusion_passenger/utils/unseekable_socket.rb +2 -2
  1234. data/src/ruby_supportlib/phusion_passenger/utils.rb +8 -17
  1235. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/app.rb +2 -2
  1236. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/base.rb +1 -1
  1237. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +5 -1
  1238. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/lldb_controller.rb +6 -2
  1239. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/utils.rb +1 -1
  1240. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/version.rb +1 -1
  1241. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/lock_file.rb +1 -1
  1242. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/spawn.rb +1 -1
  1243. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller/version.rb +1 -1
  1244. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +1 -1
  1245. data/src/ruby_supportlib/phusion_passenger.rb +11 -11
  1246. data/src/schema_printer/SchemaPrinterMain.cpp +2 -6
  1247. data/src/schema_printer/SchemaPrinterMain.cpp.cxxcodebuilder +2 -2
  1248. metadata +211 -741
  1249. data/dev/webpacketpp.patch +0 -39
  1250. data/src/agent/Core/AdminPanelConnector.h +0 -681
  1251. data/src/cxx_supportlib/DataStructures/HashMap.h +0 -60
  1252. data/src/cxx_supportlib/FileTools/LargeFiles.cpp +0 -41
  1253. data/src/cxx_supportlib/ServerKit/http_parser.cpp +0 -2265
  1254. data/src/cxx_supportlib/ServerKit/http_parser.h +0 -330
  1255. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +0 -975
  1256. data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +0 -19
  1257. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of.hpp +0 -54
  1258. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of_forward.hpp +0 -20
  1259. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +0 -21
  1260. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc.hpp +0 -52
  1261. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of.hpp +0 -31
  1262. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of_cxx11.hpp +0 -23
  1263. data/src/cxx_supportlib/vendor-modified/boost/align/detail/element_type.hpp +0 -91
  1264. data/src/cxx_supportlib/vendor-modified/boost/align/detail/integral_constant.hpp +0 -53
  1265. data/src/cxx_supportlib/vendor-modified/boost/align/detail/min_size.hpp +0 -26
  1266. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +0 -456
  1267. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +0 -302
  1268. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +0 -179
  1269. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +0 -179
  1270. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +0 -224
  1271. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +0 -37
  1272. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +0 -1267
  1273. data/src/cxx_supportlib/vendor-modified/boost/asio/awaitable.hpp +0 -135
  1274. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +0 -1305
  1275. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +0 -705
  1276. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +0 -292
  1277. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +0 -1296
  1278. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +0 -800
  1279. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +0 -909
  1280. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +0 -578
  1281. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +0 -1917
  1282. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +0 -2600
  1283. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +0 -409
  1284. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +0 -689
  1285. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +0 -1122
  1286. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +0 -454
  1287. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +0 -38
  1288. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +0 -823
  1289. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +0 -723
  1290. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +0 -756
  1291. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +0 -2500
  1292. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +0 -255
  1293. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +0 -27
  1294. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +0 -281
  1295. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +0 -27
  1296. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +0 -247
  1297. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +0 -27
  1298. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +0 -523
  1299. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_signal.hpp +0 -361
  1300. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_state.hpp +0 -237
  1301. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_type.hpp +0 -176
  1302. data/src/cxx_supportlib/vendor-modified/boost/asio/co_spawn.hpp +0 -501
  1303. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +0 -220
  1304. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +0 -138
  1305. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +0 -1138
  1306. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +0 -330
  1307. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +0 -40
  1308. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +0 -132
  1309. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +0 -114
  1310. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +0 -40
  1311. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +0 -34
  1312. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +0 -32
  1313. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +0 -66
  1314. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_cancellation_state.hpp +0 -165
  1315. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +0 -71
  1316. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +0 -1073
  1317. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/blocking_executor_op.hpp +0 -109
  1318. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +0 -68
  1319. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +0 -652
  1320. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +0 -128
  1321. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bulk_executor_op.hpp +0 -90
  1322. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +0 -127
  1323. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +0 -68
  1324. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +0 -192
  1325. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +0 -90
  1326. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +0 -94
  1327. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +0 -122
  1328. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +0 -151
  1329. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +0 -1938
  1330. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +0 -416
  1331. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +0 -33
  1332. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +0 -62
  1333. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +0 -34
  1334. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +0 -337
  1335. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +0 -38
  1336. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +0 -141
  1337. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +0 -150
  1338. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +0 -150
  1339. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +0 -224
  1340. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +0 -278
  1341. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +0 -50
  1342. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +0 -85
  1343. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_function.hpp +0 -206
  1344. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +0 -86
  1345. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +0 -41
  1346. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +0 -82
  1347. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/functional.hpp +0 -46
  1348. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +0 -33
  1349. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +0 -93
  1350. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +0 -70
  1351. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +0 -67
  1352. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +0 -101
  1353. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +0 -54
  1354. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +0 -290
  1355. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +0 -45
  1356. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +0 -80
  1357. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +0 -268
  1358. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +0 -561
  1359. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +0 -527
  1360. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +0 -333
  1361. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +0 -120
  1362. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +0 -610
  1363. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +0 -101
  1364. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +0 -462
  1365. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +0 -111
  1366. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +0 -819
  1367. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +0 -173
  1368. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +0 -398
  1369. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +0 -115
  1370. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +0 -601
  1371. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +0 -76
  1372. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +0 -131
  1373. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +0 -65
  1374. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +0 -48
  1375. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +0 -86
  1376. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +0 -48
  1377. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +0 -225
  1378. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_serial_port_service.ipp +0 -151
  1379. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +0 -302
  1380. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +0 -160
  1381. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/scheduler.ipp +0 -661
  1382. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +0 -126
  1383. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +0 -359
  1384. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +0 -96
  1385. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +0 -199
  1386. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +0 -670
  1387. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +0 -3966
  1388. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +0 -187
  1389. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +0 -356
  1390. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +0 -160
  1391. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +0 -89
  1392. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +0 -204
  1393. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/thread_context.ipp +0 -37
  1394. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +0 -47
  1395. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +0 -99
  1396. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +0 -103
  1397. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +0 -86
  1398. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_object_impl.hpp +0 -174
  1399. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +0 -314
  1400. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +0 -128
  1401. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +0 -72
  1402. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +0 -254
  1403. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/limits.hpp +0 -26
  1404. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +0 -61
  1405. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +0 -64
  1406. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -135
  1407. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +0 -50
  1408. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/non_const_lvalue.hpp +0 -56
  1409. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +0 -45
  1410. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +0 -108
  1411. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +0 -49
  1412. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +0 -61
  1413. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +0 -66
  1414. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +0 -70
  1415. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +0 -71
  1416. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +0 -521
  1417. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +0 -62
  1418. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +0 -69
  1419. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +0 -70
  1420. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +0 -173
  1421. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +0 -216
  1422. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +0 -164
  1423. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +0 -40
  1424. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +0 -91
  1425. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +0 -149
  1426. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +0 -177
  1427. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +0 -120
  1428. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +0 -82
  1429. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +0 -78
  1430. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +0 -87
  1431. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +0 -66
  1432. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +0 -111
  1433. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +0 -81
  1434. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +0 -218
  1435. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +0 -511
  1436. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +0 -100
  1437. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_serial_port_service.hpp +0 -239
  1438. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +0 -244
  1439. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +0 -125
  1440. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +0 -161
  1441. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +0 -166
  1442. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +0 -147
  1443. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -164
  1444. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +0 -158
  1445. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +0 -607
  1446. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +0 -654
  1447. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +0 -100
  1448. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +0 -32
  1449. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_fwd.hpp +0 -42
  1450. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +0 -73
  1451. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +0 -214
  1452. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +0 -107
  1453. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +0 -44
  1454. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +0 -142
  1455. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +0 -47
  1456. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +0 -152
  1457. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +0 -147
  1458. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +0 -160
  1459. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler.hpp +0 -231
  1460. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_operation.hpp +0 -80
  1461. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_thread_info.hpp +0 -42
  1462. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +0 -103
  1463. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +0 -89
  1464. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +0 -48
  1465. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +0 -250
  1466. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +0 -166
  1467. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +0 -46
  1468. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +0 -92
  1469. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +0 -49
  1470. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +0 -51
  1471. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +0 -231
  1472. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +0 -100
  1473. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +0 -385
  1474. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +0 -318
  1475. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +0 -93
  1476. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +0 -419
  1477. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +0 -64
  1478. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/source_location.hpp +0 -47
  1479. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +0 -54
  1480. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +0 -190
  1481. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +0 -64
  1482. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +0 -72
  1483. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +0 -75
  1484. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +0 -83
  1485. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +0 -73
  1486. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +0 -175
  1487. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +0 -146
  1488. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +0 -49
  1489. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +0 -62
  1490. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +0 -53
  1491. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +0 -101
  1492. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +0 -258
  1493. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +0 -55
  1494. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +0 -53
  1495. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +0 -391
  1496. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +0 -70
  1497. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +0 -105
  1498. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +0 -68
  1499. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +0 -35
  1500. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +0 -42
  1501. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +0 -71
  1502. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +0 -158
  1503. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +0 -294
  1504. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +0 -92
  1505. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +0 -51
  1506. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +0 -130
  1507. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +0 -153
  1508. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +0 -329
  1509. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +0 -123
  1510. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +0 -361
  1511. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +0 -339
  1512. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +0 -2348
  1513. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bad_executor.hpp +0 -49
  1514. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +0 -1553
  1515. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +0 -1214
  1516. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +0 -401
  1517. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +0 -1217
  1518. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +0 -493
  1519. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +0 -235
  1520. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +0 -223
  1521. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_invocable.hpp +0 -154
  1522. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +0 -107
  1523. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_receiver.hpp +0 -130
  1524. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/bulk_sender.hpp +0 -263
  1525. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/submit_receiver.hpp +0 -235
  1526. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/void_receiver.hpp +0 -92
  1527. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +0 -289
  1528. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +0 -254
  1529. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/bad_executor.ipp +0 -42
  1530. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/receiver_invocation_error.ipp +0 -38
  1531. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/invocable_archetype.hpp +0 -73
  1532. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +0 -1118
  1533. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +0 -228
  1534. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +0 -96
  1535. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +0 -869
  1536. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/prefer_only.hpp +0 -333
  1537. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +0 -282
  1538. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver_invocation_error.hpp +0 -50
  1539. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +0 -867
  1540. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +0 -291
  1541. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +0 -88
  1542. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +0 -313
  1543. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +0 -254
  1544. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +0 -254
  1545. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +0 -487
  1546. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +0 -251
  1547. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +0 -454
  1548. data/src/cxx_supportlib/vendor-modified/boost/asio/execution.hpp +0 -48
  1549. data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +0 -414
  1550. data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +0 -349
  1551. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +0 -304
  1552. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/append.hpp +0 -73
  1553. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_single.hpp +0 -137
  1554. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_tuple.hpp +0 -133
  1555. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/awaitable_operators.hpp +0 -538
  1556. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/cancellation_condition.hpp +0 -157
  1557. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +0 -1057
  1558. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/deferred.hpp +0 -607
  1559. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/completion_handler_erasure.hpp +0 -160
  1560. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +0 -120
  1561. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_traits.hpp +0 -185
  1562. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +0 -181
  1563. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/append.hpp +0 -219
  1564. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +0 -231
  1565. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_tuple.hpp +0 -248
  1566. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/deferred.hpp +0 -106
  1567. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +0 -434
  1568. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/prepend.hpp +0 -219
  1569. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +0 -100
  1570. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +0 -217
  1571. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/prepend.hpp +0 -73
  1572. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +0 -608
  1573. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +0 -284
  1574. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +0 -195
  1575. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +0 -125
  1576. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +0 -135
  1577. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +0 -112
  1578. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +0 -123
  1579. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +0 -124
  1580. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +0 -129
  1581. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +0 -106
  1582. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +0 -56
  1583. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +0 -113
  1584. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +0 -46
  1585. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +0 -762
  1586. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +0 -500
  1587. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +0 -480
  1588. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +0 -348
  1589. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/compose.hpp +0 -689
  1590. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +0 -906
  1591. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +0 -258
  1592. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +0 -132
  1593. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +0 -253
  1594. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +0 -130
  1595. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +0 -111
  1596. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +0 -84
  1597. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +0 -302
  1598. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +0 -45
  1599. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +0 -64
  1600. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +0 -446
  1601. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +0 -177
  1602. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/multiple_exceptions.ipp +0 -51
  1603. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +0 -258
  1604. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +0 -1201
  1605. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +0 -735
  1606. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +0 -3317
  1607. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +0 -611
  1608. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +0 -61
  1609. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +0 -556
  1610. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +0 -519
  1611. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +0 -85
  1612. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +0 -36
  1613. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +0 -94
  1614. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +0 -187
  1615. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +0 -356
  1616. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +0 -143
  1617. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_awaitable.hpp +0 -293
  1618. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +0 -1030
  1619. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +0 -1102
  1620. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +0 -646
  1621. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +0 -1552
  1622. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +0 -378
  1623. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +0 -35
  1624. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +0 -20
  1625. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +0 -292
  1626. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +0 -357
  1627. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +0 -164
  1628. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +0 -136
  1629. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +0 -384
  1630. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +0 -185
  1631. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +0 -131
  1632. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +0 -55
  1633. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +0 -293
  1634. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +0 -1078
  1635. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +0 -115
  1636. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +0 -194
  1637. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +0 -246
  1638. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +0 -313
  1639. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +0 -143
  1640. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +0 -201
  1641. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +0 -568
  1642. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +0 -44
  1643. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +0 -117
  1644. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +0 -69
  1645. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +0 -241
  1646. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +0 -69
  1647. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +0 -212
  1648. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +0 -69
  1649. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +0 -352
  1650. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +0 -45
  1651. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +0 -56
  1652. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +0 -56
  1653. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +0 -218
  1654. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +0 -55
  1655. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +0 -187
  1656. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +0 -193
  1657. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +0 -263
  1658. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +0 -237
  1659. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +0 -131
  1660. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +0 -45
  1661. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +0 -157
  1662. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +0 -113
  1663. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +0 -72
  1664. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +0 -71
  1665. data/src/cxx_supportlib/vendor-modified/boost/asio/is_applicable_property.hpp +0 -63
  1666. data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +0 -48
  1667. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +0 -61
  1668. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +0 -61
  1669. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +0 -249
  1670. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +0 -103
  1671. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +0 -82
  1672. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +0 -141
  1673. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +0 -133
  1674. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +0 -92
  1675. data/src/cxx_supportlib/vendor-modified/boost/asio/multiple_exceptions.hpp +0 -60
  1676. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +0 -128
  1677. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +0 -153
  1678. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +0 -710
  1679. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +0 -503
  1680. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +0 -39
  1681. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +0 -92
  1682. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +0 -39
  1683. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +0 -128
  1684. data/src/cxx_supportlib/vendor-modified/boost/asio/prefer.hpp +0 -738
  1685. data/src/cxx_supportlib/vendor-modified/boost/asio/query.hpp +0 -328
  1686. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +0 -1390
  1687. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +0 -740
  1688. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +0 -3033
  1689. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +0 -68
  1690. data/src/cxx_supportlib/vendor-modified/boost/asio/require.hpp +0 -575
  1691. data/src/cxx_supportlib/vendor-modified/boost/asio/require_concept.hpp +0 -356
  1692. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +0 -38
  1693. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +0 -169
  1694. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +0 -30
  1695. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +0 -561
  1696. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -346
  1697. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +0 -763
  1698. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +0 -211
  1699. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +0 -121
  1700. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +0 -172
  1701. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +0 -69
  1702. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +0 -365
  1703. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +0 -167
  1704. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +0 -427
  1705. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +0 -103
  1706. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +0 -34
  1707. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +0 -68
  1708. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +0 -74
  1709. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +0 -71
  1710. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +0 -208
  1711. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +0 -64
  1712. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +0 -78
  1713. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +0 -129
  1714. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/host_name_verification.hpp +0 -92
  1715. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +0 -69
  1716. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +0 -1247
  1717. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +0 -104
  1718. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/host_name_verification.ipp +0 -75
  1719. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +0 -166
  1720. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +0 -29
  1721. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +0 -100
  1722. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +0 -974
  1723. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +0 -54
  1724. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +0 -69
  1725. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +0 -65
  1726. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +0 -28
  1727. data/src/cxx_supportlib/vendor-modified/boost/asio/static_thread_pool.hpp +0 -33
  1728. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +0 -44
  1729. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +0 -571
  1730. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +0 -35
  1731. data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +0 -92
  1732. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +0 -686
  1733. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +0 -44
  1734. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +0 -282
  1735. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +0 -1133
  1736. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +0 -88
  1737. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_free.hpp +0 -116
  1738. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_member.hpp +0 -116
  1739. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_free.hpp +0 -114
  1740. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_member.hpp +0 -114
  1741. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/equality_comparable.hpp +0 -106
  1742. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_free.hpp +0 -110
  1743. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_member.hpp +0 -110
  1744. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_free.hpp +0 -110
  1745. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_member.hpp +0 -110
  1746. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_free.hpp +0 -110
  1747. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_member.hpp +0 -110
  1748. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_static_constexpr_member.hpp +0 -110
  1749. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_free.hpp +0 -110
  1750. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_member.hpp +0 -110
  1751. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_free.hpp +0 -110
  1752. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_member.hpp +0 -110
  1753. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_free.hpp +0 -110
  1754. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_member.hpp +0 -110
  1755. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_free.hpp +0 -110
  1756. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_member.hpp +0 -110
  1757. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_free.hpp +0 -114
  1758. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_member.hpp +0 -114
  1759. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_free.hpp +0 -236
  1760. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_member.hpp +0 -236
  1761. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_free.hpp +0 -110
  1762. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_member.hpp +0 -110
  1763. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_query.hpp +0 -110
  1764. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require.hpp +0 -125
  1765. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require_concept.hpp +0 -126
  1766. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_free.hpp +0 -114
  1767. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_member.hpp +0 -114
  1768. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +0 -24
  1769. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +0 -35
  1770. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +0 -40
  1771. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +0 -20
  1772. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +0 -26
  1773. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +0 -256
  1774. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +0 -27
  1775. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +0 -26
  1776. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +0 -21
  1777. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +0 -168
  1778. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +0 -162
  1779. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +0 -73
  1780. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +0 -23
  1781. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +0 -58
  1782. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +0 -437
  1783. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +0 -363
  1784. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +0 -512
  1785. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +0 -496
  1786. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +0 -40
  1787. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +0 -41
  1788. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +0 -147
  1789. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +0 -39
  1790. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +0 -39
  1791. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +0 -1348
  1792. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +0 -748
  1793. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +0 -23
  1794. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +0 -187
  1795. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_windows.hpp +0 -201
  1796. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_windows.hpp +0 -67
  1797. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_windows.hpp +0 -55
  1798. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_windows.hpp +0 -150
  1799. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf2_cc.hpp +0 -228
  1800. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf_cc.hpp +0 -441
  1801. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_template.hpp +0 -345
  1802. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_cc.hpp +0 -103
  1803. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_template.hpp +0 -1047
  1804. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_vw.hpp +0 -130
  1805. data/src/cxx_supportlib/vendor-modified/boost/bind/storage.hpp +0 -475
  1806. data/src/cxx_supportlib/vendor-modified/boost/checked_delete.hpp +0 -17
  1807. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +0 -71
  1808. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/float_functions.hpp +0 -336
  1809. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_float.hpp +0 -271
  1810. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/limits.hpp +0 -62
  1811. data/src/cxx_supportlib/vendor-modified/boost/container_hash/extensions.hpp +0 -361
  1812. data/src/cxx_supportlib/vendor-modified/boost/detail/atomic_count.hpp +0 -21
  1813. data/src/cxx_supportlib/vendor-modified/boost/detail/container_fwd.hpp +0 -157
  1814. data/src/cxx_supportlib/vendor-modified/boost/function/detail/function_iterate.hpp +0 -16
  1815. data/src/cxx_supportlib/vendor-modified/boost/function/detail/gen_maybe_include.pl +0 -39
  1816. data/src/cxx_supportlib/vendor-modified/boost/function/detail/maybe_include.hpp +0 -369
  1817. data/src/cxx_supportlib/vendor-modified/boost/function/detail/prologue.hpp +0 -26
  1818. data/src/cxx_supportlib/vendor-modified/boost/function/gen_function_N.pl +0 -26
  1819. data/src/cxx_supportlib/vendor-modified/boost/functional/hash_fwd.hpp +0 -6
  1820. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +0 -1058
  1821. data/src/cxx_supportlib/vendor-modified/boost/pointer_to_other.hpp +0 -55
  1822. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/abs.hpp +0 -89
  1823. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/gcd.hpp +0 -124
  1824. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/lcm.hpp +0 -126
  1825. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/sign.hpp +0 -89
  1826. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/overflow_helpers.hpp +0 -367
  1827. data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/ratio_io.hpp +0 -1342
  1828. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/abs.hpp +0 -30
  1829. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/arithmetic.hpp +0 -22
  1830. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/comparison.hpp +0 -19
  1831. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/divides.hpp +0 -30
  1832. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/equal_to.hpp +0 -30
  1833. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/gcd.hpp +0 -30
  1834. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater.hpp +0 -30
  1835. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater_equal.hpp +0 -30
  1836. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/lcm.hpp +0 -30
  1837. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less.hpp +0 -30
  1838. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less_equal.hpp +0 -30
  1839. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/minus.hpp +0 -30
  1840. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/negate.hpp +0 -30
  1841. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/not_equal_to.hpp +0 -30
  1842. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/numeric_cast.hpp +0 -31
  1843. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/plus.hpp +0 -30
  1844. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_c_tag.hpp +0 -25
  1845. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_constant.hpp +0 -15
  1846. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/sign.hpp +0 -30
  1847. data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/times.hpp +0 -30
  1848. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/indexed_bit_flag.hpp +0 -54
  1849. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/operator_bool.hpp +0 -64
  1850. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_forward.hpp +0 -52
  1851. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_nullptr_t.hpp +0 -45
  1852. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_obsolete.hpp +0 -32
  1853. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_thread_pause.hpp +0 -51
  1854. data/src/cxx_supportlib/vendor-modified/boost/swap.hpp +0 -17
  1855. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +0 -278
  1856. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +0 -297
  1857. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +0 -265
  1858. data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +0 -100
  1859. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -58
  1860. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +0 -34
  1861. data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +0 -118
  1862. data/src/cxx_supportlib/vendor-modified/boost/typeof/integral_template_param.hpp +0 -80
  1863. data/src/cxx_supportlib/vendor-modified/boost/typeof/message.hpp +0 -8
  1864. data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +0 -121
  1865. data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +0 -60
  1866. data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +0 -38
  1867. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions.hpp +0 -50
  1868. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +0 -135
  1869. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +0 -61
  1870. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +0 -32
  1871. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +0 -160
  1872. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +0 -149
  1873. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +0 -27
  1874. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_template_param.hpp +0 -37
  1875. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +0 -187
  1876. data/src/cxx_supportlib/vendor-modified/boost/typeof/unsupported.hpp +0 -29
  1877. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +0 -166
  1878. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +0 -321
  1879. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +0 -471
  1880. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +0 -621
  1881. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +0 -171
  1882. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +0 -63
  1883. data/src/cxx_supportlib/vendor-modified/websocketpp/COPYING +0 -145
  1884. data/src/cxx_supportlib/vendor-modified/websocketpp/changelog.md +0 -444
  1885. data/src/cxx_supportlib/vendor-modified/websocketpp/readme.md +0 -49
  1886. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/base64/base64.hpp +0 -178
  1887. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/client.hpp +0 -33
  1888. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/close.hpp +0 -353
  1889. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/asio.hpp +0 -141
  1890. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/asio_ssl.hpp +0 -39
  1891. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/chrono.hpp +0 -68
  1892. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/connection_hdl.hpp +0 -52
  1893. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/cpp11.hpp +0 -162
  1894. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/functional.hpp +0 -100
  1895. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/md5.hpp +0 -448
  1896. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/memory.hpp +0 -88
  1897. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/network.hpp +0 -106
  1898. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/platforms.hpp +0 -46
  1899. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/random.hpp +0 -82
  1900. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/regex.hpp +0 -59
  1901. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/stdint.hpp +0 -73
  1902. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/system_error.hpp +0 -84
  1903. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/thread.hpp +0 -88
  1904. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/time.hpp +0 -56
  1905. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/type_traits.hpp +0 -65
  1906. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/concurrency/basic.hpp +0 -46
  1907. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/concurrency/none.hpp +0 -80
  1908. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/asio.hpp +0 -77
  1909. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/asio_client.hpp +0 -77
  1910. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/asio_no_tls.hpp +0 -73
  1911. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/asio_no_tls_client.hpp +0 -73
  1912. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/boost_config.hpp +0 -72
  1913. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/core.hpp +0 -297
  1914. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/core_client.hpp +0 -294
  1915. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/debug.hpp +0 -286
  1916. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/debug_asio.hpp +0 -77
  1917. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/debug_asio_no_tls.hpp +0 -73
  1918. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/minimal_client.hpp +0 -72
  1919. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/config/minimal_server.hpp +0 -312
  1920. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/connection.hpp +0 -1642
  1921. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/connection_base.hpp +0 -38
  1922. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/endpoint.hpp +0 -700
  1923. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/endpoint_base.hpp +0 -38
  1924. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/error.hpp +0 -277
  1925. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/extensions/extension.hpp +0 -102
  1926. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/extensions/permessage_deflate/disabled.hpp +0 -129
  1927. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/extensions/permessage_deflate/enabled.hpp +0 -817
  1928. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/frame.hpp +0 -864
  1929. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/constants.hpp +0 -308
  1930. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/impl/parser.hpp +0 -200
  1931. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/impl/request.hpp +0 -191
  1932. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/impl/response.hpp +0 -266
  1933. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/parser.hpp +0 -629
  1934. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/request.hpp +0 -124
  1935. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/http/response.hpp +0 -188
  1936. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/impl/connection_impl.hpp +0 -2375
  1937. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/impl/endpoint_impl.hpp +0 -269
  1938. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/impl/utilities_impl.hpp +0 -87
  1939. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/logger/basic.hpp +0 -199
  1940. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/logger/levels.hpp +0 -203
  1941. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/logger/stub.hpp +0 -119
  1942. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/logger/syslog.hpp +0 -146
  1943. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/message_buffer/alloc.hpp +0 -105
  1944. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/message_buffer/message.hpp +0 -340
  1945. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/message_buffer/pool.hpp +0 -229
  1946. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/base.hpp +0 -299
  1947. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi00.hpp +0 -462
  1948. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi07.hpp +0 -78
  1949. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi08.hpp +0 -83
  1950. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi13.hpp +0 -1078
  1951. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/processor.hpp +0 -407
  1952. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/random/none.hpp +0 -60
  1953. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/random/random_device.hpp +0 -80
  1954. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/roles/client_endpoint.hpp +0 -173
  1955. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/roles/server_endpoint.hpp +0 -195
  1956. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/server.hpp +0 -33
  1957. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/sha1/sha1.hpp +0 -189
  1958. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/base.hpp +0 -232
  1959. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/connection.hpp +0 -1197
  1960. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/endpoint.hpp +0 -1182
  1961. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/security/base.hpp +0 -159
  1962. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/security/none.hpp +0 -372
  1963. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/asio/security/tls.hpp +0 -474
  1964. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/base/connection.hpp +0 -238
  1965. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/base/endpoint.hpp +0 -77
  1966. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/debug/base.hpp +0 -104
  1967. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/debug/connection.hpp +0 -412
  1968. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/debug/endpoint.hpp +0 -140
  1969. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/iostream/base.hpp +0 -133
  1970. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/iostream/connection.hpp +0 -714
  1971. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/iostream/endpoint.hpp +0 -222
  1972. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/stub/base.hpp +0 -95
  1973. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/stub/connection.hpp +0 -286
  1974. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/transport/stub/endpoint.hpp +0 -140
  1975. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/uri.hpp +0 -356
  1976. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/utf8_validator.hpp +0 -154
  1977. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/utilities.hpp +0 -180
  1978. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/version.hpp +0 -61
@@ -15,11 +15,9 @@
15
15
  #include <boost/container/detail/config_begin.hpp>
16
16
  #include <boost/container/detail/workaround.hpp>
17
17
 
18
- //#include <algorithm>
19
18
  #include <cstring> // memcpy
20
19
 
21
20
  #include <boost/assert.hpp>
22
- #include <boost/aligned_storage.hpp>
23
21
 
24
22
  #include <boost/container/detail/copy_move_algo.hpp>
25
23
  #include <boost/container/new_allocator.hpp> //new_allocator
@@ -35,6 +33,7 @@
35
33
  #include <boost/container/detail/min_max.hpp>
36
34
  #include <boost/container/detail/next_capacity.hpp>
37
35
  #include <boost/container/detail/alloc_helpers.hpp>
36
+ #include <boost/container/detail/advanced_insert_int.hpp>
38
37
 
39
38
  // move
40
39
  #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
@@ -48,11 +47,9 @@
48
47
  #include <boost/move/detail/to_raw_pointer.hpp>
49
48
  #include <boost/move/algo/detail/merge.hpp>
50
49
 
51
- #include <boost/type_traits/is_nothrow_move_constructible.hpp>
52
-
53
50
  //std
54
51
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
55
- #include <initializer_list> //for std::initializer_list
52
+ #include <initializer_list> //for std::initializer_list
56
53
  #endif
57
54
 
58
55
  namespace boost {
@@ -65,33 +62,36 @@ struct growth_factor_60;
65
62
  template<class Options, class AllocatorSizeType>
66
63
  struct get_devector_opt
67
64
  {
68
- typedef devector_opt< typename default_if_void<typename Options::growth_factor_type, growth_factor_60>::type
69
- , typename default_if_void<typename Options::stored_size_type, AllocatorSizeType>::type
70
- > type;
65
+ typedef devector_opt< typename default_if_void<typename Options::growth_factor_type, growth_factor_60>::type
66
+ , typename default_if_void<typename Options::stored_size_type, AllocatorSizeType>::type
67
+ , default_if_zero<Options::free_fraction, relocate_on_90::value>::value
68
+ > type;
71
69
  };
72
70
 
73
71
  template<class AllocatorSizeType>
74
72
  struct get_devector_opt<void, AllocatorSizeType>
75
73
  {
76
- typedef vector_opt<growth_factor_60, AllocatorSizeType> type;
74
+ typedef devector_opt< growth_factor_60, AllocatorSizeType, relocate_on_90::value> type;
77
75
  };
78
76
 
79
- #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
77
+ #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
80
78
 
81
79
  struct reserve_only_tag_t {};
80
+ struct reserve_uninitialized_t {};
81
+ struct review_implementation_t {};
82
+
82
83
  //struct unsafe_uninitialized_tag_t {};
83
84
 
84
85
  /**
85
86
  * A vector-like sequence container providing front and back operations
86
- * (e.g: `push_front`/`pop_front`/`push_back`/`pop_back`) with amortized constant complexity
87
- * and unsafe methods geared towards additional performance.
87
+ * (e.g: `push_front`/`pop_front`/`push_back`/`pop_back`) with amortized constant complexity.
88
88
  *
89
89
  * Models the [SequenceContainer], [ReversibleContainer], and [AllocatorAwareContainer] concepts.
90
90
  *
91
91
  * **Requires**:
92
- * - `T` shall be [MoveInsertable] into the devector.
93
- * - `T` shall be [Erasable] from any `devector<T, allocator_type, GP>`.
94
- * - `GrowthFactor`, and `Allocator` must model the concepts with the same names or be void.
92
+ * - `T` shall be [MoveInsertable] into the devector.
93
+ * - `T` shall be [Erasable] from any `devector<T, allocator_type, GP>`.
94
+ * - `GrowthFactor`, and `Allocator` must model the concepts with the same names or be void.
95
95
  *
96
96
  * **Definition**: `T` is `NothrowConstructible` if it's either nothrow move constructible or
97
97
  * nothrow copy constructible.
@@ -107,13 +107,13 @@ struct reserve_only_tag_t {};
107
107
  *
108
108
  * In addition to the exceptions specified in the **Throws** clause, the following operations
109
109
  * of `T` can throw when any of the specified concept is required:
110
- * - [DefaultInsertable][]: Default constructor
111
- * - [MoveInsertable][]: Move constructor
112
- * - [CopyInsertable][]: Copy constructor
113
- * - [DefaultConstructible][]: Default constructor
114
- * - [EmplaceConstructible][]: Constructor selected by the given arguments
115
- * - [MoveAssignable][]: Move assignment operator
116
- * - [CopyAssignable][]: Copy assignment operator
110
+ * - [DefaultInsertable][]: Default constructor
111
+ * - [MoveInsertable][]: Move constructor
112
+ * - [CopyInsertable][]: Copy constructor
113
+ * - [DefaultConstructible][]: Default constructor
114
+ * - [EmplaceConstructible][]: Constructor selected by the given arguments
115
+ * - [MoveAssignable][]: Move assignment operator
116
+ * - [CopyAssignable][]: Copy assignment operator
117
117
  *
118
118
  * Furthermore, not `noexcept` methods throws whatever the allocator throws
119
119
  * if memory allocation fails. Such methods also throw `length_error` if the capacity
@@ -122,9 +122,7 @@ struct reserve_only_tag_t {};
122
122
  * **Remark**: If a method invalidates some iterators, it also invalidates references
123
123
  * and pointers to the elements pointed by the invalidated iterators.
124
124
  *
125
- * **Policies**:
126
- *
127
- * @ref devector_growth_policy models the `GrowthFactor` concept.
125
+ *! \tparam Options A type produced from \c boost::container::devector_options.
128
126
  *
129
127
  * [SequenceContainer]: http://en.cppreference.com/w/cpp/concept/SequenceContainer
130
128
  * [ReversibleContainer]: http://en.cppreference.com/w/cpp/concept/ReversibleContainer
@@ -144,42 +142,58 @@ class devector
144
142
  {
145
143
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
146
144
  typedef boost::container::allocator_traits
147
- <typename real_allocator<T, A>::type> allocator_traits_type;
148
- typedef typename allocator_traits_type::size_type alloc_size_type;
149
- typedef typename get_devector_opt<Options, alloc_size_type>::type options_type;
150
- typedef typename options_type::growth_factor_type growth_factor_type;
151
- typedef typename options_type::stored_size_type stored_size_type;
145
+ <typename real_allocator<T, A>::type> allocator_traits_type;
146
+ typedef typename allocator_traits_type::size_type alloc_size_type;
147
+ typedef typename get_devector_opt<Options, alloc_size_type>::type options_type;
148
+ typedef typename options_type::growth_factor_type growth_factor_type;
149
+ typedef typename options_type::stored_size_type stored_size_type;
150
+ BOOST_STATIC_CONSTEXPR std::size_t devector_min_free_fraction =
151
+ options_type::free_fraction;
152
152
 
153
153
  #endif // ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
154
154
 
155
155
  public:
156
156
  // Standard Interface Types:
157
- typedef T value_type;
157
+ typedef T value_type;
158
158
  typedef BOOST_CONTAINER_IMPDEF
159
- (typename real_allocator<T BOOST_MOVE_I A>::type) allocator_type;
160
- typedef allocator_type stored_allocator_type;
161
- typedef typename allocator_traits<allocator_type>::pointer pointer;
162
- typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
163
- typedef typename allocator_traits<allocator_type>::reference reference;
164
- typedef typename allocator_traits<allocator_type>::const_reference const_reference;
165
- typedef typename allocator_traits<allocator_type>::size_type size_type;
166
- typedef typename allocator_traits<allocator_type>::difference_type difference_type;
167
- typedef pointer iterator;
168
- typedef const_pointer const_iterator;
159
+ (typename real_allocator<T BOOST_MOVE_I A>::type) allocator_type;
160
+ typedef allocator_type stored_allocator_type;
161
+ typedef typename allocator_traits<allocator_type>::pointer pointer;
162
+ typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
163
+ typedef typename allocator_traits<allocator_type>::reference reference;
164
+ typedef typename allocator_traits<allocator_type>::const_reference const_reference;
165
+ typedef typename allocator_traits<allocator_type>::size_type size_type;
166
+ typedef typename allocator_traits<allocator_type>::difference_type difference_type;
167
+ typedef pointer iterator;
168
+ typedef const_pointer const_iterator;
169
169
  typedef BOOST_CONTAINER_IMPDEF
170
- (boost::container::reverse_iterator<iterator>) reverse_iterator;
170
+ (boost::container::reverse_iterator<iterator>) reverse_iterator;
171
171
  typedef BOOST_CONTAINER_IMPDEF
172
- (boost::container::reverse_iterator<const_iterator>) const_reverse_iterator;
172
+ (boost::container::reverse_iterator<const_iterator>) const_reverse_iterator;
173
173
 
174
174
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
175
175
  private:
176
+
177
+ //`allocator_type::value_type` must match container's `value type`. If this
178
+ //assertion fails, please review your allocator definition.
179
+ BOOST_CONTAINER_STATIC_ASSERT((dtl::is_same<value_type, typename allocator_traits<allocator_type>::value_type>::value));
180
+
176
181
  BOOST_COPYABLE_AND_MOVABLE(devector)
177
182
 
178
183
  // Guard to deallocate buffer on exception
179
184
  typedef typename detail::allocation_guard<allocator_type> allocation_guard;
180
185
 
181
186
  // Random access pseudo iterator always yielding to the same result
182
- typedef constant_iterator<T, difference_type> cvalue_iterator;
187
+ typedef constant_iterator<T> cvalue_iterator;
188
+
189
+ static size_type to_internal_capacity(size_type desired_capacity)
190
+ {
191
+ const size_type rounder = devector_min_free_fraction - 2u;
192
+ const size_type divisor = devector_min_free_fraction - 1u;
193
+ size_type const nc = ((desired_capacity + rounder) / divisor) * devector_min_free_fraction;
194
+ BOOST_ASSERT(desired_capacity <= (nc - nc / devector_min_free_fraction));
195
+ return nc;
196
+ }
183
197
 
184
198
  #endif // ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
185
199
 
@@ -215,63 +229,71 @@ class devector
215
229
  * **Effects**: Constructs an empty devector, using the specified allocator
216
230
  * and reserves `n` slots as if `reserve(n)` was called.
217
231
  *
218
- * **Postcondition**: `empty() && front_free_capacity() == 0
219
- * && back_free_capacity() >= n`.
232
+ * **Postcondition**: `empty() && capacity() >= n`.
220
233
  *
221
234
  * **Exceptions**: Strong exception guarantee.
222
235
  *
223
236
  * **Complexity**: Constant.
224
237
  */
225
238
  devector(size_type n, reserve_only_tag_t, const allocator_type& allocator = allocator_type())
226
- : m_(allocator, this->allocate(n), 0u, 0u, n)
239
+ : m_(reserve_only_tag_t(), allocator, to_internal_capacity(n))
227
240
  {}
228
241
 
229
242
  /**
230
243
  * **Effects**: Constructs an empty devector, using the specified allocator
231
- * and reserves `front_cap + back_cap` slots as if `reserve_front(front_cap)` and
244
+ * and reserves at least `front_free_cap + back_free_cap` slots as if `reserve_front(front_cap)` and
232
245
  * `reserve_back(back_cap)` was called.
233
246
  *
234
- * **Postcondition**: `empty() && front_free_capacity() == front_cap
235
- * && back_free_capacity() >= back_cap`.
247
+ * **Postcondition**: `empty() && front_free_capacity() >= front_free_cap
248
+ * && back_free_capacity() >= back_free_cap`.
236
249
  *
237
250
  * **Exceptions**: Strong exception guarantee.
238
251
  *
239
252
  * **Complexity**: Constant.
240
253
  */
241
- devector(size_type front_cap, size_type back_cap, reserve_only_tag_t, const allocator_type& allocator = allocator_type())
242
- : m_(allocator, this->allocate(front_cap + back_cap), front_cap, front_cap, front_cap + back_cap)
254
+ devector(size_type front_free_cap, size_type back_free_cap, reserve_only_tag_t, const allocator_type& allocator = allocator_type())
255
+ : m_(reserve_only_tag_t(), allocator, front_free_cap, back_free_cap)
243
256
  {}
244
257
 
245
258
  /**
246
259
  * [DefaultInsertable]: http://en.cppreference.com/w/cpp/concept/DefaultInsertable
247
260
  *
248
- * **Effects**: Constructs a devector with `n` default-inserted elements using the specified allocator.
261
+ * **Effects**: Constructs a devector with `n` value_initialized elements using the specified allocator.
249
262
  *
250
263
  * **Requires**: `T` shall be [DefaultInsertable] into `*this`.
251
264
  *
252
- * **Postcondition**: `size() == n && front_free_capacity() == 0`.
265
+ * **Postcondition**: `size() == n`.
253
266
  *
254
267
  * **Exceptions**: Strong exception guarantee.
255
268
  *
256
269
  * **Complexity**: Linear in `n`.
257
270
  */
258
271
  explicit devector(size_type n, const allocator_type& allocator = allocator_type())
259
- : m_(allocator, n ? allocate(n): pointer(), 0u, n, n)
272
+ : m_(reserve_uninitialized_t(), allocator, n)
260
273
  {
261
- // Cannot use construct_from_range/constant_iterator and copy_range,
262
- // because we are not allowed to default construct T
263
274
  allocation_guard buffer_guard(m_.buffer, m_.capacity, get_allocator_ref());
264
- detail::construction_guard<allocator_type> copy_guard(m_.buffer, get_allocator_ref());
265
-
266
- for (size_type i = 0; i < n; ++i)
267
- {
268
- this->alloc_construct(m_.buffer + i);
269
- copy_guard.extend();
270
- }
271
-
272
- copy_guard.release();
275
+ boost::container::uninitialized_value_init_alloc_n(get_allocator_ref(), n, this->priv_raw_begin());
273
276
  buffer_guard.release();
277
+ BOOST_ASSERT(invariants_ok());
278
+ }
274
279
 
280
+ /**
281
+ * **Effects**: Constructs a devector with `n` default-initialized elements using the specified allocator.
282
+ *
283
+ * **Requires**: `T` shall be [DefaultInsertable] into `*this`.
284
+ *
285
+ * **Postcondition**: `size() == n`.
286
+ *
287
+ * **Exceptions**: Strong exception guarantee.
288
+ *
289
+ * **Complexity**: Linear in `n`.
290
+ */
291
+ explicit devector(size_type n, default_init_t, const allocator_type& allocator = allocator_type())
292
+ : m_(reserve_uninitialized_t(), allocator, n)
293
+ {
294
+ allocation_guard buffer_guard(m_.buffer, m_.capacity, get_allocator_ref());
295
+ boost::container::uninitialized_default_init_alloc_n(get_allocator_ref(), n, this->priv_raw_begin());
296
+ buffer_guard.release();
275
297
  BOOST_ASSERT(invariants_ok());
276
298
  }
277
299
 
@@ -282,14 +304,14 @@ class devector
282
304
  *
283
305
  * **Requires**: `T` shall be [CopyInsertable] into `*this`.
284
306
  *
285
- * **Postcondition**: `size() == n && front_free_capacity() == 0`.
307
+ * **Postcondition**: `size() == n`.
286
308
  *
287
309
  * **Exceptions**: Strong exception guarantee.
288
310
  *
289
311
  * **Complexity**: Linear in `n`.
290
312
  */
291
313
  devector(size_type n, const T& value, const allocator_type& allocator = allocator_type())
292
- : m_(allocator, n ? allocate(n): pointer(), 0u, n, n)
314
+ : m_(reserve_uninitialized_t(), allocator, n)
293
315
  {
294
316
  construct_from_range(cvalue_iterator(value, n), cvalue_iterator());
295
317
  BOOST_ASSERT(invariants_ok());
@@ -321,18 +343,24 @@ class devector
321
343
  devector(InputIterator first, InputIterator last, const allocator_type& allocator = allocator_type()
322
344
  //Input iterators
323
345
  BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
324
- < void
325
- BOOST_MOVE_I dtl::is_convertible<InputIterator BOOST_MOVE_I size_type>
326
- BOOST_MOVE_I dtl::is_not_input_iterator<InputIterator>
327
- >::type * = 0)
346
+ < void
347
+ BOOST_MOVE_I dtl::is_convertible<InputIterator BOOST_MOVE_I size_type>
348
+ BOOST_MOVE_I dtl::is_not_input_iterator<InputIterator>
349
+ >::type * = 0)
328
350
  )
329
- : m_(allocator, pointer(), 0u, 0u, 0u)
351
+ : m_(allocator)
330
352
  {
331
- while (first != last) {
332
- this->emplace_back(*first++);
353
+ BOOST_CONTAINER_TRY{
354
+ while (first != last) {
355
+ this->emplace_back(*first++);
356
+ }
357
+ BOOST_ASSERT(invariants_ok());
333
358
  }
334
-
335
- BOOST_ASSERT(invariants_ok());
359
+ BOOST_CONTAINER_CATCH(...){
360
+ this->destroy_elements(m_.buffer + m_.front_idx, m_.buffer + m_.back_idx);
361
+ this->deallocate_buffer();
362
+ }
363
+ BOOST_CONTAINER_CATCH_END
336
364
  }
337
365
 
338
366
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
@@ -341,20 +369,13 @@ class devector
341
369
  devector(ForwardIterator first, ForwardIterator last, const allocator_type& allocator = allocator_type()
342
370
  //Other iterators
343
371
  BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
344
- < void
345
- BOOST_MOVE_I dtl::is_convertible<ForwardIterator BOOST_MOVE_I size_type>
346
- BOOST_MOVE_I dtl::is_input_iterator<ForwardIterator>
347
- >::type * = 0)
372
+ < void
373
+ BOOST_MOVE_I dtl::is_convertible<ForwardIterator BOOST_MOVE_I size_type>
374
+ BOOST_MOVE_I dtl::is_input_iterator<ForwardIterator>
375
+ >::type * = 0)
348
376
  )
349
- : m_(allocator, pointer(), 0u, 0u, 0u)
377
+ : m_(reserve_uninitialized_t(), allocator, boost::container::iterator_udistance(first, last))
350
378
  {
351
- const size_type n = boost::container::iterator_distance(first, last);
352
- m_.buffer = n ? allocate(n) : pointer();
353
- m_.front_idx = 0u;
354
- //this->allocate(n) will take care of overflows
355
- m_.set_back_idx(n);
356
- m_.set_capacity(n);
357
- //construct_from_range releases memory on failure
358
379
  this->construct_from_range(first, last);
359
380
  BOOST_ASSERT(invariants_ok());
360
381
  }
@@ -368,22 +389,15 @@ class devector
368
389
  *
369
390
  * **Requires**: `T` shall be [CopyInsertable] into `*this`.
370
391
  *
371
- * **Postcondition**: `this->size() == x.size() && front_free_capacity() == 0`.
392
+ * **Postcondition**: `this->size() == x.size()`.
372
393
  *
373
394
  * **Exceptions**: Strong exception guarantee.
374
395
  *
375
396
  * **Complexity**: Linear in the size of `x`.
376
397
  */
377
398
  devector(const devector& x)
378
- : m_( allocator_traits_type::select_on_container_copy_construction(x.get_allocator_ref())
379
- , pointer(), 0u, 0u, 0u)
399
+ : m_(reserve_uninitialized_t(), allocator_traits_type::select_on_container_copy_construction(x.get_allocator_ref()), x.size())
380
400
  {
381
- const size_type n = x.size();
382
- m_.buffer = n ? allocate(n) : pointer();
383
- m_.front_idx = 0u;
384
- //this->allocate(n) will take care of overflows
385
- m_.set_back_idx(n);
386
- m_.set_capacity(n);
387
401
  this->construct_from_range(x.begin(), x.end());
388
402
  BOOST_ASSERT(invariants_ok());
389
403
  }
@@ -395,21 +409,15 @@ class devector
395
409
  *
396
410
  * **Requires**: `T` shall be [CopyInsertable] into `*this`.
397
411
  *
398
- * **Postcondition**: `this->size() == x.size() && front_free_capacity() == 0`.
412
+ * **Postcondition**: `*this == x`.
399
413
  *
400
414
  * **Exceptions**: Strong exception guarantee.
401
415
  *
402
416
  * **Complexity**: Linear in the size of `x`.
403
417
  */
404
418
  devector(const devector& x, const allocator_type& allocator)
405
- : m_(allocator, pointer(), 0u, 0u, 0u)
419
+ : m_(reserve_uninitialized_t(), allocator, x.size())
406
420
  {
407
- const size_type n = x.size();
408
- m_.buffer = n ? this->allocate(n) : pointer();
409
- m_.front_idx = 0u;
410
- //this->allocate(n) will take care of overflows
411
- m_.set_back_idx(n);
412
- m_.set_capacity(n);
413
421
  this->construct_from_range(x.begin(), x.end());
414
422
  BOOST_ASSERT(invariants_ok());
415
423
  }
@@ -419,21 +427,17 @@ class devector
419
427
  *
420
428
  * **Throws**: Nothing.
421
429
  *
422
- * **Postcondition**: `rhs` is left in an unspecified but valid state.
430
+ * **Postcondition**: *this has the same value `rhs` had before the operation.
431
+ * `rhs` is left in an unspecified but valid state.
423
432
  *
424
433
  * **Exceptions**: Strong exception guarantee if not `noexcept`.
425
434
  *
426
435
  * **Complexity**: Constant.
427
436
  */
428
437
  devector(BOOST_RV_REF(devector) rhs) BOOST_NOEXCEPT_OR_NOTHROW
429
- : m_(::boost::move(rhs.get_allocator_ref()), rhs.m_.buffer, rhs.m_.front_idx, rhs.m_.back_idx, rhs.capacity())
438
+ : m_(::boost::move(rhs.m_))
430
439
  {
431
- // buffer is already acquired, reset rhs
432
- rhs.m_.capacity = 0u;
433
- rhs.m_.buffer = pointer();
434
- rhs.m_.front_idx = 0;
435
- rhs.m_.back_idx = 0;
436
- BOOST_ASSERT( invariants_ok());
440
+ BOOST_ASSERT( invariants_ok());
437
441
  BOOST_ASSERT(rhs.invariants_ok());
438
442
  }
439
443
 
@@ -442,14 +446,15 @@ class devector
442
446
  *
443
447
  * **Throws**: If allocation or T's move constructor throws.
444
448
  *
445
- * **Postcondition**: `rhs` is left in an unspecified but valid state.
449
+ * **Postcondition**: *this has the same value `rhs` had before the operation.
450
+ * `rhs` is left in an unspecified but valid state.
446
451
  *
447
452
  * **Exceptions**: Strong exception guarantee if not `noexcept`.
448
453
  *
449
454
  * **Complexity**: Linear if allocator != rhs.get_allocator(), otherwise constant.
450
455
  */
451
456
  devector(BOOST_RV_REF(devector) rhs, const allocator_type& allocator)
452
- : m_(allocator, rhs.m_.buffer, rhs.m_.front_idx, rhs.m_.back_idx, rhs.capacity())
457
+ : m_(review_implementation_t(), allocator, rhs.m_.buffer, rhs.m_.front_idx, rhs.m_.back_idx, rhs.m_.capacity)
453
458
  {
454
459
  // TODO should move elems-by-elems if the two allocators differ
455
460
  // buffer is already acquired, reset rhs
@@ -457,42 +462,35 @@ class devector
457
462
  rhs.m_.buffer = pointer();
458
463
  rhs.m_.front_idx = 0;
459
464
  rhs.m_.back_idx = 0;
460
- BOOST_ASSERT( invariants_ok());
465
+ BOOST_ASSERT( invariants_ok());
461
466
  BOOST_ASSERT(rhs.invariants_ok());
462
467
  }
463
468
 
464
469
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
465
470
  /**
466
- * **Equivalent to**: `devector(il.begin(), il.end())` or `devector(il.begin(), il.end(), allocator)`.
471
+ * **Equivalent to**: `devector(il.begin(), il.end(), allocator)`.
467
472
  */
468
473
  devector(const std::initializer_list<T>& il, const allocator_type& allocator = allocator_type())
469
- : m_(allocator, pointer(), 0u, 0u, 0u)
474
+ : m_(reserve_uninitialized_t(), allocator, il.size())
470
475
  {
471
- const size_type n = il.size();
472
- m_.buffer = n ? allocate(n) : pointer();
473
- m_.front_idx = 0u;
474
- //this->allocate(n) will take care of overflows
475
- m_.set_back_idx(n);
476
- m_.set_capacity(n);
477
- //construct_from_range releases memory on failure
478
476
  this->construct_from_range(il.begin(), il.end());
479
477
  BOOST_ASSERT(invariants_ok());
480
478
  }
481
479
  #endif
482
480
 
483
- /**
481
+ /**
484
482
  * **Effects**: Destroys the devector. All stored values are destroyed and
485
483
  * used memory, if any, deallocated.
486
484
  *
487
485
  * **Complexity**: Linear in the size of `*this`.
488
486
  */
489
- ~devector() BOOST_NOEXCEPT
490
- {
491
- destroy_elements(m_.buffer + m_.front_idx, m_.buffer + m_.back_idx);
492
- deallocate_buffer();
493
- }
487
+ ~devector() BOOST_NOEXCEPT
488
+ {
489
+ destroy_elements(m_.buffer + m_.front_idx, m_.buffer + m_.back_idx);
490
+ deallocate_buffer();
491
+ }
494
492
 
495
- /**
493
+ /**
496
494
  * **Effects**: Copies elements of `x` to `*this`. Previously
497
495
  * held elements get copy assigned to or destroyed.
498
496
  *
@@ -514,12 +512,13 @@ class devector
514
512
  * [propagate_on_container_copy_assignment]: http://en.cppreference.com/w/cpp/memory/allocator_traits
515
513
  */
516
514
 
517
- BOOST_CONTAINER_FORCEINLINE devector& operator=(BOOST_COPY_ASSIGN_REF(devector) rhs)
515
+ inline devector& operator=(BOOST_COPY_ASSIGN_REF(devector) rhs)
518
516
  {
519
517
  const devector &x = rhs;
520
518
  if (this == &x) { return *this; } // skip self
521
519
 
522
- BOOST_IF_CONSTEXPR(allocator_traits_type::propagate_on_container_copy_assignment::value)
520
+ const bool do_propagate = allocator_traits_type::propagate_on_container_copy_assignment::value;
521
+ BOOST_IF_CONSTEXPR(do_propagate)
523
522
  {
524
523
  allocator_type &this_alloc = this->get_allocator_ref();
525
524
  const allocator_type &other_alloc = x.get_allocator_ref();
@@ -531,18 +530,18 @@ class devector
531
530
  m_.capacity = 0u;
532
531
  m_.buffer = pointer();
533
532
  }
534
-
535
- this_alloc = other_alloc;
533
+ dtl::bool_<do_propagate> flag;
534
+ dtl::assign_alloc(this_alloc, other_alloc, flag);
536
535
  }
537
536
 
538
537
  size_type n = x.size();
539
- if (capacity() >= n)
538
+ if (m_.capacity >= n)
540
539
  {
541
- this->overwrite_buffer(x.begin(), x.end());
540
+ this->overwrite_buffer(x.begin(), x.end());
542
541
  }
543
542
  else
544
543
  {
545
- this->allocate_and_copy_range(x.begin(), x.end());
544
+ this->allocate_and_copy_range(x.begin(), x.end());
546
545
  }
547
546
 
548
547
  BOOST_ASSERT(invariants_ok());
@@ -565,60 +564,23 @@ class devector
565
564
  * **Exceptions**: Basic exception guarantee if not `noexcept`.
566
565
  *
567
566
  * **Complexity**: Constant if allocator_traits_type::
568
- * propagate_on_container_move_assignment is true or
569
- * this->get>allocator() == x.get_allocator(). Linear otherwise.
567
+ * propagate_on_container_move_assignment is true or
568
+ * this->get>allocator() == x.get_allocator(). Linear otherwise.
570
569
  */
571
570
  devector& operator=(BOOST_RV_REF(devector) x)
572
571
  BOOST_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value
573
- || allocator_traits_type::is_always_equal::value)
574
- {
575
- BOOST_CONSTEXPR_OR_CONST bool copy_alloc = allocator_traits_type::propagate_on_container_move_assignment::value;
576
-
577
- BOOST_IF_CONSTEXPR (copy_alloc || get_allocator_ref() == x.get_allocator_ref())
578
- {
579
- this->clear();
580
- this->deallocate_buffer();
581
-
582
- if (copy_alloc)
583
- {
584
- this->get_allocator_ref() = boost::move(x.get_allocator_ref());
585
- }
586
-
587
- m_.capacity = x.m_.capacity;
588
- m_.buffer = x.m_.buffer;
589
- m_.front_idx = x.m_.front_idx;
590
- m_.back_idx = x.m_.back_idx;
591
-
592
- // leave x in valid state
593
- x.m_.capacity = 0u;
594
- x.m_.buffer = pointer();
595
- x.m_.back_idx = x.m_.front_idx = 0;
572
+ || allocator_traits_type::is_always_equal::value)
573
+ {
574
+ if (BOOST_LIKELY(this != &x)) {
575
+ //We know resources can be transferred at comiple time if both allocators are
576
+ //always equal or the allocator is going to be propagated
577
+ const bool can_steal_resources_alloc
578
+ = allocator_traits_type::propagate_on_container_move_assignment::value
579
+ || allocator_traits_type::is_always_equal::value;
580
+ dtl::bool_<can_steal_resources_alloc> flag;
581
+ this->priv_move_assign(boost::move(x), flag);
596
582
  }
597
- else
598
- {
599
- // if the allocator shouldn't be copied and they do not compare equal
600
- // we can't steal memory.
601
-
602
- move_iterator<iterator> xbegin = boost::make_move_iterator(x.begin());
603
- move_iterator<iterator> xend = boost::make_move_iterator(x.end());
604
-
605
- if (copy_alloc)
606
- {
607
- get_allocator_ref() = boost::move(x.get_allocator_ref());
608
- }
609
-
610
- if (capacity() >= x.size())
611
- {
612
- overwrite_buffer(xbegin, xend);
613
- }
614
- else
615
- {
616
- allocate_and_copy_range(xbegin, xend);
617
- }
618
- }
619
-
620
583
  BOOST_ASSERT(invariants_ok());
621
-
622
584
  return *this;
623
585
  }
624
586
 
@@ -642,9 +604,9 @@ class devector
642
604
  * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
643
605
  * [CopyAssignable]: http://en.cppreference.com/w/cpp/concept/CopyAssignable
644
606
  */
645
- devector& operator=(std::initializer_list<T> il)
607
+ inline devector& operator=(std::initializer_list<T> il)
646
608
  {
647
- assign(il.begin(), il.end());
609
+ this->assign(il.begin(), il.end());
648
610
  return *this;
649
611
  }
650
612
  #endif
@@ -678,10 +640,10 @@ class devector
678
640
  void assign(InputIterator first, InputIterator last
679
641
  //Input iterators
680
642
  BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
681
- < void
682
- BOOST_MOVE_I dtl::is_convertible<InputIterator BOOST_MOVE_I size_type>
683
- BOOST_MOVE_I dtl::is_not_input_iterator<InputIterator>
684
- >::type * = 0)
643
+ < void
644
+ BOOST_MOVE_I dtl::is_convertible<InputIterator BOOST_MOVE_I size_type>
645
+ BOOST_MOVE_I dtl::is_not_input_iterator<InputIterator>
646
+ >::type * = 0)
685
647
  )
686
648
  {
687
649
  first = overwrite_buffer_impl(first, last, dtl::false_());
@@ -697,15 +659,15 @@ class devector
697
659
  void assign(ForwardIterator first, ForwardIterator last
698
660
  //Other iterators
699
661
  BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
700
- < void
701
- BOOST_MOVE_I dtl::is_convertible<ForwardIterator BOOST_MOVE_I size_type>
702
- BOOST_MOVE_I dtl::is_input_iterator<ForwardIterator>
703
- >::type * = 0)
662
+ < void
663
+ BOOST_MOVE_I dtl::is_convertible<ForwardIterator BOOST_MOVE_I size_type>
664
+ BOOST_MOVE_I dtl::is_input_iterator<ForwardIterator>
665
+ >::type * = 0)
704
666
  )
705
667
  {
706
- const size_type n = boost::container::iterator_distance(first, last);
668
+ const size_type n = boost::container::iterator_udistance(first, last);
707
669
 
708
- if (capacity() >= n)
670
+ if (m_.capacity >= n)
709
671
  {
710
672
  overwrite_buffer(first, last);
711
673
  }
@@ -719,293 +681,290 @@ class devector
719
681
 
720
682
  #endif // ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
721
683
 
722
- /**
723
- * **Effects**: Replaces elements of `*this` with `n` copies of `u`.
724
- * Previously held elements get copy assigned to or destroyed.
725
- *
726
- * **Requires**: `T` shall be [CopyInsertable] into `*this` and
727
- * [CopyAssignable].
728
- *
729
- * **Precondition**: `u` is not a reference into `*this`.
730
- *
731
- * **Postcondition**: `size() == n` and the elements of
732
- * `*this` are copies of `u`.
733
- *
734
- * **Exceptions**: Strong exception guarantee if `T` is nothrow copy assignable
735
- * from `u` and `NothrowConstructible`, Basic exception guarantee otherwise.
736
- *
737
- * **Complexity**: Linear in `n` and the size of `*this`.
738
- *
739
- * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
740
- * [CopyAssignable]: http://en.cppreference.com/w/cpp/concept/CopyAssignable
741
- */
742
- void assign(size_type n, const T& u)
743
- {
744
- cvalue_iterator first(u, n);
745
- cvalue_iterator last;
684
+ /**
685
+ * **Effects**: Replaces elements of `*this` with `n` copies of `u`.
686
+ * Previously held elements get copy assigned to or destroyed.
687
+ *
688
+ * **Requires**: `T` shall be [CopyInsertable] into `*this` and
689
+ * [CopyAssignable].
690
+ *
691
+ * **Precondition**: `u` is not a reference into `*this`.
692
+ *
693
+ * **Postcondition**: `size() == n` and the elements of
694
+ * `*this` are copies of `u`.
695
+ *
696
+ * **Exceptions**: Strong exception guarantee if `T` is nothrow copy assignable
697
+ * from `u` and `NothrowConstructible`, Basic exception guarantee otherwise.
698
+ *
699
+ * **Complexity**: Linear in `n` and the size of `*this`.
700
+ *
701
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
702
+ * [CopyAssignable]: http://en.cppreference.com/w/cpp/concept/CopyAssignable
703
+ */
704
+ inline void assign(size_type n, const T& u)
705
+ {
706
+ cvalue_iterator first(u, n);
707
+ cvalue_iterator last;
708
+ this->assign(first, last);
709
+ }
710
+
711
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
712
+ /** **Equivalent to**: `assign(il.begin(), il.end())`. */
713
+ inline void assign(std::initializer_list<T> il)
714
+ {
715
+ this->assign(il.begin(), il.end());
716
+ }
717
+ #endif
746
718
 
747
- assign(first, last);
748
- }
719
+ /**
720
+ * **Returns**: A copy of the allocator associated with the container.
721
+ *
722
+ * **Complexity**: Constant.
723
+ */
724
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
725
+ allocator_type get_allocator() const BOOST_NOEXCEPT
726
+ {
727
+ return static_cast<const allocator_type&>(m_);
728
+ }
749
729
 
750
- #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
751
- /** **Equivalent to**: `assign(il.begin(), il.end())`. */
752
- void assign(std::initializer_list<T> il)
730
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
731
+ const allocator_type &get_stored_allocator() const BOOST_NOEXCEPT
753
732
  {
754
- assign(il.begin(), il.end());
733
+ return static_cast<const allocator_type&>(m_);
755
734
  }
756
- #endif
757
735
 
758
- /**
759
- * **Returns**: A copy of the allocator associated with the container.
760
- *
761
- * **Complexity**: Constant.
762
- */
763
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
764
- allocator_type get_allocator() const BOOST_NOEXCEPT
765
- {
766
- return static_cast<const allocator_type&>(m_);
767
- }
768
-
769
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
770
- const allocator_type &get_stored_allocator() const BOOST_NOEXCEPT
771
- {
772
- return static_cast<const allocator_type&>(m_);
773
- }
774
-
775
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
776
- allocator_type &get_stored_allocator() BOOST_NOEXCEPT
777
- {
778
- return static_cast<allocator_type&>(m_);
779
- }
780
-
781
- // iterators
782
-
783
- /**
784
- * **Returns**: A iterator pointing to the first element in the devector,
785
- * or the past the end iterator if the devector is empty.
786
- *
787
- * **Complexity**: Constant.
788
- */
789
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
790
- iterator begin() BOOST_NOEXCEPT
791
- {
792
- return m_.buffer + m_.front_idx;
793
- }
736
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
737
+ allocator_type &get_stored_allocator() BOOST_NOEXCEPT
738
+ {
739
+ return static_cast<allocator_type&>(m_);
740
+ }
794
741
 
795
- /**
796
- * **Returns**: A constant iterator pointing to the first element in the devector,
797
- * or the past the end iterator if the devector is empty.
798
- *
799
- * **Complexity**: Constant.
800
- */
801
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
802
- const_iterator begin() const BOOST_NOEXCEPT
803
- {
804
- return m_.buffer + m_.front_idx;
805
- }
742
+ // iterators
806
743
 
807
- /**
808
- * **Returns**: An iterator pointing past the last element of the container.
809
- *
810
- * **Complexity**: Constant.
811
- */
812
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
813
- iterator end() BOOST_NOEXCEPT
814
- {
815
- return m_.buffer + m_.back_idx;
816
- }
744
+ /**
745
+ * **Returns**: A iterator pointing to the first element in the devector,
746
+ * or the past the end iterator if the devector is empty.
747
+ *
748
+ * **Complexity**: Constant.
749
+ */
750
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
751
+ iterator begin() BOOST_NOEXCEPT
752
+ {
753
+ return m_.buffer + m_.front_idx;
754
+ }
817
755
 
818
- /**
819
- * **Returns**: A constant iterator pointing past the last element of the container.
820
- *
821
- * **Complexity**: Constant.
822
- */
823
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
824
- const_iterator end() const BOOST_NOEXCEPT
825
- {
826
- return m_.buffer + m_.back_idx;
827
- }
756
+ /**
757
+ * **Returns**: A constant iterator pointing to the first element in the devector,
758
+ * or the past the end iterator if the devector is empty.
759
+ *
760
+ * **Complexity**: Constant.
761
+ */
762
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
763
+ const_iterator begin() const BOOST_NOEXCEPT
764
+ {
765
+ return m_.buffer + m_.front_idx;
766
+ }
828
767
 
829
- /**
830
- * **Returns**: A reverse iterator pointing to the first element in the reversed devector,
831
- * or the reverse past the end iterator if the devector is empty.
832
- *
833
- * **Complexity**: Constant.
834
- */
835
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
836
- reverse_iterator rbegin() BOOST_NOEXCEPT
837
- {
838
- return reverse_iterator(m_.buffer + m_.back_idx);
839
- }
768
+ /**
769
+ * **Returns**: An iterator pointing past the last element of the container.
770
+ *
771
+ * **Complexity**: Constant.
772
+ */
773
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
774
+ iterator end() BOOST_NOEXCEPT
775
+ {
776
+ return m_.buffer + m_.back_idx;
777
+ }
840
778
 
841
- /**
842
- * **Returns**: A constant reverse iterator
843
- * pointing to the first element in the reversed devector,
844
- * or the reverse past the end iterator if the devector is empty.
845
- *
846
- * **Complexity**: Constant.
847
- */
848
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
849
- const_reverse_iterator rbegin() const BOOST_NOEXCEPT
850
- {
851
- return const_reverse_iterator(m_.buffer + m_.back_idx);
852
- }
779
+ /**
780
+ * **Returns**: A constant iterator pointing past the last element of the container.
781
+ *
782
+ * **Complexity**: Constant.
783
+ */
784
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
785
+ const_iterator end() const BOOST_NOEXCEPT
786
+ {
787
+ return m_.buffer + m_.back_idx;
788
+ }
853
789
 
854
- /**
855
- * **Returns**: A reverse iterator pointing past the last element in the
856
- * reversed container, or to the beginning of the reversed container if it's empty.
857
- *
858
- * **Complexity**: Constant.
859
- */
860
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
861
- reverse_iterator rend() BOOST_NOEXCEPT
862
- {
863
- return reverse_iterator(m_.buffer + m_.front_idx);
864
- }
790
+ /**
791
+ * **Returns**: A reverse iterator pointing to the first element in the reversed devector,
792
+ * or the reverse past the end iterator if the devector is empty.
793
+ *
794
+ * **Complexity**: Constant.
795
+ */
796
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
797
+ reverse_iterator rbegin() BOOST_NOEXCEPT
798
+ {
799
+ return reverse_iterator(m_.buffer + m_.back_idx);
800
+ }
865
801
 
866
- /**
867
- * **Returns**: A constant reverse iterator pointing past the last element in the
868
- * reversed container, or to the beginning of the reversed container if it's empty.
869
- *
870
- * **Complexity**: Constant.
871
- */
872
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
873
- const_reverse_iterator rend() const BOOST_NOEXCEPT
874
- {
875
- return const_reverse_iterator(m_.buffer + m_.front_idx);
876
- }
802
+ /**
803
+ * **Returns**: A constant reverse iterator
804
+ * pointing to the first element in the reversed devector,
805
+ * or the reverse past the end iterator if the devector is empty.
806
+ *
807
+ * **Complexity**: Constant.
808
+ */
809
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
810
+ const_reverse_iterator rbegin() const BOOST_NOEXCEPT
811
+ {
812
+ return const_reverse_iterator(m_.buffer + m_.back_idx);
813
+ }
877
814
 
878
- /**
879
- * **Returns**: A constant iterator pointing to the first element in the devector,
880
- * or the past the end iterator if the devector is empty.
881
- *
882
- * **Complexity**: Constant.
883
- */
884
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
885
- const_iterator cbegin() const BOOST_NOEXCEPT
886
- {
887
- return m_.buffer + m_.front_idx;
888
- }
815
+ /**
816
+ * **Returns**: A reverse iterator pointing past the last element in the
817
+ * reversed container, or to the beginning of the reversed container if it's empty.
818
+ *
819
+ * **Complexity**: Constant.
820
+ */
821
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
822
+ reverse_iterator rend() BOOST_NOEXCEPT
823
+ {
824
+ return reverse_iterator(m_.buffer + m_.front_idx);
825
+ }
889
826
 
890
- /**
891
- * **Returns**: A constant iterator pointing past the last element of the container.
892
- *
893
- * **Complexity**: Constant.
894
- */
895
- const_iterator cend() const BOOST_NOEXCEPT
896
- {
897
- return m_.buffer + m_.back_idx;
898
- }
827
+ /**
828
+ * **Returns**: A constant reverse iterator pointing past the last element in the
829
+ * reversed container, or to the beginning of the reversed container if it's empty.
830
+ *
831
+ * **Complexity**: Constant.
832
+ */
833
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
834
+ const_reverse_iterator rend() const BOOST_NOEXCEPT
835
+ {
836
+ return const_reverse_iterator(m_.buffer + m_.front_idx);
837
+ }
899
838
 
900
- /**
901
- * **Returns**: A constant reverse iterator
902
- * pointing to the first element in the reversed devector,
903
- * or the reverse past the end iterator if the devector is empty.
904
- *
905
- * **Complexity**: Constant.
906
- */
907
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
908
- const_reverse_iterator crbegin() const BOOST_NOEXCEPT
909
- {
910
- return const_reverse_iterator(m_.buffer + m_.back_idx);
911
- }
839
+ /**
840
+ * **Returns**: A constant iterator pointing to the first element in the devector,
841
+ * or the past the end iterator if the devector is empty.
842
+ *
843
+ * **Complexity**: Constant.
844
+ */
845
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
846
+ const_iterator cbegin() const BOOST_NOEXCEPT
847
+ {
848
+ return m_.buffer + m_.front_idx;
849
+ }
912
850
 
913
- /**
914
- * **Returns**: A constant reverse iterator pointing past the last element in the
915
- * reversed container, or to the beginning of the reversed container if it's empty.
916
- *
917
- * **Complexity**: Constant.
918
- */
919
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
920
- const_reverse_iterator crend() const BOOST_NOEXCEPT
921
- {
922
- return const_reverse_iterator(m_.buffer + m_.front_idx);
923
- }
851
+ /**
852
+ * **Returns**: A constant iterator pointing past the last element of the container.
853
+ *
854
+ * **Complexity**: Constant.
855
+ */
856
+ const_iterator cend() const BOOST_NOEXCEPT
857
+ {
858
+ return m_.buffer + m_.back_idx;
859
+ }
924
860
 
925
- // capacity
861
+ /**
862
+ * **Returns**: A constant reverse iterator
863
+ * pointing to the first element in the reversed devector,
864
+ * or the reverse past the end iterator if the devector is empty.
865
+ *
866
+ * **Complexity**: Constant.
867
+ */
868
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
869
+ const_reverse_iterator crbegin() const BOOST_NOEXCEPT
870
+ {
871
+ return const_reverse_iterator(m_.buffer + m_.back_idx);
872
+ }
926
873
 
927
- /**
928
- * **Returns**: True, if `size() == 0`, false otherwise.
929
- *
930
- * **Complexity**: Constant.
931
- */
932
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
933
- bool empty() const BOOST_NOEXCEPT
934
- {
935
- return m_.front_idx == m_.back_idx;
936
- }
874
+ /**
875
+ * **Returns**: A constant reverse iterator pointing past the last element in the
876
+ * reversed container, or to the beginning of the reversed container if it's empty.
877
+ *
878
+ * **Complexity**: Constant.
879
+ */
880
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
881
+ const_reverse_iterator crend() const BOOST_NOEXCEPT
882
+ {
883
+ return const_reverse_iterator(m_.buffer + m_.front_idx);
884
+ }
937
885
 
938
- /**
939
- * **Returns**: The number of elements the devector contains.
940
- *
941
- * **Complexity**: Constant.
942
- */
943
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
944
- size_type size() const BOOST_NOEXCEPT
945
- {
946
- return m_.back_idx - m_.front_idx;
947
- }
886
+ // capacity
948
887
 
949
- /**
950
- * **Returns**: The maximum number of elements the devector could possibly hold.
951
- *
952
- * **Complexity**: Constant.
953
- */
954
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
955
- size_type max_size() const BOOST_NOEXCEPT
956
- {
957
- size_type alloc_max = allocator_traits_type::max_size(get_allocator_ref());
958
- size_type size_type_max = (size_type)-1;
959
- return (alloc_max <= size_type_max) ? size_type(alloc_max) : size_type_max;
960
- }
888
+ /**
889
+ * **Returns**: True, if `size() == 0`, false otherwise.
890
+ *
891
+ * **Complexity**: Constant.
892
+ */
893
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
894
+ bool empty() const BOOST_NOEXCEPT
895
+ {
896
+ return m_.front_idx == m_.back_idx;
897
+ }
961
898
 
962
- /**
963
- * **Returns**: The total number of elements that the devector can hold without requiring reallocation.
964
- *
965
- * **Complexity**: Constant.
966
- */
967
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
968
- size_type capacity() const BOOST_NOEXCEPT
969
- {
970
- return m_.capacity;
971
- }
899
+ /**
900
+ * **Returns**: The number of elements the devector contains.
901
+ *
902
+ * **Complexity**: Constant.
903
+ */
904
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
905
+ size_type size() const BOOST_NOEXCEPT
906
+ {
907
+ return size_type(m_.back_idx - m_.front_idx);
908
+ }
972
909
 
973
- /**
974
- * **Returns**: The total number of elements that can be pushed to the front of the
975
- * devector without requiring reallocation.
976
- *
977
- * **Complexity**: Constant.
978
- */
979
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
980
- size_type front_free_capacity() const BOOST_NOEXCEPT
981
- {
982
- return m_.front_idx;
983
- }
910
+ /**
911
+ * **Returns**: The maximum number of elements the devector could possibly hold.
912
+ *
913
+ * **Complexity**: Constant.
914
+ */
915
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
916
+ size_type max_size() const BOOST_NOEXCEPT
917
+ {
918
+ size_type alloc_max = allocator_traits_type::max_size(get_allocator_ref());
919
+ size_type size_type_max = (size_type)-1;
920
+ return (alloc_max <= size_type_max) ? size_type(alloc_max) : size_type_max;
921
+ }
984
922
 
985
- /**
986
- * **Returns**: The total number of elements that can be pushed to the back of the
987
- * devector without requiring reallocation.
988
- *
923
+ /**
924
+ * **Returns**: The *minimum* number of elements that can be inserted into devector using
925
+ * position-based insertions without requiring a reallocation. Note that, unlike in
926
+ * typical sequence containers like `vector`, `capacity()`, `capacity()` can be smaller than `size()`.
927
+ * This can happen if a user inserts elements in a particular way (usually inserting at
928
+ * front up to front_free_capacity() and at back up to back_free_capacity()).
929
+ *
989
930
  * **Complexity**: Constant.
990
931
  */
991
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
992
- size_type back_free_capacity() const BOOST_NOEXCEPT
993
- {
994
- return m_.capacity - m_.back_idx;
995
- }
932
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
933
+ size_type capacity() const BOOST_NOEXCEPT
934
+ {
935
+ size_type const cap_reserve = m_.capacity/devector_min_free_fraction;
936
+ return m_.capacity > cap_reserve ? (m_.capacity - cap_reserve) : 0u;
937
+ }
996
938
 
997
- /** **Equivalent to**: `resize_back(sz)` */
998
- void resize(size_type sz) { resize_back(sz); }
939
+ /**
940
+ * **Returns**: The total number of elements that can be pushed to the front of the
941
+ * devector without requiring reallocation.
942
+ *
943
+ * **Complexity**: Constant.
944
+ */
945
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
946
+ size_type front_free_capacity() const BOOST_NOEXCEPT
947
+ {
948
+ return m_.front_idx;
949
+ }
999
950
 
1000
- /** **Equivalent to**: `resize_back(sz, c)` */
1001
- void resize(size_type sz, const T& c) { resize_back(sz, c); }
951
+ /**
952
+ * **Returns**: The total number of elements that can be pushed to the back of the
953
+ * devector without requiring reallocation.
954
+ *
955
+ * **Complexity**: Constant.
956
+ */
957
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
958
+ size_type back_free_capacity() const BOOST_NOEXCEPT
959
+ {
960
+ return size_type(m_.capacity - m_.back_idx);
961
+ }
1002
962
 
1003
- /**
963
+ /**
1004
964
  * **Effects**: If `sz` is greater than the size of `*this`,
1005
- * additional value-initialized elements are inserted
1006
- * to the front. Invalidates iterators if reallocation is needed.
1007
- * If `sz` is smaller than than the size of `*this`,
1008
- * elements are popped from the front.
965
+ * additional value-initialized elements are inserted. Invalidates iterators
966
+ * if reallocation is needed. If `sz` is smaller than than the size of `*this`,
967
+ * elements are erased from the extremes.
1009
968
  *
1010
969
  * **Requires**: T shall be [MoveInsertable] into *this and [DefaultConstructible].
1011
970
  *
@@ -1018,20 +977,27 @@ class devector
1018
977
  * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1019
978
  * [DefaultConstructible]: http://en.cppreference.com/w/cpp/concept/DefaultConstructible
1020
979
  */
1021
- void resize_front(size_type sz)
1022
- {
1023
- resize_front_impl(sz);
1024
- BOOST_ASSERT(invariants_ok());
1025
- }
980
+ inline void resize(size_type sz)
981
+ {
982
+ this->resize_back(sz);
983
+ }
1026
984
 
1027
- /**
985
+ /**
986
+ * **Effects**: Same as resize(sz) but creates default-initialized
987
+ * value-initialized.
988
+ */
989
+ inline void resize(size_type sz, default_init_t)
990
+ {
991
+ this->resize_back(sz, default_init);
992
+ }
993
+
994
+ /**
1028
995
  * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
1029
996
  *
1030
997
  * **Effects**: If `sz` is greater than the size of `*this`,
1031
- * copies of `c` are inserted to the front.
1032
- * Invalidates iterators if reallocation is needed.
998
+ * copies of `c` are inserted at extremes.
1033
999
  * If `sz` is smaller than than the size of `*this`,
1034
- * elements are popped from the front.
1000
+ * elements are popped from the extremes.
1035
1001
  *
1036
1002
  * **Postcondition**: `sz == size()`.
1037
1003
  *
@@ -1041,230 +1007,348 @@ class devector
1041
1007
  *
1042
1008
  * **Complexity**: Linear in the size of `*this` and `sz`.
1043
1009
  */
1044
- void resize_front(size_type sz, const T& c)
1045
- {
1046
- resize_front_impl(sz, c);
1047
- BOOST_ASSERT(invariants_ok());
1048
- }
1010
+ inline void resize(size_type sz, const T& c)
1011
+ {
1012
+ this->resize_back(sz, c);
1013
+ }
1049
1014
 
1050
- /**
1051
- * **Effects**: If `sz` is greater than the size of `*this`,
1052
- * additional value-initialized elements are inserted
1053
- * to the back. Invalidates iterators if reallocation is needed.
1054
- * If `sz` is smaller than than the size of `*this`,
1055
- * elements are popped from the back.
1056
- *
1057
- * **Requires**: T shall be [MoveInsertable] into *this and [DefaultConstructible].
1058
- *
1059
- * **Postcondition**: `sz == size()`.
1060
- *
1061
- * **Exceptions**: Strong exception guarantee.
1062
- *
1063
- * **Complexity**: Linear in the size of `*this` and `sz`.
1064
- *
1065
- * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1066
- * [DefaultConstructible]: http://en.cppreference.com/w/cpp/concept/DefaultConstructible
1067
- */
1068
- void resize_back(size_type sz)
1069
- {
1070
- resize_back_impl(sz);
1071
- BOOST_ASSERT(invariants_ok());
1072
- }
1015
+ /**
1016
+ * **Effects**: If `sz` is greater than the size of `*this`,
1017
+ * additional value-initialized elements are inserted
1018
+ * to the front. Invalidates iterators if reallocation is needed.
1019
+ * If `sz` is smaller than than the size of `*this`,
1020
+ * elements are popped from the front.
1021
+ *
1022
+ * **Requires**: T shall be [MoveInsertable] into *this and [DefaultConstructible].
1023
+ *
1024
+ * **Postcondition**: `sz == size()`.
1025
+ *
1026
+ * **Exceptions**: Strong exception guarantee.
1027
+ *
1028
+ * **Complexity**: Linear in the size of `*this` and `sz`.
1029
+ *
1030
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1031
+ * [DefaultConstructible]: http://en.cppreference.com/w/cpp/concept/DefaultConstructible
1032
+ */
1033
+ inline void resize_front(size_type sz)
1034
+ {
1035
+ resize_front_impl(sz);
1036
+ BOOST_ASSERT(invariants_ok());
1037
+ }
1073
1038
 
1074
- /**
1075
- * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
1076
- *
1077
- * **Effects**: If `sz` is greater than the size of `*this`,
1078
- * copies of `c` are inserted to the back.
1079
- * If `sz` is smaller than than the size of `*this`,
1080
- * elements are popped from the back.
1081
- *
1082
- * **Postcondition**: `sz == size()`.
1083
- *
1084
- * **Requires**: `T` shall be [CopyInsertable] into `*this`.
1085
- *
1086
- * **Exceptions**: Strong exception guarantee.
1087
- *
1088
- * **Complexity**: Linear in the size of `*this` and `sz`.
1089
- */
1090
- void resize_back(size_type sz, const T& c)
1091
- {
1092
- resize_back_impl(sz, c);
1093
- BOOST_ASSERT(invariants_ok());
1094
- }
1095
-
1096
- // unsafe uninitialized resize methods
1097
-
1098
- /**
1099
- * **Unsafe method**, use with care.
1100
- *
1101
- * **Effects**: Changes the size of the devector without properly
1102
- * initializing the extra or destroying the superfluous elements.
1103
- * If `n < size()`, elements are removed from the front without
1104
- * getting destroyed; if `n > size()`, uninitialized elements are added
1105
- * before the first element at the front.
1106
- * Invalidates iterators if reallocation is needed.
1107
- *
1108
- * **Postcondition**: `size() == n`.
1109
- *
1110
- * **Exceptions**: Strong exception guarantee.
1111
- *
1112
- * **Complexity**: Linear in `size()` if `capacity() < n`, constant otherwise.
1113
- *
1114
- * **Remarks**: The devector does not keep track of initialization of the elements:
1115
- * Elements without a trivial destructor must be manually destroyed before shrinking,
1116
- * elements without a trivial constructor must be initialized after growing.
1117
- */
1118
- /*
1119
- void unsafe_uninitialized_resize_front(size_type n)
1120
- {
1121
- if (n > size())
1122
- {
1123
- unsafe_uninitialized_grow_front(n);
1124
- }
1125
- else
1126
- {
1127
- unsafe_uninitialized_shrink_front(n);
1128
- }
1129
- }
1130
- */
1131
- /**
1132
- * **Unsafe method**, use with care.
1133
- *
1134
- * **Effects**: Changes the size of the devector without properly
1135
- * initializing the extra or destroying the superfluous elements.
1136
- * If `n < size()`, elements are removed from the back without
1137
- * getting destroyed; if `n > size()`, uninitialized elements are added
1138
- * after the last element at the back.
1139
- * Invalidates iterators if reallocation is needed.
1140
- *
1141
- * **Postcondition**: `size() == n`.
1142
- *
1143
- * **Exceptions**: Strong exception guarantee.
1144
- *
1145
- * **Complexity**: Linear in `size()` if `capacity() < n`, constant otherwise.
1146
- *
1147
- * **Remarks**: The devector does not keep track of initialization of the elements:
1148
- * Elements without a trivial destructor must be manually destroyed before shrinking,
1149
- * elements without a trivial constructor must be initialized after growing.
1150
- */
1151
- /*
1152
- void unsafe_uninitialized_resize_back(size_type n)
1153
- {
1154
- if (n > size())
1155
- {
1156
- unsafe_uninitialized_grow_back(n);
1157
- }
1158
- else
1159
- {
1160
- unsafe_uninitialized_shrink_back(n);
1161
- }
1162
- }
1163
- */
1164
- // reserve promise:
1165
- // after reserve_[front,back](n), n - size() push_[front,back] will not allocate
1039
+ /**
1040
+ * **Effects**: If `sz` is greater than the size of `*this`,
1041
+ * additional value-initialized elements are inserted
1042
+ * to the front. Invalidates iterators if reallocation is needed.
1043
+ * If `sz` is smaller than than the size of `*this`,
1044
+ * elements are popped from the front.
1045
+ *
1046
+ * **Requires**: T shall be [MoveInsertable] into *this and default_initializable.
1047
+ *
1048
+ * **Postcondition**: `sz == size()`.
1049
+ *
1050
+ * **Exceptions**: Strong exception guarantee.
1051
+ *
1052
+ * **Complexity**: Linear in the size of `*this` and `sz`.
1053
+ *
1054
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1055
+ */
1056
+ inline void resize_front(size_type sz, default_init_t)
1057
+ {
1058
+ resize_front_impl(sz, default_init);
1059
+ BOOST_ASSERT(invariants_ok());
1060
+ }
1166
1061
 
1167
- /** **Equivalent to**: `reserve_back(new_capacity)` */
1168
- void reserve(size_type new_capacity) { reserve_back(new_capacity); }
1062
+ /**
1063
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
1064
+ *
1065
+ * **Effects**: If `sz` is greater than the size of `*this`,
1066
+ * copies of `c` are inserted to the front.
1067
+ * Invalidates iterators if reallocation is needed.
1068
+ * If `sz` is smaller than than the size of `*this`,
1069
+ * elements are popped from the front.
1070
+ *
1071
+ * **Postcondition**: `sz == size()`.
1072
+ *
1073
+ * **Requires**: `T` shall be [CopyInsertable] into `*this`.
1074
+ *
1075
+ * **Exceptions**: Strong exception guarantee.
1076
+ *
1077
+ * **Complexity**: Linear in the size of `*this` and `sz`.
1078
+ */
1079
+ inline void resize_front(size_type sz, const T& c)
1080
+ {
1081
+ resize_front_impl(sz, c);
1082
+ BOOST_ASSERT(invariants_ok());
1083
+ }
1169
1084
 
1170
- /**
1171
- * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1172
- *
1173
- * **Effects**: Ensures that `n` elements can be pushed to the front
1174
- * without requiring reallocation, where `n` is `new_capacity - size()`,
1175
- * if `n` is positive. Otherwise, there are no effects.
1176
- * Invalidates iterators if reallocation is needed.
1177
- *
1178
- * **Requires**: `T` shall be [MoveInsertable] into `*this`.
1179
- *
1180
- * **Complexity**: Linear in the size of *this.
1181
- *
1182
- * **Exceptions**: Strong exception guarantee.
1183
- *
1184
- * **Throws**: `length_error` if `new_capacity > max_size()`.
1185
- */
1186
- void reserve_front(size_type new_capacity)
1187
- {
1188
- if (front_capacity() >= new_capacity) { return; }
1085
+ /**
1086
+ * **Effects**: If `sz` is greater than the size of `*this`,
1087
+ * additional value-initialized elements are inserted
1088
+ * to the back. Invalidates iterators if reallocation is needed.
1089
+ * If `sz` is smaller than than the size of `*this`,
1090
+ * elements are popped from the back.
1091
+ *
1092
+ * **Requires**: T shall be [MoveInsertable] into *this and [DefaultConstructible].
1093
+ *
1094
+ * **Postcondition**: `sz == size()`.
1095
+ *
1096
+ * **Exceptions**: Strong exception guarantee.
1097
+ *
1098
+ * **Complexity**: Linear in the size of `*this` and `sz`.
1099
+ *
1100
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1101
+ * [DefaultConstructible]: http://en.cppreference.com/w/cpp/concept/DefaultConstructible
1102
+ */
1103
+ inline void resize_back(size_type sz)
1104
+ {
1105
+ resize_back_impl(sz);
1106
+ BOOST_ASSERT(invariants_ok());
1107
+ }
1189
1108
 
1190
- reallocate_at(new_capacity + back_free_capacity(), new_capacity - size());
1109
+ /**
1110
+ * **Effects**: If `sz` is greater than the size of `*this`,
1111
+ * additional value-initialized elements are inserted
1112
+ * to the back. Invalidates iterators if reallocation is needed.
1113
+ * If `sz` is smaller than than the size of `*this`,
1114
+ * elements are popped from the back.
1115
+ *
1116
+ * **Requires**: T shall be [MoveInsertable] into *this and default initializable.
1117
+ *
1118
+ * **Postcondition**: `sz == size()`.
1119
+ *
1120
+ * **Exceptions**: Strong exception guarantee.
1121
+ *
1122
+ * **Complexity**: Linear in the size of `*this` and `sz`.
1123
+ *
1124
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1125
+ */
1126
+ inline void resize_back(size_type sz, default_init_t)
1127
+ {
1128
+ resize_back_impl(sz, default_init);
1129
+ BOOST_ASSERT(invariants_ok());
1130
+ }
1191
1131
 
1192
- BOOST_ASSERT(invariants_ok());
1193
- }
1132
+ /**
1133
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
1134
+ *
1135
+ * **Effects**: If `sz` is greater than the size of `*this`,
1136
+ * copies of `c` are inserted to the back.
1137
+ * If `sz` is smaller than than the size of `*this`,
1138
+ * elements are popped from the back.
1139
+ *
1140
+ * **Postcondition**: `sz == size()`.
1141
+ *
1142
+ * **Requires**: `T` shall be [CopyInsertable] into `*this`.
1143
+ *
1144
+ * **Exceptions**: Strong exception guarantee.
1145
+ *
1146
+ * **Complexity**: Linear in the size of `*this` and `sz`.
1147
+ */
1148
+ inline void resize_back(size_type sz, const T& c)
1149
+ {
1150
+ resize_back_impl(sz, c);
1151
+ BOOST_ASSERT(invariants_ok());
1152
+ }
1194
1153
 
1195
- /**
1196
- * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1197
- *
1198
- * **Effects**: Ensures that `n` elements can be pushed to the back
1199
- * without requiring reallocation, where `n` is `new_capacity - size()`,
1200
- * if `n` is positive. Otherwise, there are no effects.
1201
- * Invalidates iterators if reallocation is needed.
1202
- *
1203
- * **Requires**: `T` shall be [MoveInsertable] into `*this`.
1204
- *
1205
- * **Complexity**: Linear in the size of *this.
1206
- *
1207
- * **Exceptions**: Strong exception guarantee.
1208
- *
1209
- * **Throws**: length_error if `new_capacity > max_size()`.
1210
- */
1211
- void reserve_back(size_type new_capacity)
1212
- {
1213
- if (back_capacity() >= new_capacity) { return; }
1154
+ /**
1155
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1156
+ *
1157
+ * **Effects**: Ensures that at least `n` elements can be inserted
1158
+ * without requiring reallocation, where `n` is `new_capacity - size()`,
1159
+ * if `n` is positive. Otherwise, there are no effects.
1160
+ * Invalidates iterators if reallocation is needed.
1161
+ *
1162
+ * **Requires**: `T` shall be [MoveInsertable] into `*this`.
1163
+ *
1164
+ * **Complexity**: Linear in the size of *this.
1165
+ *
1166
+ * **Exceptions**: Strong exception guarantee.
1167
+ *
1168
+ * **Throws**: length_error if `new_capacity > max_size()`.
1169
+ */
1170
+ inline void reserve(size_type new_capacity)
1171
+ {
1172
+ if (this->capacity() < new_capacity) {
1173
+ const size_type rounder = devector_min_free_fraction - 2u;
1174
+ const size_type divisor = devector_min_free_fraction - 1u;
1175
+ size_type const nc = ((new_capacity + rounder)/divisor)*devector_min_free_fraction;
1176
+ BOOST_ASSERT(new_capacity <= (nc - nc / devector_min_free_fraction));
1177
+ size_type const sz = this->size();
1178
+ reallocate_at(nc, (nc-sz)/2u);
1179
+ }
1180
+ BOOST_ASSERT(invariants_ok());
1181
+ }
1182
+
1183
+ /**
1184
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1185
+ *
1186
+ * **Effects**: Ensures that `n` elements can be pushed to the front
1187
+ * without requiring reallocation, where `n` is `new_capacity - size()`,
1188
+ * if `n` is positive. Otherwise, there are no effects.
1189
+ * Invalidates iterators if reallocation is needed.
1190
+ *
1191
+ * **Requires**: `T` shall be [MoveInsertable] into `*this`.
1192
+ *
1193
+ * **Complexity**: Linear in the size of *this.
1194
+ *
1195
+ * **Exceptions**: Strong exception guarantee.
1196
+ *
1197
+ * **Throws**: `length_error` if `new_capacity > max_size()`.
1198
+ */
1199
+ inline void reserve_front(size_type new_capacity)
1200
+ {
1201
+ if (front_capacity() >= new_capacity) { return; }
1202
+
1203
+ reallocate_at(new_capacity + back_free_capacity(), new_capacity - size());
1214
1204
 
1215
- reallocate_at(new_capacity + front_free_capacity(), m_.front_idx);
1205
+ BOOST_ASSERT(invariants_ok());
1206
+ }
1216
1207
 
1217
- BOOST_ASSERT(invariants_ok());
1218
- }
1208
+ /**
1209
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1210
+ *
1211
+ * **Effects**: Ensures that `n` elements can be pushed to the back
1212
+ * without requiring reallocation, where `n` is `new_capacity - size()`,
1213
+ * if `n` is positive. Otherwise, there are no effects.
1214
+ * Invalidates iterators if reallocation is needed.
1215
+ *
1216
+ * **Requires**: `T` shall be [MoveInsertable] into `*this`.
1217
+ *
1218
+ * **Complexity**: Linear in the size of *this.
1219
+ *
1220
+ * **Exceptions**: Strong exception guarantee.
1221
+ *
1222
+ * **Throws**: length_error if `new_capacity > max_size()`.
1223
+ */
1224
+ inline void reserve_back(size_type new_capacity)
1225
+ {
1226
+ if (back_capacity() >= new_capacity) { return; }
1227
+
1228
+ reallocate_at(new_capacity + front_free_capacity(), m_.front_idx);
1219
1229
 
1230
+ BOOST_ASSERT(invariants_ok());
1231
+ }
1220
1232
 
1221
- /**
1222
- * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1223
- *
1224
- * **Effects**: Reduces `capacity()` to `size()`. Invalidates iterators.
1225
- *
1226
- * **Requires**: `T` shall be [MoveInsertable] into `*this`.
1227
- *
1228
- * **Exceptions**: Strong exception guarantee.
1229
- *
1230
- * **Complexity**: Linear in the size of *this.
1231
- */
1232
- void shrink_to_fit()
1233
- {
1233
+
1234
+ /**
1235
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1236
+ *
1237
+ * **Effects**: Reduces `capacity()` to `size()`. Invalidates iterators.
1238
+ *
1239
+ * **Requires**: `T` shall be [MoveInsertable] into `*this`.
1240
+ *
1241
+ * **Exceptions**: Strong exception guarantee.
1242
+ *
1243
+ * **Complexity**: Linear in the size of *this.
1244
+ */
1245
+ inline void shrink_to_fit()
1246
+ {
1234
1247
  if(this->front_capacity() || this->back_capacity())
1235
- this->reallocate_at(size(), 0);
1236
- }
1248
+ this->reallocate_at(size(), 0);
1249
+ }
1237
1250
 
1238
- // element access:
1251
+ // element access:
1239
1252
 
1240
- /**
1241
- * **Returns**: A reference to the `n`th element in the devector.
1242
- *
1243
- * **Precondition**: `n < size()`.
1244
- *
1245
- * **Complexity**: Constant.
1246
- */
1247
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1253
+ /**
1254
+ * **Returns**: A reference to the `n`th element in the devector.
1255
+ *
1256
+ * **Precondition**: `n < size()`.
1257
+ *
1258
+ * **Complexity**: Constant.
1259
+ */
1260
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1248
1261
  reference operator[](size_type n) BOOST_NOEXCEPT
1249
- {
1250
- BOOST_ASSERT(n < size());
1251
- return *(begin() + n);
1252
- }
1262
+ {
1263
+ BOOST_ASSERT(n < size());
1264
+ return m_.buffer[m_.front_idx + n];
1265
+ }
1253
1266
 
1254
- /**
1255
- * **Returns**: A constant reference to the `n`th element in the devector.
1256
- *
1257
- * **Precondition**: `n < size()`.
1258
- *
1259
- * **Complexity**: Constant.
1260
- */
1261
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1267
+ /**
1268
+ * **Returns**: A constant reference to the `n`th element in the devector.
1269
+ *
1270
+ * **Precondition**: `n < size()`.
1271
+ *
1272
+ * **Complexity**: Constant.
1273
+ */
1274
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1262
1275
  const_reference operator[](size_type n) const BOOST_NOEXCEPT
1263
- {
1264
- BOOST_ASSERT(n < size());
1276
+ {
1277
+ BOOST_ASSERT(n < size());
1278
+ return m_.buffer[m_.front_idx + n];
1279
+ }
1265
1280
 
1266
- return *(begin() + n);
1267
- }
1281
+ //! <b>Requires</b>: size() >= n.
1282
+ //!
1283
+ //! <b>Effects</b>: Returns an iterator to the nth element
1284
+ //! from the beginning of the container. Returns end()
1285
+ //! if n == size().
1286
+ //!
1287
+ //! <b>Throws</b>: Nothing.
1288
+ //!
1289
+ //! <b>Complexity</b>: Constant.
1290
+ //!
1291
+ //! <b>Note</b>: Non-standard extension
1292
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1293
+ iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW
1294
+ {
1295
+ BOOST_ASSERT(n <= size());
1296
+ return iterator(m_.buffer + (m_.front_idx + n));
1297
+ }
1298
+
1299
+ //! <b>Requires</b>: size() >= n.
1300
+ //!
1301
+ //! <b>Effects</b>: Returns a const_iterator to the nth element
1302
+ //! from the beginning of the container. Returns end()
1303
+ //! if n == size().
1304
+ //!
1305
+ //! <b>Throws</b>: Nothing.
1306
+ //!
1307
+ //! <b>Complexity</b>: Constant.
1308
+ //!
1309
+ //! <b>Note</b>: Non-standard extension
1310
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1311
+ const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
1312
+ {
1313
+ BOOST_ASSERT(n <= size());
1314
+ return const_iterator(m_.buffer + (m_.front_idx + n));
1315
+ }
1316
+
1317
+ //! <b>Requires</b>: begin() <= p <= end().
1318
+ //!
1319
+ //! <b>Effects</b>: Returns the index of the element pointed by p
1320
+ //! and size() if p == end().
1321
+ //!
1322
+ //! <b>Throws</b>: Nothing.
1323
+ //!
1324
+ //! <b>Complexity</b>: Constant.
1325
+ //!
1326
+ //! <b>Note</b>: Non-standard extension
1327
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1328
+ size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW
1329
+ {
1330
+ BOOST_ASSERT(p >= begin());
1331
+ BOOST_ASSERT(p <= end());
1332
+ return static_cast<size_type>(p - this->begin());
1333
+ }
1334
+
1335
+ //! <b>Requires</b>: begin() <= p <= end().
1336
+ //!
1337
+ //! <b>Effects</b>: Returns the index of the element pointed by p
1338
+ //! and size() if p == end().
1339
+ //!
1340
+ //! <b>Throws</b>: Nothing.
1341
+ //!
1342
+ //! <b>Complexity</b>: Constant.
1343
+ //!
1344
+ //! <b>Note</b>: Non-standard extension
1345
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1346
+ size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW
1347
+ {
1348
+ BOOST_ASSERT(p >= cbegin());
1349
+ BOOST_ASSERT(p <= cend());
1350
+ return static_cast<size_type>(p - this->cbegin());
1351
+ }
1268
1352
 
1269
1353
  /**
1270
1354
  * **Returns**: A reference to the `n`th element in the devector.
@@ -1273,11 +1357,11 @@ class devector
1273
1357
  *
1274
1358
  * **Complexity**: Constant.
1275
1359
  */
1276
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1360
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1277
1361
  reference at(size_type n)
1278
1362
  {
1279
1363
  if (size() <= n)
1280
- throw_out_of_range("devector::at out of range");
1364
+ throw_out_of_range("devector::at out of range");
1281
1365
  return (*this)[n];
1282
1366
  }
1283
1367
 
@@ -1288,11 +1372,11 @@ class devector
1288
1372
  *
1289
1373
  * **Complexity**: Constant.
1290
1374
  */
1291
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1375
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1292
1376
  const_reference at(size_type n) const
1293
1377
  {
1294
1378
  if (size() <= n)
1295
- throw_out_of_range("devector::at out of range");
1379
+ throw_out_of_range("devector::at out of range");
1296
1380
  return (*this)[n];
1297
1381
  }
1298
1382
 
@@ -1303,12 +1387,12 @@ class devector
1303
1387
  *
1304
1388
  * **Complexity**: Constant.
1305
1389
  */
1306
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1390
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1307
1391
  reference front() BOOST_NOEXCEPT
1308
1392
  {
1309
1393
  BOOST_ASSERT(!empty());
1310
1394
 
1311
- return *(m_.buffer + m_.front_idx);
1395
+ return m_.buffer[m_.front_idx];
1312
1396
  }
1313
1397
 
1314
1398
  /**
@@ -1318,12 +1402,12 @@ class devector
1318
1402
  *
1319
1403
  * **Complexity**: Constant.
1320
1404
  */
1321
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1405
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1322
1406
  const_reference front() const BOOST_NOEXCEPT
1323
1407
  {
1324
1408
  BOOST_ASSERT(!empty());
1325
1409
 
1326
- return *(m_.buffer + m_.front_idx);
1410
+ return m_.buffer[m_.front_idx];
1327
1411
  }
1328
1412
 
1329
1413
  /**
@@ -1333,12 +1417,12 @@ class devector
1333
1417
  *
1334
1418
  * **Complexity**: Constant.
1335
1419
  */
1336
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1420
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1337
1421
  reference back() BOOST_NOEXCEPT
1338
1422
  {
1339
1423
  BOOST_ASSERT(!empty());
1340
1424
 
1341
- return *(m_.buffer + m_.back_idx -1);
1425
+ return m_.buffer[m_.back_idx - 1u];
1342
1426
  }
1343
1427
 
1344
1428
  /**
@@ -1348,12 +1432,12 @@ class devector
1348
1432
  *
1349
1433
  * **Complexity**: Constant.
1350
1434
  */
1351
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1435
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1352
1436
  const_reference back() const BOOST_NOEXCEPT
1353
1437
  {
1354
1438
  BOOST_ASSERT(!empty());
1355
1439
 
1356
- return *(m_.buffer + m_.back_idx -1);
1440
+ return m_.buffer[m_.back_idx - 1u];
1357
1441
  }
1358
1442
 
1359
1443
  /**
@@ -1363,7 +1447,7 @@ class devector
1363
1447
  *
1364
1448
  * **Complexity**: Constant.
1365
1449
  */
1366
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1450
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1367
1451
  T* data() BOOST_NOEXCEPT
1368
1452
  {
1369
1453
  return boost::movelib::to_raw_pointer(m_.buffer) + m_.front_idx;
@@ -1376,7 +1460,7 @@ class devector
1376
1460
  *
1377
1461
  * **Complexity**: Constant.
1378
1462
  */
1379
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1463
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1380
1464
  const T* data() const BOOST_NOEXCEPT
1381
1465
  {
1382
1466
  return boost::movelib::to_raw_pointer(m_.buffer) + m_.front_idx;
@@ -1402,38 +1486,41 @@ class devector
1402
1486
  */
1403
1487
  #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1404
1488
  template <class... Args>
1405
- void emplace_front(Args&&... args)
1489
+ reference emplace_front(Args&&... args)
1406
1490
  {
1407
- if (front_free_capacity()) // fast path
1491
+ if (BOOST_LIKELY(front_free_capacity() != 0)) // fast path
1408
1492
  {
1409
- this->alloc_construct(m_.buffer + m_.front_idx - 1, boost::forward<Args>(args)...);
1493
+ pointer const p = m_.buffer + (m_.front_idx - 1u);
1494
+ this->alloc_construct(p, boost::forward<Args>(args)...);
1410
1495
  --m_.front_idx;
1496
+ BOOST_ASSERT(invariants_ok());
1497
+ return *p;
1411
1498
  }
1412
1499
  else
1413
1500
  {
1414
- this->emplace_reallocating_slow_path(true, 0, boost::forward<Args>(args)...);
1501
+ typedef dtl::insert_emplace_proxy<allocator_type, Args...> proxy_t;
1502
+ return *this->insert_range_slow_path(this->begin(), 1, proxy_t(::boost::forward<Args>(args)...));
1415
1503
  }
1416
-
1417
- BOOST_ASSERT(invariants_ok());
1418
1504
  }
1419
1505
 
1420
1506
  #else //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1421
1507
 
1422
1508
  #define BOOST_CONTAINER_DEVECTOR_EMPLACE_FRONT(N) \
1423
1509
  BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
1424
- BOOST_CONTAINER_FORCEINLINE void emplace_front(BOOST_MOVE_UREF##N)\
1510
+ inline reference emplace_front(BOOST_MOVE_UREF##N)\
1425
1511
  {\
1426
1512
  if (front_free_capacity())\
1427
1513
  {\
1428
- this->alloc_construct(m_.buffer + m_.front_idx - 1 BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1514
+ pointer const p = m_.buffer + (m_.front_idx - 1u);\
1515
+ this->alloc_construct(p BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1429
1516
  --m_.front_idx;\
1517
+ return *p;\
1430
1518
  }\
1431
1519
  else\
1432
1520
  {\
1433
- this->emplace_reallocating_slow_path(true, 0 BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1521
+ typedef dtl::insert_emplace_proxy_arg##N<allocator_type BOOST_MOVE_I##N BOOST_MOVE_TARG##N> proxy_t;\
1522
+ return *this->insert_range_slow_path(this->begin(), 1, proxy_t(BOOST_MOVE_FWD##N));\
1434
1523
  }\
1435
- \
1436
- BOOST_ASSERT(invariants_ok());\
1437
1524
  }\
1438
1525
  //
1439
1526
  BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DEVECTOR_EMPLACE_FRONT)
@@ -1489,8 +1576,8 @@ class devector
1489
1576
  */
1490
1577
  void pop_front() BOOST_NOEXCEPT
1491
1578
  {
1492
- BOOST_ASSERT(! empty());
1493
- allocator_traits_type::destroy(get_allocator_ref(), m_.buffer + m_.front_idx);
1579
+ BOOST_ASSERT(!empty());
1580
+ allocator_traits_type::destroy(get_allocator_ref(), boost::movelib::to_raw_pointer(m_.buffer + m_.front_idx));
1494
1581
  ++m_.front_idx;
1495
1582
  BOOST_ASSERT(invariants_ok());
1496
1583
  }
@@ -1515,38 +1602,43 @@ class devector
1515
1602
  */
1516
1603
  #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1517
1604
  template <class... Args>
1518
- BOOST_CONTAINER_FORCEINLINE void emplace_back(Args&&... args)
1605
+ inline reference emplace_back(Args&&... args)
1519
1606
  {
1520
- if (this->back_free_capacity()){
1521
- this->alloc_construct(m_.buffer + m_.back_idx, boost::forward<Args>(args)...);
1607
+ if (BOOST_LIKELY(this->back_free_capacity() != 0)){
1608
+ pointer const p = m_.buffer + m_.back_idx;
1609
+ this->alloc_construct(p, boost::forward<Args>(args)...);
1522
1610
  ++m_.back_idx;
1611
+ BOOST_ASSERT(invariants_ok());
1612
+ return *p;
1523
1613
  }
1524
1614
  else {
1525
- this->emplace_reallocating_slow_path(false, size(), boost::forward<Args>(args)...);
1615
+ typedef dtl::insert_emplace_proxy<allocator_type, Args...> proxy_t;
1616
+ return *this->insert_range_slow_path(this->end(), 1, proxy_t(::boost::forward<Args>(args)...));
1526
1617
  }
1527
- BOOST_ASSERT(invariants_ok());
1528
1618
  }
1529
1619
 
1530
1620
  #else //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1531
1621
 
1532
1622
  #define BOOST_CONTAINER_DEVECTOR_EMPLACE_BACK(N) \
1533
1623
  BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
1534
- BOOST_CONTAINER_FORCEINLINE void emplace_back(BOOST_MOVE_UREF##N)\
1624
+ inline reference emplace_back(BOOST_MOVE_UREF##N)\
1535
1625
  {\
1536
1626
  if (this->back_free_capacity()){\
1537
- this->alloc_construct(m_.buffer + m_.back_idx BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1627
+ pointer const p = m_.buffer + m_.back_idx;\
1628
+ this->alloc_construct(p BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1538
1629
  ++m_.back_idx;\
1630
+ return *p;\
1539
1631
  }\
1540
1632
  else {\
1541
- this->emplace_reallocating_slow_path(false, size() BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1633
+ typedef dtl::insert_emplace_proxy_arg##N<allocator_type BOOST_MOVE_I##N BOOST_MOVE_TARG##N> proxy_t;\
1634
+ return *this->insert_range_slow_path(this->end(), 1, proxy_t(BOOST_MOVE_FWD##N));\
1542
1635
  }\
1543
- BOOST_ASSERT(invariants_ok());\
1544
1636
  }\
1545
1637
  //
1546
1638
  BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DEVECTOR_EMPLACE_BACK)
1547
1639
  #undef BOOST_CONTAINER_DEVECTOR_EMPLACE_BACK
1548
1640
 
1549
- #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1641
+ #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1550
1642
 
1551
1643
 
1552
1644
  #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
@@ -1599,7 +1691,7 @@ class devector
1599
1691
  {
1600
1692
  BOOST_ASSERT(! empty());
1601
1693
  --m_.back_idx;
1602
- allocator_traits_type::destroy(get_allocator_ref(), m_.buffer + m_.back_idx);
1694
+ allocator_traits_type::destroy(get_allocator_ref(), boost::movelib::to_raw_pointer(m_.buffer + m_.back_idx));
1603
1695
  BOOST_ASSERT(invariants_ok());
1604
1696
  }
1605
1697
 
@@ -1628,24 +1720,56 @@ class devector
1628
1720
  {
1629
1721
  BOOST_ASSERT(position >= begin());
1630
1722
  BOOST_ASSERT(position <= end());
1631
-
1632
- if (position == end() && back_free_capacity()) // fast path
1633
- {
1634
- this->alloc_construct(m_.buffer + m_.back_idx, boost::forward<Args>(args)...);
1635
- ++m_.back_idx;
1636
- return end() - 1;
1723
+ typedef dtl::insert_emplace_proxy<allocator_type, Args...> proxy_t;
1724
+ bool prefer_move_back;
1725
+ if (position == end()){
1726
+ if(back_free_capacity()) // fast path
1727
+ {
1728
+ pointer const p = m_.buffer + m_.back_idx;
1729
+ this->alloc_construct(p, boost::forward<Args>(args)...);
1730
+ ++m_.back_idx;
1731
+ return iterator(p);
1732
+ }
1733
+ prefer_move_back = true;
1637
1734
  }
1638
- else if (position == begin() && front_free_capacity()) // secondary fast path
1639
- {
1640
- this->alloc_construct(m_.buffer + (m_.front_idx - 1), boost::forward<Args>(args)...);
1641
- --m_.front_idx;
1642
- return begin();
1735
+ else if (position == begin()){
1736
+ if(front_free_capacity()) // secondary fast path
1737
+ {
1738
+ pointer const p = m_.buffer + (m_.front_idx - 1);
1739
+ this->alloc_construct(p, boost::forward<Args>(args)...);
1740
+ --m_.front_idx;
1741
+ return iterator(p);
1742
+ }
1743
+ prefer_move_back = false;
1643
1744
  }
1644
- else
1645
- {
1646
- size_type new_elem_index = position - begin();
1647
- return this->emplace_slow_path(new_elem_index, boost::forward<Args>(args)...);
1745
+ else{
1746
+ iterator nonconst_pos = unconst_iterator(position);
1747
+ prefer_move_back = should_move_back(position);
1748
+
1749
+ if(prefer_move_back){
1750
+ if(back_free_capacity()){
1751
+ boost::container::expand_forward_and_insert_nonempty_middle_alloc
1752
+ ( get_allocator_ref()
1753
+ , boost::movelib::to_raw_pointer(nonconst_pos)
1754
+ , this->priv_raw_end()
1755
+ , 1, proxy_t(::boost::forward<Args>(args)...));
1756
+ ++m_.back_idx;
1757
+ return nonconst_pos;
1758
+ }
1759
+ }
1760
+ else{
1761
+ if (front_free_capacity()){
1762
+ boost::container::expand_backward_and_insert_nonempty_middle_alloc
1763
+ (get_allocator_ref()
1764
+ , this->priv_raw_begin()
1765
+ , boost::movelib::to_raw_pointer(nonconst_pos)
1766
+ , 1, proxy_t(::boost::forward<Args>(args)...));
1767
+ --m_.front_idx;
1768
+ return --nonconst_pos;
1769
+ }
1770
+ }
1648
1771
  }
1772
+ return this->insert_range_slow_path(position, 1, proxy_t(::boost::forward<Args>(args)...));
1649
1773
  }
1650
1774
 
1651
1775
  #else //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
@@ -1656,27 +1780,62 @@ class devector
1656
1780
  {\
1657
1781
  BOOST_ASSERT(position >= begin());\
1658
1782
  BOOST_ASSERT(position <= end());\
1659
- \
1660
- if (position == end() && back_free_capacity()){\
1661
- this->alloc_construct(m_.buffer + m_.back_idx BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1662
- ++m_.back_idx;\
1663
- return end() - 1;\
1783
+ typedef dtl::insert_emplace_proxy_arg##N<allocator_type BOOST_MOVE_I##N BOOST_MOVE_TARG##N> proxy_t;\
1784
+ bool prefer_move_back;\
1785
+ if (position == end()){\
1786
+ if(back_free_capacity())\
1787
+ {\
1788
+ pointer const p = m_.buffer + m_.back_idx;\
1789
+ this->alloc_construct(p BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1790
+ ++m_.back_idx;\
1791
+ return iterator(p);\
1792
+ }\
1793
+ prefer_move_back = true;\
1664
1794
  }\
1665
- else if (position == begin() && front_free_capacity()){\
1666
- this->alloc_construct(m_.buffer + m_.front_idx - 1 BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1667
- --m_.front_idx;\
1668
- return begin();\
1795
+ else if (position == begin()){\
1796
+ if(front_free_capacity())\
1797
+ {\
1798
+ pointer const p = m_.buffer + (m_.front_idx - 1);\
1799
+ this->alloc_construct(p BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1800
+ --m_.front_idx;\
1801
+ return iterator(p);\
1802
+ }\
1803
+ prefer_move_back = false;\
1669
1804
  }\
1670
1805
  else{\
1671
- size_type new_elem_index = position - begin();\
1672
- return this->emplace_slow_path(new_elem_index BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1806
+ iterator nonconst_pos = unconst_iterator(position);\
1807
+ prefer_move_back = should_move_back(position);\
1808
+ \
1809
+ if(prefer_move_back){\
1810
+ if(back_free_capacity()){\
1811
+ boost::container::expand_forward_and_insert_nonempty_middle_alloc\
1812
+ ( get_allocator_ref()\
1813
+ , boost::movelib::to_raw_pointer(nonconst_pos)\
1814
+ , this->priv_raw_end()\
1815
+ , 1, proxy_t(BOOST_MOVE_FWD##N));\
1816
+ ++m_.back_idx;\
1817
+ return nonconst_pos;\
1818
+ }\
1819
+ }\
1820
+ else{\
1821
+ if (front_free_capacity()){\
1822
+ boost::container::expand_backward_and_insert_nonempty_middle_alloc\
1823
+ (get_allocator_ref()\
1824
+ , this->priv_raw_begin()\
1825
+ , boost::movelib::to_raw_pointer(nonconst_pos)\
1826
+ , 1, proxy_t(BOOST_MOVE_FWD##N));\
1827
+ --m_.front_idx;\
1828
+ return --nonconst_pos;\
1829
+ }\
1830
+ }\
1673
1831
  }\
1832
+ return this->insert_range_slow_path(position, 1, proxy_t(BOOST_MOVE_FWD##N));\
1674
1833
  }\
1675
1834
  //
1676
1835
  BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DEVECTOR_EMPLACE)
1677
1836
  #undef BOOST_CONTAINER_DEVECTOR_EMPLACE
1678
1837
 
1679
- #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1838
+ #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1680
1839
 
1681
1840
 
1682
1841
  #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
@@ -1736,16 +1895,16 @@ class devector
1736
1895
  * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
1737
1896
  * [CopyAssignable]: http://en.cppreference.com/w/cpp/concept/CopyAssignable
1738
1897
  */
1739
- iterator insert(const_iterator position, size_type n, const T& x)
1898
+ inline iterator insert(const_iterator position, size_type n, const T& x)
1740
1899
  {
1741
1900
  cvalue_iterator first(x, n);
1742
1901
  cvalue_iterator last = first + n;
1743
- return insert_range(position, first, last);
1902
+ return this->insert_range(position, first, last);
1744
1903
  }
1745
1904
 
1746
1905
  /**
1747
1906
  * **Effects**: Copy constructs elements before the element pointed by position
1748
- * using each element in the rage pointed by `first` and `last` as constructor arguments.
1907
+ * using each element in the range pointed by `first` and `last` as constructor arguments.
1749
1908
  * Invalidates iterators if reallocation is needed.
1750
1909
  *
1751
1910
  * **Requires**: `T` shall be [EmplaceConstructible] into `*this` from `*first`. If the specified iterator
@@ -1759,7 +1918,7 @@ class devector
1759
1918
  * **Complexity**: Linear in the size of `*this` and `N` (where `N` is the distance between `first` and `last`).
1760
1919
  * Makes only `N` calls to the constructor of `T` and no reallocations if iterators `first` and `last`
1761
1920
  * are of forward, bidirectional, or random access categories. It makes 2N calls to the copy constructor of `T`
1762
- * and allocates memory twice at most if they are just input iterators.
1921
+ * and `O(log(N)) reallocations if they are just input iterators.
1763
1922
  *
1764
1923
  * **Exceptions**: Strong exception guarantee if `T` is `NothrowConstructible`
1765
1924
  * and `NothrowAssignable`, Basic exception guarantee otherwise.
@@ -1775,10 +1934,10 @@ class devector
1775
1934
  iterator insert(const_iterator position, InputIterator first, InputIterator last
1776
1935
  //Input iterators
1777
1936
  BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
1778
- < void
1779
- BOOST_MOVE_I dtl::is_convertible<InputIterator BOOST_MOVE_I size_type>
1780
- BOOST_MOVE_I dtl::is_not_input_iterator<InputIterator>
1781
- >::type * = 0)
1937
+ < void
1938
+ BOOST_MOVE_I dtl::is_convertible<InputIterator BOOST_MOVE_I size_type>
1939
+ BOOST_MOVE_I dtl::is_not_input_iterator<InputIterator>
1940
+ >::type * = 0)
1782
1941
  )
1783
1942
  {
1784
1943
  if (position == end())
@@ -1809,13 +1968,13 @@ class devector
1809
1968
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1810
1969
 
1811
1970
  template <class ForwardIterator>
1812
- iterator insert(const_iterator position, ForwardIterator first, ForwardIterator last
1971
+ inline iterator insert(const_iterator position, ForwardIterator first, ForwardIterator last
1813
1972
  //Other iterators
1814
1973
  BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
1815
- < void
1816
- BOOST_MOVE_I dtl::is_convertible<ForwardIterator BOOST_MOVE_I size_type>
1817
- BOOST_MOVE_I dtl::is_input_iterator<ForwardIterator>
1818
- >::type * = 0)
1974
+ < void
1975
+ BOOST_MOVE_I dtl::is_convertible<ForwardIterator BOOST_MOVE_I size_type>
1976
+ BOOST_MOVE_I dtl::is_input_iterator<ForwardIterator>
1977
+ >::type * = 0)
1819
1978
  )
1820
1979
  {
1821
1980
  return insert_range(position, first, last);
@@ -1825,9 +1984,9 @@ class devector
1825
1984
 
1826
1985
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
1827
1986
  /** **Equivalent to**: `insert(position, il.begin(), il.end())` */
1828
- iterator insert(const_iterator position, std::initializer_list<T> il)
1987
+ inline iterator insert(const_iterator position, std::initializer_list<T> il)
1829
1988
  {
1830
- return insert_range(position, il.begin(), il.end());
1989
+ return this->insert(position, il.begin(), il.end());
1831
1990
  }
1832
1991
  #endif
1833
1992
 
@@ -1875,8 +2034,8 @@ class devector
1875
2034
  */
1876
2035
  iterator erase(const_iterator first, const_iterator last)
1877
2036
  {
1878
- iterator nc_first = begin() + (first - begin());
1879
- iterator nc_last = begin() + (last - begin());
2037
+ iterator nc_first = unconst_iterator(first);
2038
+ iterator nc_last = unconst_iterator(last);
1880
2039
  return erase(nc_first, nc_last);
1881
2040
  }
1882
2041
 
@@ -1900,38 +2059,38 @@ class devector
1900
2059
  */
1901
2060
  iterator erase(iterator first, iterator last)
1902
2061
  {
1903
- size_type front_distance = last - begin();
1904
- size_type back_distance = end() - first;
1905
- size_type n = boost::container::iterator_distance(first, last);
2062
+ size_type front_distance = pos_to_index(last);
2063
+ size_type back_distance = size_type(end() - first);
2064
+ size_type n = boost::container::iterator_udistance(first, last);
1906
2065
 
1907
2066
  if (front_distance < back_distance)
1908
2067
  {
1909
- // move n to the right
1910
- boost::container::move_backward(begin(), first, last);
1911
-
1912
- for (iterator i = begin(); i != begin() + n; ++i)
1913
- {
1914
- allocator_traits_type::destroy(get_allocator_ref(), i);
1915
- }
1916
- //n is always less than max stored_size_type
1917
- m_.set_front_idx(m_.front_idx + n);
1918
-
1919
- BOOST_ASSERT(invariants_ok());
1920
- return last;
2068
+ // move n to the right
2069
+ boost::container::move_backward(begin(), first, last);
2070
+
2071
+ for (iterator i = begin(); i != begin() + n; ++i)
2072
+ {
2073
+ allocator_traits_type::destroy(get_allocator_ref(), boost::movelib::to_raw_pointer(i));
2074
+ }
2075
+ //n is always less than max stored_size_type
2076
+ m_.set_front_idx(m_.front_idx + n);
2077
+
2078
+ BOOST_ASSERT(invariants_ok());
2079
+ return last;
1921
2080
  }
1922
2081
  else {
1923
- // move n to the left
1924
- boost::container::move(last, end(), first);
1925
-
1926
- for (iterator i = end() - n; i != end(); ++i)
1927
- {
1928
- allocator_traits_type::destroy(get_allocator_ref(), i);
1929
- }
1930
- //n is always less than max stored_size_type
1931
- m_.set_back_idx(m_.back_idx - n);
1932
-
1933
- BOOST_ASSERT(invariants_ok());
1934
- return first;
2082
+ // move n to the left
2083
+ boost::container::move(last, end(), first);
2084
+
2085
+ for (iterator i = end() - n; i != end(); ++i)
2086
+ {
2087
+ allocator_traits_type::destroy(get_allocator_ref(), boost::movelib::to_raw_pointer(i));
2088
+ }
2089
+ //n is always less than max stored_size_type
2090
+ m_.set_back_idx(m_.back_idx - n);
2091
+
2092
+ BOOST_ASSERT(invariants_ok());
2093
+ return first;
1935
2094
  }
1936
2095
  }
1937
2096
 
@@ -1951,7 +2110,7 @@ class devector
1951
2110
  */
1952
2111
  void swap(devector& b)
1953
2112
  BOOST_NOEXCEPT_IF( allocator_traits_type::propagate_on_container_swap::value
1954
- || allocator_traits_type::is_always_equal::value)
2113
+ || allocator_traits_type::is_always_equal::value)
1955
2114
  {
1956
2115
  BOOST_CONSTEXPR_OR_CONST bool propagate_alloc = allocator_traits_type::propagate_on_container_swap::value;
1957
2116
  BOOST_ASSERT(propagate_alloc || get_allocator_ref() == b.get_allocator_ref()); // else it's undefined behavior
@@ -1965,7 +2124,7 @@ class devector
1965
2124
  //And now swap the allocator
1966
2125
  dtl::swap_alloc(this->get_allocator_ref(), b.get_allocator_ref(), dtl::bool_<propagate_alloc>());
1967
2126
 
1968
- BOOST_ASSERT( invariants_ok());
2127
+ BOOST_ASSERT( invariants_ok());
1969
2128
  BOOST_ASSERT(b.invariants_ok());
1970
2129
  }
1971
2130
 
@@ -1987,93 +2146,186 @@ class devector
1987
2146
  m_.front_idx = m_.back_idx = 0;
1988
2147
  }
1989
2148
 
1990
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
2149
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1991
2150
  friend bool operator==(const devector& x, const devector& y)
1992
- { return x.size() == y.size() && ::boost::container::algo_equal(x.begin(), x.end(), y.begin()); }
2151
+ { return x.size() == y.size() && ::boost::container::algo_equal(x.begin(), x.end(), y.begin()); }
1993
2152
 
1994
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
2153
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1995
2154
  friend bool operator!=(const devector& x, const devector& y)
1996
- { return !(x == y); }
2155
+ { return !(x == y); }
1997
2156
 
1998
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
2157
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
1999
2158
  friend bool operator< (const devector& x, const devector& y)
2000
- { return boost::container::algo_lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
2159
+ { return boost::container::algo_lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
2001
2160
 
2002
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
2161
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
2003
2162
  friend bool operator>(const devector& x, const devector& y)
2004
- { return y < x; }
2163
+ { return y < x; }
2005
2164
 
2006
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
2165
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
2007
2166
  friend bool operator<=(const devector& x, const devector& y)
2008
- { return !(y < x); }
2167
+ { return !(y < x); }
2009
2168
 
2010
- BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
2169
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
2011
2170
  friend bool operator>=(const devector& x, const devector& y)
2012
- { return !(x < y); }
2171
+ { return !(x < y); }
2013
2172
 
2014
- BOOST_CONTAINER_FORCEINLINE friend void swap(devector& x, devector& y)
2173
+ inline friend void swap(devector& x, devector& y)
2015
2174
  BOOST_NOEXCEPT_IF( allocator_traits_type::propagate_on_container_swap::value
2016
- || allocator_traits_type::is_always_equal::value)
2017
- { x.swap(y); }
2175
+ || allocator_traits_type::is_always_equal::value)
2176
+ { x.swap(y); }
2177
+
2178
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
2179
+
2180
+ //Functions for optimizations, not for users
2181
+ T *unused_storage(size_type &sz)
2182
+ {
2183
+ T *const storage_addr = boost::movelib::to_raw_pointer(m_.buffer);
2184
+ if(this->empty()){
2185
+ sz = m_.capacity;
2186
+ return storage_addr;
2187
+ }
2188
+ else if(this->back_free_capacity() > this->front_free_capacity()){
2189
+ sz = this->back_free_capacity();
2190
+ return storage_addr + m_.back_idx;
2191
+ }
2192
+ else{
2193
+ sz = this->front_free_capacity();
2194
+ return storage_addr;
2195
+ }
2196
+ }
2197
+
2198
+ #endif
2018
2199
 
2019
2200
  private:
2201
+
2202
+ void priv_move_assign(BOOST_RV_REF(devector) x, dtl::bool_<true> /*steal_resources*/)
2203
+ {
2204
+ this->clear();
2205
+ this->deallocate_buffer();
2206
+
2207
+ //Move allocator if needed
2208
+ dtl::bool_<allocator_traits_type::
2209
+ propagate_on_container_move_assignment::value> flag;
2210
+ dtl::move_alloc(this->get_allocator_ref(), x.get_allocator_ref(), flag);
2211
+
2212
+ m_.capacity = x.m_.capacity;
2213
+ m_.buffer = x.m_.buffer;
2214
+ m_.front_idx = x.m_.front_idx;
2215
+ m_.back_idx = x.m_.back_idx;
2216
+
2217
+ // leave x in valid state
2218
+ x.m_.capacity = 0u;
2219
+ x.m_.buffer = pointer();
2220
+ x.m_.back_idx = x.m_.front_idx = 0;
2221
+ }
2222
+
2223
+ void priv_move_assign(BOOST_RV_REF(devector) x, dtl::bool_<false> /*steal_resources*/)
2224
+ {
2225
+ //We can't guarantee a compile-time equal allocator or propagation so fallback to runtime
2226
+ //Resources can be transferred if both allocators are equal
2227
+ if (get_allocator_ref() == x.get_allocator_ref()) {
2228
+ this->priv_move_assign(boost::move(x), dtl::true_());
2229
+ }
2230
+ else {
2231
+ // We can't steal memory.
2232
+ move_iterator<iterator> xbegin = boost::make_move_iterator(x.begin());
2233
+ move_iterator<iterator> xend = boost::make_move_iterator(x.end());
2234
+
2235
+ //Move allocator if needed
2236
+ dtl::bool_<allocator_traits_type::
2237
+ propagate_on_container_move_assignment::value> flag;
2238
+ dtl::move_alloc(this->get_allocator_ref(), x.get_allocator_ref(), flag);
2239
+
2240
+ if (m_.capacity >= x.size()) {
2241
+ overwrite_buffer(xbegin, xend);
2242
+ }
2243
+ else {
2244
+ allocate_and_copy_range(xbegin, xend);
2245
+ }
2246
+ }
2247
+ }
2248
+
2249
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
2250
+ size_type pos_to_index(const_iterator i) const
2251
+ {
2252
+ return static_cast<size_type>(i - cbegin());
2253
+ }
2254
+
2255
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
2256
+ bool should_move_back(const_iterator i) const
2257
+ {
2258
+ return static_cast<size_type>(this->pos_to_index(i)) >= this->size()/2u;
2259
+ }
2260
+
2261
+ inline static iterator unconst_iterator(const_iterator i)
2262
+ {
2263
+ return boost::intrusive::pointer_traits<pointer>::const_cast_from(i);
2264
+ }
2265
+
2266
+ inline size_type front_capacity() const
2267
+ {
2268
+ return m_.back_idx;
2269
+ }
2270
+
2271
+ inline size_type back_capacity() const
2272
+ {
2273
+ return size_type(m_.capacity - m_.front_idx);
2274
+ }
2275
+
2020
2276
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
2021
2277
 
2022
- BOOST_CONTAINER_FORCEINLINE T* raw_begin() BOOST_NOEXCEPT
2023
- { return boost::movelib::to_raw_pointer(m_.buffer) + m_.front_idx; }
2278
+ inline T* priv_raw_begin() BOOST_NOEXCEPT
2279
+ { return boost::movelib::to_raw_pointer(m_.buffer) + m_.front_idx; }
2024
2280
 
2025
- BOOST_CONTAINER_FORCEINLINE T* raw_end() BOOST_NOEXCEPT
2026
- { return boost::movelib::to_raw_pointer(m_.buffer) + m_.back_idx; }
2281
+ inline T* priv_raw_end() BOOST_NOEXCEPT
2282
+ { return boost::movelib::to_raw_pointer(m_.buffer) + m_.back_idx; }
2027
2283
 
2028
2284
 
2029
2285
  template <class U>
2030
- BOOST_CONTAINER_FORCEINLINE void priv_push_front(BOOST_FWD_REF(U) u)
2286
+ inline void priv_push_front(BOOST_FWD_REF(U) u)
2031
2287
  {
2032
2288
  this->emplace_front(boost::forward<U>(u));
2033
2289
  }
2034
2290
 
2035
2291
  template <class U>
2036
- BOOST_CONTAINER_FORCEINLINE void priv_push_back(BOOST_FWD_REF(U) u)
2292
+ inline void priv_push_back(BOOST_FWD_REF(U) u)
2037
2293
  {
2038
2294
  this->emplace_back(boost::forward<U>(u));
2039
2295
  }
2040
2296
 
2041
2297
  template <class U>
2042
- BOOST_CONTAINER_FORCEINLINE iterator priv_insert(const_iterator pos, BOOST_FWD_REF(U) u)
2298
+ inline iterator priv_insert(const_iterator pos, BOOST_FWD_REF(U) u)
2043
2299
  {
2044
2300
  return this->emplace(pos, boost::forward<U>(u));
2045
2301
  }
2046
2302
 
2047
2303
  // allocator_type wrappers
2048
2304
 
2049
- BOOST_CONTAINER_FORCEINLINE allocator_type& get_allocator_ref() BOOST_NOEXCEPT
2305
+ inline allocator_type& get_allocator_ref() BOOST_NOEXCEPT
2050
2306
  {
2051
2307
  return static_cast<allocator_type&>(m_);
2052
2308
  }
2053
2309
 
2054
- BOOST_CONTAINER_FORCEINLINE const allocator_type& get_allocator_ref() const BOOST_NOEXCEPT
2310
+ inline const allocator_type& get_allocator_ref() const BOOST_NOEXCEPT
2055
2311
  {
2056
2312
  return static_cast<const allocator_type&>(m_);
2057
2313
  }
2058
2314
 
2059
- pointer allocate(size_type capacity)
2315
+ pointer allocate(size_type cap)
2060
2316
  {
2061
- //First detect overflow on smaller stored_size_types
2062
- if (capacity > stored_size_type(-1)){
2063
- boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
2064
- }
2065
- //(clamp_by_stored_size_type<size_type>)(prefer_in_recvd_out_size, stored_size_type());
2317
+ pointer const p = impl::do_allocate(get_allocator_ref(), cap);
2066
2318
  #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2067
2319
  ++m_.capacity_alloc_count;
2068
2320
  #endif // BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2069
- return allocator_traits_type::allocate(get_allocator_ref(), capacity);
2321
+ return p;
2070
2322
  }
2071
2323
 
2072
- void destroy_elements(pointer begin, pointer end)
2324
+ void destroy_elements(pointer b, pointer e)
2073
2325
  {
2074
- for (; begin != end; ++begin)
2326
+ for (; b != e; ++b)
2075
2327
  {
2076
- allocator_traits_type::destroy(get_allocator_ref(), begin);
2328
+ allocator_traits_type::destroy(get_allocator_ref(), boost::movelib::to_raw_pointer(b));
2077
2329
  }
2078
2330
  }
2079
2331
 
@@ -2081,18 +2333,18 @@ class devector
2081
2333
  {
2082
2334
  if (m_.buffer)
2083
2335
  {
2084
- allocator_traits_type::deallocate(get_allocator_ref(), m_.buffer, m_.capacity);
2336
+ allocator_traits_type::deallocate(get_allocator_ref(), m_.buffer, m_.capacity);
2085
2337
  }
2086
2338
  }
2087
2339
 
2088
2340
  #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2089
2341
  template <typename... Args>
2090
- BOOST_CONTAINER_FORCEINLINE void alloc_construct(pointer dst, Args&&... args)
2342
+ inline void alloc_construct(pointer dst, Args&&... args)
2091
2343
  {
2092
2344
  allocator_traits_type::construct(
2093
- get_allocator_ref(),
2094
- dst,
2095
- boost::forward<Args>(args)...
2345
+ get_allocator_ref(),
2346
+ boost::movelib::to_raw_pointer(dst),
2347
+ boost::forward<Args>(args)...
2096
2348
  );
2097
2349
  }
2098
2350
 
@@ -2117,10 +2369,10 @@ class devector
2117
2369
 
2118
2370
  #define BOOST_CONTAINER_DEVECTOR_ALLOC_CONSTRUCT(N) \
2119
2371
  BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
2120
- BOOST_CONTAINER_FORCEINLINE void alloc_construct(pointer dst BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2372
+ inline void alloc_construct(pointer dst BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2121
2373
  {\
2122
2374
  allocator_traits_type::construct(\
2123
- get_allocator_ref(), dst BOOST_MOVE_I##N BOOST_MOVE_FWD##N );\
2375
+ get_allocator_ref(), boost::movelib::to_raw_pointer(dst) BOOST_MOVE_I##N BOOST_MOVE_FWD##N );\
2124
2376
  }\
2125
2377
  \
2126
2378
  BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
@@ -2135,25 +2387,15 @@ class devector
2135
2387
  void guarded_construct_n(pointer buffer, size_type n, detail::construction_guard<allocator_type>& ctr_guard BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2136
2388
  {\
2137
2389
  for (size_type i = 0; i < n; ++i) {\
2138
- this->alloc_construct(buffer + i BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2139
- ctr_guard.extend();\
2390
+ this->alloc_construct(buffer + i BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2391
+ ctr_guard.extend();\
2140
2392
  }\
2141
2393
  }
2142
2394
  //
2143
2395
  BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DEVECTOR_ALLOC_CONSTRUCT)
2144
2396
  #undef BOOST_CONTAINER_DEVECTOR_ALLOC_CONSTRUCT
2145
2397
 
2146
- #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2147
-
2148
- BOOST_CONTAINER_FORCEINLINE size_type front_capacity() const
2149
- {
2150
- return m_.back_idx;
2151
- }
2152
-
2153
- BOOST_CONTAINER_FORCEINLINE size_type back_capacity() const
2154
- {
2155
- return m_.capacity - m_.front_idx;
2156
- }
2398
+ #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2157
2399
 
2158
2400
  size_type calculate_new_capacity(size_type requested_capacity)
2159
2401
  {
@@ -2162,7 +2404,7 @@ class devector
2162
2404
  const size_type remaining_additional_cap = max - size_type(m_.capacity);
2163
2405
  const size_type min_additional_cap = requested_capacity - size_type(m_.capacity);
2164
2406
  if ( remaining_additional_cap < min_additional_cap )
2165
- boost::container::throw_length_error("devector: get_next_capacity, max size exceeded");
2407
+ boost::container::throw_length_error("devector: get_next_capacity, max size exceeded");
2166
2408
 
2167
2409
  return growth_factor_type()( size_type(m_.capacity), min_additional_cap, max);
2168
2410
  }
@@ -2184,73 +2426,60 @@ class devector
2184
2426
  deallocate_buffer();
2185
2427
  }
2186
2428
 
2187
- void opt_move_or_copy(pointer begin, pointer end, pointer dst)
2188
- {
2189
- typedef typename dtl::if_c
2190
- < boost::move_detail::is_nothrow_copy_constructible<T>::value || boost::is_nothrow_move_constructible<T>::value
2191
- , detail::null_construction_guard
2192
- , detail::construction_guard<allocator_type>
2193
- >::type guard_t;
2194
-
2195
- guard_t guard(dst, get_allocator_ref());
2196
-
2197
- opt_move_or_copy(begin, end, dst, guard);
2198
-
2199
- guard.release();
2200
- }
2201
-
2202
2429
  template <typename Guard>
2203
- void opt_move_or_copy(pointer begin, pointer end, pointer dst, Guard& guard)
2430
+ void opt_move_or_copy(pointer b, pointer e, pointer dst, Guard& guard)
2204
2431
  {
2205
2432
  // if trivial copy and default allocator, memcpy
2206
- boost::container::uninitialized_move_alloc(get_allocator_ref(), begin, end, dst);
2433
+ boost::container::uninitialized_move_alloc(get_allocator_ref(), b, e, dst);
2207
2434
  guard.extend();
2208
2435
  }
2209
2436
 
2210
- template <typename Iterator>
2211
- void opt_copy(Iterator begin, Iterator end, pointer dst)
2212
- {
2213
- typedef typename dtl::if_c
2214
- < boost::move_detail::is_nothrow_copy_constructible<T>::value
2215
- , detail::null_construction_guard
2216
- , detail::construction_guard<allocator_type>
2217
- >::type guard_t;
2218
-
2219
- guard_t guard(dst, get_allocator_ref());
2220
-
2221
- opt_copy(begin, end, dst, guard);
2222
-
2223
- guard.release();
2224
- }
2437
+ #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2225
2438
 
2226
- template <typename Iterator, typename Guard>
2227
- void opt_copy(Iterator begin, Iterator end, pointer dst, Guard& guard)
2439
+ template <typename... Args>
2440
+ void resize_impl(size_type sz, Args&&... args)
2228
2441
  {
2229
- while (begin != end)
2442
+ const size_type old_sz = this->size();
2443
+ if (sz > old_sz)
2230
2444
  {
2231
- this->alloc_construct(dst++, *begin++);
2232
- guard.extend();
2233
- }
2234
- }
2445
+ const size_type n = sz - old_sz;
2235
2446
 
2236
- template <typename Guard>
2237
- void opt_copy(const_pointer begin, const_pointer end, pointer dst, Guard& guard)
2238
- {
2239
- // if trivial copy and default allocator, memcpy
2240
- boost::container::uninitialized_copy_alloc(get_allocator_ref(), begin, end, dst);
2241
- guard.extend();
2447
+ if (sz <= m_.capacity)
2448
+ {
2449
+ //Construct at back
2450
+ const size_type bfc = this->back_free_capacity();
2451
+ const size_type b = n < bfc ? n : bfc;
2452
+ construct_n(m_.buffer + m_.back_idx, b, boost::forward<Args>(args)...);
2453
+ m_.set_back_idx(m_.back_idx + b);
2454
+
2455
+ //Construct remaining at front
2456
+ const size_type f = n - b;
2457
+ construct_n(m_.buffer + m_.front_idx - f, f, boost::forward<Args>(args)...);
2458
+ m_.set_front_idx(m_.front_idx - f);
2459
+ }
2460
+ else
2461
+ {
2462
+ resize_back_slow_path(sz, n, boost::forward<Args>(args)...);
2463
+ }
2464
+ }
2465
+ else
2466
+ {
2467
+ const size_type n = old_sz - sz;
2468
+ const size_type new_bidx = m_.back_idx - n;
2469
+ destroy_elements(m_.buffer + new_bidx, m_.buffer + m_.back_idx);
2470
+ m_.set_back_idx(new_bidx);
2471
+ }
2242
2472
  }
2243
2473
 
2244
- #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2245
-
2246
2474
  template <typename... Args>
2247
2475
  void resize_front_impl(size_type sz , Args&&... args)
2248
2476
  {
2249
- if (sz > size())
2477
+ const size_type old_sz = this->size();
2478
+ if (sz > old_sz)
2250
2479
  {
2251
- const size_type n = sz - size();
2480
+ const size_type n = sz - old_sz;
2252
2481
 
2253
- if (sz <= front_capacity())
2482
+ if (sz <= this->front_capacity())
2254
2483
  {
2255
2484
  construct_n(m_.buffer + m_.front_idx - n, n, boost::forward<Args>(args)...);
2256
2485
  m_.set_front_idx(m_.front_idx - n);
@@ -2261,10 +2490,10 @@ class devector
2261
2490
  }
2262
2491
  }
2263
2492
  else {
2264
- while (this->size() > sz)
2265
- {
2266
- this->pop_front();
2267
- }
2493
+ const size_type n = old_sz - sz;
2494
+ const size_type new_fidx = m_.front_idx + n;
2495
+ destroy_elements(m_.buffer + m_.front_idx, m_.buffer + new_fidx);
2496
+ m_.set_front_idx(new_fidx);
2268
2497
  }
2269
2498
  }
2270
2499
 
@@ -2275,7 +2504,8 @@ class devector
2275
2504
  pointer new_buffer = allocate(new_capacity);
2276
2505
  allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());
2277
2506
 
2278
- const size_type new_old_elem_index = new_capacity - size();
2507
+ const size_type old_sz = this->size();
2508
+ const size_type new_old_elem_index = new_capacity - old_sz;
2279
2509
  const size_type new_elem_index = new_old_elem_index - n;
2280
2510
 
2281
2511
  detail::construction_guard<allocator_type> guard(new_buffer + new_elem_index, get_allocator_ref());
@@ -2288,18 +2518,19 @@ class devector
2288
2518
 
2289
2519
  m_.buffer = new_buffer;
2290
2520
  m_.set_capacity(new_capacity);
2291
- m_.set_back_idx(new_old_elem_index + m_.back_idx - m_.front_idx);
2292
2521
  m_.set_front_idx(new_elem_index);
2522
+ m_.set_back_idx(new_elem_index + old_sz + n);
2293
2523
  }
2294
2524
 
2295
2525
  template <typename... Args>
2296
2526
  void resize_back_impl(size_type sz, Args&&... args)
2297
2527
  {
2298
- if (sz > size())
2528
+ const size_type old_sz = this->size();
2529
+ if (sz > old_sz)
2299
2530
  {
2300
- const size_type n = sz - size();
2531
+ const size_type n = sz - old_sz;
2301
2532
 
2302
- if (sz <= back_capacity())
2533
+ if (sz <= this->back_capacity())
2303
2534
  {
2304
2535
  construct_n(m_.buffer + m_.back_idx, n, boost::forward<Args>(args)...);
2305
2536
  m_.set_back_idx(m_.back_idx + n);
@@ -2311,10 +2542,10 @@ class devector
2311
2542
  }
2312
2543
  else
2313
2544
  {
2314
- while (size() > sz)
2315
- {
2316
- pop_back();
2317
- }
2545
+ const size_type n = old_sz - sz;
2546
+ const size_type new_bidx = m_.back_idx - n;
2547
+ destroy_elements(m_.buffer + new_bidx, m_.buffer + m_.back_idx);
2548
+ m_.set_back_idx(new_bidx);
2318
2549
  }
2319
2550
  }
2320
2551
 
@@ -2338,111 +2569,6 @@ class devector
2338
2569
  m_.set_back_idx(m_.back_idx + n);
2339
2570
  }
2340
2571
 
2341
- template <typename... Args>
2342
- iterator emplace_slow_path(size_type new_elem_index, Args&&... args)
2343
- {
2344
- pointer position = begin() + new_elem_index;
2345
-
2346
- // prefer moving front to access memory forward if there are less elems to move
2347
- bool prefer_move_front = new_elem_index <= size()/2;
2348
-
2349
- if (front_free_capacity() && (!back_free_capacity() || prefer_move_front))
2350
- {
2351
- BOOST_ASSERT(size() >= 1);
2352
-
2353
- // move things closer to the front a bit
2354
-
2355
- // avoid invalidating any reference in args later
2356
- T tmp(boost::forward<Args>(args)...);
2357
-
2358
- // construct at front - 1 from front (no guard)
2359
- this->alloc_construct(begin() - 1, boost::move(*begin()));
2360
-
2361
- // move front half left
2362
- boost::move(begin() + 1, position, begin());
2363
- --m_.front_idx;
2364
-
2365
- // move assign new elem before pos
2366
- --position;
2367
- *position = boost::move(tmp);
2368
-
2369
- return position;
2370
- }
2371
- else if (back_free_capacity()) {
2372
- BOOST_ASSERT(size() >= 1);
2373
-
2374
- // move things closer to the end a bit
2375
-
2376
- // avoid invalidating any reference in args later
2377
- T tmp(boost::forward<Args>(args)...);
2378
-
2379
- // construct at back + 1 from back (no guard)
2380
- this->alloc_construct(end(), boost::move(back()));
2381
-
2382
- // move back half right
2383
- boost::container::move_backward(position, end() - 1, end());
2384
- ++m_.back_idx;
2385
-
2386
- // move assign new elem to pos
2387
- *position = boost::move(tmp);
2388
-
2389
- return position;
2390
- }
2391
- else
2392
- {
2393
- return emplace_reallocating_slow_path(prefer_move_front, new_elem_index, boost::forward<Args>(args)...);
2394
- }
2395
- }
2396
-
2397
- template <typename... Args>
2398
- pointer emplace_reallocating_slow_path(bool make_front_free, size_type new_elem_index, Args&&... args)
2399
- {
2400
- // reallocate
2401
- size_type new_capacity = calculate_new_capacity(capacity() + 1);
2402
- pointer new_buffer = allocate(new_capacity);
2403
-
2404
- // guard allocation
2405
- allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());
2406
-
2407
- size_type new_front_index = (make_front_free)
2408
- ? new_capacity - back_free_capacity() - size() - 1
2409
- : m_.front_idx;
2410
-
2411
- iterator new_begin = new_buffer + new_front_index;
2412
- iterator new_position = new_begin + new_elem_index;
2413
- iterator old_position = begin() + new_elem_index;
2414
-
2415
- // construct new element (and guard it)
2416
- this->alloc_construct(new_position, boost::forward<Args>(args)...);
2417
-
2418
- detail::construction_guard<allocator_type> second_half_guard(new_position, get_allocator_ref());
2419
- second_half_guard.extend();
2420
-
2421
- // move front-pos (possibly guarded)
2422
- detail::construction_guard<allocator_type> first_half_guard(new_begin, get_allocator_ref());
2423
- opt_move_or_copy(begin(), old_position, new_begin, first_half_guard);
2424
-
2425
- // move pos+1-end (possibly guarded)
2426
- opt_move_or_copy(old_position, end(), new_position + 1, second_half_guard);
2427
-
2428
- // cleanup
2429
- destroy_elements(begin(), end());
2430
- deallocate_buffer();
2431
-
2432
- // release alloc and other guards
2433
- second_half_guard.release();
2434
- first_half_guard.release();
2435
- new_buffer_guard.release();
2436
-
2437
- // rebind members
2438
- m_.set_capacity(new_capacity);
2439
- m_.buffer = new_buffer;
2440
- m_.set_back_idx(new_front_index + size() + 1);
2441
- m_.set_front_idx(new_front_index);
2442
-
2443
- return new_position;
2444
- }
2445
-
2446
2572
  #else //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2447
2573
 
2448
2574
  #define BOOST_CONTAINER_DEVECTOR_SLOW_PATH(N) \
@@ -2538,140 +2664,27 @@ class devector
2538
2664
  m_.set_back_idx(m_.back_idx + n);\
2539
2665
  }\
2540
2666
  \
2541
- BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
2542
- iterator emplace_slow_path(size_type new_elem_index BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2543
- {\
2544
- pointer position = begin() + new_elem_index;\
2545
- \
2546
- bool prefer_move_front = new_elem_index <= size()/2;\
2547
- \
2548
- if (front_free_capacity() && (!back_free_capacity() || prefer_move_front))\
2549
- {\
2550
- BOOST_ASSERT(size() >= 1);\
2551
- typename dtl::aligned_storage<sizeof(T), dtl::alignment_of<T>::value>::type v;\
2552
- T *vp = reinterpret_cast<T *>(v.data);\
2553
- allocator_traits_type::construct(get_stored_allocator(), vp BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2554
- T &tmp = *vp;\
2555
- dtl::value_destructor<allocator_type> on_exit(get_stored_allocator(), tmp); (void)on_exit;\
2556
- \
2557
- this->alloc_construct(begin() - 1, boost::move(*begin()));\
2558
- boost::move(begin() + 1, position, begin());\
2559
- --m_.front_idx;\
2560
- --position;\
2561
- *position = boost::move(tmp);\
2562
- return position;\
2563
- }\
2564
- else if (back_free_capacity()) {\
2565
- BOOST_ASSERT(size() >= 1);\
2566
- typename dtl::aligned_storage<sizeof(T), dtl::alignment_of<T>::value>::type v;\
2567
- T *vp = reinterpret_cast<T *>(v.data);\
2568
- allocator_traits_type::construct(get_stored_allocator(), vp BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2569
- T &tmp = *vp;\
2570
- dtl::value_destructor<allocator_type> on_exit(get_stored_allocator(), tmp); (void)on_exit;\
2571
- this->alloc_construct(end(), boost::move(back()));\
2572
- boost::container::move_backward(position, end() - 1, end());\
2573
- ++m_.back_idx;\
2574
- *position = boost::move(tmp);\
2575
- return position;\
2576
- }\
2577
- else {\
2578
- return emplace_reallocating_slow_path(prefer_move_front, new_elem_index BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2579
- }\
2580
- }\
2581
- \
2582
- BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
2583
- pointer emplace_reallocating_slow_path(bool make_front_free, size_type new_elem_index BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2584
- {\
2585
- size_type new_capacity = calculate_new_capacity(capacity() + 1);\
2586
- pointer new_buffer = allocate(new_capacity);\
2587
- allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());\
2588
- size_type new_front_index = (make_front_free)\
2589
- ? new_capacity - back_free_capacity() - size() - 1\
2590
- : m_.front_idx;\
2591
- iterator new_begin = new_buffer + new_front_index;\
2592
- iterator new_position = new_begin + new_elem_index;\
2593
- iterator old_position = begin() + new_elem_index;\
2594
- this->alloc_construct(new_position BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2595
- detail::construction_guard<allocator_type> second_half_guard(new_position, get_allocator_ref());\
2596
- second_half_guard.extend();\
2597
- detail::construction_guard<allocator_type> first_half_guard(new_begin, get_allocator_ref());\
2598
- opt_move_or_copy(begin(), old_position, new_begin, first_half_guard);\
2599
- opt_move_or_copy(old_position, end(), new_position + 1, second_half_guard);\
2600
- destroy_elements(begin(), end());\
2601
- deallocate_buffer();\
2602
- second_half_guard.release();\
2603
- first_half_guard.release();\
2604
- new_buffer_guard.release();\
2605
- m_.set_capacity(new_capacity);\
2606
- m_.buffer = new_buffer;\
2607
- m_.set_back_idx(new_front_index + size() + 1);\
2608
- m_.set_front_idx(new_front_index);\
2609
- return new_position;\
2610
- }\
2611
2667
  //
2612
2668
  BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DEVECTOR_SLOW_PATH)
2613
2669
  #undef BOOST_CONTAINER_DEVECTOR_SLOW_PATH
2614
2670
 
2615
- #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2616
- /*
2617
- void unsafe_uninitialized_grow_front(size_type n)
2618
- {
2619
- BOOST_ASSERT(n >= size());
2620
-
2621
- size_type need = n - size();
2622
-
2623
- if (need > front_free_capacity())
2624
- {
2625
- reallocate_at(n + back_free_capacity(), need);
2626
- }
2627
-
2628
- m_.set_front_idx(m_.front_idx - need);
2629
- }
2630
-
2631
- void unsafe_uninitialized_shrink_front(size_type n)
2632
- {
2633
- BOOST_ASSERT(n <= size());
2634
-
2635
- size_type doesnt_need = size() - n;
2636
- m_.set_front_idx(m_.front_idx + doesnt_need);
2637
- }
2638
-
2639
- void unsafe_uninitialized_grow_back(size_type n)
2640
- {
2641
- BOOST_ASSERT(n >= size());
2642
-
2643
- size_type need = n - size();
2644
-
2645
- if (need > back_free_capacity())
2646
- {
2647
- reallocate_at(n + front_free_capacity(), front_free_capacity());
2648
- }
2649
-
2650
- m_.set_back_idx(m_.back_idx + need);
2651
- }
2652
-
2653
- void unsafe_uninitialized_shrink_back(size_type n)
2654
- {
2655
- BOOST_ASSERT(n <= size());
2656
-
2657
- size_type doesnt_need = size() - n;
2658
- m_.set_back_idx(m_.back_idx - doesnt_need);
2659
- }
2660
- */
2671
+ #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2661
2672
 
2662
2673
  void reallocate_at(size_type new_capacity, size_type buffer_offset)
2663
2674
  {
2664
2675
  pointer new_buffer = allocate(new_capacity);
2665
- allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());
2666
-
2667
- buffer_move_or_copy(new_buffer + buffer_offset);
2668
-
2669
- new_buffer_guard.release();
2676
+ {
2677
+ allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());
2678
+ boost::container::uninitialized_move_alloc(get_allocator_ref(), this->begin(), this->end(), new_buffer + buffer_offset);
2679
+ new_buffer_guard.release();
2680
+ }
2681
+ destroy_elements(m_.buffer + m_.front_idx, m_.buffer + m_.back_idx);
2682
+ deallocate_buffer();
2670
2683
 
2671
2684
  m_.buffer = new_buffer;
2672
2685
  //Safe cast, allocate() will handle stored_size_type overflow
2673
2686
  m_.set_capacity(new_capacity);
2674
- m_.set_back_idx(m_.back_idx - m_.front_idx + buffer_offset);
2687
+ m_.set_back_idx(size_type(m_.back_idx - m_.front_idx) + buffer_offset);
2675
2688
  m_.set_front_idx(buffer_offset);
2676
2689
 
2677
2690
  BOOST_ASSERT(invariants_ok());
@@ -2680,167 +2693,137 @@ class devector
2680
2693
  template <typename ForwardIterator>
2681
2694
  iterator insert_range(const_iterator position, ForwardIterator first, ForwardIterator last)
2682
2695
  {
2683
- size_type n = boost::container::iterator_distance(first, last);
2696
+ BOOST_ASSERT(position >= begin());
2697
+ BOOST_ASSERT(position <= end());
2698
+ typedef dtl::insert_range_proxy<allocator_type, ForwardIterator> proxy_t;
2684
2699
 
2685
- if (position == end() && back_free_capacity() >= n) {// fast path
2686
- iterator r(this->end());
2687
- boost::container::uninitialized_copy_alloc(get_allocator_ref(), first, last, this->raw_end());
2688
- m_.set_back_idx(m_.back_idx + n);
2689
- return r;
2700
+ size_type const n = boost::container::iterator_udistance(first, last);
2701
+ bool prefer_move_back;
2702
+ if (BOOST_UNLIKELY(!n)) {
2703
+ return begin() + size_type(position - cbegin());
2690
2704
  }
2691
- else if (position == begin() && front_free_capacity() >= n) { // secondary fast path
2692
- boost::container::uninitialized_copy_alloc(get_allocator_ref(), first, last, this->raw_begin() - n);
2693
- m_.set_front_idx(m_.front_idx - n);
2694
- return begin();
2705
+ else if (position == end()) {
2706
+ if(back_free_capacity() >= n) // fast path
2707
+ {
2708
+ iterator r(this->end());
2709
+ boost::container::uninitialized_copy_alloc(get_allocator_ref(), first, last, this->priv_raw_end());
2710
+ m_.set_back_idx(m_.back_idx + n);
2711
+ return r;
2712
+ }
2713
+ prefer_move_back = true;
2695
2714
  }
2696
- else {
2697
- return insert_range_slow_path(position, first, last);
2715
+ else if (position == begin()) {
2716
+ if(front_free_capacity() >= n) {// secondary fast path
2717
+ boost::container::uninitialized_copy_alloc(get_allocator_ref(), first, last, this->priv_raw_begin() - n);
2718
+ m_.set_front_idx(m_.front_idx - n);
2719
+ return begin();
2720
+ }
2721
+ prefer_move_back = false;
2698
2722
  }
2699
- }
2700
-
2701
- template <typename ForwardIterator>
2702
- iterator insert_range_slow_path(const_iterator position, ForwardIterator first, ForwardIterator last)
2703
- {
2704
- size_type n = boost::container::iterator_distance(first, last);
2705
- size_type index = position - begin();
2706
-
2707
- if (front_free_capacity() + back_free_capacity() >= n) {
2708
- // if we move enough, it can be done without reallocation
2709
-
2710
- iterator middle = begin() + index;
2711
- n -= insert_range_slow_path_near_front(middle, first, n);
2712
-
2713
- if (n) {
2714
- insert_range_slow_path_near_back(middle, first, n);
2723
+ else{
2724
+ iterator nonconst_pos = unconst_iterator(position);
2725
+ prefer_move_back = should_move_back(position);
2726
+
2727
+ if(prefer_move_back){
2728
+ if(back_free_capacity() >= n){
2729
+ boost::container::expand_forward_and_insert_nonempty_middle_alloc
2730
+ ( get_allocator_ref()
2731
+ , boost::movelib::to_raw_pointer(nonconst_pos)
2732
+ , this->priv_raw_end()
2733
+ , n, proxy_t(first));
2734
+ m_.set_back_idx(m_.back_idx + n);
2735
+ return nonconst_pos;
2736
+ }
2737
+ }
2738
+ else{
2739
+ if (front_free_capacity() >= n){
2740
+ boost::container::expand_backward_and_insert_nonempty_middle_alloc
2741
+ ( get_allocator_ref()
2742
+ , this->priv_raw_begin()
2743
+ , boost::movelib::to_raw_pointer(nonconst_pos)
2744
+ , n, proxy_t(first));
2745
+ m_.set_front_idx(m_.front_idx - n);
2746
+ return (nonconst_pos -= n);
2747
+ }
2715
2748
  }
2716
-
2717
- BOOST_ASSERT(first == last);
2718
- return begin() + index;
2719
2749
  }
2720
- else {
2721
- const bool prefer_move_front = 2 * index <= size();
2722
- return insert_range_reallocating_slow_path(prefer_move_front, index, first, n);
2750
+ return this->insert_range_slow_path(position, n, proxy_t(first));
2751
+ }
2752
+
2753
+ template <class InsertionProxy>
2754
+ BOOST_CONTAINER_NOINLINE iterator insert_range_slow_path
2755
+ (const_iterator p, const size_type n, const InsertionProxy proxy)
2756
+ {
2757
+ size_type const back_free_cap = back_free_capacity();
2758
+ size_type const front_free_cap = front_free_capacity();
2759
+ size_type const free_cap = front_free_cap + back_free_cap;
2760
+ size_type const index = size_type(p - cbegin());
2761
+
2762
+ size_type const cap = m_.capacity;
2763
+ //Test if enough free memory would be left
2764
+ if (free_cap >= n && (free_cap - n) >= cap/devector_min_free_fraction) {
2765
+ size_type const old_size = this->size();
2766
+ T* const raw_pos = const_cast<T*>(boost::movelib::to_raw_pointer(p));
2767
+ size_type const new_size = old_size + n;
2768
+ size_type const new_front_idx = (cap - new_size) / 2u;
2769
+
2770
+ T* const raw_beg = this->priv_raw_begin();
2771
+ T* const new_raw_beg = raw_beg - std::ptrdiff_t(m_.front_idx - new_front_idx);
2772
+ m_.back_idx = 0u;
2773
+ m_.front_idx = 0u;
2774
+ boost::container::expand_backward_forward_and_insert_alloc
2775
+ (raw_beg, old_size, new_raw_beg, raw_pos, n, proxy, get_allocator_ref());
2776
+ m_.set_front_idx(new_front_idx);
2777
+ m_.set_back_idx(new_front_idx + new_size);
2723
2778
  }
2724
- }
2725
-
2726
- template <typename Iterator>
2727
- size_type insert_range_slow_path_near_front(iterator position, Iterator& first, size_type n)
2728
- {
2729
- size_type n_front = dtl::min_value(front_free_capacity(), n);
2730
- iterator new_begin = begin() - n_front;
2731
- iterator ctr_pos = new_begin;
2732
- detail::construction_guard<allocator_type> ctr_guard(ctr_pos, get_allocator_ref());
2733
-
2734
- while (ctr_pos != begin()) {
2735
- this->alloc_construct(ctr_pos++, *(first++));
2736
- ctr_guard.extend();
2737
- }
2738
-
2739
- boost::movelib::rotate_gcd(new_begin, ctr_pos, position);
2740
- m_.set_front_idx(m_.front_idx - n_front);
2779
+ else {
2780
+ // reallocate
2781
+ const size_type new_capacity = calculate_new_capacity(m_.capacity + n);
2782
+ pointer new_buffer = allocate(new_capacity);
2741
2783
 
2742
- ctr_guard.release();
2784
+ // guard allocation
2785
+ allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());
2743
2786
 
2744
- BOOST_ASSERT(invariants_ok());
2787
+ size_type const old_size = this->size();
2788
+ const size_type new_front_index = (new_capacity - old_size - n) / 2u;
2745
2789
 
2746
- return n_front;
2747
- }
2790
+ T* const raw_pos = const_cast<T*>(boost::movelib::to_raw_pointer(p));
2791
+ T* const raw_new_start = const_cast<T*>(boost::movelib::to_raw_pointer(new_buffer)) + new_front_index;
2748
2792
 
2749
- template <typename Iterator>
2750
- size_type insert_range_slow_path_near_back(iterator position, Iterator& first, size_type n)
2751
- {
2752
- const size_type n_back = dtl::min_value(back_free_capacity(), n);
2753
- iterator ctr_pos = end();
2793
+ boost::container::uninitialized_move_and_insert_alloc
2794
+ (get_allocator_ref(), this->priv_raw_begin(), raw_pos, this->priv_raw_end(), raw_new_start, n, proxy);
2795
+ new_buffer_guard.release();
2754
2796
 
2755
- detail::construction_guard<allocator_type> ctr_guard(ctr_pos, get_allocator_ref());
2797
+ // cleanup
2798
+ destroy_elements(begin(), end());
2799
+ deallocate_buffer();
2756
2800
 
2757
- for (size_type i = 0; i < n_back; ++i) {
2758
- this->alloc_construct(ctr_pos++, *first++);
2759
- ctr_guard.extend();
2801
+ // rebind members
2802
+ m_.set_capacity(new_capacity);
2803
+ m_.buffer = new_buffer;
2804
+ m_.set_back_idx(new_front_index + old_size + n);
2805
+ m_.set_front_idx(new_front_index);
2760
2806
  }
2761
-
2762
- boost::movelib::rotate_gcd(position, end(), ctr_pos);
2763
- m_.set_back_idx(m_.back_idx + n_back);
2764
-
2765
- ctr_guard.release();
2766
-
2767
- BOOST_ASSERT(invariants_ok());
2768
-
2769
- return n_back;
2807
+ return begin() + index;
2770
2808
  }
2771
2809
 
2772
- template <typename Iterator>
2773
- iterator insert_range_reallocating_slow_path
2774
- (bool make_front_free, size_type new_elem_index, Iterator elems, size_type n)
2775
- {
2776
- // reallocate
2777
- const size_type new_capacity = calculate_new_capacity(capacity() + n);
2778
- pointer new_buffer = allocate(new_capacity);
2779
-
2780
- // guard allocation
2781
- allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());
2782
-
2783
- const size_type new_front_index = (make_front_free)
2784
- ? new_capacity - back_free_capacity() - size() - n
2785
- : m_.front_idx;
2786
-
2787
- const iterator new_begin = new_buffer + new_front_index;
2788
- const iterator new_position = new_begin + new_elem_index;
2789
- const iterator old_position = begin() + new_elem_index;
2790
-
2791
- // construct new element (and guard it)
2792
- iterator second_half_position = new_position;
2793
- detail::construction_guard<allocator_type> second_half_guard(second_half_position, get_allocator_ref());
2794
-
2795
- for (size_type i = 0; i < n; ++i) {
2796
- this->alloc_construct(second_half_position++, *(elems++));
2797
- second_half_guard.extend();
2798
- }
2799
-
2800
- // move front-pos (possibly guarded)
2801
- detail::construction_guard<allocator_type> first_half_guard(new_begin, get_allocator_ref());
2802
- opt_move_or_copy(begin(), old_position, new_begin, first_half_guard);
2803
-
2804
- // move pos+1-end (possibly guarded)
2805
- opt_move_or_copy(old_position, end(), second_half_position, second_half_guard);
2806
-
2807
- // cleanup
2808
- destroy_elements(begin(), end());
2809
- deallocate_buffer();
2810
-
2811
- // release alloc and other guards
2812
- second_half_guard.release();
2813
- first_half_guard.release();
2814
- new_buffer_guard.release();
2815
-
2816
- // rebind members
2817
- m_.set_capacity(new_capacity);
2818
- m_.buffer = new_buffer;
2819
- m_.set_back_idx(new_front_index + size() + n);
2820
- m_.set_front_idx(new_front_index);
2821
-
2822
- return new_position;
2823
- }
2824
2810
 
2825
2811
  template <typename Iterator>
2826
- void construct_from_range(Iterator begin, Iterator end)
2812
+ void construct_from_range(Iterator b, Iterator e)
2827
2813
  {
2828
2814
  allocation_guard buffer_guard(m_.buffer, m_.capacity, get_allocator_ref());
2829
- opt_copy(begin, end, m_.buffer);
2830
-
2815
+ boost::container::uninitialized_copy_alloc(get_allocator_ref(), b, e, m_.buffer);
2831
2816
  buffer_guard.release();
2832
2817
  }
2833
2818
 
2834
2819
  template <typename ForwardIterator>
2835
2820
  void allocate_and_copy_range(ForwardIterator first, ForwardIterator last)
2836
2821
  {
2837
- size_type n = boost::container::iterator_distance(first, last);
2822
+ size_type n = boost::container::iterator_udistance(first, last);
2838
2823
 
2839
2824
  pointer new_buffer = n ? allocate(n) : pointer();
2840
2825
  allocation_guard new_buffer_guard(new_buffer, n, get_allocator_ref());
2841
-
2842
- opt_copy(first, last, new_buffer);
2843
-
2826
+ boost::container::uninitialized_copy_alloc(get_allocator_ref(), first, last, new_buffer);
2844
2827
  destroy_elements(begin(), end());
2845
2828
  deallocate_buffer();
2846
2829
 
@@ -2861,12 +2844,12 @@ class devector
2861
2844
  template <typename ForwardIterator>
2862
2845
  void overwrite_buffer_impl(ForwardIterator first, ForwardIterator last, dtl::true_)
2863
2846
  {
2864
- const size_type n = boost::container::iterator_distance(first, last);
2847
+ const size_type n = boost::container::iterator_udistance(first, last);
2865
2848
 
2866
- BOOST_ASSERT(capacity() >= n);
2849
+ BOOST_ASSERT(m_.capacity >= n);
2867
2850
  boost::container::uninitialized_copy_alloc_n
2868
- ( get_allocator_ref(), boost::movelib::iterator_to_raw_pointer(first)
2869
- , n, boost::movelib::iterator_to_raw_pointer(m_.buffer));
2851
+ ( get_allocator_ref(), first
2852
+ , n, boost::movelib::to_raw_pointer(m_.buffer));
2870
2853
  m_.front_idx = 0;
2871
2854
  m_.set_back_idx(n);
2872
2855
  }
@@ -2888,7 +2871,7 @@ class devector
2888
2871
 
2889
2872
  detail::construction_guard<allocator_type> back_guard(pos, get_allocator_ref());
2890
2873
 
2891
- iterator capacity_end = m_.buffer + capacity();
2874
+ iterator capacity_end = m_.buffer + m_.capacity;
2892
2875
  while (first != last && pos != capacity_end) {
2893
2876
  this->alloc_construct(pos++, *first++);
2894
2877
  back_guard.extend();
@@ -2901,81 +2884,146 @@ class devector
2901
2884
  back_guard.release();
2902
2885
 
2903
2886
  m_.front_idx = 0;
2904
- m_.set_back_idx(pos - begin());
2887
+ m_.set_back_idx(pos_to_index(pos));
2905
2888
  return first;
2906
2889
  }
2907
2890
 
2908
2891
  template <typename ForwardIterator>
2909
- BOOST_CONTAINER_FORCEINLINE void overwrite_buffer(ForwardIterator first, ForwardIterator last)
2892
+ inline void overwrite_buffer(ForwardIterator first, ForwardIterator last)
2910
2893
  {
2911
2894
  this->overwrite_buffer_impl(first, last,
2912
- dtl::bool_<dtl::is_trivially_destructible<T>::value>());
2895
+ dtl::bool_<dtl::is_trivially_destructible<T>::value>());
2913
2896
  }
2914
2897
 
2915
2898
  bool invariants_ok()
2916
2899
  {
2917
- return (!m_.capacity || m_.buffer)
2918
- && m_.front_idx <= m_.back_idx
2919
- && m_.back_idx <= m_.capacity;
2900
+ return (! m_.capacity || m_.buffer )
2901
+ && m_.front_idx <= m_.back_idx
2902
+ && m_.back_idx <= m_.capacity;
2920
2903
  }
2921
2904
 
2922
2905
  struct impl : allocator_type
2923
2906
  {
2907
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(impl)
2908
+
2909
+ public:
2910
+ allocator_type &get_al()
2911
+ { return *this; }
2912
+
2913
+ static pointer do_allocate(allocator_type &a, size_type cap)
2914
+ {
2915
+ if (cap) {
2916
+ //First detect overflow on smaller stored_size_types
2917
+ if (cap > stored_size_type(-1)){
2918
+ boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
2919
+ }
2920
+ return allocator_traits_type::allocate(a, cap);
2921
+ }
2922
+ else {
2923
+ return pointer();
2924
+ }
2925
+ }
2926
+
2924
2927
  impl()
2925
2928
  : allocator_type(), buffer(), front_idx(), back_idx(), capacity()
2926
2929
  #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2927
- , capacity_alloc_count()
2930
+ , capacity_alloc_count(0)
2928
2931
  #endif
2929
2932
  {}
2930
2933
 
2931
2934
  explicit impl(const allocator_type &a)
2932
2935
  : allocator_type(a), buffer(), front_idx(), back_idx(), capacity()
2933
2936
  #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2934
- , capacity_alloc_count()
2937
+ , capacity_alloc_count(0)
2935
2938
  #endif
2936
2939
  {}
2937
2940
 
2938
- impl(const allocator_type &a, pointer p, size_type f, size_type b, size_type c)
2939
- : allocator_type(a), buffer(p)
2941
+ impl(reserve_uninitialized_t, const allocator_type& a, size_type c)
2942
+ : allocator_type(a), buffer(do_allocate(get_al(), c) )
2943
+ //static cast sizes, as the allocation function will take care of overflows
2944
+ , front_idx(static_cast<stored_size_type>(0u))
2945
+ , back_idx(static_cast<stored_size_type>(c))
2946
+ , capacity(static_cast<stored_size_type>(c))
2947
+ #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2948
+ , capacity_alloc_count(size_type(buffer != pointer()))
2949
+ #endif
2950
+ {}
2951
+
2952
+ impl(reserve_only_tag_t, const allocator_type &a, size_type const ffc, size_type const bfc)
2953
+ : allocator_type(a), buffer(do_allocate(get_al(), ffc+bfc) )
2954
+ //static cast sizes, as the allocation function will take care of overflows
2955
+ , front_idx(static_cast<stored_size_type>(ffc))
2956
+ , back_idx(static_cast<stored_size_type>(ffc))
2957
+ , capacity(static_cast<stored_size_type>(ffc + bfc))
2958
+ #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2959
+ , capacity_alloc_count(size_type(buffer != pointer()))
2960
+ #endif
2961
+ {}
2962
+
2963
+ impl(reserve_only_tag_t, const allocator_type &a, size_type const c)
2964
+ : allocator_type(a), buffer(do_allocate(get_al(), c) )
2940
2965
  //static cast sizes, as the allocation function will take care of overflows
2941
- , front_idx(static_cast<stored_size_type>(f))
2942
- , back_idx(static_cast<stored_size_type>(b))
2966
+ , front_idx(static_cast<stored_size_type>(c/2u))
2967
+ , back_idx(static_cast<stored_size_type>(c/2u))
2943
2968
  , capacity(static_cast<stored_size_type>(c))
2944
2969
  #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2945
- , capacity_alloc_count()
2970
+ , capacity_alloc_count(size_type(buffer != pointer()))
2946
2971
  #endif
2947
2972
  {}
2948
2973
 
2949
- impl(BOOST_RV_REF(allocator_type) a, pointer p, size_type f, size_type b, size_type c)
2950
- : allocator_type(boost::move(a)), buffer(p)
2974
+ impl(review_implementation_t, const allocator_type &a, pointer p, size_type fi, size_type bi, size_type c)
2975
+ : allocator_type(a), buffer(p)
2951
2976
  //static cast sizes, as the allocation function will take care of overflows
2952
- , front_idx(static_cast<stored_size_type>(f))
2953
- , back_idx(static_cast<stored_size_type>(b))
2977
+ , front_idx(static_cast<stored_size_type>(fi))
2978
+ , back_idx(static_cast<stored_size_type>(bi))
2954
2979
  , capacity(static_cast<stored_size_type>(c))
2955
2980
  #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2956
- , capacity_alloc_count()
2981
+ , capacity_alloc_count(0)
2957
2982
  #endif
2958
2983
  {}
2959
2984
 
2960
- void set_back_idx(size_type bi)
2961
- { back_idx = static_cast<stored_size_type>(bi);}
2985
+ impl(BOOST_RV_REF(impl) m)
2986
+ : allocator_type(BOOST_MOVE_BASE(allocator_type, m))
2987
+ , buffer(static_cast<impl&>(m).buffer)
2988
+ , front_idx(static_cast<impl&>(m).front_idx)
2989
+ , back_idx(static_cast<impl&>(m).back_idx)
2990
+ , capacity(static_cast<impl&>(m).capacity)
2991
+ #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2992
+ , capacity_alloc_count(0)
2993
+ #endif
2994
+ {
2995
+ impl &i = static_cast<impl&>(m);
2996
+ // buffer is already acquired, reset rhs
2997
+ i.capacity = 0u;
2998
+ i.buffer = pointer();
2999
+ i.front_idx = 0;
3000
+ i.back_idx = 0;
3001
+ }
3002
+
3003
+ inline void set_back_idx(size_type bi)
3004
+ {
3005
+ back_idx = static_cast<stored_size_type>(bi);
3006
+ }
2962
3007
 
2963
- void set_front_idx(size_type fi)
2964
- { front_idx = static_cast<stored_size_type>(fi);}
3008
+ inline void set_front_idx(size_type fi)
3009
+ {
3010
+ front_idx = static_cast<stored_size_type>(fi);
3011
+ }
2965
3012
 
2966
- void set_capacity(size_type c)
2967
- { capacity = static_cast<stored_size_type>(c);}
3013
+ inline void set_capacity(size_type c)
3014
+ {
3015
+ capacity = static_cast<stored_size_type>(c);
3016
+ }
2968
3017
 
2969
- pointer buffer;
2970
- stored_size_type front_idx;
2971
- stored_size_type back_idx;
2972
- stored_size_type capacity;
3018
+ pointer buffer;
3019
+ stored_size_type front_idx;
3020
+ stored_size_type back_idx;
3021
+ stored_size_type capacity;
2973
3022
  #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2974
3023
  size_type capacity_alloc_count;
2975
3024
  #endif
2976
3025
  } m_;
2977
3026
 
2978
-
2979
3027
  #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2980
3028
  public:
2981
3029
  void reset_alloc_stats()
@@ -2995,6 +3043,26 @@ class devector
2995
3043
 
2996
3044
  }} // namespace boost::container
2997
3045
 
3046
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
3047
+
3048
+ namespace boost {
3049
+
3050
+ //!has_trivial_destructor_after_move<> == true_type
3051
+ //!specialization for optimizations
3052
+ template <class T, class Allocator, class Options>
3053
+ struct has_trivial_destructor_after_move<boost::container::devector<T, Allocator, Options> >
3054
+ {
3055
+ typedef typename boost::container::devector<T, Allocator, Options>::allocator_type allocator_type;
3056
+ typedef typename ::boost::container::allocator_traits<allocator_type>::pointer pointer;
3057
+ BOOST_STATIC_CONSTEXPR bool value =
3058
+ ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
3059
+ ::boost::has_trivial_destructor_after_move<pointer>::value;
3060
+ };
3061
+
3062
+ }
3063
+
3064
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
3065
+
2998
3066
  #include <boost/container/detail/config_end.hpp>
2999
3067
 
3000
3068
  #endif // BOOST_CONTAINER_DEVECTOR_HPP