passenger 5.1.4 → 5.1.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (542) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +9 -0
  3. data/CHANGELOG +9 -0
  4. data/build/cxx_tests.rb +11 -1
  5. data/build/documentation.rb +0 -32
  6. data/build/support/cxx_dependency_map.rb +602 -2
  7. data/build/test_basics.rb +3 -3
  8. data/dev/boost-patches/0001-Patch-boost-thread-so-that-oxt-thread-can-use-it.patch +48 -0
  9. data/dev/boost-patches/0002-Make-boost-thread_interrupted-derive-from-oxt-tracab.patch +33 -0
  10. data/dev/boost-patches/0003-Disable-a-Clang-pragma-to-prevent-warnings-on-OS-X.patch +25 -0
  11. data/dev/ci/README.md +121 -0
  12. data/dev/ci/lib/functions.sh +129 -0
  13. data/dev/ci/lib/set-container-envvars.sh +46 -0
  14. data/dev/ci/lib/setup-container.sh +43 -0
  15. data/dev/ci/run-tests-natively +24 -0
  16. data/dev/ci/run-tests-with-docker +42 -0
  17. data/dev/ci/scripts/debug-console-wrapper.sh +27 -0
  18. data/dev/ci/scripts/docker-entrypoint-stage2.sh +17 -0
  19. data/dev/ci/scripts/docker-entrypoint.sh +17 -0
  20. data/dev/ci/scripts/inituidgid +17 -0
  21. data/dev/ci/scripts/run-tests-natively-stage2.sh +17 -0
  22. data/dev/ci/scripts/setup-host-natively.sh +11 -0
  23. data/dev/ci/setup-host +50 -0
  24. data/dev/ci/tests/apache2/run +6 -0
  25. data/dev/ci/tests/apache2/setup +4 -0
  26. data/dev/ci/tests/cxx/run +9 -0
  27. data/dev/ci/tests/cxx/setup +4 -0
  28. data/dev/ci/tests/nginx-dynamic/run +20 -0
  29. data/dev/ci/tests/nginx-dynamic/setup +4 -0
  30. data/dev/ci/tests/nginx/run +5 -0
  31. data/dev/ci/tests/nginx/setup +4 -0
  32. data/dev/ci/tests/nodejs/run +4 -0
  33. data/dev/ci/tests/nodejs/setup +4 -0
  34. data/dev/ci/tests/ruby/run +4 -0
  35. data/dev/ci/tests/ruby/setup +4 -0
  36. data/dev/ci/tests/source-packaging/run +4 -0
  37. data/dev/ci/tests/source-packaging/setup +4 -0
  38. data/dev/ci/tests/standalone/run +4 -0
  39. data/dev/ci/tests/standalone/setup +4 -0
  40. data/dev/copy_boost_headers +8 -2
  41. data/src/agent/Core/ApiServer.h +11 -5
  42. data/src/agent/Core/Controller.h +12 -46
  43. data/src/agent/Core/Controller/CheckoutSession.cpp +1 -1
  44. data/src/agent/Core/Controller/Config.h +369 -0
  45. data/src/agent/Core/Controller/ForwardResponse.cpp +4 -4
  46. data/src/agent/Core/Controller/Hooks.cpp +15 -3
  47. data/src/agent/Core/Controller/Implementation.cpp +1 -1
  48. data/src/agent/Core/Controller/InitRequest.cpp +28 -39
  49. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +25 -60
  50. data/src/agent/Core/Controller/InternalUtils.cpp +0 -16
  51. data/src/agent/Core/Controller/Miscellaneous.cpp +0 -17
  52. data/src/agent/Core/Controller/Request.h +2 -0
  53. data/src/agent/Core/Controller/SendRequest.cpp +4 -4
  54. data/src/agent/Core/Controller/{StateInspectionAndConfiguration.cpp → StateInspection.cpp} +0 -22
  55. data/src/agent/Core/Controller/TurboCaching.h +11 -10
  56. data/src/agent/Core/CoreMain.cpp +16 -6
  57. data/src/agent/Core/ResponseCache.h +3 -3
  58. data/src/agent/Core/SpawningKit/SmartSpawner.h +9 -3
  59. data/src/agent/Core/SpawningKit/Spawner.h +7 -3
  60. data/src/agent/UstRouter/ApiServer.h +3 -2
  61. data/src/agent/UstRouter/Controller.h +66 -32
  62. data/src/agent/UstRouter/UstRouterMain.cpp +10 -2
  63. data/src/agent/Watchdog/ApiServer.h +3 -2
  64. data/src/agent/Watchdog/WatchdogMain.cpp +3 -1
  65. data/src/apache2_module/ConfigurationCommands.cpp +1 -1
  66. data/src/cxx_supportlib/ConfigKit/Common.h +125 -0
  67. data/src/cxx_supportlib/ConfigKit/ConfigKit.h +34 -0
  68. data/src/cxx_supportlib/ConfigKit/README.md +895 -0
  69. data/src/cxx_supportlib/ConfigKit/Schema.h +331 -0
  70. data/src/cxx_supportlib/ConfigKit/Store.h +385 -0
  71. data/src/cxx_supportlib/ConfigKit/TableTranslator.h +185 -0
  72. data/src/cxx_supportlib/ConfigKit/Utils.h +141 -0
  73. data/src/cxx_supportlib/ConfigKit/VariantMapUtils.h +81 -0
  74. data/src/cxx_supportlib/Constants.h +1 -1
  75. data/src/cxx_supportlib/Crypto.cpp +2 -2
  76. data/src/cxx_supportlib/Logging.h +0 -35
  77. data/src/cxx_supportlib/ServerKit/HttpServer.h +35 -16
  78. data/src/cxx_supportlib/ServerKit/Server.h +65 -25
  79. data/src/cxx_supportlib/oxt/macros.hpp +3 -0
  80. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/replace.hpp +0 -2
  81. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +53 -42
  82. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_template.hpp +11 -5
  83. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +13 -2
  84. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_x86.hpp +23 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_msvc_x86.hpp +5 -0
  86. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +3 -2
  87. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +8 -1
  88. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_emulated.hpp +3 -1
  89. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_alpha.hpp +2 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm.hpp +2 -0
  91. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_atomic.hpp +5 -0
  92. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc.hpp +2 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sparc.hpp +6 -4
  94. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sync.hpp +2 -0
  95. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86.hpp +3 -1
  96. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +28 -17
  97. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_linux_arm.hpp +2 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_arm.hpp +2 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_x86.hpp +9 -4
  100. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +3 -3
  101. data/src/cxx_supportlib/vendor-modified/boost/bind/arg.hpp +10 -3
  102. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +90 -18
  103. data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +2 -2
  104. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +1 -1
  105. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +8 -3
  106. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +2 -0
  107. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +35 -6
  108. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +2 -0
  109. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/comeau.hpp +1 -1
  110. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +2 -0
  111. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/compaq_cxx.hpp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +3 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +2 -0
  114. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +19 -4
  115. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +3 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/greenhills.hpp +1 -1
  117. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +3 -1
  118. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +29 -7
  119. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/kai.hpp +1 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +2 -0
  121. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +2 -0
  122. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +16 -0
  123. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +2 -0
  124. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pgi.hpp +2 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sgi_mipspro.hpp +1 -1
  126. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +10 -1
  127. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +2 -0
  128. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +44 -16
  129. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
  130. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +1 -2
  131. data/src/cxx_supportlib/vendor-modified/boost/config/platform/linux.hpp +1 -1
  132. data/src/cxx_supportlib/vendor-modified/boost/config/select_compiler_config.hpp +21 -21
  133. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +42 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcomo.hpp +7 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +40 -7
  136. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +39 -6
  137. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/modena.hpp +7 -0
  138. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/msl.hpp +7 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/roguewave.hpp +7 -0
  140. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/sgi.hpp +8 -1
  141. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/stlport.hpp +7 -0
  142. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/vacpp.hpp +7 -0
  143. data/src/cxx_supportlib/vendor-modified/boost/config/suffix.hpp +33 -4
  144. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +0 -2
  145. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +0 -3
  146. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +34 -27
  147. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +62 -26
  148. data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -2
  149. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +4 -4
  150. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +4 -4
  151. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +2 -0
  152. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +39 -5
  153. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +49 -32
  154. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +175 -7
  155. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +223 -98
  156. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_sorted.hpp +57 -0
  157. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +88 -41
  158. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +7 -8
  159. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +4 -9
  160. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +45 -18
  161. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +205 -26
  162. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +290 -181
  163. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +2 -0
  164. data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +24 -19
  165. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +38 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +320 -46
  167. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +91 -18
  168. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +23 -19
  169. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +491 -120
  170. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +4 -4
  171. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +0 -3
  172. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +399 -0
  173. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/deque.hpp +2 -0
  174. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_map.hpp +4 -0
  175. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_set.hpp +4 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/list.hpp +2 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/map.hpp +4 -0
  178. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/set.hpp +4 -0
  179. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/slist.hpp +2 -0
  180. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/small_vector.hpp +2 -0
  181. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/stable_vector.hpp +2 -0
  182. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/string.hpp +2 -0
  183. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/vector.hpp +2 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +101 -20
  185. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +19 -14
  186. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +117 -59
  187. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +8 -6
  188. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +33 -28
  189. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +414 -70
  190. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +1 -0
  191. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_fwd.hpp +2 -2
  192. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +134 -117
  193. data/src/cxx_supportlib/vendor-modified/boost/core/addressof.hpp +202 -99
  194. data/src/cxx_supportlib/vendor-modified/boost/core/demangle.hpp +8 -10
  195. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +217 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/core/scoped_enum.hpp +29 -27
  197. data/src/cxx_supportlib/vendor-modified/boost/current_function.hpp +5 -1
  198. data/src/cxx_supportlib/vendor-modified/boost/date_time/c_time.hpp +13 -13
  199. data/src/cxx_supportlib/vendor-modified/boost/date_time/constrained_value.hpp +3 -3
  200. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +2 -1
  201. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration.hpp +4 -3
  202. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration_types.hpp +6 -5
  203. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_facet.hpp +2 -2
  204. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_names_put.hpp +8 -7
  205. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_calendar.hpp +2 -1
  206. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +2 -1
  207. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day.hpp +4 -3
  208. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day_of_year.hpp +3 -2
  209. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration.hpp +2 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration_types.hpp +4 -3
  211. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_facet.hpp +27 -7
  212. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_month.hpp +5 -5
  213. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_serialize.hpp +5 -0
  214. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_weekday.hpp +4 -4
  215. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_year.hpp +4 -5
  216. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.hpp +2 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +5 -4
  218. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/posix_time_zone.hpp +4 -3
  219. data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +3 -2
  220. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/date_duration_operators.hpp +1 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_config.hpp +2 -2
  222. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +5 -4
  223. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/ptime.hpp +6 -5
  224. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_parsers.hpp +4 -0
  225. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +2 -2
  226. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +5 -4
  227. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_base.hpp +2 -1
  228. data/src/cxx_supportlib/vendor-modified/boost/date_time/year_month_day.hpp +3 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/detail/iterator.hpp +13 -0
  230. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +1 -0
  231. data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +5 -0
  232. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +11 -0
  233. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/shared_ptr.hpp +17 -0
  234. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +25 -3
  235. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +2 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +114 -1
  237. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +116 -142
  238. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +57 -69
  239. data/src/cxx_supportlib/vendor-modified/boost/functional/hash/detail/hash_float.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/functional/hash/extensions.hpp +3 -3
  241. data/src/cxx_supportlib/vendor-modified/boost/functional/hash/hash.hpp +27 -13
  242. data/src/cxx_supportlib/vendor-modified/boost/intrusive/any_hook.hpp +4 -2
  243. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +99 -12
  244. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set_hook.hpp +4 -2
  245. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +35 -4
  246. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +37 -6
  247. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +95 -8
  248. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set_hook.hpp +4 -2
  249. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +209 -72
  250. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +86 -20
  251. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +11 -11
  252. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +6 -6
  253. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algo_type.hpp +4 -1
  254. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +58 -45
  255. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +27 -26
  256. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +2 -2
  257. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +7 -7
  258. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +8 -3
  259. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +4 -3
  260. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +27 -26
  261. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +3 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +4 -2
  263. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +9 -7
  264. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/has_member_function_callable_with.hpp +83 -57
  265. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +30 -30
  266. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +9 -8
  267. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +8 -7
  268. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +16 -15
  269. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +70 -44
  270. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +22 -21
  271. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +7 -6
  272. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +5 -4
  273. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +29 -28
  274. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/reverse_iterator.hpp +33 -12
  275. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +19 -12
  276. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +21 -20
  277. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +4 -3
  278. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/to_raw_pointer.hpp +3 -2
  279. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +23 -22
  280. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +23 -22
  281. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +10 -9
  282. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +103 -29
  283. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +15 -0
  284. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +295 -211
  285. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +2 -2
  286. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +20 -7
  287. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list_hook.hpp +4 -2
  288. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +5 -4
  289. data/src/cxx_supportlib/vendor-modified/boost/intrusive/options.hpp +4 -4
  290. data/src/cxx_supportlib/vendor-modified/boost/intrusive/parent_from_member.hpp +3 -2
  291. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +4 -4
  292. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +4 -4
  293. data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +22 -4
  294. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +36 -4
  295. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +43 -13
  296. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +95 -8
  297. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set_hook.hpp +4 -2
  298. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +96 -12
  299. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +102 -5
  300. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +48 -4
  301. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +20 -11
  302. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist_hook.hpp +9 -2
  303. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +95 -8
  304. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +36 -4
  305. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +27 -0
  306. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +167 -23
  307. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +28 -0
  308. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +100 -46
  309. data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +5 -4
  310. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +37 -27
  311. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +30 -14
  312. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
  313. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +35 -36
  314. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +6 -28
  315. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +20 -5
  316. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +4 -2
  317. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +3 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once.cpp +5 -0
  319. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +11 -7
  320. data/src/cxx_supportlib/vendor-modified/boost/math/policies/policy.hpp +1 -3
  321. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/fpclassify.hpp +5 -1
  322. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +11 -0
  323. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +10 -2
  324. data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +40 -7
  325. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +67 -0
  326. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +63 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +2437 -0
  328. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +121 -0
  329. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +127 -0
  330. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +637 -0
  331. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +139 -0
  332. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +155 -0
  333. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +1 -116
  334. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +14 -13
  335. data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +17 -1
  336. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +2 -0
  337. data/src/cxx_supportlib/vendor-modified/boost/move/detail/destruct_n.hpp +67 -0
  338. data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +227 -32
  339. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +4 -0
  340. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +30 -9
  341. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils_core.hpp +12 -0
  342. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +84 -80
  343. data/src/cxx_supportlib/vendor-modified/boost/move/detail/placement_new.hpp +30 -0
  344. data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +171 -0
  345. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +14 -20
  346. data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +1 -1
  347. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +14 -0
  348. data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +32 -33
  349. data/src/cxx_supportlib/vendor-modified/boost/move/make_unique.hpp +2 -1
  350. data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +49 -49
  351. data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +8 -7
  352. data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +17 -16
  353. data/src/cxx_supportlib/vendor-modified/boost/mpl/print.hpp +3 -0
  354. data/src/cxx_supportlib/vendor-modified/boost/none.hpp +1 -1
  355. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +2 -3
  356. data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +197 -255
  357. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +1059 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +75 -0
  359. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +116 -0
  360. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_factory_support.hpp +36 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +253 -0
  362. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +196 -0
  363. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +117 -0
  364. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +372 -554
  365. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_fwd.hpp +12 -1
  366. data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +15 -7
  367. data/src/cxx_supportlib/vendor-modified/boost/pool/pool_alloc.hpp +24 -0
  368. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/intel.h +9 -2
  369. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/visualc.h +15 -1
  370. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd.h +16 -4
  371. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86.h +3 -3
  372. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd.h +4 -4
  373. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd/versions.h +4 -4
  374. data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +1 -1
  375. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +2 -2
  376. data/src/cxx_supportlib/vendor-modified/boost/predef/version_number.h +20 -1
  377. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/cat.hpp +1 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +6 -6
  379. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/binary_transform.hpp +5 -6
  380. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/to_list_msvc.hpp +55 -0
  381. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/to_list.hpp +12 -0
  382. data/src/cxx_supportlib/vendor-modified/boost/range/const_iterator.hpp +4 -4
  383. data/src/cxx_supportlib/vendor-modified/boost/range/size_type.hpp +0 -5
  384. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +16 -16
  385. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +4 -4
  386. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +3 -0
  387. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +102 -87
  388. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +45 -21
  389. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +4 -4
  390. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +2 -2
  391. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +1 -1
  392. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +14 -2
  393. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +46 -0
  394. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +5 -2
  395. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +5 -14
  396. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +116 -13
  397. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +34 -0
  398. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +2 -2
  399. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +1 -1
  400. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +3 -3
  401. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +1 -0
  402. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +2 -2
  403. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +1004 -159
  404. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +9 -0
  405. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +3 -0
  406. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +4 -58
  407. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +5 -2
  408. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +9 -0
  409. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +0 -8
  410. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync.hpp +3 -3
  411. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_noexcept.hpp +30 -0
  412. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +3 -0
  413. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +5 -4
  414. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +28 -3
  415. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ref_counter.hpp +187 -0
  416. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +52 -144
  417. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +120 -450
  418. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +2 -1
  419. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +2 -1
  420. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +7 -6
  421. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +70 -8
  422. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +6 -5
  423. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +9 -8
  424. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +3 -3
  425. data/src/cxx_supportlib/vendor-modified/boost/thread/barrier.hpp +5 -4
  426. data/src/cxx_supportlib/vendor-modified/boost/thread/completion_latch.hpp +0 -1
  427. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_views.hpp +0 -11
  428. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_timed_queue.hpp +6 -4
  429. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +11 -2
  430. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +11 -4
  431. data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +8 -8
  432. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor.hpp +1 -1
  433. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/generic_executor_ref.hpp +5 -5
  434. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/loop_executor.hpp +22 -18
  435. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +163 -55
  436. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/launch.hpp +1 -0
  437. data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_all.hpp +1 -1
  438. data/src/cxx_supportlib/vendor-modified/boost/thread/lock_types.hpp +9 -9
  439. data/src/cxx_supportlib/vendor-modified/boost/thread/locks.hpp +1 -0
  440. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +6 -7
  441. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +17 -2
  442. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +2 -2
  443. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +5 -5
  444. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/timespec.hpp +29 -0
  445. data/src/cxx_supportlib/vendor-modified/boost/thread/scoped_thread.hpp +23 -18
  446. data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +6 -6
  447. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_functors.hpp +19 -4
  448. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_guard.hpp +3 -3
  449. data/src/cxx_supportlib/vendor-modified/boost/thread/user_scheduler.hpp +1 -1
  450. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +265 -0
  451. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +272 -0
  452. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +300 -0
  453. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_reference.hpp +3 -3
  454. data/src/cxx_supportlib/vendor-modified/boost/type_traits/aligned_storage.hpp +6 -6
  455. data/src/cxx_supportlib/vendor-modified/boost/type_traits/common_type.hpp +1 -0
  456. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +9 -3
  457. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/mp_defer.hpp +3 -3
  458. data/src/cxx_supportlib/vendor-modified/boost/type_traits/extent.hpp +1 -0
  459. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_assign.hpp +2 -1
  460. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_constructor.hpp +2 -1
  461. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_destructor.hpp +1 -1
  462. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_assign.hpp +2 -1
  463. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_copy.hpp +1 -0
  464. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_destructor.hpp +1 -1
  465. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +1 -0
  466. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +1 -0
  467. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_abstract.hpp +1 -0
  468. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_array.hpp +1 -1
  469. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_assignable.hpp +1 -0
  470. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_const.hpp +2 -1
  471. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_default_constructible.hpp +21 -1
  472. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_destructible.hpp +1 -0
  473. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +1 -1
  474. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +2 -1
  475. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_pod.hpp +1 -0
  476. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +1 -1
  477. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +1 -1
  478. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_volatile.hpp +2 -1
  479. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_void.hpp +52 -0
  480. data/src/cxx_supportlib/vendor-modified/boost/type_traits/rank.hpp +1 -0
  481. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_all_extents.hpp +1 -1
  482. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_const.hpp +1 -1
  483. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv.hpp +1 -1
  484. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_extent.hpp +1 -1
  485. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_pointer.hpp +1 -1
  486. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_volatile.hpp +1 -1
  487. data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +1 -1
  488. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +40 -6
  489. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +4986 -0
  490. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +107 -0
  491. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +105 -0
  492. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +1814 -1255
  493. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +41 -45
  494. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +1498 -1161
  495. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +40 -44
  496. data/src/cxx_supportlib/vendor-modified/boost/utility.hpp +2 -2
  497. data/src/cxx_supportlib/vendor-modified/boost/utility/base_from_member.hpp +7 -6
  498. data/src/cxx_supportlib/vendor-modified/boost/utility/compare_pointees.hpp +10 -2
  499. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +39 -22
  500. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +690 -0
  501. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view_fwd.hpp +39 -0
  502. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  503. data/src/helper-scripts/crash-watch.rb +3 -0
  504. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  505. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +1 -0
  506. data/src/ruby_supportlib/phusion_passenger/packaging.rb +2 -12
  507. metadata +77 -38
  508. data/dev/ci/inituidgid +0 -24
  509. data/dev/ci/run_jenkins.sh +0 -70
  510. data/dev/ci/run_travis.sh +0 -314
  511. data/doc/Design and Architecture.html +0 -2421
  512. data/doc/Design and Architecture.txt +0 -511
  513. data/doc/Security of user switching support.html +0 -1833
  514. data/doc/Users guide Apache.html +0 -3101
  515. data/doc/Users guide Apache.idmap.txt +0 -451
  516. data/doc/Users guide Apache.txt +0 -534
  517. data/doc/Users guide Nginx.html +0 -3026
  518. data/doc/Users guide Nginx.idmap.txt +0 -431
  519. data/doc/Users guide Nginx.txt +0 -451
  520. data/doc/Users guide Standalone.html +0 -2092
  521. data/doc/Users guide Standalone.idmap.txt +0 -137
  522. data/doc/Users guide Standalone.txt +0 -81
  523. data/doc/Users guide.html +0 -1606
  524. data/doc/Users guide.txt +0 -8
  525. data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +0 -20
  526. data/src/cxx_supportlib/vendor-modified/boost/align/detail/address.hpp +0 -29
  527. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align.hpp +0 -40
  528. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +0 -22
  529. data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +0 -29
  530. data/src/cxx_supportlib/vendor-modified/boost/container/detail/hash_table.hpp +0 -383
  531. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_allocator.hpp +0 -318
  532. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_count_impl.hpp +0 -67
  533. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_traits.hpp +0 -60
  534. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_utility.hpp +0 -214
  535. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_if_array.hpp +0 -34
  536. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocate.hpp +0 -1128
  537. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/buckets.hpp +0 -928
  538. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/equivalent.hpp +0 -686
  539. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/extract_key.hpp +0 -188
  540. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/table.hpp +0 -873
  541. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/unique.hpp +0 -628
  542. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/util.hpp +0 -266
@@ -32,11 +32,13 @@
32
32
  #include <boost/container/detail/destroyers.hpp>
33
33
  #include <boost/container/detail/algorithm.hpp> //algo_equal(), algo_lexicographical_compare
34
34
  #include <boost/container/detail/iterator.hpp>
35
+ #include <boost/container/detail/is_sorted.hpp>
35
36
  #include <boost/container/allocator_traits.hpp>
36
37
  #ifdef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
37
38
  #include <boost/intrusive/pointer_traits.hpp>
38
39
  #endif
39
40
  #include <boost/container/detail/type_traits.hpp>
41
+ #include <boost/container/detail/iterators.hpp>
40
42
  #include <boost/move/make_unique.hpp>
41
43
  #include <boost/move/adl_move_swap.hpp>
42
44
  #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
@@ -44,6 +46,7 @@
44
46
  #endif
45
47
 
46
48
  #include <boost/intrusive/detail/minimal_pair_header.hpp> //pair
49
+ #include <boost/move/iterator.hpp>
47
50
 
48
51
  namespace boost {
49
52
  namespace container {
@@ -98,7 +101,7 @@ struct get_flat_tree_iterators
98
101
  typedef boost::container::reverse_iterator<const_iterator> const_reverse_iterator;
99
102
  };
100
103
 
101
- template <class Key, class Value, class KeyOfValue,
104
+ template <class Value, class KeyOfValue,
102
105
  class Compare, class Allocator>
103
106
  class flat_tree
104
107
  {
@@ -183,7 +186,7 @@ class flat_tree
183
186
  typedef typename vector_t::const_pointer const_pointer;
184
187
  typedef typename vector_t::reference reference;
185
188
  typedef typename vector_t::const_reference const_reference;
186
- typedef Key key_type;
189
+ typedef typename KeyOfValue::type key_type;
187
190
  typedef Compare key_compare;
188
191
  typedef typename vector_t::allocator_type allocator_type;
189
192
  typedef typename vector_t::size_type size_type;
@@ -200,35 +203,36 @@ class flat_tree
200
203
  typedef allocator_traits<stored_allocator_type> stored_allocator_traits;
201
204
 
202
205
  public:
203
- flat_tree()
206
+ BOOST_CONTAINER_FORCEINLINE flat_tree()
204
207
  : m_data()
205
208
  { }
206
209
 
207
- explicit flat_tree(const Compare& comp)
210
+ BOOST_CONTAINER_FORCEINLINE explicit flat_tree(const Compare& comp)
208
211
  : m_data(comp)
209
212
  { }
210
213
 
211
- flat_tree(const Compare& comp, const allocator_type& a)
214
+ BOOST_CONTAINER_FORCEINLINE flat_tree(const Compare& comp, const allocator_type& a)
212
215
  : m_data(comp, a)
213
216
  { }
214
217
 
215
- explicit flat_tree(const allocator_type& a)
218
+ BOOST_CONTAINER_FORCEINLINE explicit flat_tree(const allocator_type& a)
216
219
  : m_data(a)
217
220
  { }
218
221
 
219
- flat_tree(const flat_tree& x)
222
+ BOOST_CONTAINER_FORCEINLINE flat_tree(const flat_tree& x)
220
223
  : m_data(x.m_data)
221
224
  { }
222
225
 
223
- flat_tree(BOOST_RV_REF(flat_tree) x)
226
+ BOOST_CONTAINER_FORCEINLINE flat_tree(BOOST_RV_REF(flat_tree) x)
227
+ BOOST_NOEXCEPT_IF(boost::container::container_detail::is_nothrow_move_constructible<Compare>::value)
224
228
  : m_data(boost::move(x.m_data))
225
229
  { }
226
230
 
227
- flat_tree(const flat_tree& x, const allocator_type &a)
231
+ BOOST_CONTAINER_FORCEINLINE flat_tree(const flat_tree& x, const allocator_type &a)
228
232
  : m_data(x.m_data, a)
229
233
  { }
230
234
 
231
- flat_tree(BOOST_RV_REF(flat_tree) x, const allocator_type &a)
235
+ BOOST_CONTAINER_FORCEINLINE flat_tree(BOOST_RV_REF(flat_tree) x, const allocator_type &a)
232
236
  : m_data(boost::move(x.m_data), a)
233
237
  { }
234
238
 
@@ -237,7 +241,20 @@ class flat_tree
237
241
  , const Compare& comp = Compare()
238
242
  , const allocator_type& a = allocator_type())
239
243
  : m_data(comp, a)
240
- { this->m_data.m_vect.insert(this->m_data.m_vect.end(), first, last); }
244
+ {
245
+ this->m_data.m_vect.insert(this->m_data.m_vect.end(), first, last);
246
+ BOOST_ASSERT((is_sorted)(this->m_data.m_vect.cbegin(), this->m_data.m_vect.cend(), this->priv_value_comp()));
247
+ }
248
+
249
+ template <class InputIterator>
250
+ flat_tree( ordered_unique_range_t, InputIterator first, InputIterator last
251
+ , const Compare& comp = Compare()
252
+ , const allocator_type& a = allocator_type())
253
+ : m_data(comp, a)
254
+ {
255
+ this->m_data.m_vect.insert(this->m_data.m_vect.end(), first, last);
256
+ BOOST_ASSERT((is_sorted_and_unique)(this->m_data.m_vect.cbegin(), this->m_data.m_vect.cend(), this->priv_value_comp()));
257
+ }
241
258
 
242
259
  template <class InputIterator>
243
260
  flat_tree( bool unique_insertion
@@ -262,80 +279,93 @@ class flat_tree
262
279
  }
263
280
  }
264
281
 
265
- ~flat_tree()
282
+ BOOST_CONTAINER_FORCEINLINE ~flat_tree()
266
283
  {}
267
284
 
268
- flat_tree& operator=(BOOST_COPY_ASSIGN_REF(flat_tree) x)
285
+ BOOST_CONTAINER_FORCEINLINE flat_tree& operator=(BOOST_COPY_ASSIGN_REF(flat_tree) x)
269
286
  { m_data = x.m_data; return *this; }
270
287
 
271
- flat_tree& operator=(BOOST_RV_REF(flat_tree) x)
272
- BOOST_NOEXCEPT_IF( allocator_traits_type::is_always_equal::value
273
- && boost::container::container_detail::is_nothrow_move_assignable<Compare>::value )
288
+ BOOST_CONTAINER_FORCEINLINE flat_tree& operator=(BOOST_RV_REF(flat_tree) x)
289
+ BOOST_NOEXCEPT_IF( (allocator_traits_type::propagate_on_container_move_assignment::value ||
290
+ allocator_traits_type::is_always_equal::value) &&
291
+ boost::container::container_detail::is_nothrow_move_assignable<Compare>::value)
274
292
  { m_data = boost::move(x.m_data); return *this; }
275
293
 
294
+ BOOST_CONTAINER_FORCEINLINE const value_compare &priv_value_comp() const
295
+ { return static_cast<const value_compare &>(this->m_data); }
296
+
297
+ BOOST_CONTAINER_FORCEINLINE value_compare &priv_value_comp()
298
+ { return static_cast<value_compare &>(this->m_data); }
299
+
300
+ BOOST_CONTAINER_FORCEINLINE const key_compare &priv_key_comp() const
301
+ { return this->priv_value_comp().get_comp(); }
302
+
303
+ BOOST_CONTAINER_FORCEINLINE key_compare &priv_key_comp()
304
+ { return this->priv_value_comp().get_comp(); }
305
+
276
306
  public:
277
307
  // accessors:
278
- Compare key_comp() const
308
+ BOOST_CONTAINER_FORCEINLINE Compare key_comp() const
279
309
  { return this->m_data.get_comp(); }
280
310
 
281
- value_compare value_comp() const
311
+ BOOST_CONTAINER_FORCEINLINE value_compare value_comp() const
282
312
  { return this->m_data; }
283
313
 
284
- allocator_type get_allocator() const
314
+ BOOST_CONTAINER_FORCEINLINE allocator_type get_allocator() const
285
315
  { return this->m_data.m_vect.get_allocator(); }
286
316
 
287
- const stored_allocator_type &get_stored_allocator() const
317
+ BOOST_CONTAINER_FORCEINLINE const stored_allocator_type &get_stored_allocator() const
288
318
  { return this->m_data.m_vect.get_stored_allocator(); }
289
319
 
290
- stored_allocator_type &get_stored_allocator()
320
+ BOOST_CONTAINER_FORCEINLINE stored_allocator_type &get_stored_allocator()
291
321
  { return this->m_data.m_vect.get_stored_allocator(); }
292
322
 
293
- iterator begin()
323
+ BOOST_CONTAINER_FORCEINLINE iterator begin()
294
324
  { return this->m_data.m_vect.begin(); }
295
325
 
296
- const_iterator begin() const
326
+ BOOST_CONTAINER_FORCEINLINE const_iterator begin() const
297
327
  { return this->cbegin(); }
298
328
 
299
- const_iterator cbegin() const
329
+ BOOST_CONTAINER_FORCEINLINE const_iterator cbegin() const
300
330
  { return this->m_data.m_vect.begin(); }
301
331
 
302
- iterator end()
332
+ BOOST_CONTAINER_FORCEINLINE iterator end()
303
333
  { return this->m_data.m_vect.end(); }
304
334
 
305
- const_iterator end() const
335
+ BOOST_CONTAINER_FORCEINLINE const_iterator end() const
306
336
  { return this->cend(); }
307
337
 
308
- const_iterator cend() const
338
+ BOOST_CONTAINER_FORCEINLINE const_iterator cend() const
309
339
  { return this->m_data.m_vect.end(); }
310
340
 
311
- reverse_iterator rbegin()
341
+ BOOST_CONTAINER_FORCEINLINE reverse_iterator rbegin()
312
342
  { return reverse_iterator(this->end()); }
313
343
 
314
- const_reverse_iterator rbegin() const
344
+ BOOST_CONTAINER_FORCEINLINE const_reverse_iterator rbegin() const
315
345
  { return this->crbegin(); }
316
346
 
317
- const_reverse_iterator crbegin() const
347
+ BOOST_CONTAINER_FORCEINLINE const_reverse_iterator crbegin() const
318
348
  { return const_reverse_iterator(this->cend()); }
319
349
 
320
- reverse_iterator rend()
350
+ BOOST_CONTAINER_FORCEINLINE reverse_iterator rend()
321
351
  { return reverse_iterator(this->begin()); }
322
352
 
323
- const_reverse_iterator rend() const
353
+ BOOST_CONTAINER_FORCEINLINE const_reverse_iterator rend() const
324
354
  { return this->crend(); }
325
355
 
326
- const_reverse_iterator crend() const
356
+ BOOST_CONTAINER_FORCEINLINE const_reverse_iterator crend() const
327
357
  { return const_reverse_iterator(this->cbegin()); }
328
358
 
329
- bool empty() const
359
+ BOOST_CONTAINER_FORCEINLINE bool empty() const
330
360
  { return this->m_data.m_vect.empty(); }
331
361
 
332
- size_type size() const
362
+ BOOST_CONTAINER_FORCEINLINE size_type size() const
333
363
  { return this->m_data.m_vect.size(); }
334
364
 
335
- size_type max_size() const
365
+ BOOST_CONTAINER_FORCEINLINE size_type max_size() const
336
366
  { return this->m_data.m_vect.max_size(); }
337
367
 
338
- void swap(flat_tree& other)
368
+ BOOST_CONTAINER_FORCEINLINE void swap(flat_tree& other)
339
369
  BOOST_NOEXCEPT_IF( allocator_traits_type::is_always_equal::value
340
370
  && boost::container::container_detail::is_nothrow_swappable<Compare>::value )
341
371
  { this->m_data.swap(other.m_data); }
@@ -346,7 +376,7 @@ class flat_tree
346
376
  {
347
377
  std::pair<iterator,bool> ret;
348
378
  insert_commit_data data;
349
- ret.second = this->priv_insert_unique_prepare(val, data);
379
+ ret.second = this->priv_insert_unique_prepare(KeyOfValue()(val), data);
350
380
  ret.first = ret.second ? this->priv_insert_commit(data, val)
351
381
  : iterator(vector_iterator_get_ptr(data.position));
352
382
  return ret;
@@ -356,7 +386,7 @@ class flat_tree
356
386
  {
357
387
  std::pair<iterator,bool> ret;
358
388
  insert_commit_data data;
359
- ret.second = this->priv_insert_unique_prepare(val, data);
389
+ ret.second = this->priv_insert_unique_prepare(KeyOfValue()(val), data);
360
390
  ret.first = ret.second ? this->priv_insert_commit(data, boost::move(val))
361
391
  : iterator(vector_iterator_get_ptr(data.position));
362
392
  return ret;
@@ -379,9 +409,8 @@ class flat_tree
379
409
  iterator insert_unique(const_iterator hint, const value_type& val)
380
410
  {
381
411
  BOOST_ASSERT(this->priv_in_range_or_end(hint));
382
- std::pair<iterator,bool> ret;
383
412
  insert_commit_data data;
384
- return this->priv_insert_unique_prepare(hint, val, data)
413
+ return this->priv_insert_unique_prepare(hint, KeyOfValue()(val), data)
385
414
  ? this->priv_insert_commit(data, val)
386
415
  : iterator(vector_iterator_get_ptr(data.position));
387
416
  }
@@ -389,9 +418,8 @@ class flat_tree
389
418
  iterator insert_unique(const_iterator hint, BOOST_RV_REF(value_type) val)
390
419
  {
391
420
  BOOST_ASSERT(this->priv_in_range_or_end(hint));
392
- std::pair<iterator,bool> ret;
393
421
  insert_commit_data data;
394
- return this->priv_insert_unique_prepare(hint, val, data)
422
+ return this->priv_insert_unique_prepare(hint, KeyOfValue()(val), data)
395
423
  ? this->priv_insert_commit(data, boost::move(val))
396
424
  : iterator(vector_iterator_get_ptr(data.position));
397
425
  }
@@ -481,7 +509,7 @@ class flat_tree
481
509
  >::type * = 0
482
510
  #endif
483
511
  )
484
- { this->m_data.m_vect.merge(first, last); }
512
+ { this->m_data.m_vect.merge(first, last, static_cast<const value_compare &>(this->m_data)); }
485
513
 
486
514
  template <class InIt>
487
515
  void insert_unique(ordered_unique_range_t, InIt first, InIt last
@@ -510,7 +538,7 @@ class flat_tree
510
538
  >::type * = 0
511
539
  #endif
512
540
  )
513
- { this->m_data.m_vect.merge_unique(first, last, value_compare()); }
541
+ { this->m_data.m_vect.merge_unique(first, last, static_cast<const value_compare &>(this->m_data)); }
514
542
 
515
543
  #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
516
544
 
@@ -560,6 +588,29 @@ class flat_tree
560
588
  return this->insert_equal(hint, ::boost::move(val));
561
589
  }
562
590
 
591
+ template <class KeyType, class... Args>
592
+ BOOST_CONTAINER_FORCEINLINE std::pair<iterator, bool> try_emplace
593
+ (const_iterator hint, BOOST_FWD_REF(KeyType) key, BOOST_FWD_REF(Args)... args)
594
+ {
595
+ std::pair<iterator,bool> ret;
596
+ insert_commit_data data;
597
+ const key_type & k = key;
598
+ ret.second = hint == const_iterator()
599
+ ? this->priv_insert_unique_prepare(k, data)
600
+ : this->priv_insert_unique_prepare(hint, k, data);
601
+
602
+ if(!ret.second){
603
+ ret.first = this->nth(data.position - this->cbegin());
604
+ }
605
+ else{
606
+ typedef typename emplace_functor_type<try_emplace_t, KeyType, Args...>::type func_t;
607
+ typedef emplace_iterator<value_type, func_t, difference_type> it_t;
608
+ func_t func(try_emplace_t(), ::boost::forward<KeyType>(key), ::boost::forward<Args>(args)...);
609
+ ret.first = this->m_data.m_vect.insert(data.position, it_t(func), it_t());
610
+ }
611
+ return ret;
612
+ }
613
+
563
614
  #else // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
564
615
 
565
616
  #define BOOST_CONTAINER_FLAT_TREE_EMPLACE_CODE(N) \
@@ -606,13 +657,57 @@ class flat_tree
606
657
  value_destructor<stored_allocator_type> d(a, val);\
607
658
  return this->insert_equal(hint, ::boost::move(val));\
608
659
  }\
660
+ template <class KeyType BOOST_MOVE_I##N BOOST_MOVE_CLASS##N>\
661
+ BOOST_CONTAINER_FORCEINLINE std::pair<iterator, bool>\
662
+ try_emplace(const_iterator hint, BOOST_FWD_REF(KeyType) key BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
663
+ {\
664
+ std::pair<iterator,bool> ret;\
665
+ insert_commit_data data;\
666
+ const key_type & k = key;\
667
+ ret.second = hint == const_iterator()\
668
+ ? this->priv_insert_unique_prepare(k, data)\
669
+ : this->priv_insert_unique_prepare(hint, k, data);\
670
+ \
671
+ if(!ret.second){\
672
+ ret.first = this->nth(data.position - this->cbegin());\
673
+ }\
674
+ else{\
675
+ typedef typename emplace_functor_type<try_emplace_t, KeyType BOOST_MOVE_I##N BOOST_MOVE_TARG##N>::type func_t;\
676
+ typedef emplace_iterator<value_type, func_t, difference_type> it_t;\
677
+ func_t func(try_emplace_t(), ::boost::forward<KeyType>(key) BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
678
+ ret.first = this->m_data.m_vect.insert(data.position, it_t(func), it_t());\
679
+ }\
680
+ return ret;\
681
+ }\
609
682
  //
610
- BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_FLAT_TREE_EMPLACE_CODE)
683
+ BOOST_MOVE_ITERATE_0TO7(BOOST_CONTAINER_FLAT_TREE_EMPLACE_CODE)
611
684
  #undef BOOST_CONTAINER_FLAT_TREE_EMPLACE_CODE
612
685
 
613
686
  #endif // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
614
687
 
615
- iterator erase(const_iterator position)
688
+ template<class KeyType, class M>
689
+ std::pair<iterator, bool> insert_or_assign(const_iterator hint, BOOST_FWD_REF(KeyType) key, BOOST_FWD_REF(M) obj)
690
+ {
691
+ const key_type& k = key;
692
+ std::pair<iterator,bool> ret;
693
+ insert_commit_data data;
694
+ ret.second = hint == const_iterator()
695
+ ? this->priv_insert_unique_prepare(k, data)
696
+ : this->priv_insert_unique_prepare(hint, k, data);
697
+ if(!ret.second){
698
+ ret.first = this->nth(data.position - this->cbegin());
699
+ ret.first->second = boost::forward<M>(obj);
700
+ }
701
+ else{
702
+ typedef typename emplace_functor_type<KeyType, M>::type func_t;
703
+ typedef emplace_iterator<value_type, func_t, difference_type> it_t;
704
+ func_t func(boost::forward<KeyType>(key), boost::forward<M>(obj));
705
+ ret.first = this->m_data.m_vect.insert(data.position, it_t(func), it_t());
706
+ }
707
+ return ret;
708
+ }
709
+
710
+ BOOST_CONTAINER_FORCEINLINE iterator erase(const_iterator position)
616
711
  { return this->m_data.m_vect.erase(position); }
617
712
 
618
713
  size_type erase(const key_type& k)
@@ -625,10 +720,10 @@ class flat_tree
625
720
  return ret;
626
721
  }
627
722
 
628
- iterator erase(const_iterator first, const_iterator last)
723
+ BOOST_CONTAINER_FORCEINLINE iterator erase(const_iterator first, const_iterator last)
629
724
  { return this->m_data.m_vect.erase(first, last); }
630
725
 
631
- void clear()
726
+ BOOST_CONTAINER_FORCEINLINE void clear()
632
727
  { this->m_data.m_vect.clear(); }
633
728
 
634
729
  //! <b>Effects</b>: Tries to deallocate the excess of memory created
@@ -637,19 +732,19 @@ class flat_tree
637
732
  //! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
638
733
  //!
639
734
  //! <b>Complexity</b>: Linear to size().
640
- void shrink_to_fit()
735
+ BOOST_CONTAINER_FORCEINLINE void shrink_to_fit()
641
736
  { this->m_data.m_vect.shrink_to_fit(); }
642
737
 
643
- iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW
738
+ BOOST_CONTAINER_FORCEINLINE iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW
644
739
  { return this->m_data.m_vect.nth(n); }
645
740
 
646
- const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
741
+ BOOST_CONTAINER_FORCEINLINE const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
647
742
  { return this->m_data.m_vect.nth(n); }
648
743
 
649
- size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW
744
+ BOOST_CONTAINER_FORCEINLINE size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW
650
745
  { return this->m_data.m_vect.index_of(p); }
651
746
 
652
- size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW
747
+ BOOST_CONTAINER_FORCEINLINE size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW
653
748
  { return this->m_data.m_vect.index_of(p); }
654
749
 
655
750
  // set operations:
@@ -682,64 +777,94 @@ class flat_tree
682
777
  return n;
683
778
  }
684
779
 
685
- iterator lower_bound(const key_type& k)
780
+ template<class C2>
781
+ void merge_unique(flat_tree<Value, KeyOfValue, C2, Allocator>& source)
782
+ {
783
+ this->insert( boost::make_move_iterator(source.begin())
784
+ , boost::make_move_iterator(source.end()));
785
+ }
786
+
787
+ template<class C2>
788
+ void merge_equal(flat_tree<Value, KeyOfValue, C2, Allocator>& source)
789
+ {
790
+ this->insert( boost::make_move_iterator(source.begin())
791
+ , boost::make_move_iterator(source.end()));
792
+ }
793
+
794
+ void merge_unique(flat_tree& source)
795
+ {
796
+ this->m_data.m_vect.merge_unique
797
+ ( boost::make_move_iterator(source.begin())
798
+ , boost::make_move_iterator(source.end())
799
+ , static_cast<const value_compare &>(this->m_data));
800
+ }
801
+
802
+ void merge_equal(flat_tree& source)
803
+ {
804
+ this->m_data.m_vect.merge
805
+ ( boost::make_move_iterator(source.begin())
806
+ , boost::make_move_iterator(source.end())
807
+ , static_cast<const value_compare &>(this->m_data));
808
+ }
809
+
810
+ BOOST_CONTAINER_FORCEINLINE iterator lower_bound(const key_type& k)
686
811
  { return this->priv_lower_bound(this->begin(), this->end(), k); }
687
812
 
688
- const_iterator lower_bound(const key_type& k) const
813
+ BOOST_CONTAINER_FORCEINLINE const_iterator lower_bound(const key_type& k) const
689
814
  { return this->priv_lower_bound(this->cbegin(), this->cend(), k); }
690
815
 
691
- iterator upper_bound(const key_type& k)
816
+ BOOST_CONTAINER_FORCEINLINE iterator upper_bound(const key_type& k)
692
817
  { return this->priv_upper_bound(this->begin(), this->end(), k); }
693
818
 
694
- const_iterator upper_bound(const key_type& k) const
819
+ BOOST_CONTAINER_FORCEINLINE const_iterator upper_bound(const key_type& k) const
695
820
  { return this->priv_upper_bound(this->cbegin(), this->cend(), k); }
696
821
 
697
- std::pair<iterator,iterator> equal_range(const key_type& k)
822
+ BOOST_CONTAINER_FORCEINLINE std::pair<iterator,iterator> equal_range(const key_type& k)
698
823
  { return this->priv_equal_range(this->begin(), this->end(), k); }
699
824
 
700
- std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const
825
+ BOOST_CONTAINER_FORCEINLINE std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const
701
826
  { return this->priv_equal_range(this->cbegin(), this->cend(), k); }
702
827
 
703
- std::pair<iterator, iterator> lower_bound_range(const key_type& k)
828
+ BOOST_CONTAINER_FORCEINLINE std::pair<iterator, iterator> lower_bound_range(const key_type& k)
704
829
  { return this->priv_lower_bound_range(this->begin(), this->end(), k); }
705
830
 
706
- std::pair<const_iterator, const_iterator> lower_bound_range(const key_type& k) const
831
+ BOOST_CONTAINER_FORCEINLINE std::pair<const_iterator, const_iterator> lower_bound_range(const key_type& k) const
707
832
  { return this->priv_lower_bound_range(this->cbegin(), this->cend(), k); }
708
833
 
709
- size_type capacity() const
834
+ BOOST_CONTAINER_FORCEINLINE size_type capacity() const
710
835
  { return this->m_data.m_vect.capacity(); }
711
836
 
712
- void reserve(size_type cnt)
837
+ BOOST_CONTAINER_FORCEINLINE void reserve(size_type cnt)
713
838
  { this->m_data.m_vect.reserve(cnt); }
714
839
 
715
- friend bool operator==(const flat_tree& x, const flat_tree& y)
840
+ BOOST_CONTAINER_FORCEINLINE friend bool operator==(const flat_tree& x, const flat_tree& y)
716
841
  {
717
842
  return x.size() == y.size() && ::boost::container::algo_equal(x.begin(), x.end(), y.begin());
718
843
  }
719
844
 
720
- friend bool operator<(const flat_tree& x, const flat_tree& y)
845
+ BOOST_CONTAINER_FORCEINLINE friend bool operator<(const flat_tree& x, const flat_tree& y)
721
846
  {
722
847
  return ::boost::container::algo_lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
723
848
  }
724
849
 
725
- friend bool operator!=(const flat_tree& x, const flat_tree& y)
850
+ BOOST_CONTAINER_FORCEINLINE friend bool operator!=(const flat_tree& x, const flat_tree& y)
726
851
  { return !(x == y); }
727
852
 
728
- friend bool operator>(const flat_tree& x, const flat_tree& y)
853
+ BOOST_CONTAINER_FORCEINLINE friend bool operator>(const flat_tree& x, const flat_tree& y)
729
854
  { return y < x; }
730
855
 
731
- friend bool operator<=(const flat_tree& x, const flat_tree& y)
856
+ BOOST_CONTAINER_FORCEINLINE friend bool operator<=(const flat_tree& x, const flat_tree& y)
732
857
  { return !(y < x); }
733
858
 
734
- friend bool operator>=(const flat_tree& x, const flat_tree& y)
859
+ BOOST_CONTAINER_FORCEINLINE friend bool operator>=(const flat_tree& x, const flat_tree& y)
735
860
  { return !(x < y); }
736
861
 
737
- friend void swap(flat_tree& x, flat_tree& y)
862
+ BOOST_CONTAINER_FORCEINLINE friend void swap(flat_tree& x, flat_tree& y)
738
863
  { x.swap(y); }
739
864
 
740
865
  private:
741
866
 
742
- bool priv_in_range_or_end(const_iterator pos) const
867
+ BOOST_CONTAINER_FORCEINLINE bool priv_in_range_or_end(const_iterator pos) const
743
868
  {
744
869
  return (this->begin() <= pos) && (pos <= this->end());
745
870
  }
@@ -780,34 +905,34 @@ class flat_tree
780
905
  }
781
906
 
782
907
  bool priv_insert_unique_prepare
783
- (const_iterator b, const_iterator e, const value_type& val, insert_commit_data &commit_data)
908
+ (const_iterator b, const_iterator e, const key_type& k, insert_commit_data &commit_data)
784
909
  {
785
- const value_compare &val_cmp = this->m_data;
786
- commit_data.position = this->priv_lower_bound(b, e, KeyOfValue()(val));
787
- return commit_data.position == e || val_cmp(val, *commit_data.position);
910
+ const key_compare &key_cmp = this->priv_key_comp();
911
+ commit_data.position = this->priv_lower_bound(b, e, k);
912
+ return commit_data.position == e || key_cmp(k, KeyOfValue()(*commit_data.position));
788
913
  }
789
914
 
790
- bool priv_insert_unique_prepare
791
- (const value_type& val, insert_commit_data &commit_data)
792
- { return this->priv_insert_unique_prepare(this->cbegin(), this->cend(), val, commit_data); }
915
+ BOOST_CONTAINER_FORCEINLINE bool priv_insert_unique_prepare
916
+ (const key_type& k, insert_commit_data &commit_data)
917
+ { return this->priv_insert_unique_prepare(this->cbegin(), this->cend(), k, commit_data); }
793
918
 
794
919
  bool priv_insert_unique_prepare
795
- (const_iterator pos, const value_type& val, insert_commit_data &commit_data)
920
+ (const_iterator pos, const key_type& k, insert_commit_data &commit_data)
796
921
  {
797
922
  //N1780. Props to Howard Hinnant!
798
- //To insert val at pos:
799
- //if pos == end || val <= *pos
800
- // if pos == begin || val >= *(pos-1)
801
- // insert val before pos
923
+ //To insert k at pos:
924
+ //if pos == end || k <= *pos
925
+ // if pos == begin || k >= *(pos-1)
926
+ // insert k before pos
802
927
  // else
803
- // insert val before upper_bound(val)
804
- //else if pos+1 == end || val <= *(pos+1)
805
- // insert val after pos
928
+ // insert k before upper_bound(k)
929
+ //else if pos+1 == end || k <= *(pos+1)
930
+ // insert k after pos
806
931
  //else
807
- // insert val before lower_bound(val)
808
- const value_compare &val_cmp = this->m_data;
932
+ // insert k before lower_bound(k)
933
+ const key_compare &key_cmp = this->priv_key_comp();
809
934
  const const_iterator cend_it = this->cend();
810
- if(pos == cend_it || val_cmp(val, *pos)){ //Check if val should go before end
935
+ if(pos == cend_it || key_cmp(k, KeyOfValue()(*pos))){ //Check if k should go before end
811
936
  const const_iterator cbeg = this->cbegin();
812
937
  commit_data.position = pos;
813
938
  if(pos == cbeg){ //If container is empty then insert it in the beginning
@@ -815,27 +940,27 @@ class flat_tree
815
940
  }
816
941
  const_iterator prev(pos);
817
942
  --prev;
818
- if(val_cmp(*prev, val)){ //If previous element was less, then it should go between prev and pos
943
+ if(key_cmp(KeyOfValue()(*prev), k)){ //If previous element was less, then it should go between prev and pos
819
944
  return true;
820
945
  }
821
- else if(!val_cmp(val, *prev)){ //If previous was equal then insertion should fail
946
+ else if(!key_cmp(k, KeyOfValue()(*prev))){ //If previous was equal then insertion should fail
822
947
  commit_data.position = prev;
823
948
  return false;
824
949
  }
825
950
  else{ //Previous was bigger so insertion hint was pointless, dispatch to hintless insertion
826
- //but reduce the search between beg and prev as prev is bigger than val
827
- return this->priv_insert_unique_prepare(cbeg, prev, val, commit_data);
951
+ //but reduce the search between beg and prev as prev is bigger than k
952
+ return this->priv_insert_unique_prepare(cbeg, prev, k, commit_data);
828
953
  }
829
954
  }
830
955
  else{
831
956
  //The hint is before the insertion position, so insert it
832
957
  //in the remaining range [pos, end)
833
- return this->priv_insert_unique_prepare(pos, cend_it, val, commit_data);
958
+ return this->priv_insert_unique_prepare(pos, cend_it, k, commit_data);
834
959
  }
835
960
  }
836
961
 
837
962
  template<class Convertible>
838
- iterator priv_insert_commit
963
+ BOOST_CONTAINER_FORCEINLINE iterator priv_insert_commit
839
964
  (insert_commit_data &commit_data, BOOST_FWD_REF(Convertible) convertible)
840
965
  {
841
966
  return this->m_data.m_vect.insert
@@ -966,9 +1091,9 @@ class flat_tree
966
1091
 
967
1092
  //!has_trivial_destructor_after_move<> == true_type
968
1093
  //!specialization for optimizations
969
- template <class Key, class T, class KeyOfValue,
1094
+ template <class T, class KeyOfValue,
970
1095
  class Compare, class Allocator>
971
- struct has_trivial_destructor_after_move<boost::container::container_detail::flat_tree<Key, T, KeyOfValue, Compare, Allocator> >
1096
+ struct has_trivial_destructor_after_move<boost::container::container_detail::flat_tree<T, KeyOfValue, Compare, Allocator> >
972
1097
  {
973
1098
  typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
974
1099
  static const bool value = ::boost::has_trivial_destructor_after_move<Allocator>::value &&