passenger 6.0.23 → 6.0.24

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.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (305) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +26 -1
  3. data/Rakefile +7 -3
  4. data/bin/passenger-install-apache2-module +5 -0
  5. data/bin/passenger-install-nginx-module +17 -2
  6. data/build/apache2.rb +1 -1
  7. data/build/basics.rb +10 -4
  8. data/build/cxx_tests.rb +18 -7
  9. data/build/support/cxx_dependency_map.rb +40 -6
  10. data/build/test_basics.rb +4 -12
  11. data/package.json +1 -1
  12. data/passenger.gemspec +1 -1
  13. data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
  14. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
  15. data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
  16. data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
  17. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
  18. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
  19. data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
  20. data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
  21. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +8 -0
  22. data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
  23. data/src/agent/Core/ApplicationPool/Group.h +15 -5
  24. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
  25. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
  26. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
  27. data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
  28. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
  29. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
  30. data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
  31. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -1
  32. data/src/agent/Core/ApplicationPool/Pool.h +0 -2
  33. data/src/agent/Core/ApplicationPool/Process.h +22 -6
  34. data/src/agent/Core/ApplicationPool/Session.h +6 -1
  35. data/src/agent/Core/Config.h +7 -3
  36. data/src/agent/Core/Controller/Config.h +1 -1
  37. data/src/agent/Core/CoreMain.cpp +10 -17
  38. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
  39. data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
  40. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
  41. data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
  42. data/src/agent/Core/SpawningKit/Spawner.h +4 -0
  43. data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
  44. data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
  45. data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
  46. data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
  47. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
  48. data/src/agent/Watchdog/Config.h +1 -1
  49. data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
  50. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
  51. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +3 -0
  52. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
  53. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
  54. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
  55. data/src/cxx_supportlib/Constants.h +1 -1
  56. data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
  57. data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
  58. data/src/cxx_supportlib/SafeLibev.h +1 -3
  59. data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
  60. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
  61. data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
  62. data/src/cxx_supportlib/ServerKit/Server.h +0 -6
  63. data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
  64. data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
  65. data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
  66. data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
  67. data/src/cxx_supportlib/oxt/thread.hpp +1 -1
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
  163. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
  164. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
  193. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
  194. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
  196. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
  197. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
  198. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  199. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
  200. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
  201. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
  202. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
  204. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
  205. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
  206. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
  207. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
  208. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
  210. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
  212. data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
  213. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
  214. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
  215. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
  216. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
  217. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
  218. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
  219. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
  220. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
  221. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
  222. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
  223. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
  225. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
  226. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
  227. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
  228. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
  229. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
  230. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
  231. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
  232. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
  233. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
  234. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
  236. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
  237. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
  238. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
  241. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
  243. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
  244. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
  245. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
  246. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
  247. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
  248. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
  249. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
  250. data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
  251. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
  252. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
  253. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
  257. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
  258. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
  259. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
  260. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
  261. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
  262. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
  263. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
  264. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
  265. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
  266. data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
  267. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
  268. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
  269. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  270. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
  271. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
  273. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
  275. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
  276. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
  277. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
  278. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
  279. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
  280. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
  281. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
  282. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
  283. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
  284. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
  285. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
  286. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
  287. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
  288. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
  289. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
  290. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
  291. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
  292. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
  293. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
  294. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
  295. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
  296. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  297. data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
  298. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
  299. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
  300. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
  301. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
  302. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +5 -1
  303. data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
  304. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  305. metadata +21 -8
@@ -969,6 +969,23 @@ class map
969
969
  inline size_type erase(const key_type& x)
970
970
  { return this->base_t::erase_unique(x); }
971
971
 
972
+ //! <b>Requires</b>: This overload is available only if
973
+ //! key_compare::is_transparent exists.
974
+ //!
975
+ //! <b>Effects</b>: If present, erases the element in the container with key equivalent to x.
976
+ //!
977
+ //! <b>Returns</b>: Returns the number of erased elements (0/1).
978
+ template <class K>
979
+ inline BOOST_CONTAINER_DOC1ST
980
+ (size_type
981
+ , typename dtl::enable_if_c<
982
+ dtl::is_transparent<key_compare>::value && //transparent
983
+ !dtl::is_convertible<K BOOST_MOVE_I iterator>::value && //not convertible to iterator
984
+ !dtl::is_convertible<K BOOST_MOVE_I const_iterator>::value //not convertible to const_iterator
985
+ BOOST_MOVE_I size_type>::type)
986
+ erase(const K& x)
987
+ { return this->base_t::erase_unique(x); }
988
+
972
989
  #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
973
990
 
974
991
  //! <b>Effects</b>: Erases the element pointed to by p.
@@ -1376,7 +1393,7 @@ template <class Key, class T, class Compare, class Allocator, class Options>
1376
1393
  struct has_trivial_destructor_after_move<boost::container::map<Key, T, Compare, Allocator, Options> >
1377
1394
  {
1378
1395
  typedef ::boost::container::dtl::tree<std::pair<const Key, T>, int, Compare, Allocator, Options> tree;
1379
- static const bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
1396
+ BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
1380
1397
  };
1381
1398
 
1382
1399
  namespace container {
@@ -2298,7 +2315,7 @@ template <class Key, class T, class Compare, class Allocator, class Options>
2298
2315
  struct has_trivial_destructor_after_move<boost::container::multimap<Key, T, Compare, Allocator, Options> >
2299
2316
  {
2300
2317
  typedef ::boost::container::dtl::tree<std::pair<const Key, T>, int, Compare, Allocator, Options> tree;
2301
- static const bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
2318
+ BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
2302
2319
  };
2303
2320
 
2304
2321
  namespace container {
@@ -33,7 +33,7 @@ namespace container {
33
33
 
34
34
  template<bool Value>
35
35
  struct new_allocator_bool
36
- { static const bool value = Value; };
36
+ { BOOST_STATIC_CONSTEXPR bool value = Value; };
37
37
 
38
38
  template<class T>
39
39
  class new_allocator;
@@ -8,8 +8,8 @@
8
8
  //
9
9
  //////////////////////////////////////////////////////////////////////////////
10
10
 
11
- #ifndef BOOST_CONTAINER_POOLED_NODE_ALLOCATOR_HPP
12
- #define BOOST_CONTAINER_POOLED_NODE_ALLOCATOR_HPP
11
+ #ifndef BOOST_CONTAINER_NODE_ALLOCATOR_HPP
12
+ #define BOOST_CONTAINER_NODE_ALLOCATOR_HPP
13
13
 
14
14
  #ifndef BOOST_CONFIG_HPP
15
15
  # include <boost/config.hpp>
@@ -26,6 +26,7 @@
26
26
  #include <boost/container/detail/node_pool.hpp>
27
27
  #include <boost/container/detail/mpl.hpp>
28
28
  #include <boost/container/detail/multiallocation_chain.hpp>
29
+ #include <boost/move/detail/iterator_to_raw_pointer.hpp>
29
30
  #include <boost/container/detail/dlmalloc.hpp>
30
31
  #include <boost/container/detail/singleton.hpp>
31
32
 
@@ -62,7 +63,7 @@ class node_allocator
62
63
  typedef unsigned int allocation_type;
63
64
  typedef node_allocator<T, NodesPerBlock, Version> self_t;
64
65
 
65
- static const std::size_t nodes_per_block = NodesPerBlock;
66
+ BOOST_STATIC_CONSTEXPR std::size_t nodes_per_block = NodesPerBlock;
66
67
 
67
68
  BOOST_CONTAINER_STATIC_ASSERT((Version <=2));
68
69
  #endif
@@ -225,7 +226,10 @@ class node_allocator
225
226
  typedef dtl::singleton_default<shared_pool_t> singleton_t;
226
227
  typename shared_pool_t::multiallocation_chain ch;
227
228
  singleton_t::instance().allocate_nodes(num_elements, ch);
228
- chain.incorporate_after(chain.before_begin(), (T*)&*ch.begin(), (T*)&*ch.last(), ch.size());
229
+ chain.incorporate_after(chain.before_begin()
230
+ , (T*)boost::movelib::iterator_to_raw_pointer(ch.begin())
231
+ , (T*)boost::movelib::iterator_to_raw_pointer(ch.last())
232
+ , ch.size());
229
233
  }
230
234
 
231
235
  //!Deallocates memory previously allocated with allocate_one().
@@ -246,7 +250,10 @@ class node_allocator
246
250
  typedef dtl::shared_node_pool
247
251
  <sizeof(T), NodesPerBlock> shared_pool_t;
248
252
  typedef dtl::singleton_default<shared_pool_t> singleton_t;
249
- typename shared_pool_t::multiallocation_chain ch(&*chain.begin(), &*chain.last(), chain.size());
253
+ typename shared_pool_t::multiallocation_chain ch
254
+ ( boost::movelib::iterator_to_raw_pointer(chain.begin())
255
+ , boost::movelib::iterator_to_raw_pointer(chain.last())
256
+ , chain.size());
250
257
  singleton_t::instance().deallocate_nodes(ch);
251
258
  }
252
259
 
@@ -285,8 +292,8 @@ class node_allocator
285
292
  void deallocate_many(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW
286
293
  {
287
294
  BOOST_CONTAINER_STATIC_ASSERT(( Version > 1 ));
288
- void *first = &*chain.begin();
289
- void *last = &*chain.last();
295
+ void *first = boost::movelib::iterator_to_raw_pointer(chain.begin());
296
+ void *last = boost::movelib::iterator_to_raw_pointer(chain.last());
290
297
  size_t num = chain.size();
291
298
  dlmalloc_memchain ch;
292
299
  BOOST_CONTAINER_MEMCHAIN_INIT_FROM(&ch, first, last, num);
@@ -337,4 +344,4 @@ class node_allocator
337
344
 
338
345
  #include <boost/container/detail/config_end.hpp>
339
346
 
340
- #endif //#ifndef BOOST_CONTAINER_POOLED_NODE_ALLOCATOR_HPP
347
+ #endif //#ifndef BOOST_CONTAINER_NODE_ALLOCATOR_HPP
@@ -23,6 +23,7 @@
23
23
  #include <boost/container/detail/workaround.hpp>
24
24
  #include <boost/container/detail/placement_new.hpp>
25
25
  #include <boost/move/detail/to_raw_pointer.hpp>
26
+ #include <boost/move/detail/launder.hpp>
26
27
  #include <boost/container/allocator_traits.hpp>
27
28
  #include <boost/container/detail/mpl.hpp>
28
29
 
@@ -146,7 +147,7 @@ class node_handle
146
147
  }
147
148
 
148
149
  void destroy_alloc() BOOST_NOEXCEPT
149
- { static_cast<nallocator_type*>((void*)m_nalloc_storage.data)->~nallocator_type(); }
150
+ { move_detail::launder_cast<nallocator_type*>(&m_nalloc_storage)->~nallocator_type(); }
150
151
 
151
152
  node_pointer &get_node_pointer() BOOST_NOEXCEPT
152
153
  { return m_ptr; }
@@ -231,7 +232,7 @@ class node_handle
231
232
  if(was_nh_non_null){
232
233
  if(was_this_non_null){
233
234
  this->destroy_deallocate_node();
234
- if(nator_traits::propagate_on_container_move_assignment::value){
235
+ BOOST_IF_CONSTEXPR(nator_traits::propagate_on_container_move_assignment::value){
235
236
  this->node_alloc() = ::boost::move(nh.node_alloc());
236
237
  }
237
238
  }
@@ -335,7 +336,7 @@ class node_handle
335
336
 
336
337
  if(was_nh_non_null){
337
338
  if(was_this_non_null){
338
- if(nator_traits::propagate_on_container_swap::value){
339
+ BOOST_IF_CONSTEXPR(nator_traits::propagate_on_container_swap::value){
339
340
  ::boost::adl_move_swap(this->node_alloc(), nh.node_alloc());
340
341
  }
341
342
  }
@@ -381,7 +382,7 @@ class node_handle
381
382
  nallocator_type &node_alloc() BOOST_NOEXCEPT
382
383
  {
383
384
  BOOST_ASSERT(!empty());
384
- return *static_cast<nallocator_type*>((void*)m_nalloc_storage.data);
385
+ return *move_detail::launder_cast<nallocator_type*>(&m_nalloc_storage);
385
386
  }
386
387
 
387
388
 
@@ -391,7 +392,7 @@ class node_handle
391
392
  const nallocator_type &node_alloc() const BOOST_NOEXCEPT
392
393
  {
393
394
  BOOST_ASSERT(!empty());
394
- return *static_cast<const nallocator_type*>((const void*)m_nalloc_storage.data);
395
+ return *move_detail::launder_cast<const nallocator_type*>(&m_nalloc_storage);
395
396
  }
396
397
 
397
398
  //! <b>Effects</b>: x.swap(y).
@@ -52,8 +52,8 @@ enum tree_type_enum
52
52
  template<tree_type_enum TreeType, bool OptimizeSize>
53
53
  struct tree_opt
54
54
  {
55
- static const boost::container::tree_type_enum tree_type = TreeType;
56
- static const bool optimize_size = OptimizeSize;
55
+ BOOST_STATIC_CONSTEXPR boost::container::tree_type_enum tree_type = TreeType;
56
+ BOOST_STATIC_CONSTEXPR bool optimize_size = OptimizeSize;
57
57
  };
58
58
 
59
59
  typedef tree_opt<red_black_tree, true> tree_assoc_defaults;
@@ -116,10 +116,10 @@ using tree_assoc_options_t = typename boost::container::tree_assoc_options<Optio
116
116
  template<bool StoreHash, bool CacheBegin, bool LinearBuckets, bool FastmodBuckets>
117
117
  struct hash_opt
118
118
  {
119
- static const bool store_hash = StoreHash;
120
- static const bool cache_begin = CacheBegin;
121
- static const bool linear_buckets = LinearBuckets;
122
- static const bool fastmod_buckets = FastmodBuckets;
119
+ BOOST_STATIC_CONSTEXPR bool store_hash = StoreHash;
120
+ BOOST_STATIC_CONSTEXPR bool cache_begin = CacheBegin;
121
+ BOOST_STATIC_CONSTEXPR bool linear_buckets = LinearBuckets;
122
+ BOOST_STATIC_CONSTEXPR bool fastmod_buckets = FastmodBuckets;
123
123
  };
124
124
 
125
125
  typedef hash_opt<false, false, false, false> hash_assoc_defaults;
@@ -203,13 +203,13 @@ struct default_if_void<void, Default>
203
203
  template<std::size_t N, std::size_t DefaultN>
204
204
  struct default_if_zero
205
205
  {
206
- static const std::size_t value = N;
206
+ BOOST_STATIC_CONSTEXPR std::size_t value = N;
207
207
  };
208
208
 
209
209
  template<std::size_t DefaultN>
210
210
  struct default_if_zero<0u, DefaultN>
211
211
  {
212
- static const std::size_t value = DefaultN;
212
+ BOOST_STATIC_CONSTEXPR std::size_t value = DefaultN;
213
213
  };
214
214
 
215
215
 
@@ -364,7 +364,7 @@ template<class GrowthType, std::size_t InplaceAlignment>
364
364
  struct small_vector_opt
365
365
  {
366
366
  typedef GrowthType growth_factor_type;
367
- static const std::size_t inplace_alignment = InplaceAlignment;
367
+ BOOST_STATIC_CONSTEXPR std::size_t inplace_alignment = InplaceAlignment;
368
368
  };
369
369
 
370
370
  typedef small_vector_opt<void, 0u> small_vector_null_opt;
@@ -430,8 +430,8 @@ BOOST_INTRUSIVE_OPTION_CONSTANT(throw_on_overflow, bool, ThrowOnOverflow, throw_
430
430
  template<bool ThrowOnOverflow, std::size_t InplaceAlignment>
431
431
  struct static_vector_opt
432
432
  {
433
- static const bool throw_on_overflow = ThrowOnOverflow;
434
- static const std::size_t inplace_alignment = InplaceAlignment;
433
+ BOOST_STATIC_CONSTEXPR bool throw_on_overflow = ThrowOnOverflow;
434
+ BOOST_STATIC_CONSTEXPR std::size_t inplace_alignment = InplaceAlignment;
435
435
  };
436
436
 
437
437
  typedef static_vector_opt<true, 0u> static_vector_null_opt;
@@ -515,7 +515,7 @@ template<class GrowthType, class StoredSizeType, std::size_t FreeFraction>
515
515
  struct devector_opt
516
516
  : vector_opt<GrowthType, StoredSizeType>
517
517
  {
518
- static const std::size_t free_fraction = FreeFraction;
518
+ BOOST_STATIC_CONSTEXPR std::size_t free_fraction = FreeFraction;
519
519
  };
520
520
 
521
521
  typedef devector_opt<void, void, 0u> devector_null_opt;
@@ -606,8 +606,8 @@ using devector_options_t = typename boost::container::devector_options<Options..
606
606
  template<std::size_t BlockBytes, std::size_t BlockSize>
607
607
  struct deque_opt
608
608
  {
609
- static const std::size_t block_bytes = BlockBytes;
610
- static const std::size_t block_size = BlockSize;
609
+ BOOST_STATIC_CONSTEXPR std::size_t block_bytes = BlockBytes;
610
+ BOOST_STATIC_CONSTEXPR std::size_t block_size = BlockSize;
611
611
  BOOST_CONTAINER_STATIC_ASSERT_MSG(!(block_bytes && block_size), "block_bytes and block_size can't be specified at the same time");
612
612
  };
613
613
 
@@ -617,7 +617,7 @@ typedef deque_opt<0u, 0u> deque_null_opt;
617
617
 
618
618
  //! Helper metafunction to combine options into a single type to be used
619
619
  //! by \c boost::container::deque.
620
- //! Supported options are: \c boost::container::block_bytes
620
+ //! Supported options are: \c boost::container::block_bytes and \c boost::container::block_size
621
621
  #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) || defined(BOOST_CONTAINER_VARIADIC_TEMPLATES)
622
622
  template<class ...Options>
623
623
  #else
@@ -32,7 +32,7 @@ class memory_resource
32
32
  {
33
33
  public:
34
34
  // For exposition only
35
- static BOOST_CONSTEXPR_OR_CONST std::size_t max_align =
35
+ BOOST_STATIC_CONSTEXPR std::size_t max_align =
36
36
  boost::move_detail::alignment_of<boost::move_detail::max_align_t>::value;
37
37
 
38
38
  //! <b>Effects</b>: Destroys
@@ -70,7 +70,7 @@ class BOOST_CONTAINER_DECL monotonic_buffer_resource
70
70
  //! to the upstream allocator
71
71
  //!
72
72
  //! <b>Note</b>: Non-standard extension.
73
- static const std::size_t initial_next_buffer_size = 32u*sizeof(void*);
73
+ BOOST_STATIC_CONSTEXPR std::size_t initial_next_buffer_size = 32u*sizeof(void*);
74
74
 
75
75
  //! <b>Requires</b>: `upstream` shall be the address of a valid memory resource or `nullptr`
76
76
  //!
@@ -36,19 +36,19 @@ namespace pmr_dtl {
36
36
  template<class T>
37
37
  struct max_allocator_alignment
38
38
  {
39
- static const std::size_t value = 1;
39
+ BOOST_STATIC_CONSTEXPR std::size_t value = 1;
40
40
  };
41
41
 
42
42
  template<class T>
43
43
  struct max_allocator_alignment< ::boost::container::new_allocator<T> >
44
44
  {
45
- static const std::size_t value = boost::move_detail::alignment_of<boost::move_detail::max_align_t>::value;
45
+ BOOST_STATIC_CONSTEXPR std::size_t value = boost::move_detail::alignment_of<boost::move_detail::max_align_t>::value;
46
46
  };
47
47
 
48
48
  template<class T>
49
49
  struct max_allocator_alignment< std::allocator<T> >
50
50
  {
51
- static const std::size_t value = boost::move_detail::alignment_of<boost::move_detail::max_align_t>::value;
51
+ BOOST_STATIC_CONSTEXPR std::size_t value = boost::move_detail::alignment_of<boost::move_detail::max_align_t>::value;
52
52
  };
53
53
 
54
54
  } //namespace pmr_dtl
@@ -56,7 +56,7 @@ struct is_scoped_allocator_imp
56
56
  template <typename T>
57
57
  static int test(...);
58
58
 
59
- static const bool value = (sizeof(yes_type) == sizeof(test<Allocator>(0)));
59
+ BOOST_STATIC_CONSTEXPR bool value = (sizeof(yes_type) == sizeof(test<Allocator>(0)));
60
60
  };
61
61
 
62
62
  template<class MaybeScopedAlloc, bool = is_scoped_allocator_imp<MaybeScopedAlloc>::value >
@@ -1026,7 +1026,7 @@ template <class Key, class Compare, class Allocator, class Options>
1026
1026
  struct has_trivial_destructor_after_move<boost::container::set<Key, Compare, Allocator, Options> >
1027
1027
  {
1028
1028
  typedef ::boost::container::dtl::tree<Key, void, Compare, Allocator, Options> tree;
1029
- static const bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
1029
+ BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
1030
1030
  };
1031
1031
 
1032
1032
  namespace container {
@@ -1681,7 +1681,7 @@ template <class Key, class Compare, class Allocator, class Options>
1681
1681
  struct has_trivial_destructor_after_move<boost::container::multiset<Key, Compare, Allocator, Options> >
1682
1682
  {
1683
1683
  typedef ::boost::container::dtl::tree<Key, void, Compare, Allocator, Options> tree;
1684
- static const bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
1684
+ BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
1685
1685
  };
1686
1686
 
1687
1687
  namespace container {
@@ -47,7 +47,7 @@
47
47
  #include <boost/move/detail/fwd_macros.hpp>
48
48
  #endif
49
49
  #include <boost/move/detail/move_helpers.hpp>
50
- #include <boost/move/detail/force_ptr.hpp>
50
+
51
51
  // std
52
52
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
53
53
  #include <initializer_list>
@@ -368,28 +368,14 @@ class slist
368
368
  BOOST_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value
369
369
  || allocator_traits_type::is_always_equal::value)
370
370
  {
371
- slist & sr = x;
372
- if (BOOST_LIKELY(this != &sr)) {
373
- NodeAlloc &this_alloc = this->node_alloc();
374
- NodeAlloc &x_alloc = sr.node_alloc();
375
- const bool propagate_alloc = allocator_traits_type::
376
- propagate_on_container_move_assignment::value;
377
- const bool allocators_equal = this_alloc == x_alloc; (void)allocators_equal;
378
- //Resources can be transferred if both allocators are
379
- //going to be equal after this function (either propagated or already equal)
380
- if(propagate_alloc || allocators_equal){
381
- //Destroy
382
- this->clear();
383
- //Move allocator if needed
384
- this->AllocHolder::move_assign_alloc(sr);
385
- //Obtain resources
386
- this->icont() = boost::move(sr.icont());
387
- }
388
- //Else do a one by one move
389
- else{
390
- this->assign( boost::make_move_iterator(sr.begin())
391
- , boost::make_move_iterator(sr.end()));
392
- }
371
+ if (BOOST_LIKELY(this != &x)) {
372
+ //We know resources can be transferred at comiple time if both allocators are
373
+ //always equal or the allocator is going to be propagated
374
+ const bool can_steal_resources_alloc
375
+ = allocator_traits_type::propagate_on_container_move_assignment::value
376
+ || allocator_traits_type::is_always_equal::value;
377
+ dtl::bool_<can_steal_resources_alloc> flag;
378
+ this->priv_move_assign(boost::move(x), flag);
393
379
  }
394
380
  return *this;
395
381
  }
@@ -1579,6 +1565,27 @@ class slist
1579
1565
 
1580
1566
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1581
1567
  private:
1568
+ void priv_move_assign(BOOST_RV_REF(slist) x, dtl::bool_<true> /*steal_resources*/)
1569
+ {
1570
+ //Destroy objects but retain memory in case x reuses it in the future
1571
+ this->clear();
1572
+ //Move allocator if needed
1573
+ this->AllocHolder::move_assign_alloc(x);
1574
+ //Obtain resources
1575
+ this->icont() = boost::move(x.icont());
1576
+ }
1577
+
1578
+ void priv_move_assign(BOOST_RV_REF(slist) x, dtl::bool_<false> /*steal_resources*/)
1579
+ {
1580
+ //We can't guarantee a compile-time equal allocator or propagation so fallback to runtime
1581
+ //Resources can be transferred if both allocators are equal
1582
+ if (this->node_alloc() == x.node_alloc()) {
1583
+ this->priv_move_assign(boost::move(x), dtl::true_());
1584
+ }
1585
+ else {
1586
+ this->assign(boost::make_move_iterator(x.begin()), boost::make_move_iterator(x.end()));
1587
+ }
1588
+ }
1582
1589
 
1583
1590
  template<class U>
1584
1591
  void priv_push_front(BOOST_FWD_REF(U) x)
@@ -1666,7 +1673,7 @@ struct has_trivial_destructor_after_move<boost::container::slist<T, Allocator> >
1666
1673
  {
1667
1674
  typedef typename boost::container::slist<T, Allocator>::allocator_type allocator_type;
1668
1675
  typedef typename ::boost::container::allocator_traits<allocator_type>::pointer pointer;
1669
- static const bool value = ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
1676
+ BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
1670
1677
  ::boost::has_trivial_destructor_after_move<pointer>::value;
1671
1678
  };
1672
1679
 
@@ -39,7 +39,6 @@
39
39
  #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
40
40
  #include <boost/move/detail/fwd_macros.hpp>
41
41
  #endif
42
- #include <boost/move/detail/force_ptr.hpp>
43
42
 
44
43
  //std
45
44
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
@@ -284,7 +283,7 @@ class small_vector_allocator
284
283
  { return !(l == r); }
285
284
 
286
285
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
287
- private:
286
+ public:
288
287
 
289
288
  typedef small_vector_base<value_type, allocator_type, Options> derived_type;
290
289
  typedef typename dtl::vector_for_small_vector
@@ -305,13 +304,13 @@ struct small_vector_storage
305
304
  typedef typename dtl::aligned_storage
306
305
  <sizeof(T)*N, Alignment>::type storage_type;
307
306
  storage_type m_storage;
308
- static const std::size_t sms_size = sizeof(storage_type)/sizeof(T);
307
+ BOOST_STATIC_CONSTEXPR std::size_t sms_size = sizeof(storage_type)/sizeof(T);
309
308
  };
310
309
 
311
310
  template<class T, std::size_t Alignment>
312
311
  struct small_vector_storage<T, 0u, Alignment>
313
312
  {
314
- static const std::size_t sms_size = 0u;
313
+ BOOST_STATIC_CONSTEXPR std::size_t sms_size = 0u;
315
314
  };
316
315
 
317
316
  //! This class consists of common code from all small_vector<T, N> types that don't depend on the
@@ -347,9 +346,10 @@ class small_vector_base
347
346
  public:
348
347
  //Make it public as it will be inherited by small_vector and container
349
348
  //must have this public member
350
- typedef typename real_allocator<T, SecAlloc>::type allocator_type;
351
- typedef typename allocator_traits<allocator_type>::
352
- template portable_rebind_alloc<void>::type void_allocator_t;
349
+ typedef typename real_allocator<T, SecAlloc>::type underlying_allocator_t;
350
+ typedef typename allocator_traits<underlying_allocator_t>::
351
+ template portable_rebind_alloc<void>::type void_underlying_allocator_t;
352
+ typedef small_vector_allocator<T, void_underlying_allocator_t, Options>allocator_type;
353
353
  typedef typename dtl::get_small_vector_opt<Options>::type options_t;
354
354
  typedef typename dtl::vector_for_small_vector
355
355
  <T, SecAlloc, Options>::type base_type;
@@ -357,12 +357,13 @@ class small_vector_base
357
357
  typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
358
358
  typedef typename allocator_traits<allocator_type>::void_pointer void_pointer;
359
359
  typedef typename allocator_traits<allocator_type>::const_void_pointer const_void_pointer;
360
- typedef small_vector_allocator<T, void_allocator_t, Options> small_allocator_type;
360
+ typedef typename base_type::size_type size_type;
361
+
361
362
 
362
363
  private:
363
364
  BOOST_COPYABLE_AND_MOVABLE(small_vector_base)
364
365
 
365
- friend class small_vector_allocator<T, void_allocator_t, Options>;
366
+ friend class small_vector_allocator<T, void_underlying_allocator_t, Options>;
366
367
 
367
368
  inline
368
369
  const_pointer internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW
@@ -378,18 +379,26 @@ class small_vector_base
378
379
 
379
380
  public:
380
381
 
382
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD bool is_small() const
383
+ { return this->internal_storage() == this->data(); }
384
+
381
385
  protected:
382
386
 
383
- inline explicit small_vector_base(initial_capacity_t, std::size_t initial_capacity)
387
+ inline explicit small_vector_base(initial_capacity_t, size_type initial_capacity)
384
388
  : base_type(initial_capacity_t(), this->internal_storage(), initial_capacity)
385
389
  {}
386
390
 
387
391
  template<class AllocFwd>
388
- inline explicit small_vector_base(initial_capacity_t, std::size_t capacity, BOOST_FWD_REF(AllocFwd) a)
392
+ inline explicit small_vector_base(initial_capacity_t, size_type capacity, BOOST_FWD_REF(AllocFwd) a)
389
393
  : base_type(initial_capacity_t(), this->internal_storage(), capacity, ::boost::forward<AllocFwd>(a))
390
394
  {}
391
395
 
392
- inline explicit small_vector_base(maybe_initial_capacity_t, std::size_t initial_capacity, std::size_t initial_size)
396
+ template<class AllocFwd>
397
+ inline explicit small_vector_base(initial_capacity_t, size_type capacity, BOOST_FWD_REF(AllocFwd) a, small_vector_base &x)
398
+ : base_type(initial_capacity_t(), this->internal_storage(), capacity, ::boost::forward<AllocFwd>(a), x)
399
+ {}
400
+
401
+ inline explicit small_vector_base(maybe_initial_capacity_t, size_type initial_capacity, size_type initial_size)
393
402
  : base_type( maybe_initial_capacity_t()
394
403
  , (initial_capacity >= initial_size) ? this->internal_storage() : pointer()
395
404
  , (initial_capacity >= initial_size) ? initial_capacity : initial_size
@@ -397,7 +406,7 @@ class small_vector_base
397
406
  {}
398
407
 
399
408
  template<class AllocFwd>
400
- inline explicit small_vector_base(maybe_initial_capacity_t, std::size_t initial_capacity, std::size_t initial_size, BOOST_FWD_REF(AllocFwd) a)
409
+ inline explicit small_vector_base(maybe_initial_capacity_t, size_type initial_capacity, size_type initial_size, BOOST_FWD_REF(AllocFwd) a)
401
410
  : base_type(maybe_initial_capacity_t()
402
411
  , (initial_capacity >= initial_size) ? this->internal_storage() : pointer()
403
412
  , (initial_capacity >= initial_size) ? initial_capacity : initial_size
@@ -405,11 +414,17 @@ class small_vector_base
405
414
  )
406
415
  {}
407
416
 
417
+ void prot_shrink_to_fit_small(const size_type small_capacity)
418
+ { this->base_type::prot_shrink_to_fit_small(this->internal_storage(), small_capacity); }
419
+
408
420
  using base_type::protected_set_size;
409
421
 
410
422
  //~small_vector_base(){}
411
423
  #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
412
424
 
425
+ inline void prot_swap(small_vector_base& other, size_type internal_capacity_value)
426
+ { this->base_type::prot_swap_small(other, internal_capacity_value); }
427
+
413
428
  public:
414
429
  inline small_vector_base& operator=(BOOST_COPY_ASSIGN_REF(small_vector_base) other)
415
430
  { return static_cast<small_vector_base&>(this->base_type::operator=(static_cast<base_type const&>(other))); }
@@ -418,24 +433,8 @@ class small_vector_base
418
433
  { return static_cast<small_vector_base&>(this->base_type::operator=(BOOST_MOVE_BASE(base_type, other))); }
419
434
 
420
435
  inline void swap(small_vector_base &other)
421
- { return this->base_type::swap(other); }
436
+ { return this->base_type::prot_swap_small(other, 0u); }
422
437
 
423
- #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
424
- protected:
425
- void move_construct_impl(base_type &x)
426
- {
427
- if(base_type::is_propagable_from(x.get_stored_allocator(), x.data(), this->base_type::get_stored_allocator(), true)){
428
- this->steal_resources(x);
429
- }
430
- else{
431
- const typename base_type::size_type sz = x.size();
432
- ::boost::container::uninitialized_move_alloc_n_source
433
- (this->base_type::get_stored_allocator(), x.begin(), sz, this->begin());
434
- this->protected_set_size(sz);
435
- x.clear();
436
- }
437
- }
438
- #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
439
438
  };
440
439
 
441
440
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
@@ -449,7 +448,7 @@ template<class T, std::size_t N, class Options>
449
448
  struct small_vector_storage_definer
450
449
  {
451
450
  typedef typename dtl::get_small_vector_opt<Options>::type options_t;
452
- static const std::size_t final_alignment =
451
+ BOOST_STATIC_CONSTEXPR std::size_t final_alignment =
453
452
  options_t::inplace_alignment ? options_t::inplace_alignment : dtl::alignment_of<T>::value;
454
453
  typedef small_vector_storage<T, N, final_alignment> type;
455
454
  };
@@ -488,7 +487,7 @@ template<class T, class VoidAlloc, class Options>
488
487
  inline typename small_vector_allocator<T, VoidAlloc, Options>::const_pointer
489
488
  small_vector_allocator<T, VoidAlloc, Options>::internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW
490
489
  {
491
- const vector_type& v = reinterpret_cast<const vector_type&>(*this);
490
+ const vector_type& v = *static_cast<const vector_type*>(static_cast<const void *>(this));
492
491
  BOOST_ASSERT((std::size_t(this) % dtl::alignment_of< small_vector_storage_offset<T, allocator_type, Options> >::value) == 0);
493
492
  const char *addr = reinterpret_cast<const char*>(&v);
494
493
  typedef typename boost::intrusive::pointer_traits<pointer>::template rebind_pointer<const char>::type const_char_pointer;
@@ -501,7 +500,7 @@ template <class T, class VoidAlloc, class Options>
501
500
  inline typename small_vector_allocator<T, VoidAlloc, Options>::pointer
502
501
  small_vector_allocator<T, VoidAlloc, Options>::internal_storage() BOOST_NOEXCEPT_OR_NOTHROW
503
502
  {
504
- vector_type& v = reinterpret_cast<vector_type&>(*this);
503
+ vector_type& v = *static_cast<vector_type*>(static_cast<void*>(this));
505
504
  BOOST_ASSERT((std::size_t(this) % dtl::alignment_of< small_vector_storage_offset<T, allocator_type, Options> >::value) == 0);
506
505
  char* addr = reinterpret_cast<char*>(&v);
507
506
  typedef typename boost::intrusive::pointer_traits<pointer>::template rebind_pointer<char>::type char_pointer;
@@ -550,7 +549,7 @@ class small_vector
550
549
  typedef typename base_type::size_type size_type;
551
550
  typedef typename base_type::value_type value_type;
552
551
 
553
- inline static std::size_t internal_capacity()
552
+ inline static size_type internal_capacity()
554
553
  { return static_capacity; }
555
554
 
556
555
  typedef allocator_traits<typename base_type::allocator_type> allocator_traits_type;
@@ -558,7 +557,7 @@ class small_vector
558
557
  #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
559
558
 
560
559
  //! @brief The capacity/max size of the container
561
- static const size_type static_capacity = small_vector_storage_definer<T, N, Options>::type::sms_size;
560
+ BOOST_STATIC_CONSTEXPR size_type static_capacity = small_vector_storage_definer<T, N, Options>::type::sms_size;
562
561
 
563
562
  public:
564
563
  inline small_vector()
@@ -627,17 +626,17 @@ class small_vector
627
626
  { this->assign(other.cbegin(), other.cend()); }
628
627
 
629
628
  inline explicit small_vector(BOOST_RV_REF(base_type) other)
630
- : base_type(initial_capacity_t(), internal_capacity(), ::boost::move(other.get_stored_allocator()))
631
- { this->base_type::move_construct_impl(other); }
629
+ : base_type(initial_capacity_t(), internal_capacity(), ::boost::move(other.get_stored_allocator()), other)
630
+ {}
632
631
 
633
632
  inline small_vector(BOOST_RV_REF(small_vector) other)
634
633
  BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_constructible<value_type>::value)
635
- : base_type(initial_capacity_t(), internal_capacity(), ::boost::move(other.get_stored_allocator()))
636
- { this->base_type::move_construct_impl(other); }
634
+ : base_type(initial_capacity_t(), internal_capacity(), ::boost::move(other.get_stored_allocator()), other)
635
+ {}
637
636
 
638
637
  inline small_vector(BOOST_RV_REF(small_vector) other, const allocator_type &a)
639
- : base_type(initial_capacity_t(), internal_capacity(), a)
640
- { this->base_type::move_construct_impl(other); }
638
+ : base_type(initial_capacity_t(), internal_capacity(), a, other)
639
+ {}
641
640
 
642
641
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
643
642
  inline small_vector(std::initializer_list<value_type> il, const allocator_type& a = allocator_type())
@@ -663,7 +662,10 @@ class small_vector
663
662
  { return static_cast<small_vector&>(this->base_type::operator=(boost::move(other))); }
664
663
 
665
664
  inline void swap(small_vector &other)
666
- { return this->base_type::swap(other); }
665
+ { return this->base_type::prot_swap(other, static_capacity); }
666
+
667
+ inline void shrink_to_fit()
668
+ { this->base_type::prot_shrink_to_fit_small(this->internal_capacity()); }
667
669
  };
668
670
 
669
671
  }}
@@ -678,7 +680,7 @@ template <class T, class Allocator>
678
680
  struct has_trivial_destructor_after_move<boost::container::vector<T, Allocator> >
679
681
  {
680
682
  typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
681
- static const bool value = ::boost::has_trivial_destructor_after_move<Allocator>::value &&
683
+ BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<Allocator>::value &&
682
684
  ::boost::has_trivial_destructor_after_move<pointer>::value;
683
685
  };
684
686