passenger 6.0.0 → 6.0.5

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 (454) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +148 -18
  3. data/CONTRIBUTORS +6 -0
  4. data/bin/passenger-install-nginx-module +1 -1
  5. data/bin/passenger-status +15 -0
  6. data/build/misc.rb +3 -1
  7. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +56 -3
  8. data/dev/copy_boost_headers +1 -0
  9. data/package.json +1 -1
  10. data/passenger.gemspec +1 -1
  11. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.css +0 -0
  12. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.js +0 -0
  13. data/resources/templates/error_renderer/with_details/src/bootstrap/config.json +0 -0
  14. data/resources/templates/standalone/http.erb +2 -0
  15. data/resources/templates/standalone/server.erb +1 -0
  16. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +1 -1
  17. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +1 -0
  18. data/src/agent/Core/ApplicationPool/Options.h +10 -0
  19. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +1 -1
  20. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +1 -1
  21. data/src/agent/Core/Config.h +13 -1
  22. data/src/agent/Core/Controller.h +1 -0
  23. data/src/agent/Core/Controller/Config.h +4 -1
  24. data/src/agent/Core/Controller/ForwardResponse.cpp +13 -0
  25. data/src/agent/Core/Controller/InitRequest.cpp +3 -0
  26. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +1 -0
  27. data/src/agent/Core/CoreMain.cpp +2 -1
  28. data/src/agent/Core/OptionParser.h +3 -0
  29. data/src/agent/Core/SpawningKit/Context.h +1 -0
  30. data/src/agent/Core/SpawningKit/Handshake/Perform.h +1 -0
  31. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -1
  32. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
  33. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +2 -0
  34. data/src/agent/Watchdog/Config.h +14 -1
  35. data/src/agent/Watchdog/WatchdogMain.cpp +7 -0
  36. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +10 -0
  37. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +10 -0
  38. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +30 -0
  39. data/src/apache2_module/Hooks.cpp +6 -0
  40. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +20 -0
  41. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +24 -0
  42. data/src/cxx_supportlib/Constants.h +2 -1
  43. data/src/cxx_supportlib/LoggingKit/Config.h +2 -0
  44. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +15 -9
  45. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParser.h +1 -1
  46. data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +57 -2
  47. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +11 -7
  48. data/src/cxx_supportlib/oxt/system_calls.cpp +10 -10
  49. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/finder.hpp +0 -4
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +46 -37
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +16 -15
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +45 -26
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +33 -0
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +1 -1
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +38 -14
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +2 -0
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +1 -1
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +3 -1
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +0 -1
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +6 -1
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -4
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +4 -4
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +3 -3
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +4 -4
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +4 -4
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +8 -6
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +17 -0
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +50 -5
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +2 -1
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +1 -1
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +3 -2
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +4 -3
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +5 -3
  75. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +13 -12
  76. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +10 -10
  77. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp +34 -34
  78. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/thread_clock.hpp +4 -4
  79. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/chrono.hpp +8 -8
  80. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp +27 -27
  81. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/thread_clock.hpp +4 -4
  82. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/system.hpp +5 -4
  83. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +1 -1
  84. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer.hpp +3 -3
  85. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/allocators.hpp +89 -0
  86. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +83 -74
  87. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +21 -33
  88. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/space_optimized.hpp +5 -5
  89. data/src/cxx_supportlib/vendor-modified/boost/concept/assert.hpp +1 -1
  90. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/general.hpp +3 -3
  91. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/has_constraints.hpp +3 -3
  92. data/src/cxx_supportlib/vendor-modified/boost/concept/usage.hpp +1 -1
  93. data/src/cxx_supportlib/vendor-modified/boost/concept_check.hpp +19 -19
  94. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +8 -0
  95. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +5 -2
  96. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +5 -1
  97. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +6 -2
  98. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/comeau.hpp +1 -1
  99. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +4 -0
  100. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +368 -52
  101. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +4 -1
  102. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +6 -3
  103. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +3 -0
  104. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/greenhills.hpp +1 -1
  105. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +1 -1
  106. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +6 -1
  107. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/kai.hpp +1 -1
  108. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +4 -1
  109. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +4 -1
  110. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +3 -3
  111. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +3 -0
  112. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +3 -0
  113. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +4 -1
  114. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +9 -4
  115. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
  116. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +1 -0
  117. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_compiler_config.hpp +1 -2
  118. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +13 -0
  119. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +2 -2
  120. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +14 -4
  121. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +4 -4
  122. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +262 -2
  123. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +4 -3
  124. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +1 -1
  125. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +7 -0
  126. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +22 -19
  127. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +833 -459
  128. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +24 -6
  129. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +2 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +61 -5
  131. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +33 -8
  132. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +132 -41
  133. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +16 -0
  134. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +54 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +58 -0
  136. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +28 -23
  137. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +167 -115
  138. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +55 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +3 -0
  140. data/src/cxx_supportlib/vendor-modified/boost/container/detail/thread_mutex.hpp +181 -0
  141. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +167 -29
  142. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +2 -0
  143. data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +1 -1
  144. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +18 -0
  145. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +389 -3
  146. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +262 -0
  147. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +52 -8
  148. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +364 -0
  149. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +4 -2
  150. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +1 -1
  151. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/synchronized_pool_resource.hpp +3 -2
  152. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +286 -6
  153. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +56 -8
  154. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +43 -6
  155. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +100 -31
  156. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +2 -1
  157. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +126 -69
  158. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +75 -51
  159. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +136 -0
  160. data/src/cxx_supportlib/vendor-modified/boost/core/exchange.hpp +49 -0
  161. data/src/cxx_supportlib/vendor-modified/boost/core/explicit_operator_bool.hpp +9 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +101 -130
  163. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +2 -2
  164. data/src/cxx_supportlib/vendor-modified/boost/core/noncopyable.hpp +16 -1
  165. data/src/cxx_supportlib/vendor-modified/boost/core/quick_exit.hpp +59 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +2 -1
  167. data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +9 -2
  168. data/src/cxx_supportlib/vendor-modified/boost/core/typeinfo.hpp +26 -10
  169. data/src/cxx_supportlib/vendor-modified/boost/date_time/compiler_config.hpp +5 -0
  170. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +3 -3
  171. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +1 -1
  172. data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +1 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +38 -47
  174. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +5 -5
  175. data/src/cxx_supportlib/vendor-modified/boost/detail/reference_content.hpp +7 -7
  176. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +62 -58
  177. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +1 -1
  178. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +29 -29
  179. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +38 -40
  180. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +4 -4
  181. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +44 -44
  182. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +39 -39
  183. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +15 -15
  184. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +7 -7
  185. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +1 -1
  186. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +14 -14
  187. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +9 -9
  188. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +7 -7
  189. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +1 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +2 -2
  191. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +2 -2
  192. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +6 -6
  193. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +1 -1
  194. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +1 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +1 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +3 -3
  198. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +33 -14
  199. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +12 -12
  200. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +4 -4
  201. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +3 -0
  202. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +39 -39
  203. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +61 -61
  204. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +4 -4
  205. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +66 -66
  206. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +54 -54
  207. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +6 -2
  208. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +3 -3
  209. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +1 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +65 -0
  211. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
  212. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +1 -1
  213. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +23 -23
  214. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +4 -4
  215. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +13 -13
  216. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +1 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +5 -4
  218. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
  219. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +5 -5
  220. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +5 -2
  221. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +18 -13
  222. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cregex.cpp +4 -4
  223. data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +16 -5
  224. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/future.cpp +1 -1
  225. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +14 -8
  226. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/tss_null.cpp +2 -2
  227. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +13 -13
  228. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +27 -0
  229. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +1 -1
  230. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +29 -6
  231. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +12 -3
  232. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +1 -1
  233. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +1 -1
  234. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +1 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +8 -8
  236. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +2 -0
  237. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +3 -3
  238. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +23 -3
  239. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/experimental_traits.hpp +9 -3
  240. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +10 -11
  241. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +20 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +3 -3
  243. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +211 -101
  244. data/src/cxx_supportlib/vendor-modified/boost/parameter/python.hpp +5 -6
  245. data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +119 -25
  246. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +1 -0
  247. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +5 -0
  248. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ptx.h +44 -0
  249. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler.h +1 -0
  250. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/compaq.h +1 -1
  251. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/nvcc.h +73 -0
  252. data/src/cxx_supportlib/vendor-modified/boost/predef/detail/endian_compat.h +3 -1
  253. data/src/cxx_supportlib/vendor-modified/boost/predef/language.h +1 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/predef/language/cuda.h +52 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +6 -1
  257. data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +1 -2
  258. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  259. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +17 -8
  260. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/stringize.hpp +4 -0
  261. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/wstringize.hpp +4 -0
  262. data/src/cxx_supportlib/vendor-modified/boost/random/detail/gray_coded_qrng.hpp +166 -0
  263. data/src/cxx_supportlib/vendor-modified/boost/random/detail/niederreiter_base2_table.hpp +513 -0
  264. data/src/cxx_supportlib/vendor-modified/boost/random/detail/qrng_base.hpp +291 -0
  265. data/src/cxx_supportlib/vendor-modified/boost/random/detail/sobol_table.hpp +4106 -0
  266. data/src/cxx_supportlib/vendor-modified/boost/random/faure.hpp +367 -0
  267. data/src/cxx_supportlib/vendor-modified/boost/random/niederreiter_base2.hpp +360 -0
  268. data/src/cxx_supportlib/vendor-modified/boost/random/sobol.hpp +237 -0
  269. data/src/cxx_supportlib/vendor-modified/boost/range/as_literal.hpp +43 -0
  270. data/src/cxx_supportlib/vendor-modified/boost/range/begin.hpp +13 -5
  271. data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/range/detail/common.hpp +1 -3
  273. data/src/cxx_supportlib/vendor-modified/boost/range/detail/implementation_help.hpp +2 -2
  274. data/src/cxx_supportlib/vendor-modified/boost/range/distance.hpp +11 -5
  275. data/src/cxx_supportlib/vendor-modified/boost/range/end.hpp +14 -6
  276. data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +3 -3
  277. data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +6 -2
  278. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +55 -37
  279. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +3 -2
  280. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +11 -1
  281. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +7 -1
  282. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +3 -1
  283. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +5 -2
  284. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +0 -3
  285. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +15 -4
  286. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +1 -2
  287. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +12 -3
  288. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +7 -2
  289. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +7 -3
  290. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +6 -2
  291. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +0 -5
  292. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +0 -8
  293. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +3 -3
  294. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +3 -1
  295. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +0 -8
  296. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +12 -11
  297. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -4
  298. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +1 -9
  299. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +2 -10
  300. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +2 -0
  301. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +60 -115
  302. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +3 -3
  303. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +2 -1
  304. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +2 -1
  305. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +2 -1
  306. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +2 -1
  307. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +2 -1
  308. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +2 -1
  309. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +2 -1
  310. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +2 -1
  311. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +2 -1
  312. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +2 -1
  313. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +2 -1
  314. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +2 -1
  315. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +2 -1
  316. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +2 -1
  317. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +2 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +2 -1
  319. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +2 -1
  320. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +2 -1
  321. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +3 -3
  322. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +14 -8
  323. data/src/cxx_supportlib/vendor-modified/boost/system/config.hpp +4 -24
  324. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +57 -0
  325. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +101 -0
  326. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_interoperability.hpp +141 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_posix.hpp +132 -0
  328. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +775 -588
  329. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +4 -4
  330. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +6 -0
  331. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/move.hpp +13 -6
  332. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/nullary_function.hpp +8 -3
  333. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +3 -1
  334. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread_safety.hpp +160 -0
  335. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/tss_hooks.hpp +2 -2
  336. data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +3 -3
  337. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/basic_thread_pool.hpp +24 -1
  338. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +10 -1
  339. data/src/cxx_supportlib/vendor-modified/boost/thread/lock_guard.hpp +4 -4
  340. data/src/cxx_supportlib/vendor-modified/boost/thread/lockable_traits.hpp +31 -0
  341. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +2 -2
  342. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +2 -2
  343. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/mutex.hpp +8 -53
  344. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +73 -4
  345. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/recursive_mutex.hpp +6 -6
  346. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +14 -9
  347. data/src/cxx_supportlib/vendor-modified/boost/thread/xtime.hpp +6 -6
  348. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +9 -8
  349. data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +1 -0
  350. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +21 -19
  351. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +3 -1
  352. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +9 -0
  353. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/detector.hpp +1 -1
  354. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_postfix_operator.hpp +55 -0
  355. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_prefix_operator.hpp +72 -0
  356. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_03.hpp +108 -0
  357. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_11.hpp +501 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_msvc10_fix.hpp +30 -0
  359. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_likely_lambda.hpp +2 -2
  360. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_03.hpp +117 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_11.hpp +557 -0
  362. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_rvalue_reference_msvc10_fix.hpp +43 -0
  363. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected.hpp +1 -1
  364. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected_or.hpp +1 -1
  365. data/src/cxx_supportlib/vendor-modified/boost/type_traits/enable_if.hpp +37 -0
  366. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_dereference.hpp +344 -0
  367. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus.hpp +5 -0
  368. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus_assign.hpp +5 -0
  369. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus_assign.hpp +5 -0
  370. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_decrement.hpp +21 -0
  371. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_increment.hpp +21 -0
  372. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_decrement.hpp +21 -0
  373. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_increment.hpp +22 -0
  374. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +1 -1
  375. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +2 -1
  376. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +5 -15
  377. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +16 -6
  378. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +3 -1
  379. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_assignable.hpp +3 -4
  380. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_constructible.hpp +4 -6
  381. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected.hpp +1 -1
  382. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_convertible.hpp +1 -1
  383. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_exact.hpp +1 -1
  384. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_final.hpp +1 -1
  385. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_function.hpp +4 -79
  386. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_function_pointer.hpp +3 -97
  387. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_noncopyable.hpp +39 -0
  388. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +2 -2
  389. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +2 -2
  390. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +4 -0
  391. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +104 -63
  392. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_void.hpp +1 -1
  393. data/src/cxx_supportlib/vendor-modified/boost/type_traits/nonesuch.hpp +1 -1
  394. data/src/cxx_supportlib/vendor-modified/boost/typeof/constant.hpp +26 -0
  395. data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +4 -4
  396. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -3
  397. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +1 -1
  398. data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +4 -5
  399. data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +5 -5
  400. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +9 -9
  401. data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +3 -3
  402. data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +2 -2
  403. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +6 -6
  404. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +1 -1
  405. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +4 -4
  406. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +2 -2
  407. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +2 -2
  408. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +16 -16
  409. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +5 -5
  410. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +201 -201
  411. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +301 -301
  412. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +401 -401
  413. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +101 -101
  414. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +3 -0
  415. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +2 -0
  416. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +26 -6
  417. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  418. data/src/helper-scripts/prespawn +1 -0
  419. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +40 -0
  420. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +26 -0
  421. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +48 -0
  422. data/src/nginx_module/Configuration.c +9 -5
  423. data/src/nginx_module/ContentHandler.c +5 -1
  424. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +15 -0
  425. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +15 -0
  426. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +28 -0
  427. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +6 -0
  428. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +11 -0
  429. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +11 -0
  430. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +23 -0
  431. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +8 -0
  432. data/src/nginx_module/ngx_http_passenger_module.c +2 -0
  433. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/logger.js +0 -0
  434. data/src/ruby_native_extension/extconf.rb +7 -0
  435. data/src/ruby_supportlib/phusion_passenger.rb +7 -7
  436. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +8 -0
  437. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +23 -0
  438. data/src/ruby_supportlib/phusion_passenger/constants.rb +1 -0
  439. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +1 -3
  440. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +37 -0
  441. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +1 -1
  442. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +10 -0
  443. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +2 -2
  444. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +5 -0
  445. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +11 -0
  446. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +3 -0
  447. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +1 -1
  448. data/src/ruby_supportlib/phusion_passenger/utils/tee_input.rb +6 -0
  449. data/src/ruby_supportlib/phusion_passenger/utils/unseekable_socket.rb +15 -11
  450. metadata +48 -7
  451. data/src/cxx_supportlib/vendor-modified/boost/call_traits.hpp +0 -20
  452. data/src/cxx_supportlib/vendor-modified/boost/detail/call_traits.hpp +0 -172
  453. data/src/cxx_supportlib/vendor-modified/boost/detail/no_exceptions_support.hpp +0 -17
  454. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.ipp +0 -496
@@ -257,6 +257,22 @@ class flat_set
257
257
  : tree_t(ordered_unique_range, first, last, comp, a)
258
258
  {}
259
259
 
260
+ //! <b>Effects</b>: Constructs an empty container using the specified allocator and
261
+ //! inserts elements from the ordered unique range [first ,last). This function
262
+ //! is more efficient than the normal range creation for ordered ranges.
263
+ //!
264
+ //! <b>Requires</b>: [first ,last) must be ordered according to the predicate and must be
265
+ //! unique values.
266
+ //!
267
+ //! <b>Complexity</b>: Linear in N.
268
+ //!
269
+ //! <b>Note</b>: Non-standard extension.
270
+ template <class InputIterator>
271
+ BOOST_CONTAINER_FORCEINLINE
272
+ flat_set(ordered_unique_range_t, InputIterator first, InputIterator last, const allocator_type& a)
273
+ : tree_t(ordered_unique_range, first, last, Compare(), a)
274
+ {}
275
+
260
276
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
261
277
  //! <b>Effects</b>: Constructs an empty container and
262
278
  //! inserts elements from the range [il.begin(), il.end()).
@@ -823,6 +839,26 @@ class flat_set
823
839
  //! <b>Complexity</b>: Logarithmic.
824
840
  const_iterator find(const key_type& x) const;
825
841
 
842
+ //! <b>Requires</b>: This overload is available only if
843
+ //! key_compare::is_transparent exists.
844
+ //!
845
+ //! <b>Returns</b>: An iterator pointing to an element with the key
846
+ //! equivalent to x, or end() if such an element is not found.
847
+ //!
848
+ //! <b>Complexity</b>: Logarithmic.
849
+ template<typename K>
850
+ iterator find(const K& x);
851
+
852
+ //! <b>Requires</b>: This overload is available only if
853
+ //! key_compare::is_transparent exists.
854
+ //!
855
+ //! <b>Returns</b>: A const_iterator pointing to an element with the key
856
+ //! equivalent to x, or end() if such an element is not found.
857
+ //!
858
+ //! <b>Complexity</b>: Logarithmic.
859
+ template<typename K>
860
+ const_iterator find(const K& x) const;
861
+
826
862
  //! <b>Requires</b>: size() >= n.
827
863
  //!
828
864
  //! <b>Effects</b>: Returns an iterator to the nth element
@@ -881,7 +917,34 @@ class flat_set
881
917
  BOOST_CONTAINER_FORCEINLINE size_type count(const key_type& x) const
882
918
  { return static_cast<size_type>(this->tree_t::find(x) != this->tree_t::cend()); }
883
919
 
920
+ //! <b>Requires</b>: This overload is available only if
921
+ //! key_compare::is_transparent exists.
922
+ //!
923
+ //! <b>Returns</b>: The number of elements with key equivalent to x.
924
+ //!
925
+ //! <b>Complexity</b>: log(size())+count(k)
926
+ template<typename K>
927
+ BOOST_CONTAINER_FORCEINLINE size_type count(const K& x) const
928
+ { return static_cast<size_type>(this->tree_t::find(x) != this->tree_t::cend()); }
929
+
884
930
  #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
931
+
932
+ //! <b>Returns</b>: Returns true if there is an element with key
933
+ //! equivalent to key in the container, otherwise false.
934
+ //!
935
+ //! <b>Complexity</b>: log(size()).
936
+ bool contains(const key_type& x) const;
937
+
938
+ //! <b>Requires</b>: This overload is available only if
939
+ //! key_compare::is_transparent exists.
940
+ //!
941
+ //! <b>Returns</b>: Returns true if there is an element with key
942
+ //! equivalent to key in the container, otherwise false.
943
+ //!
944
+ //! <b>Complexity</b>: log(size()).
945
+ template<typename K>
946
+ bool contains(const K& x) const;
947
+
885
948
  //! <b>Returns</b>: An iterator pointing to the first element with key not less
886
949
  //! than k, or a.end() if such an element is not found.
887
950
  //!
@@ -894,6 +957,26 @@ class flat_set
894
957
  //! <b>Complexity</b>: Logarithmic
895
958
  const_iterator lower_bound(const key_type& x) const;
896
959
 
960
+ //! <b>Requires</b>: This overload is available only if
961
+ //! key_compare::is_transparent exists.
962
+ //!
963
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
964
+ //! than k, or a.end() if such an element is not found.
965
+ //!
966
+ //! <b>Complexity</b>: Logarithmic
967
+ template<typename K>
968
+ iterator lower_bound(const K& x);
969
+
970
+ //! <b>Requires</b>: This overload is available only if
971
+ //! key_compare::is_transparent exists.
972
+ //!
973
+ //! <b>Returns</b>: A const iterator pointing to the first element with key not
974
+ //! less than k, or a.end() if such an element is not found.
975
+ //!
976
+ //! <b>Complexity</b>: Logarithmic
977
+ template<typename K>
978
+ const_iterator lower_bound(const K& x) const;
979
+
897
980
  //! <b>Returns</b>: An iterator pointing to the first element with key not less
898
981
  //! than x, or end() if such an element is not found.
899
982
  //!
@@ -906,6 +989,26 @@ class flat_set
906
989
  //! <b>Complexity</b>: Logarithmic
907
990
  const_iterator upper_bound(const key_type& x) const;
908
991
 
992
+ //! <b>Requires</b>: This overload is available only if
993
+ //! key_compare::is_transparent exists.
994
+ //!
995
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
996
+ //! than x, or end() if such an element is not found.
997
+ //!
998
+ //! <b>Complexity</b>: Logarithmic
999
+ template<typename K>
1000
+ iterator upper_bound(const K& x);
1001
+
1002
+ //! <b>Requires</b>: This overload is available only if
1003
+ //! key_compare::is_transparent exists.
1004
+ //!
1005
+ //! <b>Returns</b>: A const iterator pointing to the first element with key not
1006
+ //! less than x, or end() if such an element is not found.
1007
+ //!
1008
+ //! <b>Complexity</b>: Logarithmic
1009
+ template<typename K>
1010
+ const_iterator upper_bound(const K& x) const;
1011
+
909
1012
  #endif // #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
910
1013
 
911
1014
  //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
@@ -920,6 +1023,26 @@ class flat_set
920
1023
  BOOST_CONTAINER_FORCEINLINE std::pair<iterator,iterator> equal_range(const key_type& x)
921
1024
  { return this->tree_t::lower_bound_range(x); }
922
1025
 
1026
+ //! <b>Requires</b>: This overload is available only if
1027
+ //! key_compare::is_transparent exists.
1028
+ //!
1029
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
1030
+ //!
1031
+ //! <b>Complexity</b>: Logarithmic
1032
+ template<typename K>
1033
+ std::pair<iterator,iterator> equal_range(const K& x)
1034
+ { return this->tree_t::lower_bound_range(x); }
1035
+
1036
+ //! <b>Requires</b>: This overload is available only if
1037
+ //! key_compare::is_transparent exists.
1038
+ //!
1039
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
1040
+ //!
1041
+ //! <b>Complexity</b>: Logarithmic
1042
+ template<typename K>
1043
+ std::pair<const_iterator,const_iterator> equal_range(const K& x) const
1044
+ { return this->tree_t::lower_bound_range(x); }
1045
+
923
1046
  #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
924
1047
 
925
1048
  //! <b>Effects</b>: Returns true if x and y are equal
@@ -1001,6 +1124,65 @@ class flat_set
1001
1124
  #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1002
1125
  };
1003
1126
 
1127
+ #ifndef BOOST_CONTAINER_NO_CXX17_CTAD
1128
+
1129
+ template <typename InputIterator>
1130
+ flat_set(InputIterator, InputIterator) ->
1131
+ flat_set< it_based_value_type_t<InputIterator> >;
1132
+
1133
+ template < typename InputIterator, typename AllocatorOrCompare>
1134
+ flat_set(InputIterator, InputIterator, AllocatorOrCompare const&) ->
1135
+ flat_set< it_based_value_type_t<InputIterator>
1136
+ , typename dtl::if_c< // Compare
1137
+ dtl::is_allocator<AllocatorOrCompare>::value
1138
+ , std::less<it_based_value_type_t<InputIterator>>
1139
+ , AllocatorOrCompare
1140
+ >::type
1141
+ , typename dtl::if_c< // Allocator
1142
+ dtl::is_allocator<AllocatorOrCompare>::value
1143
+ , AllocatorOrCompare
1144
+ , new_allocator<it_based_value_type_t<InputIterator>>
1145
+ >::type
1146
+ >;
1147
+
1148
+ template < typename InputIterator, typename Compare, typename Allocator
1149
+ , typename = dtl::require_nonallocator_t<Compare>
1150
+ , typename = dtl::require_allocator_t<Allocator>>
1151
+ flat_set(InputIterator, InputIterator, Compare const&, Allocator const&) ->
1152
+ flat_set< it_based_value_type_t<InputIterator>
1153
+ , Compare
1154
+ , Allocator>;
1155
+
1156
+ template <typename InputIterator>
1157
+ flat_set(ordered_unique_range_t, InputIterator, InputIterator) ->
1158
+ flat_set< it_based_value_type_t<InputIterator>>;
1159
+
1160
+
1161
+ template < typename InputIterator, typename AllocatorOrCompare>
1162
+ flat_set(ordered_unique_range_t, InputIterator, InputIterator, AllocatorOrCompare const&) ->
1163
+ flat_set< it_based_value_type_t<InputIterator>
1164
+ , typename dtl::if_c< // Compare
1165
+ dtl::is_allocator<AllocatorOrCompare>::value
1166
+ , std::less<it_based_value_type_t<InputIterator>>
1167
+ , AllocatorOrCompare
1168
+ >::type
1169
+ , typename dtl::if_c< // Allocator
1170
+ dtl::is_allocator<AllocatorOrCompare>::value
1171
+ , AllocatorOrCompare
1172
+ , new_allocator<it_based_value_type_t<InputIterator>>
1173
+ >::type
1174
+ >;
1175
+
1176
+ template < typename InputIterator, typename Compare, typename Allocator
1177
+ , typename = dtl::require_nonallocator_t<Compare>
1178
+ , typename = dtl::require_allocator_t<Allocator>>
1179
+ flat_set(ordered_unique_range_t, InputIterator, InputIterator, Compare const&, Allocator const&) ->
1180
+ flat_set< it_based_value_type_t<InputIterator>
1181
+ , Compare
1182
+ , Allocator>;
1183
+
1184
+ #endif
1185
+
1004
1186
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1005
1187
 
1006
1188
  } //namespace container {
@@ -1177,6 +1359,20 @@ class flat_multiset
1177
1359
  : tree_t(ordered_range, first, last, comp, a)
1178
1360
  {}
1179
1361
 
1362
+ //! <b>Effects</b>: Constructs an empty flat_multiset using the specified allocator and
1363
+ //! inserts elements from the ordered range [first ,last ). This function
1364
+ //! is more efficient than the normal range creation for ordered ranges.
1365
+ //!
1366
+ //! <b>Requires</b>: [first ,last) must be ordered according to the predicate.
1367
+ //!
1368
+ //! <b>Complexity</b>: Linear in N.
1369
+ //!
1370
+ //! <b>Note</b>: Non-standard extension.
1371
+ template <class InputIterator>
1372
+ BOOST_CONTAINER_FORCEINLINE flat_multiset(ordered_range_t, InputIterator first, InputIterator last, const allocator_type &a)
1373
+ : tree_t(ordered_range, first, last, Compare(), a)
1374
+ {}
1375
+
1180
1376
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
1181
1377
  //! @copydoc ::boost::container::flat_set::flat_set(std::initializer_list<value_type)
1182
1378
  BOOST_CONTAINER_FORCEINLINE flat_multiset(std::initializer_list<value_type> il)
@@ -1559,6 +1755,13 @@ class flat_multiset
1559
1755
  //! @copydoc ::boost::container::flat_set::count(const key_type& ) const
1560
1756
  size_type count(const key_type& x) const;
1561
1757
 
1758
+ //! @copydoc ::boost::container::flat_set::contains(const key_type& ) const
1759
+ bool contains(const key_type& x) const;
1760
+
1761
+ //! @copydoc ::boost::container::flat_set::contains(const K& ) const
1762
+ template<typename K>
1763
+ bool contains(const K& x) const;
1764
+
1562
1765
  //! @copydoc ::boost::container::flat_set::lower_bound(const key_type& )
1563
1766
  iterator lower_bound(const key_type& x);
1564
1767
 
@@ -1655,6 +1858,65 @@ class flat_multiset
1655
1858
  #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1656
1859
  };
1657
1860
 
1861
+ #ifndef BOOST_CONTAINER_NO_CXX17_CTAD
1862
+
1863
+ template <typename InputIterator>
1864
+ flat_multiset(InputIterator, InputIterator) ->
1865
+ flat_multiset< it_based_value_type_t<InputIterator> >;
1866
+
1867
+
1868
+ template < typename InputIterator, typename AllocatorOrCompare>
1869
+ flat_multiset(InputIterator, InputIterator, AllocatorOrCompare const&) ->
1870
+ flat_multiset < it_based_value_type_t<InputIterator>
1871
+ , typename dtl::if_c< // Compare
1872
+ dtl::is_allocator<AllocatorOrCompare>::value
1873
+ , std::less<it_based_value_type_t<InputIterator>>
1874
+ , AllocatorOrCompare
1875
+ >::type
1876
+ , typename dtl::if_c< // Allocator
1877
+ dtl::is_allocator<AllocatorOrCompare>::value
1878
+ , AllocatorOrCompare
1879
+ , new_allocator<it_based_value_type_t<InputIterator>>
1880
+ >::type
1881
+ >;
1882
+
1883
+ template < typename InputIterator, typename Compare, typename Allocator
1884
+ , typename = dtl::require_nonallocator_t<Compare>
1885
+ , typename = dtl::require_allocator_t<Allocator>>
1886
+ flat_multiset(InputIterator, InputIterator, Compare const&, Allocator const&) ->
1887
+ flat_multiset< it_based_value_type_t<InputIterator>
1888
+ , Compare
1889
+ , Allocator>;
1890
+
1891
+ template <typename InputIterator>
1892
+ flat_multiset(ordered_range_t, InputIterator, InputIterator) ->
1893
+ flat_multiset< it_based_value_type_t<InputIterator>>;
1894
+
1895
+ template < typename InputIterator, typename AllocatorOrCompare>
1896
+ flat_multiset(ordered_range_t, InputIterator, InputIterator, AllocatorOrCompare const&) ->
1897
+ flat_multiset < it_based_value_type_t<InputIterator>
1898
+ , typename dtl::if_c< // Compare
1899
+ dtl::is_allocator<AllocatorOrCompare>::value
1900
+ , std::less<it_based_value_type_t<InputIterator>>
1901
+ , AllocatorOrCompare
1902
+ >::type
1903
+ , typename dtl::if_c< // Allocator
1904
+ dtl::is_allocator<AllocatorOrCompare>::value
1905
+ , AllocatorOrCompare
1906
+ , new_allocator<it_based_value_type_t<InputIterator>>
1907
+ >::type
1908
+ >;
1909
+
1910
+ template < typename InputIterator, typename Compare, typename Allocator
1911
+ , typename = dtl::require_nonallocator_t<Compare>
1912
+ , typename = dtl::require_allocator_t<Allocator>>
1913
+ flat_multiset(ordered_range_t, InputIterator, InputIterator, Compare const&, Allocator const&) ->
1914
+ flat_multiset< it_based_value_type_t<InputIterator>
1915
+ , Compare
1916
+ , Allocator>;
1917
+
1918
+ #endif
1919
+
1658
1920
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1659
1921
 
1660
1922
  } //namespace container {
@@ -71,20 +71,54 @@ template
71
71
  struct list_node
72
72
  : public list_hook<VoidPointer>::type
73
73
  {
74
- private:
75
- list_node();
76
-
77
74
  public:
78
75
  typedef T value_type;
76
+ typedef T internal_type;
79
77
  typedef typename list_hook<VoidPointer>::type hook_type;
80
78
 
81
- T m_data;
79
+ typedef typename aligned_storage<sizeof(T), alignment_of<T>::value>::type storage_t;
80
+ storage_t m_storage;
81
+
82
+ #if defined(BOOST_GCC) && (BOOST_GCC >= 40600) && (BOOST_GCC < 80000)
83
+ #pragma GCC diagnostic push
84
+ #pragma GCC diagnostic ignored "-Wstrict-aliasing"
85
+ #define BOOST_CONTAINER_DISABLE_ALIASING_WARNING
86
+ # endif
87
+
88
+ BOOST_CONTAINER_FORCEINLINE T &get_data()
89
+ { return *reinterpret_cast<T*>(this->m_storage.data); }
90
+
91
+ BOOST_CONTAINER_FORCEINLINE const T &get_data() const
92
+ { return *reinterpret_cast<const T*>(this->m_storage.data); }
93
+
94
+ BOOST_CONTAINER_FORCEINLINE T *get_data_ptr()
95
+ { return reinterpret_cast<T*>(this->m_storage.data); }
96
+
97
+ BOOST_CONTAINER_FORCEINLINE const T *get_data_ptr() const
98
+ { return reinterpret_cast<T*>(this->m_storage.data); }
99
+
100
+ BOOST_CONTAINER_FORCEINLINE internal_type &get_real_data()
101
+ { return *reinterpret_cast<internal_type*>(this->m_storage.data); }
82
102
 
83
- T &get_data()
84
- { return this->m_data; }
103
+ BOOST_CONTAINER_FORCEINLINE const internal_type &get_real_data() const
104
+ { return *reinterpret_cast<const internal_type*>(this->m_storage.data); }
85
105
 
86
- const T &get_data() const
87
- { return this->m_data; }
106
+ BOOST_CONTAINER_FORCEINLINE internal_type *get_real_data_ptr()
107
+ { return reinterpret_cast<internal_type*>(this->m_storage.data); }
108
+
109
+ BOOST_CONTAINER_FORCEINLINE const internal_type *get_real_data_ptr() const
110
+ { return reinterpret_cast<internal_type*>(this->m_storage.data); }
111
+
112
+ BOOST_CONTAINER_FORCEINLINE ~list_node()
113
+ { reinterpret_cast<T*>(this->m_storage.data)->~T(); }
114
+
115
+ #if defined(BOOST_CONTAINER_DISABLE_ALIASING_WARNING)
116
+ #pragma GCC diagnostic pop
117
+ #undef BOOST_CONTAINER_DISABLE_ALIASING_WARNING
118
+ # endif
119
+
120
+ BOOST_CONTAINER_FORCEINLINE void destroy_header()
121
+ { static_cast<hook_type*>(this)->~hook_type(); }
88
122
  };
89
123
 
90
124
  template <class T, class VoidPointer>
@@ -1464,6 +1498,16 @@ class list
1464
1498
 
1465
1499
  };
1466
1500
 
1501
+ #ifndef BOOST_CONTAINER_NO_CXX17_CTAD
1502
+ template <typename InputIterator>
1503
+ list(InputIterator, InputIterator) ->
1504
+ list<typename iterator_traits<InputIterator>::value_type>;
1505
+
1506
+ template <typename InputIterator, typename Allocator>
1507
+ list(InputIterator, InputIterator, Allocator const&) ->
1508
+ list<typename iterator_traits<InputIterator>::value_type, Allocator>;
1509
+ #endif
1510
+
1467
1511
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1468
1512
 
1469
1513
  } //namespace container {
@@ -256,6 +256,22 @@ class map
256
256
  : base_t(ordered_range, first, last, comp, a)
257
257
  {}
258
258
 
259
+ //! <b>Effects</b>: Constructs an empty map using the specified allocator object and
260
+ //! inserts elements from the ordered unique range [first ,last). This function
261
+ //! is more efficient than the normal range creation for ordered ranges.
262
+ //!
263
+ //! <b>Requires</b>: [first ,last) must be ordered according to the predicate and must be
264
+ //! unique values.
265
+ //!
266
+ //! <b>Complexity</b>: Linear in N.
267
+ //!
268
+ //! <b>Note</b>: Non-standard extension.
269
+ template <class InputIterator>
270
+ BOOST_CONTAINER_FORCEINLINE map(ordered_unique_range_t, InputIterator first, InputIterator last, const allocator_type& a)
271
+ : base_t(ordered_range, first, last, Compare(), a)
272
+ {}
273
+
274
+
259
275
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
260
276
  //! <b>Effects</b>: Constructs an empty map and
261
277
  //! inserts elements from the range [il.begin(), il.end()).
@@ -1079,6 +1095,26 @@ class map
1079
1095
  //! <b>Complexity</b>: Logarithmic.
1080
1096
  const_iterator find(const key_type& x) const;
1081
1097
 
1098
+ //! <b>Requires</b>: This overload is available only if
1099
+ //! key_compare::is_transparent exists.
1100
+ //!
1101
+ //! <b>Returns</b>: An iterator pointing to an element with the key
1102
+ //! equivalent to x, or end() if such an element is not found.
1103
+ //!
1104
+ //! <b>Complexity</b>: Logarithmic.
1105
+ template<typename K>
1106
+ iterator find(const K& x);
1107
+
1108
+ //! <b>Requires</b>: This overload is available only if
1109
+ //! key_compare::is_transparent exists.
1110
+ //!
1111
+ //! <b>Returns</b>: A const_iterator pointing to an element with the key
1112
+ //! equivalent to x, or end() if such an element is not found.
1113
+ //!
1114
+ //! <b>Complexity</b>: Logarithmic.
1115
+ template<typename K>
1116
+ const_iterator find(const K& x) const;
1117
+
1082
1118
  #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1083
1119
 
1084
1120
  //! <b>Returns</b>: The number of elements with key equivalent to x.
@@ -1087,8 +1123,34 @@ class map
1087
1123
  BOOST_CONTAINER_FORCEINLINE size_type count(const key_type& x) const
1088
1124
  { return static_cast<size_type>(this->find(x) != this->cend()); }
1089
1125
 
1126
+ //! <b>Requires</b>: This overload is available only if
1127
+ //! key_compare::is_transparent exists.
1128
+ //!
1129
+ //! <b>Returns</b>: The number of elements with key equivalent to x.
1130
+ //!
1131
+ //! <b>Complexity</b>: log(size())+count(k)
1132
+ template<typename K>
1133
+ BOOST_CONTAINER_FORCEINLINE size_type count(const K& x) const
1134
+ { return static_cast<size_type>(this->find(x) != this->cend()); }
1135
+
1090
1136
  #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1091
1137
 
1138
+ //! <b>Returns</b>: Returns true if there is an element with key
1139
+ //! equivalent to key in the container, otherwise false.
1140
+ //!
1141
+ //! <b>Complexity</b>: log(size()).
1142
+ bool contains(const key_type& x) const;
1143
+
1144
+ //! <b>Requires</b>: This overload is available only if
1145
+ //! key_compare::is_transparent exists.
1146
+ //!
1147
+ //! <b>Returns</b>: Returns true if there is an element with key
1148
+ //! equivalent to key in the container, otherwise false.
1149
+ //!
1150
+ //! <b>Complexity</b>: log(size()).
1151
+ template<typename K>
1152
+ bool contains(const K& x) const;
1153
+
1092
1154
  //! <b>Returns</b>: An iterator pointing to the first element with key not less
1093
1155
  //! than k, or a.end() if such an element is not found.
1094
1156
  //!
@@ -1101,6 +1163,26 @@ class map
1101
1163
  //! <b>Complexity</b>: Logarithmic
1102
1164
  const_iterator lower_bound(const key_type& x) const;
1103
1165
 
1166
+ //! <b>Requires</b>: This overload is available only if
1167
+ //! key_compare::is_transparent exists.
1168
+ //!
1169
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
1170
+ //! than k, or a.end() if such an element is not found.
1171
+ //!
1172
+ //! <b>Complexity</b>: Logarithmic
1173
+ template<typename K>
1174
+ iterator lower_bound(const K& x);
1175
+
1176
+ //! <b>Requires</b>: This overload is available only if
1177
+ //! key_compare::is_transparent exists.
1178
+ //!
1179
+ //! <b>Returns</b>: A const iterator pointing to the first element with key not
1180
+ //! less than k, or a.end() if such an element is not found.
1181
+ //!
1182
+ //! <b>Complexity</b>: Logarithmic
1183
+ template<typename K>
1184
+ const_iterator lower_bound(const K& x) const;
1185
+
1104
1186
  //! <b>Returns</b>: An iterator pointing to the first element with key not less
1105
1187
  //! than x, or end() if such an element is not found.
1106
1188
  //!
@@ -1113,6 +1195,26 @@ class map
1113
1195
  //! <b>Complexity</b>: Logarithmic
1114
1196
  const_iterator upper_bound(const key_type& x) const;
1115
1197
 
1198
+ //! <b>Requires</b>: This overload is available only if
1199
+ //! key_compare::is_transparent exists.
1200
+ //!
1201
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
1202
+ //! than x, or end() if such an element is not found.
1203
+ //!
1204
+ //! <b>Complexity</b>: Logarithmic
1205
+ template<typename K>
1206
+ iterator upper_bound(const K& x);
1207
+
1208
+ //! <b>Requires</b>: This overload is available only if
1209
+ //! key_compare::is_transparent exists.
1210
+ //!
1211
+ //! <b>Returns</b>: A const iterator pointing to the first element with key not
1212
+ //! less than x, or end() if such an element is not found.
1213
+ //!
1214
+ //! <b>Complexity</b>: Logarithmic
1215
+ template<typename K>
1216
+ const_iterator upper_bound(const K& x) const;
1217
+
1116
1218
  //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
1117
1219
  //!
1118
1220
  //! <b>Complexity</b>: Logarithmic
@@ -1123,6 +1225,24 @@ class map
1123
1225
  //! <b>Complexity</b>: Logarithmic
1124
1226
  std::pair<const_iterator,const_iterator> equal_range(const key_type& x) const;
1125
1227
 
1228
+ //! <b>Requires</b>: This overload is available only if
1229
+ //! key_compare::is_transparent exists.
1230
+ //!
1231
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
1232
+ //!
1233
+ //! <b>Complexity</b>: Logarithmic
1234
+ template<typename K>
1235
+ std::pair<iterator,iterator> equal_range(const K& x);
1236
+
1237
+ //! <b>Requires</b>: This overload is available only if
1238
+ //! key_compare::is_transparent exists.
1239
+ //!
1240
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
1241
+ //!
1242
+ //! <b>Complexity</b>: Logarithmic
1243
+ template<typename K>
1244
+ std::pair<const_iterator,const_iterator> equal_range(const K& x) const;
1245
+
1126
1246
  //! <b>Effects</b>: Rebalances the tree. It's a no-op for Red-Black and AVL trees.
1127
1247
  //!
1128
1248
  //! <b>Complexity</b>: Linear
@@ -1175,6 +1295,70 @@ class map
1175
1295
  #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1176
1296
  };
1177
1297
 
1298
+ #ifndef BOOST_CONTAINER_NO_CXX17_CTAD
1299
+
1300
+ template <typename InputIterator>
1301
+ map(InputIterator, InputIterator) ->
1302
+ map< it_based_non_const_first_type_t<InputIterator>
1303
+ , it_based_second_type_t<InputIterator>>;
1304
+
1305
+ template < typename InputIterator, typename AllocatorOrCompare>
1306
+ map(InputIterator, InputIterator, AllocatorOrCompare const&) ->
1307
+ map< it_based_non_const_first_type_t<InputIterator>
1308
+ , it_based_second_type_t<InputIterator>
1309
+ , typename dtl::if_c< // Compare
1310
+ dtl::is_allocator<AllocatorOrCompare>::value
1311
+ , std::less<it_based_non_const_first_type_t<InputIterator>>
1312
+ , AllocatorOrCompare
1313
+ >::type
1314
+ , typename dtl::if_c< // Allocator
1315
+ dtl::is_allocator<AllocatorOrCompare>::value
1316
+ , AllocatorOrCompare
1317
+ , new_allocator<std::pair<it_based_const_first_type_t<InputIterator>, it_based_second_type_t<InputIterator>>>
1318
+ >::type
1319
+ >;
1320
+
1321
+ template < typename InputIterator, typename Compare, typename Allocator
1322
+ , typename = dtl::require_nonallocator_t<Compare>
1323
+ , typename = dtl::require_allocator_t<Allocator>>
1324
+ map(InputIterator, InputIterator, Compare const&, Allocator const&) ->
1325
+ map< it_based_non_const_first_type_t<InputIterator>
1326
+ , it_based_second_type_t<InputIterator>
1327
+ , Compare
1328
+ , Allocator>;
1329
+
1330
+ template <typename InputIterator>
1331
+ map(ordered_unique_range_t, InputIterator, InputIterator) ->
1332
+ map< it_based_non_const_first_type_t<InputIterator>
1333
+ , it_based_second_type_t<InputIterator>>;
1334
+
1335
+ template < typename InputIterator, typename AllocatorOrCompare>
1336
+ map(ordered_unique_range_t, InputIterator, InputIterator, AllocatorOrCompare const&) ->
1337
+ map< it_based_non_const_first_type_t<InputIterator>
1338
+ , it_based_second_type_t<InputIterator>
1339
+ , typename dtl::if_c< // Compare
1340
+ dtl::is_allocator<AllocatorOrCompare>::value
1341
+ , std::less<it_based_non_const_first_type_t<InputIterator>>
1342
+ , AllocatorOrCompare
1343
+ >::type
1344
+ , typename dtl::if_c< // Allocator
1345
+ dtl::is_allocator<AllocatorOrCompare>::value
1346
+ , AllocatorOrCompare
1347
+ , new_allocator<std::pair<it_based_const_first_type_t<InputIterator>, it_based_second_type_t<InputIterator>>>
1348
+ >::type
1349
+ >;
1350
+
1351
+ template < typename InputIterator, typename Compare, typename Allocator
1352
+ , typename = dtl::require_nonallocator_t<Compare>
1353
+ , typename = dtl::require_allocator_t<Allocator>>
1354
+ map(ordered_unique_range_t, InputIterator, InputIterator, Compare const&, Allocator const&) ->
1355
+ map< it_based_non_const_first_type_t<InputIterator>
1356
+ , it_based_second_type_t<InputIterator>
1357
+ , Compare
1358
+ , Allocator>;
1359
+
1360
+ #endif
1361
+
1178
1362
 
1179
1363
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1180
1364
 
@@ -1394,6 +1578,20 @@ class multimap
1394
1578
  : base_t(ordered_range, first, last, comp, a)
1395
1579
  {}
1396
1580
 
1581
+ //! <b>Effects</b>: Constructs an empty multimap using the specified allocator and
1582
+ //! inserts elements from the ordered range [first ,last). This function
1583
+ //! is more efficient than the normal range creation for ordered ranges.
1584
+ //!
1585
+ //! <b>Requires</b>: [first ,last) must be ordered according to the predicate.
1586
+ //!
1587
+ //! <b>Complexity</b>: Linear in N.
1588
+ //!
1589
+ //! <b>Note</b>: Non-standard extension.
1590
+ template <class InputIterator>
1591
+ BOOST_CONTAINER_FORCEINLINE multimap(ordered_range_t, InputIterator first, InputIterator last, const allocator_type& a)
1592
+ : base_t(ordered_range, first, last, Compare(), a)
1593
+ {}
1594
+
1397
1595
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
1398
1596
  //! <b>Effects</b>: Constructs an empty multimap and
1399
1597
  //! and inserts elements from the range [il.begin(), il.end()).
@@ -1841,11 +2039,56 @@ class multimap
1841
2039
  //! <b>Complexity</b>: Logarithmic.
1842
2040
  const_iterator find(const key_type& x) const;
1843
2041
 
2042
+ //! <b>Requires</b>: This overload is available only if
2043
+ //! key_compare::is_transparent exists.
2044
+ //!
2045
+ //! <b>Returns</b>: An iterator pointing to an element with the key
2046
+ //! equivalent to x, or end() if such an element is not found.
2047
+ //!
2048
+ //! <b>Complexity</b>: Logarithmic.
2049
+ template<typename K>
2050
+ iterator find(const K& x);
2051
+
2052
+ //! <b>Requires</b>: This overload is available only if
2053
+ //! key_compare::is_transparent exists.
2054
+ //!
2055
+ //! <b>Returns</b>: A const_iterator pointing to an element with the key
2056
+ //! equivalent to x, or end() if such an element is not found.
2057
+ //!
2058
+ //! <b>Complexity</b>: Logarithmic.
2059
+ template<typename K>
2060
+ const_iterator find(const K& x) const;
2061
+
1844
2062
  //! <b>Returns</b>: The number of elements with key equivalent to x.
1845
2063
  //!
1846
2064
  //! <b>Complexity</b>: log(size())+count(k)
1847
2065
  size_type count(const key_type& x) const;
1848
2066
 
2067
+ //! <b>Requires</b>: This overload is available only if
2068
+ //! key_compare::is_transparent exists.
2069
+ //!
2070
+ //! <b>Returns</b>: The number of elements with key equivalent to x.
2071
+ //!
2072
+ //! <b>Complexity</b>: log(size())+count(k)
2073
+ template<typename K>
2074
+ size_type count(const K& x) const;
2075
+
2076
+ //! <b>Returns</b>: Returns true if there is an element with key
2077
+ //! equivalent to key in the container, otherwise false.
2078
+ //!
2079
+ //! <b>Complexity</b>: log(size()).
2080
+ bool contains(const key_type& x) const;
2081
+
2082
+ //! <b>Requires</b>: This overload is available only if
2083
+ //! key_compare::is_transparent exists.
2084
+ //!
2085
+ //! <b>Returns</b>: Returns true if there is an element with key
2086
+ //! equivalent to key in the container, otherwise false.
2087
+ //!
2088
+ //! <b>Complexity</b>: log(size()).
2089
+ template<typename K>
2090
+ bool contains(const K& x) const;
2091
+
1849
2092
  //! <b>Returns</b>: An iterator pointing to the first element with key not less
1850
2093
  //! than k, or a.end() if such an element is not found.
1851
2094
  //!
@@ -1858,6 +2101,26 @@ class multimap
1858
2101
  //! <b>Complexity</b>: Logarithmic
1859
2102
  const_iterator lower_bound(const key_type& x) const;
1860
2103
 
2104
+ //! <b>Requires</b>: This overload is available only if
2105
+ //! key_compare::is_transparent exists.
2106
+ //!
2107
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
2108
+ //! than k, or a.end() if such an element is not found.
2109
+ //!
2110
+ //! <b>Complexity</b>: Logarithmic
2111
+ template<typename K>
2112
+ iterator lower_bound(const K& x);
2113
+
2114
+ //! <b>Requires</b>: This overload is available only if
2115
+ //! key_compare::is_transparent exists.
2116
+ //!
2117
+ //! <b>Returns</b>: A const iterator pointing to the first element with key not
2118
+ //! less than k, or a.end() if such an element is not found.
2119
+ //!
2120
+ //! <b>Complexity</b>: Logarithmic
2121
+ template<typename K>
2122
+ const_iterator lower_bound(const K& x) const;
2123
+
1861
2124
  //! <b>Returns</b>: An iterator pointing to the first element with key not less
1862
2125
  //! than x, or end() if such an element is not found.
1863
2126
  //!
@@ -1870,6 +2133,26 @@ class multimap
1870
2133
  //! <b>Complexity</b>: Logarithmic
1871
2134
  const_iterator upper_bound(const key_type& x) const;
1872
2135
 
2136
+ //! <b>Requires</b>: This overload is available only if
2137
+ //! key_compare::is_transparent exists.
2138
+ //!
2139
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
2140
+ //! than x, or end() if such an element is not found.
2141
+ //!
2142
+ //! <b>Complexity</b>: Logarithmic
2143
+ template<typename K>
2144
+ iterator upper_bound(const K& x);
2145
+
2146
+ //! <b>Requires</b>: This overload is available only if
2147
+ //! key_compare::is_transparent exists.
2148
+ //!
2149
+ //! <b>Returns</b>: A const iterator pointing to the first element with key not
2150
+ //! less than x, or end() if such an element is not found.
2151
+ //!
2152
+ //! <b>Complexity</b>: Logarithmic
2153
+ template<typename K>
2154
+ const_iterator upper_bound(const K& x) const;
2155
+
1873
2156
  //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
1874
2157
  //!
1875
2158
  //! <b>Complexity</b>: Logarithmic
@@ -1880,6 +2163,24 @@ class multimap
1880
2163
  //! <b>Complexity</b>: Logarithmic
1881
2164
  std::pair<const_iterator,const_iterator> equal_range(const key_type& x) const;
1882
2165
 
2166
+ //! <b>Requires</b>: This overload is available only if
2167
+ //! key_compare::is_transparent exists.
2168
+ //!
2169
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
2170
+ //!
2171
+ //! <b>Complexity</b>: Logarithmic
2172
+ template<typename K>
2173
+ std::pair<iterator,iterator> equal_range(const K& x);
2174
+
2175
+ //! <b>Requires</b>: This overload is available only if
2176
+ //! key_compare::is_transparent exists.
2177
+ //!
2178
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
2179
+ //!
2180
+ //! <b>Complexity</b>: Logarithmic
2181
+ template<typename K>
2182
+ std::pair<const_iterator,const_iterator> equal_range(const K& x) const;
2183
+
1883
2184
  //! <b>Effects</b>: Rebalances the tree. It's a no-op for Red-Black and AVL trees.
1884
2185
  //!
1885
2186
  //! <b>Complexity</b>: Linear
@@ -1923,6 +2224,69 @@ class multimap
1923
2224
  #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1924
2225
  };
1925
2226
 
2227
+ #ifndef BOOST_CONTAINER_NO_CXX17_CTAD
2228
+
2229
+ template <typename InputIterator>
2230
+ multimap(InputIterator, InputIterator) ->
2231
+ multimap< it_based_non_const_first_type_t<InputIterator>
2232
+ , it_based_second_type_t<InputIterator>>;
2233
+
2234
+ template < typename InputIterator, typename AllocatorOrCompare>
2235
+ multimap(InputIterator, InputIterator, AllocatorOrCompare const&) ->
2236
+ multimap< it_based_non_const_first_type_t<InputIterator>
2237
+ , it_based_second_type_t<InputIterator>
2238
+ , typename dtl::if_c< // Compare
2239
+ dtl::is_allocator<AllocatorOrCompare>::value
2240
+ , std::less<it_based_non_const_first_type_t<InputIterator>>
2241
+ , AllocatorOrCompare
2242
+ >::type
2243
+ , typename dtl::if_c< // Allocator
2244
+ dtl::is_allocator<AllocatorOrCompare>::value
2245
+ , AllocatorOrCompare
2246
+ , new_allocator<std::pair<it_based_const_first_type_t<InputIterator>, it_based_second_type_t<InputIterator>>>
2247
+ >::type
2248
+ >;
2249
+
2250
+ template < typename InputIterator, typename Compare, typename Allocator
2251
+ , typename = dtl::require_nonallocator_t<Compare>
2252
+ , typename = dtl::require_allocator_t<Allocator>>
2253
+ multimap(InputIterator, InputIterator, Compare const&, Allocator const&) ->
2254
+ multimap< it_based_non_const_first_type_t<InputIterator>
2255
+ , it_based_second_type_t<InputIterator>
2256
+ , Compare
2257
+ , Allocator>;
2258
+
2259
+ template <typename InputIterator>
2260
+ multimap(ordered_range_t, InputIterator, InputIterator) ->
2261
+ multimap< it_based_non_const_first_type_t<InputIterator>
2262
+ , it_based_second_type_t<InputIterator>>;
2263
+
2264
+ template < typename InputIterator, typename AllocatorOrCompare>
2265
+ multimap(ordered_range_t, InputIterator, InputIterator, AllocatorOrCompare const&) ->
2266
+ multimap< it_based_non_const_first_type_t<InputIterator>
2267
+ , it_based_second_type_t<InputIterator>
2268
+ , typename dtl::if_c< // Compare
2269
+ dtl::is_allocator<AllocatorOrCompare>::value
2270
+ , std::less<it_based_const_first_type_t<InputIterator>>
2271
+ , AllocatorOrCompare
2272
+ >::type
2273
+ , typename dtl::if_c< // Allocator
2274
+ dtl::is_allocator<AllocatorOrCompare>::value
2275
+ , AllocatorOrCompare
2276
+ , new_allocator<std::pair<it_based_const_first_type_t<InputIterator>, it_based_second_type_t<InputIterator>>>
2277
+ >::type
2278
+ >;
2279
+
2280
+ template < typename InputIterator, typename Compare, typename Allocator
2281
+ , typename = dtl::require_nonallocator_t<Compare>
2282
+ , typename = dtl::require_allocator_t<Allocator>>
2283
+ multimap(ordered_range_t, InputIterator, InputIterator, Compare const&, Allocator const&) ->
2284
+ multimap< it_based_non_const_first_type_t<InputIterator>
2285
+ , it_based_second_type_t<InputIterator>
2286
+ , Compare
2287
+ , Allocator>;
2288
+ #endif
2289
+
1926
2290
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1927
2291
 
1928
2292
  } //namespace container {