passenger 6.0.0 → 6.0.5

Sign up to get free protection for your applications and to get access to all the features.
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;