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
@@ -1,928 +0,0 @@
1
-
2
- // Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
3
- // Copyright (C) 2005-2011 Daniel James
4
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
5
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
-
7
- #ifndef BOOST_UNORDERED_DETAIL_MANAGER_HPP_INCLUDED
8
- #define BOOST_UNORDERED_DETAIL_MANAGER_HPP_INCLUDED
9
-
10
- #include <boost/config.hpp>
11
- #if defined(BOOST_HAS_PRAGMA_ONCE)
12
- #pragma once
13
- #endif
14
-
15
- #include <boost/unordered/detail/util.hpp>
16
- #include <boost/unordered/detail/allocate.hpp>
17
- #include <boost/type_traits/aligned_storage.hpp>
18
- #include <boost/type_traits/alignment_of.hpp>
19
- #include <boost/type_traits/is_nothrow_move_constructible.hpp>
20
- #include <boost/type_traits/is_nothrow_move_assignable.hpp>
21
- #include <boost/swap.hpp>
22
- #include <boost/assert.hpp>
23
- #include <boost/limits.hpp>
24
- #include <boost/iterator.hpp>
25
-
26
- namespace boost { namespace unordered { namespace detail {
27
-
28
- template <typename Types> struct table;
29
- template <typename NodePointer> struct bucket;
30
- struct ptr_bucket;
31
- template <typename Types> struct table_impl;
32
- template <typename Types> struct grouped_table_impl;
33
-
34
- }}}
35
-
36
- // The 'iterator_detail' namespace was a misguided attempt at avoiding ADL
37
- // in the detail namespace. It didn't work because the template parameters
38
- // were in detail. I'm not changing it at the moment to be safe. I might
39
- // do in the future if I change the iterator types.
40
- namespace boost { namespace unordered { namespace iterator_detail {
41
-
42
- ////////////////////////////////////////////////////////////////////////////
43
- // Iterators
44
- //
45
- // all no throw
46
-
47
- template <typename Node> struct iterator;
48
- template <typename Node> struct c_iterator;
49
- template <typename Node, typename Policy> struct l_iterator;
50
- template <typename Node, typename Policy>
51
- struct cl_iterator;
52
-
53
- // Local Iterators
54
- //
55
- // all no throw
56
-
57
- template <typename Node, typename Policy>
58
- struct l_iterator
59
- : public boost::iterator<
60
- std::forward_iterator_tag,
61
- typename Node::value_type,
62
- std::ptrdiff_t,
63
- typename Node::value_type*,
64
- typename Node::value_type&>
65
- {
66
- #if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
67
- template <typename Node2, typename Policy2>
68
- friend struct boost::unordered::iterator_detail::cl_iterator;
69
- private:
70
- #endif
71
- typedef typename Node::node_pointer node_pointer;
72
- typedef boost::unordered::iterator_detail::iterator<Node> n_iterator;
73
- node_pointer ptr_;
74
- std::size_t bucket_;
75
- std::size_t bucket_count_;
76
-
77
- public:
78
-
79
- typedef typename Node::value_type value_type;
80
-
81
- l_iterator() BOOST_NOEXCEPT : ptr_() {}
82
-
83
- l_iterator(n_iterator x, std::size_t b, std::size_t c) BOOST_NOEXCEPT
84
- : ptr_(x.node_), bucket_(b), bucket_count_(c) {}
85
-
86
- value_type& operator*() const {
87
- return ptr_->value();
88
- }
89
-
90
- value_type* operator->() const {
91
- return ptr_->value_ptr();
92
- }
93
-
94
- l_iterator& operator++() {
95
- ptr_ = static_cast<node_pointer>(ptr_->next_);
96
- if (ptr_ && Policy::to_bucket(bucket_count_, ptr_->hash_)
97
- != bucket_)
98
- ptr_ = node_pointer();
99
- return *this;
100
- }
101
-
102
- l_iterator operator++(int) {
103
- l_iterator tmp(*this);
104
- ++(*this);
105
- return tmp;
106
- }
107
-
108
- bool operator==(l_iterator x) const BOOST_NOEXCEPT {
109
- return ptr_ == x.ptr_;
110
- }
111
-
112
- bool operator!=(l_iterator x) const BOOST_NOEXCEPT {
113
- return ptr_ != x.ptr_;
114
- }
115
- };
116
-
117
- template <typename Node, typename Policy>
118
- struct cl_iterator
119
- : public boost::iterator<
120
- std::forward_iterator_tag,
121
- typename Node::value_type,
122
- std::ptrdiff_t,
123
- typename Node::value_type const*,
124
- typename Node::value_type const&>
125
- {
126
- friend struct boost::unordered::iterator_detail::l_iterator
127
- <Node, Policy>;
128
- private:
129
-
130
- typedef typename Node::node_pointer node_pointer;
131
- typedef boost::unordered::iterator_detail::iterator<Node> n_iterator;
132
- node_pointer ptr_;
133
- std::size_t bucket_;
134
- std::size_t bucket_count_;
135
-
136
- public:
137
-
138
- typedef typename Node::value_type value_type;
139
-
140
- cl_iterator() BOOST_NOEXCEPT : ptr_() {}
141
-
142
- cl_iterator(n_iterator x, std::size_t b, std::size_t c) BOOST_NOEXCEPT :
143
- ptr_(x.node_), bucket_(b), bucket_count_(c) {}
144
-
145
- cl_iterator(boost::unordered::iterator_detail::l_iterator<
146
- Node, Policy> const& x) BOOST_NOEXCEPT :
147
- ptr_(x.ptr_), bucket_(x.bucket_), bucket_count_(x.bucket_count_)
148
- {}
149
-
150
- value_type const& operator*() const {
151
- return ptr_->value();
152
- }
153
-
154
- value_type const* operator->() const {
155
- return ptr_->value_ptr();
156
- }
157
-
158
- cl_iterator& operator++() {
159
- ptr_ = static_cast<node_pointer>(ptr_->next_);
160
- if (ptr_ && Policy::to_bucket(bucket_count_, ptr_->hash_)
161
- != bucket_)
162
- ptr_ = node_pointer();
163
- return *this;
164
- }
165
-
166
- cl_iterator operator++(int) {
167
- cl_iterator tmp(*this);
168
- ++(*this);
169
- return tmp;
170
- }
171
-
172
- friend bool operator==(cl_iterator const& x, cl_iterator const& y)
173
- BOOST_NOEXCEPT
174
- {
175
- return x.ptr_ == y.ptr_;
176
- }
177
-
178
- friend bool operator!=(cl_iterator const& x, cl_iterator const& y)
179
- BOOST_NOEXCEPT
180
- {
181
- return x.ptr_ != y.ptr_;
182
- }
183
- };
184
-
185
- template <typename Node>
186
- struct iterator
187
- : public boost::iterator<
188
- std::forward_iterator_tag,
189
- typename Node::value_type,
190
- std::ptrdiff_t,
191
- typename Node::value_type*,
192
- typename Node::value_type&>
193
- {
194
- #if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
195
- template <typename>
196
- friend struct boost::unordered::iterator_detail::c_iterator;
197
- template <typename, typename>
198
- friend struct boost::unordered::iterator_detail::l_iterator;
199
- template <typename, typename>
200
- friend struct boost::unordered::iterator_detail::cl_iterator;
201
- template <typename>
202
- friend struct boost::unordered::detail::table;
203
- template <typename>
204
- friend struct boost::unordered::detail::table_impl;
205
- template <typename>
206
- friend struct boost::unordered::detail::grouped_table_impl;
207
- private:
208
- #endif
209
- typedef typename Node::node_pointer node_pointer;
210
- node_pointer node_;
211
-
212
- public:
213
-
214
- typedef typename Node::value_type value_type;
215
-
216
- iterator() BOOST_NOEXCEPT : node_() {}
217
-
218
- explicit iterator(typename Node::link_pointer x) BOOST_NOEXCEPT :
219
- node_(static_cast<node_pointer>(x)) {}
220
-
221
- value_type& operator*() const {
222
- return node_->value();
223
- }
224
-
225
- value_type* operator->() const {
226
- return node_->value_ptr();
227
- }
228
-
229
- iterator& operator++() {
230
- node_ = static_cast<node_pointer>(node_->next_);
231
- return *this;
232
- }
233
-
234
- iterator operator++(int) {
235
- iterator tmp(node_);
236
- node_ = static_cast<node_pointer>(node_->next_);
237
- return tmp;
238
- }
239
-
240
- bool operator==(iterator const& x) const BOOST_NOEXCEPT {
241
- return node_ == x.node_;
242
- }
243
-
244
- bool operator!=(iterator const& x) const BOOST_NOEXCEPT {
245
- return node_ != x.node_;
246
- }
247
- };
248
-
249
- template <typename Node>
250
- struct c_iterator
251
- : public boost::iterator<
252
- std::forward_iterator_tag,
253
- typename Node::value_type,
254
- std::ptrdiff_t,
255
- typename Node::value_type const*,
256
- typename Node::value_type const&>
257
- {
258
- friend struct boost::unordered::iterator_detail::iterator<Node>;
259
-
260
- #if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
261
- template <typename>
262
- friend struct boost::unordered::detail::table;
263
- template <typename>
264
- friend struct boost::unordered::detail::table_impl;
265
- template <typename>
266
- friend struct boost::unordered::detail::grouped_table_impl;
267
-
268
- private:
269
- #endif
270
- typedef typename Node::node_pointer node_pointer;
271
- typedef boost::unordered::iterator_detail::iterator<Node> n_iterator;
272
- node_pointer node_;
273
-
274
- public:
275
-
276
- typedef typename Node::value_type value_type;
277
-
278
- c_iterator() BOOST_NOEXCEPT : node_() {}
279
-
280
- explicit c_iterator(typename Node::link_pointer x) BOOST_NOEXCEPT :
281
- node_(static_cast<node_pointer>(x)) {}
282
-
283
- c_iterator(n_iterator const& x) BOOST_NOEXCEPT : node_(x.node_) {}
284
-
285
- value_type const& operator*() const {
286
- return node_->value();
287
- }
288
-
289
- value_type const* operator->() const {
290
- return node_->value_ptr();
291
- }
292
-
293
- c_iterator& operator++() {
294
- node_ = static_cast<node_pointer>(node_->next_);
295
- return *this;
296
- }
297
-
298
- c_iterator operator++(int) {
299
- c_iterator tmp(node_);
300
- node_ = static_cast<node_pointer>(node_->next_);
301
- return tmp;
302
- }
303
-
304
- friend bool operator==(c_iterator const& x, c_iterator const& y)
305
- BOOST_NOEXCEPT
306
- {
307
- return x.node_ == y.node_;
308
- }
309
-
310
- friend bool operator!=(c_iterator const& x, c_iterator const& y)
311
- BOOST_NOEXCEPT
312
- {
313
- return x.node_ != y.node_;
314
- }
315
- };
316
- }}}
317
-
318
- namespace boost { namespace unordered { namespace detail {
319
-
320
- ///////////////////////////////////////////////////////////////////
321
- //
322
- // Node construction
323
-
324
- template <typename NodeAlloc>
325
- struct node_constructor
326
- {
327
- private:
328
-
329
- typedef NodeAlloc node_allocator;
330
- typedef boost::unordered::detail::allocator_traits<NodeAlloc>
331
- node_allocator_traits;
332
- typedef typename node_allocator_traits::value_type node;
333
- typedef typename node_allocator_traits::pointer node_pointer;
334
- typedef typename node::value_type value_type;
335
-
336
- protected:
337
-
338
- node_allocator& alloc_;
339
- node_pointer node_;
340
- bool node_constructed_;
341
- bool value_constructed_;
342
-
343
- public:
344
-
345
- node_constructor(node_allocator& n) :
346
- alloc_(n),
347
- node_(),
348
- node_constructed_(false),
349
- value_constructed_(false)
350
- {
351
- }
352
-
353
- ~node_constructor();
354
-
355
- void construct();
356
-
357
- template <BOOST_UNORDERED_EMPLACE_TEMPLATE>
358
- void construct_with_value(BOOST_UNORDERED_EMPLACE_ARGS)
359
- {
360
- construct();
361
- boost::unordered::detail::func::construct_value_impl(
362
- alloc_, node_->value_ptr(), BOOST_UNORDERED_EMPLACE_FORWARD);
363
- value_constructed_ = true;
364
- }
365
-
366
- template <typename A0>
367
- void construct_with_value2(BOOST_FWD_REF(A0) a0)
368
- {
369
- construct();
370
- boost::unordered::detail::func::construct_value_impl(
371
- alloc_, node_->value_ptr(),
372
- BOOST_UNORDERED_EMPLACE_ARGS1(boost::forward<A0>(a0)));
373
- value_constructed_ = true;
374
- }
375
-
376
- value_type const& value() const {
377
- BOOST_ASSERT(node_ && node_constructed_ && value_constructed_);
378
- return node_->value();
379
- }
380
-
381
- // no throw
382
- node_pointer release()
383
- {
384
- BOOST_ASSERT(node_ && node_constructed_);
385
- node_pointer p = node_;
386
- node_ = node_pointer();
387
- return p;
388
- }
389
-
390
- private:
391
- node_constructor(node_constructor const&);
392
- node_constructor& operator=(node_constructor const&);
393
- };
394
-
395
- template <typename Alloc>
396
- node_constructor<Alloc>::~node_constructor()
397
- {
398
- if (node_) {
399
- if (value_constructed_) {
400
- boost::unordered::detail::func::destroy_value_impl(alloc_,
401
- node_->value_ptr());
402
- }
403
-
404
- if (node_constructed_) {
405
- boost::unordered::detail::func::destroy(
406
- boost::addressof(*node_));
407
- }
408
-
409
- node_allocator_traits::deallocate(alloc_, node_, 1);
410
- }
411
- }
412
-
413
- template <typename Alloc>
414
- void node_constructor<Alloc>::construct()
415
- {
416
- if(!node_) {
417
- node_constructed_ = false;
418
- value_constructed_ = false;
419
-
420
- node_ = node_allocator_traits::allocate(alloc_, 1);
421
-
422
- new ((void*) boost::addressof(*node_)) node();
423
- node_->init(node_);
424
- node_constructed_ = true;
425
- }
426
- else {
427
- BOOST_ASSERT(node_constructed_);
428
-
429
- if (value_constructed_)
430
- {
431
- boost::unordered::detail::func::destroy_value_impl(alloc_,
432
- node_->value_ptr());
433
- value_constructed_ = false;
434
- }
435
- }
436
- }
437
-
438
- ///////////////////////////////////////////////////////////////////
439
- //
440
- // Node Holder
441
- //
442
- // Temporary store for nodes. Deletes any that aren't used.
443
-
444
- template <typename NodeAlloc>
445
- struct node_holder : private node_constructor<NodeAlloc>
446
- {
447
- private:
448
- typedef node_constructor<NodeAlloc> base;
449
-
450
- typedef NodeAlloc node_allocator;
451
- typedef boost::unordered::detail::allocator_traits<NodeAlloc>
452
- node_allocator_traits;
453
- typedef typename node_allocator_traits::value_type node;
454
- typedef typename node_allocator_traits::pointer node_pointer;
455
- typedef typename node::value_type value_type;
456
- typedef typename node::link_pointer link_pointer;
457
- typedef boost::unordered::iterator_detail::iterator<node> iterator;
458
-
459
- node_pointer nodes_;
460
-
461
- public:
462
-
463
- template <typename Table>
464
- explicit node_holder(Table& b) :
465
- base(b.node_alloc()),
466
- nodes_()
467
- {
468
- if (b.size_) {
469
- typename Table::link_pointer prev = b.get_previous_start();
470
- nodes_ = static_cast<node_pointer>(prev->next_);
471
- prev->next_ = link_pointer();
472
- b.size_ = 0;
473
- }
474
- }
475
-
476
- ~node_holder();
477
-
478
- void node_for_assignment()
479
- {
480
- if (!this->node_ && nodes_) {
481
- this->node_ = nodes_;
482
- nodes_ = static_cast<node_pointer>(nodes_->next_);
483
- this->node_->init(this->node_);
484
- this->node_->next_ = link_pointer();
485
-
486
- this->node_constructed_ = true;
487
- this->value_constructed_ = true;
488
- }
489
- }
490
-
491
- template <typename T>
492
- inline void assign_impl(T const& v) {
493
- if (this->node_ && this->value_constructed_) {
494
- this->node_->value() = v;
495
- }
496
- else {
497
- this->construct_with_value2(v);
498
- }
499
- }
500
-
501
- template <typename T1, typename T2>
502
- inline void assign_impl(std::pair<T1 const, T2> const& v) {
503
- this->construct_with_value2(v);
504
- }
505
-
506
- template <typename T>
507
- inline void move_assign_impl(T& v) {
508
- if (this->node_ && this->value_constructed_) {
509
- this->node_->value() = boost::move(v);
510
- }
511
- else {
512
- this->construct_with_value2(boost::move(v));
513
- }
514
- }
515
-
516
- template <typename T1, typename T2>
517
- inline void move_assign_impl(std::pair<T1 const, T2>& v) {
518
- this->construct_with_value2(boost::move(v));
519
- }
520
-
521
- node_pointer copy_of(value_type const& v)
522
- {
523
- node_for_assignment();
524
- assign_impl(v);
525
- return base::release();
526
- }
527
-
528
- node_pointer move_copy_of(value_type& v)
529
- {
530
- node_for_assignment();
531
- move_assign_impl(v);
532
- return base::release();
533
- }
534
-
535
- iterator begin() const
536
- {
537
- return iterator(nodes_);
538
- }
539
- };
540
-
541
- template <typename Alloc>
542
- node_holder<Alloc>::~node_holder()
543
- {
544
- while (nodes_) {
545
- node_pointer p = nodes_;
546
- nodes_ = static_cast<node_pointer>(p->next_);
547
-
548
- boost::unordered::detail::func::destroy_value_impl(this->alloc_,
549
- p->value_ptr());
550
- boost::unordered::detail::func::destroy(boost::addressof(*p));
551
- node_allocator_traits::deallocate(this->alloc_, p, 1);
552
- }
553
- }
554
-
555
- ///////////////////////////////////////////////////////////////////
556
- //
557
- // Bucket
558
-
559
- template <typename NodePointer>
560
- struct bucket
561
- {
562
- typedef NodePointer link_pointer;
563
- link_pointer next_;
564
-
565
- bucket() : next_() {}
566
-
567
- link_pointer first_from_start()
568
- {
569
- return next_;
570
- }
571
-
572
- enum { extra_node = true };
573
- };
574
-
575
- struct ptr_bucket
576
- {
577
- typedef ptr_bucket* link_pointer;
578
- link_pointer next_;
579
-
580
- ptr_bucket() : next_(0) {}
581
-
582
- link_pointer first_from_start()
583
- {
584
- return this;
585
- }
586
-
587
- enum { extra_node = false };
588
- };
589
-
590
- ///////////////////////////////////////////////////////////////////
591
- //
592
- // Hash Policy
593
-
594
- template <typename SizeT>
595
- struct prime_policy
596
- {
597
- template <typename Hash, typename T>
598
- static inline SizeT apply_hash(Hash const& hf, T const& x) {
599
- return hf(x);
600
- }
601
-
602
- static inline SizeT to_bucket(SizeT bucket_count, SizeT hash) {
603
- return hash % bucket_count;
604
- }
605
-
606
- static inline SizeT new_bucket_count(SizeT min) {
607
- return boost::unordered::detail::next_prime(min);
608
- }
609
-
610
- static inline SizeT prev_bucket_count(SizeT max) {
611
- return boost::unordered::detail::prev_prime(max);
612
- }
613
- };
614
-
615
- template <typename SizeT>
616
- struct mix64_policy
617
- {
618
- template <typename Hash, typename T>
619
- static inline SizeT apply_hash(Hash const& hf, T const& x) {
620
- SizeT key = hf(x);
621
- key = (~key) + (key << 21); // key = (key << 21) - key - 1;
622
- key = key ^ (key >> 24);
623
- key = (key + (key << 3)) + (key << 8); // key * 265
624
- key = key ^ (key >> 14);
625
- key = (key + (key << 2)) + (key << 4); // key * 21
626
- key = key ^ (key >> 28);
627
- key = key + (key << 31);
628
- return key;
629
- }
630
-
631
- static inline SizeT to_bucket(SizeT bucket_count, SizeT hash) {
632
- return hash & (bucket_count - 1);
633
- }
634
-
635
- static inline SizeT new_bucket_count(SizeT min) {
636
- if (min <= 4) return 4;
637
- --min;
638
- min |= min >> 1;
639
- min |= min >> 2;
640
- min |= min >> 4;
641
- min |= min >> 8;
642
- min |= min >> 16;
643
- min |= min >> 32;
644
- return min + 1;
645
- }
646
-
647
- static inline SizeT prev_bucket_count(SizeT max) {
648
- max |= max >> 1;
649
- max |= max >> 2;
650
- max |= max >> 4;
651
- max |= max >> 8;
652
- max |= max >> 16;
653
- max |= max >> 32;
654
- return (max >> 1) + 1;
655
- }
656
- };
657
-
658
- template <int digits, int radix>
659
- struct pick_policy_impl {
660
- typedef prime_policy<std::size_t> type;
661
- };
662
-
663
- template <>
664
- struct pick_policy_impl<64, 2> {
665
- typedef mix64_policy<std::size_t> type;
666
- };
667
-
668
- template <typename T>
669
- struct pick_policy :
670
- pick_policy_impl<
671
- std::numeric_limits<std::size_t>::digits,
672
- std::numeric_limits<std::size_t>::radix> {};
673
-
674
- // While the mix policy is generally faster, the prime policy is a lot
675
- // faster when a large number consecutive integers are used, because
676
- // there are no collisions. Since that is probably quite common, use
677
- // prime policy for integeral types. But not the smaller ones, as they
678
- // don't have enough unique values for this to be an issue.
679
-
680
- template <>
681
- struct pick_policy<int> {
682
- typedef prime_policy<std::size_t> type;
683
- };
684
-
685
- template <>
686
- struct pick_policy<unsigned int> {
687
- typedef prime_policy<std::size_t> type;
688
- };
689
-
690
- template <>
691
- struct pick_policy<long> {
692
- typedef prime_policy<std::size_t> type;
693
- };
694
-
695
- template <>
696
- struct pick_policy<unsigned long> {
697
- typedef prime_policy<std::size_t> type;
698
- };
699
-
700
- // TODO: Maybe not if std::size_t is smaller than long long.
701
- #if !defined(BOOST_NO_LONG_LONG)
702
- template <>
703
- struct pick_policy<long long> {
704
- typedef prime_policy<std::size_t> type;
705
- };
706
-
707
- template <>
708
- struct pick_policy<unsigned long long> {
709
- typedef prime_policy<std::size_t> type;
710
- };
711
- #endif
712
-
713
- ////////////////////////////////////////////////////////////////////////////
714
- // Functions
715
-
716
- // Assigning and swapping the equality and hash function objects
717
- // needs strong exception safety. To implement that normally we'd
718
- // require one of them to be known to not throw and the other to
719
- // guarantee strong exception safety. Unfortunately they both only
720
- // have basic exception safety. So to acheive strong exception
721
- // safety we have storage space for two copies, and assign the new
722
- // copies to the unused space. Then switch to using that to use
723
- // them. This is implemented in 'set_hash_functions' which
724
- // atomically assigns the new function objects in a strongly
725
- // exception safe manner.
726
-
727
- template <class H, class P, bool NoThrowMoveAssign>
728
- class set_hash_functions;
729
-
730
- template <class H, class P>
731
- class functions
732
- {
733
- public:
734
- static const bool nothrow_move_assignable =
735
- boost::is_nothrow_move_assignable<H>::value &&
736
- boost::is_nothrow_move_assignable<P>::value;
737
- static const bool nothrow_move_constructible =
738
- boost::is_nothrow_move_constructible<H>::value &&
739
- boost::is_nothrow_move_constructible<P>::value;
740
-
741
- private:
742
- friend class boost::unordered::detail::set_hash_functions<H, P,
743
- nothrow_move_assignable>;
744
- functions& operator=(functions const&);
745
-
746
- typedef compressed<H, P> function_pair;
747
-
748
- typedef typename boost::aligned_storage<
749
- sizeof(function_pair),
750
- boost::alignment_of<function_pair>::value>::type aligned_function;
751
-
752
- bool current_; // The currently active functions.
753
- aligned_function funcs_[2];
754
-
755
- function_pair const& current() const {
756
- return *static_cast<function_pair const*>(
757
- static_cast<void const*>(&funcs_[current_]));
758
- }
759
-
760
- function_pair& current() {
761
- return *static_cast<function_pair*>(
762
- static_cast<void*>(&funcs_[current_]));
763
- }
764
-
765
- void construct(bool which, H const& hf, P const& eq)
766
- {
767
- new((void*) &funcs_[which]) function_pair(hf, eq);
768
- }
769
-
770
- void construct(bool which, function_pair const& f,
771
- boost::unordered::detail::false_type =
772
- boost::unordered::detail::false_type())
773
- {
774
- new((void*) &funcs_[which]) function_pair(f);
775
- }
776
-
777
- void construct(bool which, function_pair& f,
778
- boost::unordered::detail::true_type)
779
- {
780
- new((void*) &funcs_[which]) function_pair(f,
781
- boost::unordered::detail::move_tag());
782
- }
783
-
784
- void destroy(bool which)
785
- {
786
- boost::unordered::detail::func::destroy((function_pair*)(&funcs_[which]));
787
- }
788
-
789
- public:
790
-
791
- typedef boost::unordered::detail::set_hash_functions<H, P,
792
- nothrow_move_assignable> set_hash_functions;
793
-
794
- functions(H const& hf, P const& eq)
795
- : current_(false)
796
- {
797
- construct(current_, hf, eq);
798
- }
799
-
800
- functions(functions const& bf)
801
- : current_(false)
802
- {
803
- construct(current_, bf.current());
804
- }
805
-
806
- functions(functions& bf, boost::unordered::detail::move_tag)
807
- : current_(false)
808
- {
809
- construct(current_, bf.current(),
810
- boost::unordered::detail::integral_constant<bool,
811
- nothrow_move_constructible>());
812
- }
813
-
814
- ~functions() {
815
- this->destroy(current_);
816
- }
817
-
818
- H const& hash_function() const {
819
- return current().first();
820
- }
821
-
822
- P const& key_eq() const {
823
- return current().second();
824
- }
825
- };
826
-
827
- template <class H, class P>
828
- class set_hash_functions<H, P, false>
829
- {
830
- set_hash_functions(set_hash_functions const&);
831
- set_hash_functions& operator=(set_hash_functions const&);
832
-
833
- typedef functions<H, P> functions_type;
834
-
835
- functions_type& functions_;
836
- bool tmp_functions_;
837
-
838
- public:
839
-
840
- set_hash_functions(functions_type& f, H const& h, P const& p)
841
- : functions_(f),
842
- tmp_functions_(!f.current_)
843
- {
844
- f.construct(tmp_functions_, h, p);
845
- }
846
-
847
- set_hash_functions(functions_type& f, functions_type const& other)
848
- : functions_(f),
849
- tmp_functions_(!f.current_)
850
- {
851
- f.construct(tmp_functions_, other.current());
852
- }
853
-
854
- ~set_hash_functions()
855
- {
856
- functions_.destroy(tmp_functions_);
857
- }
858
-
859
- void commit()
860
- {
861
- functions_.current_ = tmp_functions_;
862
- tmp_functions_ = !tmp_functions_;
863
- }
864
- };
865
-
866
- template <class H, class P>
867
- class set_hash_functions<H, P, true>
868
- {
869
- set_hash_functions(set_hash_functions const&);
870
- set_hash_functions& operator=(set_hash_functions const&);
871
-
872
- typedef functions<H, P> functions_type;
873
-
874
- functions_type& functions_;
875
- H hash_;
876
- P pred_;
877
-
878
- public:
879
-
880
- set_hash_functions(functions_type& f, H const& h, P const& p) :
881
- functions_(f),
882
- hash_(h),
883
- pred_(p) {}
884
-
885
- set_hash_functions(functions_type& f, functions_type const& other) :
886
- functions_(f),
887
- hash_(other.hash_function()),
888
- pred_(other.key_eq()) {}
889
-
890
- void commit()
891
- {
892
- functions_.current().first() = boost::move(hash_);
893
- functions_.current().second() = boost::move(pred_);
894
- }
895
- };
896
-
897
- ////////////////////////////////////////////////////////////////////////////
898
- // rvalue parameters when type can't be a BOOST_RV_REF(T) parameter
899
- // e.g. for int
900
-
901
- #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
902
- # define BOOST_UNORDERED_RV_REF(T) BOOST_RV_REF(T)
903
- #else
904
- struct please_ignore_this_overload {
905
- typedef please_ignore_this_overload type;
906
- };
907
-
908
- template <typename T>
909
- struct rv_ref_impl {
910
- typedef BOOST_RV_REF(T) type;
911
- };
912
-
913
- template <typename T>
914
- struct rv_ref :
915
- boost::detail::if_true<
916
- boost::is_class<T>::value
917
- >::BOOST_NESTED_TEMPLATE then <
918
- boost::unordered::detail::rv_ref_impl<T>,
919
- please_ignore_this_overload
920
- >::type
921
- {};
922
-
923
- # define BOOST_UNORDERED_RV_REF(T) \
924
- typename boost::unordered::detail::rv_ref<T>::type
925
- #endif
926
- }}}
927
-
928
- #endif