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
@@ -0,0 +1,121 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2015-2016.
4
+ // Distributed under the Boost Software License, Version 1.0.
5
+ // (See accompanying file LICENSE_1_0.txt or copy at
6
+ // http://www.boost.org/LICENSE_1_0.txt)
7
+ //
8
+ // See http://www.boost.org/libs/move for documentation.
9
+ //
10
+ //////////////////////////////////////////////////////////////////////////////
11
+ #ifndef BOOST_MOVE_ALGO_BASIC_OP
12
+ #define BOOST_MOVE_ALGO_BASIC_OP
13
+
14
+ #ifndef BOOST_CONFIG_HPP
15
+ # include <boost/config.hpp>
16
+ #endif
17
+ #
18
+ #if defined(BOOST_HAS_PRAGMA_ONCE)
19
+ # pragma once
20
+ #endif
21
+
22
+ #include <boost/move/utility_core.hpp>
23
+ #include <boost/move/adl_move_swap.hpp>
24
+ #include <boost/move/detail/iterator_traits.hpp>
25
+
26
+ namespace boost {
27
+ namespace movelib {
28
+
29
+ struct forward_t{};
30
+ struct backward_t{};
31
+ struct three_way_t{};
32
+ struct three_way_forward_t{};
33
+ struct four_way_t{};
34
+
35
+ struct move_op
36
+ {
37
+ template <class SourceIt, class DestinationIt>
38
+ void operator()(SourceIt source, DestinationIt dest)
39
+ { *dest = ::boost::move(*source); }
40
+
41
+ template <class SourceIt, class DestinationIt>
42
+ DestinationIt operator()(forward_t, SourceIt first, SourceIt last, DestinationIt dest_begin)
43
+ { return ::boost::move(first, last, dest_begin); }
44
+
45
+ template <class SourceIt, class DestinationIt>
46
+ DestinationIt operator()(backward_t, SourceIt first, SourceIt last, DestinationIt dest_last)
47
+ { return ::boost::move_backward(first, last, dest_last); }
48
+
49
+ template <class SourceIt, class DestinationIt1, class DestinationIt2>
50
+ void operator()(three_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it)
51
+ {
52
+ *dest2it = boost::move(*dest1it);
53
+ *dest1it = boost::move(*srcit);
54
+ }
55
+
56
+ template <class SourceIt, class DestinationIt1, class DestinationIt2>
57
+ DestinationIt2 operator()(three_way_forward_t, SourceIt srcit, SourceIt srcitend, DestinationIt1 dest1it, DestinationIt2 dest2it)
58
+ {
59
+ //Destination2 range can overlap SourceIt range so avoid boost::move
60
+ while(srcit != srcitend){
61
+ this->operator()(three_way_t(), srcit++, dest1it++, dest2it++);
62
+ }
63
+ return dest2it;
64
+ }
65
+
66
+ template <class SourceIt, class DestinationIt1, class DestinationIt2, class DestinationIt3>
67
+ void operator()(four_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it, DestinationIt3 dest3it)
68
+ {
69
+ *dest3it = boost::move(*dest2it);
70
+ *dest2it = boost::move(*dest1it);
71
+ *dest1it = boost::move(*srcit);
72
+ }
73
+ };
74
+
75
+ struct swap_op
76
+ {
77
+ template <class SourceIt, class DestinationIt>
78
+ void operator()(SourceIt source, DestinationIt dest)
79
+ { boost::adl_move_swap(*dest, *source); }
80
+
81
+ template <class SourceIt, class DestinationIt>
82
+ DestinationIt operator()(forward_t, SourceIt first, SourceIt last, DestinationIt dest_begin)
83
+ { return boost::adl_move_swap_ranges(first, last, dest_begin); }
84
+
85
+ template <class SourceIt, class DestinationIt>
86
+ DestinationIt operator()(backward_t, SourceIt first, SourceIt last, DestinationIt dest_begin)
87
+ { return boost::adl_move_swap_ranges_backward(first, last, dest_begin); }
88
+
89
+ template <class SourceIt, class DestinationIt1, class DestinationIt2>
90
+ void operator()(three_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it)
91
+ {
92
+ typename ::boost::movelib::iterator_traits<SourceIt>::value_type tmp(boost::move(*dest2it));
93
+ *dest2it = boost::move(*dest1it);
94
+ *dest1it = boost::move(*srcit);
95
+ *srcit = boost::move(tmp);
96
+ }
97
+
98
+ template <class SourceIt, class DestinationIt1, class DestinationIt2>
99
+ DestinationIt2 operator()(three_way_forward_t, SourceIt srcit, SourceIt srcitend, DestinationIt1 dest1it, DestinationIt2 dest2it)
100
+ {
101
+ while(srcit != srcitend){
102
+ this->operator()(three_way_t(), srcit++, dest1it++, dest2it++);
103
+ }
104
+ return dest2it;
105
+ }
106
+
107
+ template <class SourceIt, class DestinationIt1, class DestinationIt2, class DestinationIt3>
108
+ void operator()(four_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it, DestinationIt3 dest3it)
109
+ {
110
+ typename ::boost::movelib::iterator_traits<SourceIt>::value_type tmp(boost::move(*dest3it));
111
+ *dest3it = boost::move(*dest2it);
112
+ *dest2it = boost::move(*dest1it);
113
+ *dest1it = boost::move(*srcit);
114
+ *srcit = boost::move(tmp);
115
+ }
116
+ };
117
+
118
+
119
+ }} //namespace boost::movelib
120
+
121
+ #endif //BOOST_MOVE_ALGO_BASIC_OP
@@ -0,0 +1,127 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2014-2014.
4
+ // Distributed under the Boost Software License, Version 1.0.
5
+ // (See accompanying file LICENSE_1_0.txt or copy at
6
+ // http://www.boost.org/LICENSE_1_0.txt)
7
+ //
8
+ // See http://www.boost.org/libs/move for documentation.
9
+ //
10
+ //////////////////////////////////////////////////////////////////////////////
11
+
12
+ //! \file
13
+
14
+ #ifndef BOOST_MOVE_DETAIL_INSERT_SORT_HPP
15
+ #define BOOST_MOVE_DETAIL_INSERT_SORT_HPP
16
+
17
+ #ifndef BOOST_CONFIG_HPP
18
+ # include <boost/config.hpp>
19
+ #endif
20
+ #
21
+ #if defined(BOOST_HAS_PRAGMA_ONCE)
22
+ # pragma once
23
+ #endif
24
+
25
+ #include <boost/move/utility_core.hpp>
26
+ #include <boost/move/algo/move.hpp>
27
+ #include <boost/move/detail/iterator_traits.hpp>
28
+ #include <boost/move/adl_move_swap.hpp>
29
+ #include <boost/move/utility_core.hpp>
30
+ #include <boost/move/detail/placement_new.hpp>
31
+ #include <boost/move/detail/destruct_n.hpp>
32
+ #include <boost/move/algo/detail/basic_op.hpp>
33
+ #include <boost/move/detail/placement_new.hpp>
34
+
35
+ namespace boost { namespace movelib{
36
+
37
+ // @cond
38
+
39
+ template <class Compare, class ForwardIterator, class BirdirectionalIterator, class Op>
40
+ void insertion_sort_op(ForwardIterator first1, ForwardIterator last1, BirdirectionalIterator first2, Compare comp, Op op)
41
+ {
42
+ if (first1 != last1){
43
+ BirdirectionalIterator last2 = first2;
44
+ op(first1, last2);
45
+ for (++last2; ++first1 != last1; ++last2){
46
+ BirdirectionalIterator j2 = last2;
47
+ BirdirectionalIterator i2 = j2;
48
+ if (comp(*first1, *--i2)){
49
+ op(i2, j2);
50
+ for (--j2; i2 != first2 && comp(*first1, *--i2); --j2) {
51
+ op(i2, j2);
52
+ }
53
+ }
54
+ op(first1, j2);
55
+ }
56
+ }
57
+ }
58
+
59
+ template <class Compare, class ForwardIterator, class BirdirectionalIterator>
60
+ void insertion_sort_swap(ForwardIterator first1, ForwardIterator last1, BirdirectionalIterator first2, Compare comp)
61
+ {
62
+ insertion_sort_op(first1, last1, first2, comp, swap_op());
63
+ }
64
+
65
+
66
+ template <class Compare, class ForwardIterator, class BirdirectionalIterator>
67
+ void insertion_sort_copy(ForwardIterator first1, ForwardIterator last1, BirdirectionalIterator first2, Compare comp)
68
+ {
69
+ insertion_sort_op(first1, last1, first2, comp, move_op());
70
+ }
71
+
72
+ // @endcond
73
+
74
+ template <class Compare, class BirdirectionalIterator>
75
+ void insertion_sort(BirdirectionalIterator first, BirdirectionalIterator last, Compare comp)
76
+ {
77
+ typedef typename boost::movelib::iterator_traits<BirdirectionalIterator>::value_type value_type;
78
+ if (first != last){
79
+ BirdirectionalIterator i = first;
80
+ for (++i; i != last; ++i){
81
+ BirdirectionalIterator j = i;
82
+ if (comp(*i, *--j)) {
83
+ value_type tmp(::boost::move(*i));
84
+ *i = ::boost::move(*j);
85
+ for (BirdirectionalIterator k = j; k != first && comp(tmp, *--k); --j) {
86
+ *j = ::boost::move(*k);
87
+ }
88
+ *j = ::boost::move(tmp);
89
+ }
90
+ }
91
+ }
92
+ }
93
+
94
+ template <class Compare, class BirdirectionalIterator>
95
+ void insertion_sort_uninitialized_copy
96
+ (BirdirectionalIterator first1, BirdirectionalIterator const last1
97
+ , typename iterator_traits<BirdirectionalIterator>::value_type* const first2
98
+ , Compare comp)
99
+ {
100
+ typedef typename iterator_traits<BirdirectionalIterator>::value_type value_type;
101
+ if (first1 != last1){
102
+ value_type* last2 = first2;
103
+ ::new(last2, boost_move_new_t()) value_type(move(*first1));
104
+ destruct_n<value_type> d(first2);
105
+ d.incr();
106
+ for (++last2; ++first1 != last1; ++last2){
107
+ value_type* j2 = last2;
108
+ value_type* k2 = j2;
109
+ if (comp(*first1, *--k2)){
110
+ ::new(j2, boost_move_new_t()) value_type(move(*k2));
111
+ d.incr();
112
+ for (--j2; k2 != first2 && comp(*first1, *--k2); --j2)
113
+ *j2 = move(*k2);
114
+ *j2 = move(*first1);
115
+ }
116
+ else{
117
+ ::new(j2, boost_move_new_t()) value_type(move(*first1));
118
+ d.incr();
119
+ }
120
+ }
121
+ d.release();
122
+ }
123
+ }
124
+
125
+ }} //namespace boost { namespace movelib{
126
+
127
+ #endif //#ifndef BOOST_MOVE_DETAIL_INSERT_SORT_HPP
@@ -0,0 +1,637 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2015-2016.
4
+ // Distributed under the Boost Software License, Version 1.0.
5
+ // (See accompanying file LICENSE_1_0.txt or copy at
6
+ // http://www.boost.org/LICENSE_1_0.txt)
7
+ //
8
+ // See http://www.boost.org/libs/move for documentation.
9
+ //
10
+ //////////////////////////////////////////////////////////////////////////////
11
+ #ifndef BOOST_MOVE_MERGE_HPP
12
+ #define BOOST_MOVE_MERGE_HPP
13
+
14
+ #include <boost/move/algo/move.hpp>
15
+ #include <boost/move/adl_move_swap.hpp>
16
+ #include <boost/move/algo/detail/basic_op.hpp>
17
+ #include <boost/move/detail/iterator_traits.hpp>
18
+ #include <boost/move/detail/destruct_n.hpp>
19
+ #include <boost/assert.hpp>
20
+
21
+ namespace boost {
22
+ namespace movelib {
23
+
24
+ // @cond
25
+
26
+ /*
27
+ template<typename Unsigned>
28
+ inline Unsigned gcd(Unsigned x, Unsigned y)
29
+ {
30
+ if(0 == ((x &(x-1)) | (y & (y-1)))){
31
+ return x < y ? x : y;
32
+ }
33
+ else{
34
+ do
35
+ {
36
+ Unsigned t = x % y;
37
+ x = y;
38
+ y = t;
39
+ } while (y);
40
+ return x;
41
+ }
42
+ }
43
+ */
44
+
45
+ //Modified version from "An Optimal In-Place Array Rotation Algorithm", Ching-Kuang Shene
46
+ template<typename Unsigned>
47
+ Unsigned gcd(Unsigned x, Unsigned y)
48
+ {
49
+ if(0 == ((x &(x-1)) | (y & (y-1)))){
50
+ return x < y ? x : y;
51
+ }
52
+ else{
53
+ Unsigned z = 1;
54
+ while((!(x&1)) & (!(y&1))){
55
+ z <<=1, x>>=1, y>>=1;
56
+ }
57
+ while(x && y){
58
+ if(!(x&1))
59
+ x >>=1;
60
+ else if(!(y&1))
61
+ y >>=1;
62
+ else if(x >=y)
63
+ x = (x-y) >> 1;
64
+ else
65
+ y = (y-x) >> 1;
66
+ }
67
+ return z*(x+y);
68
+ }
69
+ }
70
+
71
+ template<typename RandIt>
72
+ RandIt rotate_gcd(RandIt first, RandIt middle, RandIt last)
73
+ {
74
+ typedef typename iterator_traits<RandIt>::size_type size_type;
75
+ typedef typename iterator_traits<RandIt>::value_type value_type;
76
+
77
+ if(first == middle)
78
+ return last;
79
+ if(middle == last)
80
+ return first;
81
+ const size_type middle_pos = size_type(middle - first);
82
+ RandIt ret = last - middle_pos;
83
+ if (middle == ret){
84
+ boost::adl_move_swap_ranges(first, middle, middle);
85
+ }
86
+ else{
87
+ const size_type length = size_type(last - first);
88
+ for( RandIt it_i(first), it_gcd(it_i + gcd(length, middle_pos))
89
+ ; it_i != it_gcd
90
+ ; ++it_i){
91
+ value_type temp(boost::move(*it_i));
92
+ RandIt it_j = it_i;
93
+ RandIt it_k = it_j+middle_pos;
94
+ do{
95
+ *it_j = boost::move(*it_k);
96
+ it_j = it_k;
97
+ size_type const left = size_type(last - it_j);
98
+ it_k = left > middle_pos ? it_j + middle_pos : first + (middle_pos - left);
99
+ } while(it_k != it_i);
100
+ *it_j = boost::move(temp);
101
+ }
102
+ }
103
+ return ret;
104
+ }
105
+
106
+ template <class RandIt, class T, class Compare>
107
+ RandIt lower_bound
108
+ (RandIt first, const RandIt last, const T& key, Compare comp)
109
+ {
110
+ typedef typename iterator_traits
111
+ <RandIt>::size_type size_type;
112
+ size_type len = size_type(last - first);
113
+ RandIt middle;
114
+
115
+ while (len) {
116
+ size_type step = len >> 1;
117
+ middle = first;
118
+ middle += step;
119
+
120
+ if (comp(*middle, key)) {
121
+ first = ++middle;
122
+ len -= step + 1;
123
+ }
124
+ else{
125
+ len = step;
126
+ }
127
+ }
128
+ return first;
129
+ }
130
+
131
+ template <class RandIt, class T, class Compare>
132
+ RandIt upper_bound
133
+ (RandIt first, const RandIt last, const T& key, Compare comp)
134
+ {
135
+ typedef typename iterator_traits
136
+ <RandIt>::size_type size_type;
137
+ size_type len = size_type(last - first);
138
+ RandIt middle;
139
+
140
+ while (len) {
141
+ size_type step = len >> 1;
142
+ middle = first;
143
+ middle += step;
144
+
145
+ if (!comp(key, *middle)) {
146
+ first = ++middle;
147
+ len -= step + 1;
148
+ }
149
+ else{
150
+ len = step;
151
+ }
152
+ }
153
+ return first;
154
+ }
155
+
156
+
157
+ template<class RandIt, class Compare, class Op>
158
+ void op_merge_left( RandIt buf_first
159
+ , RandIt first1
160
+ , RandIt const last1
161
+ , RandIt const last2
162
+ , Compare comp
163
+ , Op op)
164
+ {
165
+ for(RandIt first2=last1; first2 != last2; ++buf_first){
166
+ if(first1 == last1){
167
+ op(forward_t(), first2, last2, buf_first);
168
+ return;
169
+ }
170
+ else if(comp(*first2, *first1)){
171
+ op(first2, buf_first);
172
+ ++first2;
173
+ }
174
+ else{
175
+ op(first1, buf_first);
176
+ ++first1;
177
+ }
178
+ }
179
+ if(buf_first != first1){//In case all remaining elements are in the same place
180
+ //(e.g. buffer is exactly the size of the second half
181
+ //and all elements from the second half are less)
182
+ op(forward_t(), first1, last1, buf_first);
183
+ }
184
+ else{
185
+ buf_first = buf_first;
186
+ }
187
+ }
188
+
189
+ // [buf_first, first1) -> buffer
190
+ // [first1, last1) merge [last1,last2) -> [buf_first,buf_first+(last2-first1))
191
+ // Elements from buffer are moved to [last2 - (first1-buf_first), last2)
192
+ // Note: distance(buf_first, first1) >= distance(last1, last2), so no overlapping occurs
193
+ template<class RandIt, class Compare>
194
+ void merge_left
195
+ (RandIt buf_first, RandIt first1, RandIt const last1, RandIt const last2, Compare comp)
196
+ {
197
+ op_merge_left(buf_first, first1, last1, last2, comp, move_op());
198
+ }
199
+
200
+ // [buf_first, first1) -> buffer
201
+ // [first1, last1) merge [last1,last2) -> [buf_first,buf_first+(last2-first1))
202
+ // Elements from buffer are swapped to [last2 - (first1-buf_first), last2)
203
+ // Note: distance(buf_first, first1) >= distance(last1, last2), so no overlapping occurs
204
+ template<class RandIt, class Compare>
205
+ void swap_merge_left
206
+ (RandIt buf_first, RandIt first1, RandIt const last1, RandIt const last2, Compare comp)
207
+ {
208
+ op_merge_left(buf_first, first1, last1, last2, comp, swap_op());
209
+ }
210
+
211
+ template<class RandIt, class Compare, class Op>
212
+ void op_merge_right
213
+ (RandIt const first1, RandIt last1, RandIt last2, RandIt buf_last, Compare comp, Op op)
214
+ {
215
+ RandIt const first2 = last1;
216
+ while(first1 != last1){
217
+ if(last2 == first2){
218
+ op(backward_t(), first1, last1, buf_last);
219
+ return;
220
+ }
221
+ --last2;
222
+ --last1;
223
+ --buf_last;
224
+ if(comp(*last2, *last1)){
225
+ op(last1, buf_last);
226
+ ++last2;
227
+ }
228
+ else{
229
+ op(last2, buf_last);
230
+ ++last1;
231
+ }
232
+ }
233
+ if(last2 != buf_last){ //In case all remaining elements are in the same place
234
+ //(e.g. buffer is exactly the size of the first half
235
+ //and all elements from the second half are less)
236
+ op(backward_t(), first2, last2, buf_last);
237
+ }
238
+ }
239
+
240
+ // [last2, buf_last) - buffer
241
+ // [first1, last1) merge [last1,last2) -> [first1+(buf_last-last2), buf_last)
242
+ // Note: distance[last2, buf_last) >= distance[first1, last1), so no overlapping occurs
243
+ template<class RandIt, class Compare>
244
+ void merge_right
245
+ (RandIt first1, RandIt last1, RandIt last2, RandIt buf_last, Compare comp)
246
+ {
247
+ op_merge_right(first1, last1, last2, buf_last, comp, move_op());
248
+ }
249
+
250
+ // [last2, buf_last) - buffer
251
+ // [first1, last1) merge [last1,last2) -> [first1+(buf_last-last2), buf_last)
252
+ // Note: distance[last2, buf_last) >= distance[first1, last1), so no overlapping occurs
253
+ template<class RandIt, class Compare>
254
+ void swap_merge_right
255
+ (RandIt first1, RandIt last1, RandIt last2, RandIt buf_last, Compare comp)
256
+ {
257
+ op_merge_right(first1, last1, last2, buf_last, comp, swap_op());
258
+ }
259
+
260
+ template <class BidirIt, class Distance, class Compare>
261
+ void merge_bufferless_ONlogN_recursive
262
+ (BidirIt first, BidirIt middle, BidirIt last, Distance len1, Distance len2, Compare comp)
263
+ {
264
+ typedef typename iterator_traits<BidirIt>::size_type size_type;
265
+ while(1) {
266
+ //#define MERGE_BUFFERLESS_RECURSIVE_OPT
267
+ #ifndef MERGE_BUFFERLESS_RECURSIVE_OPT
268
+ if (len2 == 0) {
269
+ return;
270
+ }
271
+
272
+ if (!len1) {
273
+ return;
274
+ }
275
+
276
+ if ((len1 | len2) == 1) {
277
+ if (comp(*middle, *first))
278
+ adl_move_swap(*first, *middle);
279
+ return;
280
+ }
281
+ #else
282
+ if (len2 == 0) {
283
+ return;
284
+ }
285
+
286
+ if (!len1) {
287
+ return;
288
+ }
289
+ BidirIt middle_prev = middle; --middle_prev;
290
+ if(!comp(*middle, *middle_prev))
291
+ return;
292
+
293
+ while(true) {
294
+ if (comp(*middle, *first))
295
+ break;
296
+ ++first;
297
+ if(--len1 == 1)
298
+ break;
299
+ }
300
+
301
+ if (len1 == 1 && len2 == 1) {
302
+ //comp(*middle, *first) == true already tested in the loop
303
+ adl_move_swap(*first, *middle);
304
+ return;
305
+ }
306
+ #endif
307
+
308
+ BidirIt first_cut = first;
309
+ BidirIt second_cut = middle;
310
+ Distance len11 = 0;
311
+ Distance len22 = 0;
312
+ if (len1 > len2) {
313
+ len11 = len1 / 2;
314
+ first_cut += len11;
315
+ second_cut = lower_bound(middle, last, *first_cut, comp);
316
+ len22 = size_type(second_cut - middle);
317
+ }
318
+ else {
319
+ len22 = len2 / 2;
320
+ second_cut += len22;
321
+ first_cut = upper_bound(first, middle, *second_cut, comp);
322
+ len11 = size_type(first_cut - first);
323
+ }
324
+ BidirIt new_middle = rotate_gcd(first_cut, middle, second_cut);
325
+
326
+ //Avoid one recursive call doing a manual tail call elimination on the biggest range
327
+ const Distance len_internal = len11+len22;
328
+ if( len_internal < (len1 + len2 - len_internal) ) {
329
+ merge_bufferless_ONlogN_recursive(first, first_cut, new_middle, len11, len22, comp);
330
+ //merge_bufferless_recursive(new_middle, second_cut, last, len1 - len11, len2 - len22, comp);
331
+ first = new_middle;
332
+ middle = second_cut;
333
+ len1 -= len11;
334
+ len2 -= len22;
335
+ }
336
+ else {
337
+ //merge_bufferless_recursive(first, first_cut, new_middle, len11, len22, comp);
338
+ merge_bufferless_ONlogN_recursive(new_middle, second_cut, last, len1 - len11, len2 - len22, comp);
339
+ middle = first_cut;
340
+ last = new_middle;
341
+ len1 = len11;
342
+ len2 = len22;
343
+ }
344
+ }
345
+ }
346
+
347
+ //Complexity: NlogN
348
+ template<class BidirIt, class Compare>
349
+ void merge_bufferless_ONlogN(BidirIt first, BidirIt middle, BidirIt last, Compare comp)
350
+ {
351
+ merge_bufferless_ONlogN_recursive
352
+ (first, middle, last, middle - first, last - middle, comp);
353
+ }
354
+
355
+ //Complexity: min(len1,len2)^2 + max(len1,len2)
356
+ template<class RandIt, class Compare>
357
+ void merge_bufferless_ON2(RandIt first, RandIt middle, RandIt last, Compare comp)
358
+ {
359
+ if((middle - first) < (last - middle)){
360
+ while(first != middle){
361
+ RandIt const old_last1 = middle;
362
+ middle = lower_bound(middle, last, *first, comp);
363
+ first = rotate_gcd(first, old_last1, middle);
364
+ if(middle == last){
365
+ break;
366
+ }
367
+ do{
368
+ ++first;
369
+ } while(first != middle && !comp(*middle, *first));
370
+ }
371
+ }
372
+ else{
373
+ while(middle != last){
374
+ RandIt p = upper_bound(first, middle, last[-1], comp);
375
+ last = rotate_gcd(p, middle, last);
376
+ middle = p;
377
+ if(middle == first){
378
+ break;
379
+ }
380
+ --p;
381
+ do{
382
+ --last;
383
+ } while(middle != last && !comp(last[-1], *p));
384
+ }
385
+ }
386
+ }
387
+
388
+ template<class RandIt, class Compare>
389
+ void merge_bufferless(RandIt first, RandIt middle, RandIt last, Compare comp)
390
+ {
391
+ //#define BOOST_ADAPTIVE_MERGE_NLOGN_MERGE
392
+ #ifdef BOOST_ADAPTIVE_MERGE_NLOGN_MERGE
393
+ merge_bufferless_ONlogN(first, middle, last, comp);
394
+ #else
395
+ merge_bufferless_ON2(first, middle, last, comp);
396
+ #endif //BOOST_ADAPTIVE_MERGE_NLOGN_MERGE
397
+ }
398
+
399
+ template<class Comp>
400
+ struct antistable
401
+ {
402
+ explicit antistable(Comp &comp)
403
+ : m_comp(comp)
404
+ {}
405
+
406
+ template<class U, class V>
407
+ bool operator()(const U &u, const V & v)
408
+ { return !m_comp(v, u); }
409
+
410
+ private:
411
+ antistable & operator=(const antistable &);
412
+ Comp &m_comp;
413
+ };
414
+
415
+ template <class Comp>
416
+ class negate
417
+ {
418
+ public:
419
+ negate()
420
+ {}
421
+
422
+ explicit negate(Comp comp)
423
+ : m_comp(comp)
424
+ {}
425
+
426
+ template <class T1, class T2>
427
+ bool operator()(const T1& l, const T2& r)
428
+ {
429
+ return !m_comp(l, r);
430
+ }
431
+
432
+ private:
433
+ Comp m_comp;
434
+ };
435
+
436
+
437
+ template <class Comp>
438
+ class inverse
439
+ {
440
+ public:
441
+ inverse()
442
+ {}
443
+
444
+ explicit inverse(Comp comp)
445
+ : m_comp(comp)
446
+ {}
447
+
448
+ template <class T1, class T2>
449
+ bool operator()(const T1& l, const T2& r)
450
+ {
451
+ return m_comp(r, l);
452
+ }
453
+
454
+ private:
455
+ Comp m_comp;
456
+ };
457
+
458
+ // [r_first, r_last) are already in the right part of the destination range.
459
+ template <class Compare, class InputIterator, class InputOutIterator, class Op>
460
+ void op_merge_with_right_placed
461
+ ( InputIterator first, InputIterator last
462
+ , InputOutIterator dest_first, InputOutIterator r_first, InputOutIterator r_last
463
+ , Compare comp, Op op)
464
+ {
465
+ BOOST_ASSERT((last - first) == (r_first - dest_first));
466
+ while ( first != last ) {
467
+ if (r_first == r_last) {
468
+ InputOutIterator end = op(forward_t(), first, last, dest_first);
469
+ BOOST_ASSERT(end == r_last);
470
+ (void)end;
471
+ return;
472
+ }
473
+ else if (comp(*r_first, *first)) {
474
+ op(r_first, dest_first);
475
+ ++r_first;
476
+ }
477
+ else {
478
+ op(first, dest_first);
479
+ ++first;
480
+ }
481
+ ++dest_first;
482
+ }
483
+ // Remaining [r_first, r_last) already in the correct place
484
+ }
485
+
486
+ template <class Compare, class InputIterator, class InputOutIterator>
487
+ void swap_merge_with_right_placed
488
+ ( InputIterator first, InputIterator last
489
+ , InputOutIterator dest_first, InputOutIterator r_first, InputOutIterator r_last
490
+ , Compare comp)
491
+ {
492
+ op_merge_with_right_placed(first, last, dest_first, r_first, r_last, comp, swap_op());
493
+ }
494
+
495
+ // [first, last) are already in the right part of the destination range.
496
+ template <class Compare, class Op, class BidirIterator, class BidirOutIterator>
497
+ void op_merge_with_left_placed
498
+ ( BidirOutIterator const first, BidirOutIterator last, BidirOutIterator dest_last
499
+ , BidirIterator const r_first, BidirIterator r_last
500
+ , Compare comp, Op op)
501
+ {
502
+ BOOST_ASSERT((dest_last - last) == (r_last - r_first));
503
+ while( r_first != r_last ) {
504
+ if(first == last) {
505
+ BidirOutIterator res = op(backward_t(), r_first, r_last, dest_last);
506
+ BOOST_ASSERT(last == res);
507
+ (void)res;
508
+ return;
509
+ }
510
+ --r_last;
511
+ --last;
512
+ if(comp(*r_last, *last)){
513
+ ++r_last;
514
+ --dest_last;
515
+ op(last, dest_last);
516
+ }
517
+ else{
518
+ ++last;
519
+ --dest_last;
520
+ op(r_last, dest_last);
521
+ }
522
+ }
523
+ // Remaining [first, last) already in the correct place
524
+ }
525
+
526
+ // @endcond
527
+
528
+ // [irst, last) are already in the right part of the destination range.
529
+ template <class Compare, class BidirIterator, class BidirOutIterator>
530
+ void merge_with_left_placed
531
+ ( BidirOutIterator const first, BidirOutIterator last, BidirOutIterator dest_last
532
+ , BidirIterator const r_first, BidirIterator r_last
533
+ , Compare comp)
534
+ {
535
+ op_merge_with_left_placed(first, last, dest_last, r_first, r_last, comp, move_op());
536
+ }
537
+
538
+ // [r_first, r_last) are already in the right part of the destination range.
539
+ template <class Compare, class InputIterator, class InputOutIterator>
540
+ void merge_with_right_placed
541
+ ( InputIterator first, InputIterator last
542
+ , InputOutIterator dest_first, InputOutIterator r_first, InputOutIterator r_last
543
+ , Compare comp)
544
+ {
545
+ op_merge_with_right_placed(first, last, dest_first, r_first, r_last, comp, move_op());
546
+ }
547
+
548
+ // [r_first, r_last) are already in the right part of the destination range.
549
+ // [dest_first, r_first) is uninitialized memory
550
+ template <class Compare, class InputIterator, class InputOutIterator>
551
+ void uninitialized_merge_with_right_placed
552
+ ( InputIterator first, InputIterator last
553
+ , InputOutIterator dest_first, InputOutIterator r_first, InputOutIterator r_last
554
+ , Compare comp)
555
+ {
556
+ BOOST_ASSERT((last - first) == (r_first - dest_first));
557
+ typedef typename iterator_traits<InputOutIterator>::value_type value_type;
558
+ InputOutIterator const original_r_first = r_first;
559
+
560
+ destruct_n<value_type> d(&*dest_first);
561
+
562
+ while ( first != last && dest_first != original_r_first ) {
563
+ if (r_first == r_last) {
564
+ for(; dest_first != original_r_first; ++dest_first, ++first){
565
+ ::new(&*dest_first) value_type(::boost::move(*first));
566
+ d.incr();
567
+ }
568
+ d.release();
569
+ InputOutIterator end = ::boost::move(first, last, original_r_first);
570
+ BOOST_ASSERT(end == r_last);
571
+ (void)end;
572
+ return;
573
+ }
574
+ else if (comp(*r_first, *first)) {
575
+ ::new(&*dest_first) value_type(::boost::move(*r_first));
576
+ d.incr();
577
+ ++r_first;
578
+ }
579
+ else {
580
+ ::new(&*dest_first) value_type(::boost::move(*first));
581
+ d.incr();
582
+ ++first;
583
+ }
584
+ ++dest_first;
585
+ }
586
+ d.release();
587
+ merge_with_right_placed(first, last, original_r_first, r_first, r_last, comp);
588
+ }
589
+
590
+ /*
591
+ // [r_first, r_last) are already in the right part of the destination range.
592
+ // [dest_first, r_first) is uninitialized memory
593
+ template <class Compare, class BidirOutIterator, class BidirIterator>
594
+ void uninitialized_merge_with_left_placed
595
+ ( BidirOutIterator dest_first, BidirOutIterator r_first, BidirOutIterator r_last
596
+ , BidirIterator first, BidirIterator last
597
+ , Compare comp)
598
+ {
599
+ BOOST_ASSERT((last - first) == (r_last - r_first));
600
+ typedef typename iterator_traits<BidirOutIterator>::value_type value_type;
601
+ BidirOutIterator const original_r_last = r_last;
602
+
603
+ destruct_n<value_type> d(&*dest_last);
604
+
605
+ while ( first != last && dest_first != original_r_first ) {
606
+ if (r_first == r_last) {
607
+ for(; dest_first != original_r_first; ++dest_first, ++first){
608
+ ::new(&*dest_first) value_type(::boost::move(*first));
609
+ d.incr();
610
+ }
611
+ d.release();
612
+ BidirOutIterator end = ::boost::move(first, last, original_r_first);
613
+ BOOST_ASSERT(end == r_last);
614
+ (void)end;
615
+ return;
616
+ }
617
+ else if (comp(*r_first, *first)) {
618
+ ::new(&*dest_first) value_type(::boost::move(*r_first));
619
+ d.incr();
620
+ ++r_first;
621
+ }
622
+ else {
623
+ ::new(&*dest_first) value_type(::boost::move(*first));
624
+ d.incr();
625
+ ++first;
626
+ }
627
+ ++dest_first;
628
+ }
629
+ d.release();
630
+ merge_with_right_placed(first, last, original_r_first, r_first, r_last, comp);
631
+ }
632
+ */
633
+
634
+ } //namespace movelib {
635
+ } //namespace boost {
636
+
637
+ #endif //#define BOOST_MOVE_MERGE_HPP