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
@@ -125,8 +125,16 @@ struct insert_value_initialized_n_proxy
125
125
  void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const
126
126
  { boost::container::uninitialized_value_init_alloc_n(a, n, p); }
127
127
 
128
- void copy_n_and_update(Allocator &, Iterator, size_type) const
129
- { BOOST_ASSERT(false); }
128
+ void copy_n_and_update(Allocator &a, Iterator p, size_type n) const
129
+ {
130
+ for (; 0 < n; --n, ++p){
131
+ typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;
132
+ value_type *vp = reinterpret_cast<value_type *>(v.data);
133
+ alloc_traits::construct(a, vp);
134
+ value_destructor<Allocator> on_exit(a, *vp); (void)on_exit;
135
+ *p = ::boost::move(*vp);
136
+ }
137
+ }
130
138
  };
131
139
 
132
140
  template<class Allocator, class Iterator>
@@ -139,8 +147,18 @@ struct insert_default_initialized_n_proxy
139
147
  void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const
140
148
  { boost::container::uninitialized_default_init_alloc_n(a, n, p); }
141
149
 
142
- void copy_n_and_update(Allocator &, Iterator, size_type) const
143
- { BOOST_ASSERT(false); }
150
+ void copy_n_and_update(Allocator &a, Iterator p, size_type n) const
151
+ {
152
+ if(!is_pod<value_type>::value){
153
+ for (; 0 < n; --n, ++p){
154
+ typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;
155
+ value_type *vp = reinterpret_cast<value_type *>(v.data);
156
+ alloc_traits::construct(a, vp, default_init);
157
+ value_destructor<Allocator> on_exit(a, *vp); (void)on_exit;
158
+ *p = ::boost::move(*vp);
159
+ }
160
+ }
161
+ }
144
162
  };
145
163
 
146
164
  template<class Allocator, class Iterator>
@@ -271,7 +289,7 @@ struct insert_emplace_proxy
271
289
  {
272
290
  BOOST_ASSERT(n ==1); (void)n;
273
291
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;
274
- value_type *vp = static_cast<value_type *>(static_cast<void *>(v.data));
292
+ value_type *vp = reinterpret_cast<value_type *>(v.data);
275
293
  alloc_traits::construct(a, vp,
276
294
  ::boost::forward<Args>(get<IdxPack>(this->args_))...);
277
295
  BOOST_TRY{
@@ -382,7 +400,7 @@ struct insert_emplace_proxy_arg##N\
382
400
  BOOST_ASSERT(n == 1); (void)n;\
383
401
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;\
384
402
  BOOST_ASSERT((((size_type)(&v)) % alignment_of<value_type>::value) == 0);\
385
- value_type *vp = static_cast<value_type *>(static_cast<void *>(v.data));\
403
+ value_type *vp = reinterpret_cast<value_type *>(v.data);\
386
404
  alloc_traits::construct(a, vp BOOST_MOVE_I##N BOOST_MOVE_MFWD##N);\
387
405
  BOOST_TRY{\
388
406
  *p = ::boost::move(*vp);\
@@ -93,7 +93,8 @@ struct allocator_version_traits
93
93
  {
94
94
  size_type n = holder.size();
95
95
  typename multiallocation_chain::iterator it = holder.begin();
96
- while(n--){
96
+ while(n){
97
+ --n;
97
98
  pointer p = boost::intrusive::pointer_traits<pointer>::pointer_to(*it);
98
99
  ++it;
99
100
  a.deallocate(p, 1);
@@ -19,6 +19,8 @@
19
19
  # pragma once
20
20
  #endif
21
21
 
22
+ #include <boost/intrusive/detail/ebo_functor_holder.hpp>
23
+
22
24
  namespace boost {
23
25
  namespace container {
24
26
 
@@ -37,7 +39,7 @@ class equal_to_value
37
39
  { return t_ == t; }
38
40
  };
39
41
 
40
- template<class Node, class Pred>
42
+ template<class Node, class Pred, class Ret = bool>
41
43
  struct value_to_node_compare
42
44
  : Pred
43
45
  {
@@ -52,22 +54,76 @@ struct value_to_node_compare
52
54
  : Pred(pred)
53
55
  {}
54
56
 
55
- bool operator()(const Node &a, const Node &b) const
57
+ Ret operator()(const Node &a, const Node &b) const
56
58
  { return static_cast<const Pred&>(*this)(a.get_data(), b.get_data()); }
57
59
 
58
- bool operator()(const Node &a) const
60
+ Ret operator()(const Node &a) const
59
61
  { return static_cast<const Pred&>(*this)(a.get_data()); }
60
62
 
61
- bool operator()(const Node &a, const Node &b)
63
+ Ret operator()(const Node &a, const Node &b)
62
64
  { return static_cast<Pred&>(*this)(a.get_data(), b.get_data()); }
63
65
 
64
- bool operator()(const Node &a)
66
+ Ret operator()(const Node &a)
65
67
  { return static_cast<Pred&>(*this)(a.get_data()); }
66
68
 
67
69
  predicate_type & predicate() { return static_cast<predicate_type&>(*this); }
68
70
  const predicate_type & predicate() const { return static_cast<predicate_type&>(*this); }
69
71
  };
70
72
 
73
+ template<class KeyPred, class KeyOfValue, class Node, class Ret = bool>
74
+ struct key_node_pred
75
+ : public boost::intrusive::detail::ebo_functor_holder<KeyPred>
76
+ {
77
+ BOOST_CONTAINER_FORCEINLINE explicit key_node_pred(const KeyPred &comp)
78
+ : base_t(comp)
79
+ {}
80
+
81
+ typedef boost::intrusive::detail::ebo_functor_holder<KeyPred> base_t;
82
+ typedef KeyPred key_predicate;
83
+ typedef KeyOfValue key_of_value;
84
+ typedef typename KeyOfValue::type key_type;
85
+
86
+
87
+ BOOST_CONTAINER_FORCEINLINE static const key_type &key_from(const Node &n)
88
+ {
89
+ return key_of_value()(n.get_data());
90
+ }
91
+
92
+ template <class T>
93
+ BOOST_CONTAINER_FORCEINLINE static const T &
94
+ key_from(const T &t)
95
+ { return t; }
96
+
97
+ BOOST_CONTAINER_FORCEINLINE const key_predicate &key_pred() const
98
+ { return static_cast<const key_predicate &>(*this); }
99
+
100
+ BOOST_CONTAINER_FORCEINLINE key_predicate &key_pred()
101
+ { return static_cast<key_predicate &>(*this); }
102
+
103
+ BOOST_CONTAINER_FORCEINLINE Ret operator()(const key_type &key) const
104
+ { return this->key_pred()(key); }
105
+
106
+ template<class U>
107
+ BOOST_CONTAINER_FORCEINLINE Ret operator()(const U &nonkey) const
108
+ { return this->key_pred()(this->key_from(nonkey)); }
109
+
110
+ BOOST_CONTAINER_FORCEINLINE bool operator()(const key_type &key1, const key_type &key2) const
111
+ { return this->key_pred()(key1, key2); }
112
+
113
+ template<class U>
114
+ BOOST_CONTAINER_FORCEINLINE bool operator()(const key_type &key1, const U &nonkey2) const
115
+ { return this->key_pred()(key1, this->key_from(nonkey2)); }
116
+
117
+ template<class U>
118
+ BOOST_CONTAINER_FORCEINLINE bool operator()(const U &nonkey1, const key_type &key2) const
119
+ { return this->key_pred()(this->key_from(nonkey1), key2); }
120
+
121
+ template<class U, class V>
122
+ BOOST_CONTAINER_FORCEINLINE bool operator()(const U &nonkey1, const V &nonkey2) const
123
+ { return this->key_pred()(this->key_from(nonkey1), this->key_from(nonkey2)); }
124
+ };
125
+
126
+
71
127
  } //namespace container {
72
128
  } //namespace boost {
73
129
 
@@ -34,7 +34,21 @@
34
34
  // other
35
35
  #include <boost/core/no_exceptions_support.hpp>
36
36
  // std
37
- #include <cstring> //for emmove/memcpy
37
+ #include <cstring> //for memmove/memcpy
38
+
39
+ #if defined(BOOST_GCC) && (BOOST_GCC >= 40600)
40
+ #pragma GCC diagnostic push
41
+ //pair memcpy optimizations rightfully detected by GCC
42
+ # if defined(BOOST_GCC) && (BOOST_GCC >= 80000)
43
+ # pragma GCC diagnostic ignored "-Wclass-memaccess"
44
+ # endif
45
+ //GCC 8 seems a bit confused about array access error with static_vector
46
+ //when out of bound exceptions are being thrown.
47
+ # if defined(BOOST_GCC) && (BOOST_GCC >= 80000) && (BOOST_GCC < 80200)
48
+ # pragma GCC diagnostic ignored "-Wstringop-overflow"
49
+ # endif
50
+ # pragma GCC diagnostic ignored "-Warray-bounds"
51
+ #endif
38
52
 
39
53
  namespace boost {
40
54
  namespace container {
@@ -160,9 +174,13 @@ template
160
174
  inline F memmove(I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW
161
175
  {
162
176
  typedef typename boost::container::iterator_traits<I>::value_type value_type;
163
- typename boost::container::iterator_traits<I>::difference_type n = boost::container::iterator_distance(f, l);
164
- if(n){
165
- std::memmove(boost::movelib::iterator_to_raw_pointer(r), boost::movelib::iterator_to_raw_pointer(f), sizeof(value_type)*n);
177
+ value_type *const dest_raw = boost::movelib::iterator_to_raw_pointer(r);
178
+ const value_type *const beg_raw = boost::movelib::iterator_to_raw_pointer(f);
179
+ const value_type *const end_raw = boost::movelib::iterator_to_raw_pointer(l);
180
+ if(BOOST_LIKELY(beg_raw != end_raw)){
181
+ BOOST_ASSERT(beg_raw != 0);
182
+ const typename boost::container::iterator_traits<I>::difference_type n = end_raw - beg_raw;
183
+ std::memmove(dest_raw, beg_raw, sizeof(value_type)*n);
166
184
  boost::container::iterator_advance(r, n);
167
185
  }
168
186
  return r;
@@ -175,10 +193,11 @@ template
175
193
  F memmove_n(I f, U n, F r) BOOST_NOEXCEPT_OR_NOTHROW
176
194
  {
177
195
  typedef typename boost::container::iterator_traits<I>::value_type value_type;
178
- if(n){
196
+ if(BOOST_LIKELY(n)){
179
197
  std::memmove(boost::movelib::iterator_to_raw_pointer(r), boost::movelib::iterator_to_raw_pointer(f), sizeof(value_type)*n);
180
198
  boost::container::iterator_advance(r, n);
181
199
  }
200
+
182
201
  return r;
183
202
  }
184
203
 
@@ -188,7 +207,7 @@ template
188
207
  typename F> // F models ForwardIterator
189
208
  I memmove_n_source(I f, U n, F r) BOOST_NOEXCEPT_OR_NOTHROW
190
209
  {
191
- if(n){
210
+ if(BOOST_LIKELY(n)){
192
211
  typedef typename boost::container::iterator_traits<I>::value_type value_type;
193
212
  std::memmove(boost::movelib::iterator_to_raw_pointer(r), boost::movelib::iterator_to_raw_pointer(f), sizeof(value_type)*n);
194
213
  boost::container::iterator_advance(f, n);
@@ -203,7 +222,7 @@ template
203
222
  I memmove_n_source_dest(I f, U n, F &r) BOOST_NOEXCEPT_OR_NOTHROW
204
223
  {
205
224
  typedef typename boost::container::iterator_traits<I>::value_type value_type;
206
- if(n){
225
+ if(BOOST_LIKELY(n)){
207
226
  std::memmove(boost::movelib::iterator_to_raw_pointer(r), boost::movelib::iterator_to_raw_pointer(f), sizeof(value_type)*n);
208
227
  boost::container::iterator_advance(f, n);
209
228
  boost::container::iterator_advance(r, n);
@@ -720,7 +739,8 @@ typename F> // F models ForwardIterator
720
739
  inline typename dtl::disable_if_memtransfer_copy_assignable<I, F, F>::type
721
740
  copy_n(I f, U n, F r)
722
741
  {
723
- while (n--) {
742
+ while (n) {
743
+ --n;
724
744
  *r = *f;
725
745
  ++f; ++r;
726
746
  }
@@ -1141,4 +1161,9 @@ void move_assign_range_alloc_n( Allocator &a, I inp_start, typename allocator_tr
1141
1161
  } //namespace container {
1142
1162
  } //namespace boost {
1143
1163
 
1164
+ //#pragma GCC diagnostic ignored "-Wclass-memaccess"
1165
+ #if defined(BOOST_GCC) && (BOOST_GCC >= 40600)
1166
+ #pragma GCC diagnostic pop
1167
+ #endif
1168
+
1144
1169
  #endif //#ifndef BOOST_CONTAINER_DETAIL_COPY_MOVE_ALGO_HPP
@@ -921,11 +921,11 @@ class flat_tree
921
921
  std::pair<iterator, bool> emplace_unique(BOOST_FWD_REF(Args)... args)
922
922
  {
923
923
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;
924
- value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));
924
+ value_type *pval = reinterpret_cast<value_type *>(v.data);
925
925
  get_stored_allocator_noconst_return_t a = this->get_stored_allocator();
926
- stored_allocator_traits::construct(a, &val, ::boost::forward<Args>(args)... );
927
- value_destructor<stored_allocator_type, value_type> d(a, val);
928
- return this->insert_unique(::boost::move(val));
926
+ stored_allocator_traits::construct(a, pval, ::boost::forward<Args>(args)... );
927
+ value_destructor<stored_allocator_type, value_type> d(a, *pval);
928
+ return this->insert_unique(::boost::move(*pval));
929
929
  }
930
930
 
931
931
  template <class... Args>
@@ -933,22 +933,22 @@ class flat_tree
933
933
  {
934
934
  //hint checked in insert_unique
935
935
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;
936
- value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));
936
+ value_type *pval = reinterpret_cast<value_type *>(v.data);
937
937
  get_stored_allocator_noconst_return_t a = this->get_stored_allocator();
938
- stored_allocator_traits::construct(a, &val, ::boost::forward<Args>(args)... );
939
- value_destructor<stored_allocator_type, value_type> d(a, val);
940
- return this->insert_unique(hint, ::boost::move(val));
938
+ stored_allocator_traits::construct(a, pval, ::boost::forward<Args>(args)... );
939
+ value_destructor<stored_allocator_type, value_type> d(a, *pval);
940
+ return this->insert_unique(hint, ::boost::move(*pval));
941
941
  }
942
942
 
943
943
  template <class... Args>
944
944
  iterator emplace_equal(BOOST_FWD_REF(Args)... args)
945
945
  {
946
946
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;
947
- value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));
947
+ value_type *pval = reinterpret_cast<value_type *>(v.data);
948
948
  get_stored_allocator_noconst_return_t a = this->get_stored_allocator();
949
- stored_allocator_traits::construct(a, &val, ::boost::forward<Args>(args)... );
950
- value_destructor<stored_allocator_type, value_type> d(a, val);
951
- return this->insert_equal(::boost::move(val));
949
+ stored_allocator_traits::construct(a, pval, ::boost::forward<Args>(args)... );
950
+ value_destructor<stored_allocator_type, value_type> d(a, *pval);
951
+ return this->insert_equal(::boost::move(*pval));
952
952
  }
953
953
 
954
954
  template <class... Args>
@@ -956,11 +956,11 @@ class flat_tree
956
956
  {
957
957
  //hint checked in insert_equal
958
958
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;
959
- value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));
959
+ value_type *pval = reinterpret_cast<value_type *>(v.data);
960
960
  get_stored_allocator_noconst_return_t a = this->get_stored_allocator();
961
- stored_allocator_traits::construct(a, &val, ::boost::forward<Args>(args)... );
962
- value_destructor<stored_allocator_type, value_type> d(a, val);
963
- return this->insert_equal(hint, ::boost::move(val));
961
+ stored_allocator_traits::construct(a, pval, ::boost::forward<Args>(args)... );
962
+ value_destructor<stored_allocator_type, value_type> d(a, *pval);
963
+ return this->insert_equal(hint, ::boost::move(*pval));
964
964
  }
965
965
 
966
966
  template <class KeyType, class... Args>
@@ -993,44 +993,44 @@ class flat_tree
993
993
  std::pair<iterator, bool> emplace_unique(BOOST_MOVE_UREF##N)\
994
994
  {\
995
995
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;\
996
- value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));\
996
+ value_type *pval = reinterpret_cast<value_type *>(v.data);\
997
997
  get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\
998
- stored_allocator_traits::construct(a, &val BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
999
- value_destructor<stored_allocator_type, value_type> d(a, val);\
1000
- return this->insert_unique(::boost::move(val));\
998
+ stored_allocator_traits::construct(a, pval BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
999
+ value_destructor<stored_allocator_type, value_type> d(a, *pval);\
1000
+ return this->insert_unique(::boost::move(*pval));\
1001
1001
  }\
1002
1002
  \
1003
1003
  BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
1004
1004
  iterator emplace_hint_unique(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
1005
1005
  {\
1006
1006
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;\
1007
- value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));\
1007
+ value_type *pval = reinterpret_cast<value_type *>(v.data);\
1008
1008
  get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\
1009
- stored_allocator_traits::construct(a, &val BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1010
- value_destructor<stored_allocator_type, value_type> d(a, val);\
1011
- return this->insert_unique(hint, ::boost::move(val));\
1009
+ stored_allocator_traits::construct(a, pval BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1010
+ value_destructor<stored_allocator_type, value_type> d(a, *pval);\
1011
+ return this->insert_unique(hint, ::boost::move(*pval));\
1012
1012
  }\
1013
1013
  \
1014
1014
  BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
1015
1015
  iterator emplace_equal(BOOST_MOVE_UREF##N)\
1016
1016
  {\
1017
1017
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;\
1018
- value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));\
1018
+ value_type *pval = reinterpret_cast<value_type *>(v.data);\
1019
1019
  get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\
1020
- stored_allocator_traits::construct(a, &val BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1021
- value_destructor<stored_allocator_type, value_type> d(a, val);\
1022
- return this->insert_equal(::boost::move(val));\
1020
+ stored_allocator_traits::construct(a, pval BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1021
+ value_destructor<stored_allocator_type, value_type> d(a, *pval);\
1022
+ return this->insert_equal(::boost::move(*pval));\
1023
1023
  }\
1024
1024
  \
1025
1025
  BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
1026
1026
  iterator emplace_hint_equal(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
1027
1027
  {\
1028
1028
  typename aligned_storage <sizeof(value_type), alignment_of<value_type>::value>::type v;\
1029
- value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));\
1029
+ value_type *pval = reinterpret_cast<value_type *>(v.data);\
1030
1030
  get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\
1031
- stored_allocator_traits::construct(a, &val BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1032
- value_destructor<stored_allocator_type, value_type> d(a, val);\
1033
- return this->insert_equal(hint, ::boost::move(val));\
1031
+ stored_allocator_traits::construct(a, pval BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1032
+ value_destructor<stored_allocator_type, value_type> d(a, *pval);\
1033
+ return this->insert_equal(hint, ::boost::move(*pval));\
1034
1034
  }\
1035
1035
  template <class KeyType BOOST_MOVE_I##N BOOST_MOVE_CLASS##N>\
1036
1036
  BOOST_CONTAINER_FORCEINLINE std::pair<iterator, bool>\
@@ -1160,7 +1160,31 @@ class flat_tree
1160
1160
  return i;
1161
1161
  }
1162
1162
 
1163
- // set operations:
1163
+ template<class K>
1164
+ typename dtl::enable_if_transparent<key_compare, K, iterator>::type
1165
+ find(const K& k)
1166
+ {
1167
+ iterator i = this->lower_bound(k);
1168
+ iterator end_it = this->end();
1169
+ if (i != end_it && this->m_data.get_comp()(k, KeyOfValue()(*i))){
1170
+ i = end_it;
1171
+ }
1172
+ return i;
1173
+ }
1174
+
1175
+ template<class K>
1176
+ typename dtl::enable_if_transparent<key_compare, K, const_iterator>::type
1177
+ find(const K& k) const
1178
+ {
1179
+ const_iterator i = this->lower_bound(k);
1180
+
1181
+ const_iterator end_it = this->cend();
1182
+ if (i != end_it && this->m_data.get_comp()(k, KeyOfValue()(*i))){
1183
+ i = end_it;
1184
+ }
1185
+ return i;
1186
+ }
1187
+
1164
1188
  size_type count(const key_type& k) const
1165
1189
  {
1166
1190
  std::pair<const_iterator, const_iterator> p = this->equal_range(k);
@@ -1168,6 +1192,24 @@ class flat_tree
1168
1192
  return n;
1169
1193
  }
1170
1194
 
1195
+ template<class K>
1196
+ typename dtl::enable_if_transparent<key_compare, K, size_type>::type
1197
+ count(const K& k) const
1198
+ {
1199
+ std::pair<const_iterator, const_iterator> p = this->equal_range(k);
1200
+ size_type n = p.second - p.first;
1201
+ return n;
1202
+ }
1203
+
1204
+ BOOST_CONTAINER_FORCEINLINE bool contains(const key_type& x) const
1205
+ { return this->find(x) != this->cend(); }
1206
+
1207
+ template<typename K>
1208
+ BOOST_CONTAINER_FORCEINLINE
1209
+ typename dtl::enable_if_transparent<key_compare, K, bool>::type
1210
+ contains(const K& x) const
1211
+ { return this->find(x) != this->cend(); }
1212
+
1171
1213
  template<class C2>
1172
1214
  BOOST_CONTAINER_FORCEINLINE void merge_unique(flat_tree<Value, KeyOfValue, C2, AllocatorOrContainer>& source)
1173
1215
  {
@@ -1212,24 +1254,73 @@ class flat_tree
1212
1254
  BOOST_CONTAINER_FORCEINLINE const_iterator lower_bound(const key_type& k) const
1213
1255
  { return this->priv_lower_bound(this->cbegin(), this->cend(), k); }
1214
1256
 
1257
+ template<class K>
1258
+ BOOST_CONTAINER_FORCEINLINE
1259
+ typename dtl::enable_if_transparent<key_compare, K, iterator>::type
1260
+ lower_bound(const K& k)
1261
+ { return this->priv_lower_bound(this->begin(), this->end(), k); }
1262
+
1263
+ template<class K>
1264
+ BOOST_CONTAINER_FORCEINLINE
1265
+ typename dtl::enable_if_transparent<key_compare, K, const_iterator>::type
1266
+ lower_bound(const K& k) const
1267
+ { return this->priv_lower_bound(this->cbegin(), this->cend(), k); }
1268
+
1215
1269
  BOOST_CONTAINER_FORCEINLINE iterator upper_bound(const key_type& k)
1216
1270
  { return this->priv_upper_bound(this->begin(), this->end(), k); }
1217
1271
 
1218
1272
  BOOST_CONTAINER_FORCEINLINE const_iterator upper_bound(const key_type& k) const
1219
1273
  { return this->priv_upper_bound(this->cbegin(), this->cend(), k); }
1220
1274
 
1275
+ template<class K>
1276
+ BOOST_CONTAINER_FORCEINLINE
1277
+ typename dtl::enable_if_transparent<key_compare, K,iterator>::type
1278
+ upper_bound(const K& k)
1279
+ { return this->priv_upper_bound(this->begin(), this->end(), k); }
1280
+
1281
+ template<class K>
1282
+ BOOST_CONTAINER_FORCEINLINE
1283
+ typename dtl::enable_if_transparent<key_compare, K,const_iterator>::type
1284
+ upper_bound(const K& k) const
1285
+ { return this->priv_upper_bound(this->cbegin(), this->cend(), k); }
1286
+
1221
1287
  BOOST_CONTAINER_FORCEINLINE std::pair<iterator,iterator> equal_range(const key_type& k)
1222
1288
  { return this->priv_equal_range(this->begin(), this->end(), k); }
1223
1289
 
1224
1290
  BOOST_CONTAINER_FORCEINLINE std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const
1225
1291
  { return this->priv_equal_range(this->cbegin(), this->cend(), k); }
1226
1292
 
1293
+ template<class K>
1294
+ BOOST_CONTAINER_FORCEINLINE
1295
+ typename dtl::enable_if_transparent<key_compare, K,std::pair<iterator,iterator> >::type
1296
+ equal_range(const K& k)
1297
+ { return this->priv_equal_range(this->begin(), this->end(), k); }
1298
+
1299
+ template<class K>
1300
+ BOOST_CONTAINER_FORCEINLINE
1301
+ typename dtl::enable_if_transparent<key_compare, K,std::pair<const_iterator,const_iterator> >::type
1302
+ equal_range(const K& k) const
1303
+ { return this->priv_equal_range(this->cbegin(), this->cend(), k); }
1304
+
1305
+
1227
1306
  BOOST_CONTAINER_FORCEINLINE std::pair<iterator, iterator> lower_bound_range(const key_type& k)
1228
1307
  { return this->priv_lower_bound_range(this->begin(), this->end(), k); }
1229
1308
 
1230
1309
  BOOST_CONTAINER_FORCEINLINE std::pair<const_iterator, const_iterator> lower_bound_range(const key_type& k) const
1231
1310
  { return this->priv_lower_bound_range(this->cbegin(), this->cend(), k); }
1232
1311
 
1312
+ template<class K>
1313
+ BOOST_CONTAINER_FORCEINLINE
1314
+ typename dtl::enable_if_transparent<key_compare, K,std::pair<iterator,iterator> >::type
1315
+ lower_bound_range(const K& k)
1316
+ { return this->priv_lower_bound_range(this->begin(), this->end(), k); }
1317
+
1318
+ template<class K>
1319
+ BOOST_CONTAINER_FORCEINLINE
1320
+ typename dtl::enable_if_transparent<key_compare, K,std::pair<const_iterator,const_iterator> >::type
1321
+ lower_bound_range(const K& k) const
1322
+ { return this->priv_lower_bound_range(this->cbegin(), this->cend(), k); }
1323
+
1233
1324
  BOOST_CONTAINER_FORCEINLINE size_type capacity() const
1234
1325
  {
1235
1326
  const bool value = boost::container::dtl::
@@ -1419,9 +1510,9 @@ class flat_tree
1419
1510
  , boost::forward<Convertible>(convertible));
1420
1511
  }
1421
1512
 
1422
- template <class RanIt>
1513
+ template <class RanIt, class K>
1423
1514
  RanIt priv_lower_bound(RanIt first, const RanIt last,
1424
- const key_type & key) const
1515
+ const K & key) const
1425
1516
  {
1426
1517
  const Compare &key_cmp = this->m_data.get_comp();
1427
1518
  KeyOfValue key_extract;
@@ -1444,9 +1535,9 @@ class flat_tree
1444
1535
  return first;
1445
1536
  }
1446
1537
 
1447
- template <class RanIt>
1538
+ template <class RanIt, class K>
1448
1539
  RanIt priv_upper_bound
1449
- (RanIt first, const RanIt last,const key_type & key) const
1540
+ (RanIt first, const RanIt last,const K & key) const
1450
1541
  {
1451
1542
  const Compare &key_cmp = this->m_data.get_comp();
1452
1543
  KeyOfValue key_extract;
@@ -1469,9 +1560,9 @@ class flat_tree
1469
1560
  return first;
1470
1561
  }
1471
1562
 
1472
- template <class RanIt>
1563
+ template <class RanIt, class K>
1473
1564
  std::pair<RanIt, RanIt>
1474
- priv_equal_range(RanIt first, RanIt last, const key_type& key) const
1565
+ priv_equal_range(RanIt first, RanIt last, const K& key) const
1475
1566
  {
1476
1567
  const Compare &key_cmp = this->m_data.get_comp();
1477
1568
  KeyOfValue key_extract;
@@ -1502,8 +1593,8 @@ class flat_tree
1502
1593
  return std::pair<RanIt, RanIt>(first, first);
1503
1594
  }
1504
1595
 
1505
- template<class RanIt>
1506
- std::pair<RanIt, RanIt> priv_lower_bound_range(RanIt first, RanIt last, const key_type& k) const
1596
+ template<class RanIt, class K>
1597
+ std::pair<RanIt, RanIt> priv_lower_bound_range(RanIt first, RanIt last, const K& k) const
1507
1598
  {
1508
1599
  const Compare &key_cmp = this->m_data.get_comp();
1509
1600
  KeyOfValue key_extract;