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,188 +0,0 @@
1
-
2
- // Copyright (C) 2005-2011 Daniel James
3
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
4
- // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
-
6
- #ifndef BOOST_UNORDERED_DETAIL_EXTRACT_KEY_HPP_INCLUDED
7
- #define BOOST_UNORDERED_DETAIL_EXTRACT_KEY_HPP_INCLUDED
8
-
9
- #include <boost/config.hpp>
10
- #if defined(BOOST_HAS_PRAGMA_ONCE)
11
- #pragma once
12
- #endif
13
-
14
- #include <boost/unordered/detail/table.hpp>
15
-
16
- namespace boost {
17
- namespace unordered {
18
- namespace detail {
19
-
20
- // key extractors
21
- //
22
- // no throw
23
- //
24
- // 'extract_key' is called with the emplace parameters to return a
25
- // key if available or 'no_key' is one isn't and will need to be
26
- // constructed. This could be done by overloading the emplace implementation
27
- // for the different cases, but that's a bit tricky on compilers without
28
- // variadic templates.
29
-
30
- struct no_key {
31
- no_key() {}
32
- template <class T> no_key(T const&) {}
33
- };
34
-
35
- template <typename Key, typename T>
36
- struct is_key {
37
- template <typename T2>
38
- static choice1::type test(T2 const&);
39
- static choice2::type test(Key const&);
40
-
41
- enum { value = sizeof(test(boost::unordered::detail::make<T>())) ==
42
- sizeof(choice2::type) };
43
-
44
- typedef typename boost::detail::if_true<value>::
45
- BOOST_NESTED_TEMPLATE then<Key const&, no_key>::type type;
46
- };
47
-
48
- template <class ValueType>
49
- struct set_extractor
50
- {
51
- typedef ValueType value_type;
52
- typedef ValueType key_type;
53
-
54
- static key_type const& extract(key_type const& v)
55
- {
56
- return v;
57
- }
58
-
59
- static no_key extract()
60
- {
61
- return no_key();
62
- }
63
-
64
- template <class Arg>
65
- static no_key extract(Arg const&)
66
- {
67
- return no_key();
68
- }
69
-
70
- #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
71
- template <class Arg1, class Arg2, class... Args>
72
- static no_key extract(Arg1 const&, Arg2 const&, Args const&...)
73
- {
74
- return no_key();
75
- }
76
- #else
77
- template <class Arg1, class Arg2>
78
- static no_key extract(Arg1 const&, Arg2 const&)
79
- {
80
- return no_key();
81
- }
82
- #endif
83
- };
84
-
85
- template <class Key, class ValueType>
86
- struct map_extractor
87
- {
88
- typedef ValueType value_type;
89
- typedef typename boost::remove_const<Key>::type key_type;
90
-
91
- static key_type const& extract(value_type const& v)
92
- {
93
- return v.first;
94
- }
95
-
96
- template <class Second>
97
- static key_type const& extract(std::pair<key_type, Second> const& v)
98
- {
99
- return v.first;
100
- }
101
-
102
- template <class Second>
103
- static key_type const& extract(
104
- std::pair<key_type const, Second> const& v)
105
- {
106
- return v.first;
107
- }
108
-
109
- template <class Arg1>
110
- static key_type const& extract(key_type const& k, Arg1 const&)
111
- {
112
- return k;
113
- }
114
-
115
- static no_key extract()
116
- {
117
- return no_key();
118
- }
119
-
120
- template <class Arg>
121
- static no_key extract(Arg const&)
122
- {
123
- return no_key();
124
- }
125
-
126
- template <class Arg1, class Arg2>
127
- static no_key extract(Arg1 const&, Arg2 const&)
128
- {
129
- return no_key();
130
- }
131
-
132
- #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
133
- template <class Arg1, class Arg2, class Arg3, class... Args>
134
- static no_key extract(Arg1 const&, Arg2 const&, Arg3 const&,
135
- Args const&...)
136
- {
137
- return no_key();
138
- }
139
- #endif
140
-
141
- #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
142
-
143
- #define BOOST_UNORDERED_KEY_FROM_TUPLE(namespace_) \
144
- template <typename T2> \
145
- static no_key extract(boost::unordered::piecewise_construct_t, \
146
- namespace_ tuple<> const&, T2 const&) \
147
- { \
148
- return no_key(); \
149
- } \
150
- \
151
- template <typename T, typename T2> \
152
- static typename is_key<key_type, T>::type \
153
- extract(boost::unordered::piecewise_construct_t, \
154
- namespace_ tuple<T> const& k, T2 const&) \
155
- { \
156
- return typename is_key<key_type, T>::type( \
157
- namespace_ get<0>(k)); \
158
- }
159
-
160
- #else
161
-
162
- #define BOOST_UNORDERED_KEY_FROM_TUPLE(namespace_) \
163
- static no_key extract(boost::unordered::piecewise_construct_t, \
164
- namespace_ tuple<> const&) \
165
- { \
166
- return no_key(); \
167
- } \
168
- \
169
- template <typename T> \
170
- static typename is_key<key_type, T>::type \
171
- extract(boost::unordered::piecewise_construct_t, \
172
- namespace_ tuple<T> const& k) \
173
- { \
174
- return typename is_key<key_type, T>::type( \
175
- namespace_ get<0>(k)); \
176
- }
177
-
178
- #endif
179
-
180
- BOOST_UNORDERED_KEY_FROM_TUPLE(boost::)
181
-
182
- #if !defined(BOOST_NO_CXX11_HDR_TUPLE)
183
- BOOST_UNORDERED_KEY_FROM_TUPLE(std::)
184
- #endif
185
- };
186
- }}}
187
-
188
- #endif
@@ -1,873 +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_ALL_HPP_INCLUDED
8
- #define BOOST_UNORDERED_DETAIL_ALL_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/buckets.hpp>
16
- #include <boost/unordered/detail/util.hpp>
17
- #include <boost/type_traits/aligned_storage.hpp>
18
- #include <boost/type_traits/alignment_of.hpp>
19
- #include <cmath>
20
-
21
- #if defined(BOOST_MSVC)
22
- #pragma warning(push)
23
- #pragma warning(disable:4127) // conditional expression is constant
24
- #endif
25
-
26
- #if defined(BOOST_UNORDERED_DEPRECATED_EQUALITY)
27
-
28
- #if defined(__EDG__)
29
- #elif defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
30
- #pragma message("Warning: BOOST_UNORDERED_DEPRECATED_EQUALITY is no longer supported.")
31
- #elif defined(__GNUC__) || defined(__HP_aCC) || \
32
- defined(__SUNPRO_CC) || defined(__IBMCPP__)
33
- #warning "BOOST_UNORDERED_DEPRECATED_EQUALITY is no longer supported."
34
- #endif
35
-
36
- #endif
37
-
38
- namespace boost { namespace unordered { namespace detail {
39
-
40
- ////////////////////////////////////////////////////////////////////////////
41
- // convert double to std::size_t
42
-
43
- inline std::size_t double_to_size(double f)
44
- {
45
- return f >= static_cast<double>(
46
- (std::numeric_limits<std::size_t>::max)()) ?
47
- (std::numeric_limits<std::size_t>::max)() :
48
- static_cast<std::size_t>(f);
49
- }
50
-
51
- // The space used to store values in a node.
52
-
53
- template <typename ValueType>
54
- struct value_base
55
- {
56
- typedef ValueType value_type;
57
-
58
- typename boost::aligned_storage<
59
- sizeof(value_type),
60
- boost::alignment_of<value_type>::value>::type data_;
61
-
62
- value_base() :
63
- data_()
64
- {}
65
-
66
- void* address() {
67
- return this;
68
- }
69
-
70
- value_type& value() {
71
- return *(ValueType*) this;
72
- }
73
-
74
- value_type* value_ptr() {
75
- return (ValueType*) this;
76
- }
77
-
78
- private:
79
-
80
- value_base& operator=(value_base const&);
81
- };
82
-
83
- template <typename NodeAlloc>
84
- struct copy_nodes
85
- {
86
- typedef boost::unordered::detail::allocator_traits<NodeAlloc>
87
- node_allocator_traits;
88
-
89
- node_constructor<NodeAlloc> constructor;
90
-
91
- explicit copy_nodes(NodeAlloc& a) : constructor(a) {}
92
-
93
- typename node_allocator_traits::pointer create(
94
- typename node_allocator_traits::value_type::value_type const& v)
95
- {
96
- constructor.construct_with_value2(v);
97
- return constructor.release();
98
- }
99
- };
100
-
101
- template <typename NodeAlloc>
102
- struct move_nodes
103
- {
104
- typedef boost::unordered::detail::allocator_traits<NodeAlloc>
105
- node_allocator_traits;
106
-
107
- node_constructor<NodeAlloc> constructor;
108
-
109
- explicit move_nodes(NodeAlloc& a) : constructor(a) {}
110
-
111
- typename node_allocator_traits::pointer create(
112
- typename node_allocator_traits::value_type::value_type& v)
113
- {
114
- constructor.construct_with_value2(boost::move(v));
115
- return constructor.release();
116
- }
117
- };
118
-
119
- template <typename Buckets>
120
- struct assign_nodes
121
- {
122
- node_holder<typename Buckets::node_allocator> holder;
123
-
124
- explicit assign_nodes(Buckets& b) : holder(b) {}
125
-
126
- typename Buckets::node_pointer create(
127
- typename Buckets::value_type const& v)
128
- {
129
- return holder.copy_of(v);
130
- }
131
- };
132
-
133
- template <typename Buckets>
134
- struct move_assign_nodes
135
- {
136
- node_holder<typename Buckets::node_allocator> holder;
137
-
138
- explicit move_assign_nodes(Buckets& b) : holder(b) {}
139
-
140
- typename Buckets::node_pointer create(
141
- typename Buckets::value_type& v)
142
- {
143
- return holder.move_copy_of(v);
144
- }
145
- };
146
-
147
- template <typename Types>
148
- struct table :
149
- boost::unordered::detail::functions<
150
- typename Types::hasher,
151
- typename Types::key_equal>
152
- {
153
- private:
154
- table(table const&);
155
- table& operator=(table const&);
156
- public:
157
- typedef typename Types::node node;
158
- typedef typename Types::bucket bucket;
159
- typedef typename Types::hasher hasher;
160
- typedef typename Types::key_equal key_equal;
161
- typedef typename Types::key_type key_type;
162
- typedef typename Types::extractor extractor;
163
- typedef typename Types::value_type value_type;
164
- typedef typename Types::table table_impl;
165
- typedef typename Types::link_pointer link_pointer;
166
- typedef typename Types::policy policy;
167
-
168
- typedef boost::unordered::detail::functions<
169
- typename Types::hasher,
170
- typename Types::key_equal> functions;
171
- typedef typename functions::set_hash_functions set_hash_functions;
172
-
173
- typedef typename Types::allocator allocator;
174
- typedef typename boost::unordered::detail::
175
- rebind_wrap<allocator, node>::type node_allocator;
176
- typedef typename boost::unordered::detail::
177
- rebind_wrap<allocator, bucket>::type bucket_allocator;
178
- typedef boost::unordered::detail::allocator_traits<node_allocator>
179
- node_allocator_traits;
180
- typedef boost::unordered::detail::allocator_traits<bucket_allocator>
181
- bucket_allocator_traits;
182
- typedef typename node_allocator_traits::pointer
183
- node_pointer;
184
- typedef typename node_allocator_traits::const_pointer
185
- const_node_pointer;
186
- typedef typename bucket_allocator_traits::pointer
187
- bucket_pointer;
188
- typedef boost::unordered::detail::node_constructor<node_allocator>
189
- node_constructor;
190
-
191
- typedef boost::unordered::iterator_detail::
192
- iterator<node> iterator;
193
- typedef boost::unordered::iterator_detail::
194
- c_iterator<node> c_iterator;
195
- typedef boost::unordered::iterator_detail::
196
- l_iterator<node, policy> l_iterator;
197
- typedef boost::unordered::iterator_detail::
198
- cl_iterator<node, policy> cl_iterator;
199
-
200
- ////////////////////////////////////////////////////////////////////////
201
- // Members
202
-
203
- boost::unordered::detail::compressed<bucket_allocator, node_allocator>
204
- allocators_;
205
- std::size_t bucket_count_;
206
- std::size_t size_;
207
- float mlf_;
208
- std::size_t max_load_;
209
- bucket_pointer buckets_;
210
-
211
- ////////////////////////////////////////////////////////////////////////
212
- // Data access
213
-
214
- bucket_allocator const& bucket_alloc() const
215
- {
216
- return allocators_.first();
217
- }
218
-
219
- node_allocator const& node_alloc() const
220
- {
221
- return allocators_.second();
222
- }
223
-
224
- bucket_allocator& bucket_alloc()
225
- {
226
- return allocators_.first();
227
- }
228
-
229
- node_allocator& node_alloc()
230
- {
231
- return allocators_.second();
232
- }
233
-
234
- std::size_t max_bucket_count() const
235
- {
236
- // -1 to account for the start bucket.
237
- return policy::prev_bucket_count(
238
- bucket_allocator_traits::max_size(bucket_alloc()) - 1);
239
- }
240
-
241
- bucket_pointer get_bucket(std::size_t bucket_index) const
242
- {
243
- BOOST_ASSERT(buckets_);
244
- return buckets_ + static_cast<std::ptrdiff_t>(bucket_index);
245
- }
246
-
247
- link_pointer get_previous_start() const
248
- {
249
- return get_bucket(bucket_count_)->first_from_start();
250
- }
251
-
252
- link_pointer get_previous_start(std::size_t bucket_index) const
253
- {
254
- return get_bucket(bucket_index)->next_;
255
- }
256
-
257
- iterator begin() const
258
- {
259
- return size_ ? iterator(get_previous_start()->next_) : iterator();
260
- }
261
-
262
- iterator begin(std::size_t bucket_index) const
263
- {
264
- if (!size_) return iterator();
265
- link_pointer prev = get_previous_start(bucket_index);
266
- return prev ? iterator(prev->next_) : iterator();
267
- }
268
-
269
- std::size_t hash_to_bucket(std::size_t hash_value) const
270
- {
271
- return policy::to_bucket(bucket_count_, hash_value);
272
- }
273
-
274
- float load_factor() const
275
- {
276
- BOOST_ASSERT(bucket_count_ != 0);
277
- return static_cast<float>(size_)
278
- / static_cast<float>(bucket_count_);
279
- }
280
-
281
- std::size_t bucket_size(std::size_t index) const
282
- {
283
- iterator it = begin(index);
284
- if (!it.node_) return 0;
285
-
286
- std::size_t count = 0;
287
- while(it.node_ && hash_to_bucket(it.node_->hash_) == index)
288
- {
289
- ++count;
290
- ++it;
291
- }
292
-
293
- return count;
294
- }
295
-
296
- ////////////////////////////////////////////////////////////////////////
297
- // Load methods
298
-
299
- std::size_t max_size() const
300
- {
301
- using namespace std;
302
-
303
- // size < mlf_ * count
304
- return boost::unordered::detail::double_to_size(ceil(
305
- static_cast<double>(mlf_) *
306
- static_cast<double>(max_bucket_count())
307
- )) - 1;
308
- }
309
-
310
- void recalculate_max_load()
311
- {
312
- using namespace std;
313
-
314
- // From 6.3.1/13:
315
- // Only resize when size >= mlf_ * count
316
- max_load_ = buckets_ ? boost::unordered::detail::double_to_size(ceil(
317
- static_cast<double>(mlf_) *
318
- static_cast<double>(bucket_count_)
319
- )) : 0;
320
-
321
- }
322
-
323
- void max_load_factor(float z)
324
- {
325
- BOOST_ASSERT(z > 0);
326
- mlf_ = (std::max)(z, minimum_max_load_factor);
327
- recalculate_max_load();
328
- }
329
-
330
- std::size_t min_buckets_for_size(std::size_t size) const
331
- {
332
- BOOST_ASSERT(mlf_ >= minimum_max_load_factor);
333
-
334
- using namespace std;
335
-
336
- // From 6.3.1/13:
337
- // size < mlf_ * count
338
- // => count > size / mlf_
339
- //
340
- // Or from rehash post-condition:
341
- // count > size / mlf_
342
-
343
- return policy::new_bucket_count(
344
- boost::unordered::detail::double_to_size(floor(
345
- static_cast<double>(size) /
346
- static_cast<double>(mlf_)) + 1));
347
- }
348
-
349
- ////////////////////////////////////////////////////////////////////////
350
- // Constructors
351
-
352
- table(std::size_t num_buckets,
353
- hasher const& hf,
354
- key_equal const& eq,
355
- node_allocator const& a) :
356
- functions(hf, eq),
357
- allocators_(a,a),
358
- bucket_count_(policy::new_bucket_count(num_buckets)),
359
- size_(0),
360
- mlf_(1.0f),
361
- max_load_(0),
362
- buckets_()
363
- {}
364
-
365
- table(table const& x, node_allocator const& a) :
366
- functions(x),
367
- allocators_(a,a),
368
- bucket_count_(x.min_buckets_for_size(x.size_)),
369
- size_(0),
370
- mlf_(x.mlf_),
371
- max_load_(0),
372
- buckets_()
373
- {}
374
-
375
- table(table& x, boost::unordered::detail::move_tag m) :
376
- functions(x, m),
377
- allocators_(x.allocators_, m),
378
- bucket_count_(x.bucket_count_),
379
- size_(x.size_),
380
- mlf_(x.mlf_),
381
- max_load_(x.max_load_),
382
- buckets_(x.buckets_)
383
- {
384
- x.buckets_ = bucket_pointer();
385
- x.size_ = 0;
386
- x.max_load_ = 0;
387
- }
388
-
389
- table(table& x, node_allocator const& a,
390
- boost::unordered::detail::move_tag m) :
391
- functions(x, m),
392
- allocators_(a, a),
393
- bucket_count_(x.bucket_count_),
394
- size_(0),
395
- mlf_(x.mlf_),
396
- max_load_(x.max_load_),
397
- buckets_()
398
- {}
399
-
400
- ////////////////////////////////////////////////////////////////////////
401
- // Initialisation.
402
-
403
- void init(table const& x)
404
- {
405
- if (x.size_) {
406
- create_buckets(bucket_count_);
407
- copy_nodes<node_allocator> node_creator(node_alloc());
408
- table_impl::fill_buckets(x.begin(), *this, node_creator);
409
- }
410
- }
411
-
412
- void move_init(table& x)
413
- {
414
- if(node_alloc() == x.node_alloc()) {
415
- move_buckets_from(x);
416
- }
417
- else if(x.size_) {
418
- // TODO: Could pick new bucket size?
419
- create_buckets(bucket_count_);
420
-
421
- move_nodes<node_allocator> node_creator(node_alloc());
422
- node_holder<node_allocator> nodes(x);
423
- table_impl::fill_buckets(nodes.begin(), *this, node_creator);
424
- }
425
- }
426
-
427
- ////////////////////////////////////////////////////////////////////////
428
- // Create buckets
429
-
430
- void create_buckets(std::size_t new_count)
431
- {
432
- boost::unordered::detail::array_constructor<bucket_allocator>
433
- constructor(bucket_alloc());
434
-
435
- // Creates an extra bucket to act as the start node.
436
- constructor.construct(bucket(), new_count + 1);
437
-
438
- if (buckets_)
439
- {
440
- // Copy the nodes to the new buckets, including the dummy
441
- // node if there is one.
442
- (constructor.get() +
443
- static_cast<std::ptrdiff_t>(new_count))->next_ =
444
- (buckets_ + static_cast<std::ptrdiff_t>(
445
- bucket_count_))->next_;
446
- destroy_buckets();
447
- }
448
- else if (bucket::extra_node)
449
- {
450
- node_constructor a(node_alloc());
451
- a.construct();
452
-
453
- (constructor.get() +
454
- static_cast<std::ptrdiff_t>(new_count))->next_ =
455
- a.release();
456
- }
457
-
458
- bucket_count_ = new_count;
459
- buckets_ = constructor.release();
460
- recalculate_max_load();
461
- }
462
-
463
- ////////////////////////////////////////////////////////////////////////
464
- // Swap and Move
465
-
466
- void swap_allocators(table& other, false_type)
467
- {
468
- boost::unordered::detail::func::ignore_unused_variable_warning(other);
469
-
470
- // According to 23.2.1.8, if propagate_on_container_swap is
471
- // false the behaviour is undefined unless the allocators
472
- // are equal.
473
- BOOST_ASSERT(node_alloc() == other.node_alloc());
474
- }
475
-
476
- void swap_allocators(table& other, true_type)
477
- {
478
- allocators_.swap(other.allocators_);
479
- }
480
-
481
- // Only swaps the allocators if propagate_on_container_swap
482
- void swap(table& x)
483
- {
484
- set_hash_functions op1(*this, x);
485
- set_hash_functions op2(x, *this);
486
-
487
- // I think swap can throw if Propagate::value,
488
- // since the allocators' swap can throw. Not sure though.
489
- swap_allocators(x,
490
- boost::unordered::detail::integral_constant<bool,
491
- allocator_traits<node_allocator>::
492
- propagate_on_container_swap::value>());
493
-
494
- boost::swap(buckets_, x.buckets_);
495
- boost::swap(bucket_count_, x.bucket_count_);
496
- boost::swap(size_, x.size_);
497
- std::swap(mlf_, x.mlf_);
498
- std::swap(max_load_, x.max_load_);
499
- op1.commit();
500
- op2.commit();
501
- }
502
-
503
- // Only call with nodes allocated with the currect allocator, or
504
- // one that is equal to it. (Can't assert because other's
505
- // allocators might have already been moved).
506
- void move_buckets_from(table& other)
507
- {
508
- BOOST_ASSERT(!buckets_);
509
- buckets_ = other.buckets_;
510
- bucket_count_ = other.bucket_count_;
511
- size_ = other.size_;
512
- other.buckets_ = bucket_pointer();
513
- other.size_ = 0;
514
- other.max_load_ = 0;
515
- }
516
-
517
- ////////////////////////////////////////////////////////////////////////
518
- // Delete/destruct
519
-
520
- ~table()
521
- {
522
- delete_buckets();
523
- }
524
-
525
- void delete_node(link_pointer prev)
526
- {
527
- node_pointer n = static_cast<node_pointer>(prev->next_);
528
- prev->next_ = n->next_;
529
-
530
- boost::unordered::detail::func::destroy_value_impl(node_alloc(),
531
- n->value_ptr());
532
- boost::unordered::detail::func::destroy(boost::addressof(*n));
533
- node_allocator_traits::deallocate(node_alloc(), n, 1);
534
- --size_;
535
- }
536
-
537
- std::size_t delete_nodes(link_pointer prev, link_pointer end)
538
- {
539
- BOOST_ASSERT(prev->next_ != end);
540
-
541
- std::size_t count = 0;
542
-
543
- do {
544
- delete_node(prev);
545
- ++count;
546
- } while (prev->next_ != end);
547
-
548
- return count;
549
- }
550
-
551
- void delete_buckets()
552
- {
553
- if(buckets_) {
554
- if (size_) delete_nodes(get_previous_start(), link_pointer());
555
-
556
- if (bucket::extra_node) {
557
- node_pointer n = static_cast<node_pointer>(
558
- get_bucket(bucket_count_)->next_);
559
- boost::unordered::detail::func::destroy(
560
- boost::addressof(*n));
561
- node_allocator_traits::deallocate(node_alloc(), n, 1);
562
- }
563
-
564
- destroy_buckets();
565
- buckets_ = bucket_pointer();
566
- max_load_ = 0;
567
- }
568
-
569
- BOOST_ASSERT(!size_);
570
- }
571
-
572
- void clear()
573
- {
574
- if (!size_) return;
575
-
576
- delete_nodes(get_previous_start(), link_pointer());
577
- clear_buckets();
578
-
579
- BOOST_ASSERT(!size_);
580
- }
581
-
582
- void clear_buckets()
583
- {
584
- bucket_pointer end = get_bucket(bucket_count_);
585
- for(bucket_pointer it = buckets_; it != end; ++it)
586
- {
587
- it->next_ = node_pointer();
588
- }
589
- }
590
-
591
- void destroy_buckets()
592
- {
593
- bucket_pointer end = get_bucket(bucket_count_ + 1);
594
- for(bucket_pointer it = buckets_; it != end; ++it)
595
- {
596
- boost::unordered::detail::func::destroy(
597
- boost::addressof(*it));
598
- }
599
-
600
- bucket_allocator_traits::deallocate(bucket_alloc(),
601
- buckets_, bucket_count_ + 1);
602
- }
603
-
604
- ////////////////////////////////////////////////////////////////////////
605
- // Fix buckets after delete
606
- //
607
-
608
- std::size_t fix_bucket(std::size_t bucket_index, link_pointer prev)
609
- {
610
- link_pointer end = prev->next_;
611
- std::size_t bucket_index2 = bucket_index;
612
-
613
- if (end)
614
- {
615
- bucket_index2 = hash_to_bucket(
616
- static_cast<node_pointer>(end)->hash_);
617
-
618
- // If begin and end are in the same bucket, then
619
- // there's nothing to do.
620
- if (bucket_index == bucket_index2) return bucket_index2;
621
-
622
- // Update the bucket containing end.
623
- get_bucket(bucket_index2)->next_ = prev;
624
- }
625
-
626
- // Check if this bucket is now empty.
627
- bucket_pointer this_bucket = get_bucket(bucket_index);
628
- if (this_bucket->next_ == prev)
629
- this_bucket->next_ = link_pointer();
630
-
631
- return bucket_index2;
632
- }
633
-
634
- ////////////////////////////////////////////////////////////////////////
635
- // Assignment
636
-
637
- void assign(table const& x)
638
- {
639
- if (this != boost::addressof(x))
640
- {
641
- assign(x,
642
- boost::unordered::detail::integral_constant<bool,
643
- allocator_traits<node_allocator>::
644
- propagate_on_container_copy_assignment::value>());
645
- }
646
- }
647
-
648
- void assign(table const& x, false_type)
649
- {
650
- // Strong exception safety.
651
- set_hash_functions new_func_this(*this, x);
652
- new_func_this.commit();
653
- mlf_ = x.mlf_;
654
- recalculate_max_load();
655
-
656
- if (!size_ && !x.size_) return;
657
-
658
- if (x.size_ >= max_load_) {
659
- create_buckets(min_buckets_for_size(x.size_));
660
- }
661
- else {
662
- clear_buckets();
663
- }
664
-
665
- // assign_nodes takes ownership of the container's elements,
666
- // assigning to them if possible, and deleting any that are
667
- // left over.
668
- assign_nodes<table> node_creator(*this);
669
- table_impl::fill_buckets(x.begin(), *this, node_creator);
670
- }
671
-
672
- void assign(table const& x, true_type)
673
- {
674
- if (node_alloc() == x.node_alloc()) {
675
- allocators_.assign(x.allocators_);
676
- assign(x, false_type());
677
- }
678
- else {
679
- set_hash_functions new_func_this(*this, x);
680
-
681
- // Delete everything with current allocators before assigning
682
- // the new ones.
683
- delete_buckets();
684
- allocators_.assign(x.allocators_);
685
-
686
- // Copy over other data, all no throw.
687
- new_func_this.commit();
688
- mlf_ = x.mlf_;
689
- bucket_count_ = min_buckets_for_size(x.size_);
690
- max_load_ = 0;
691
-
692
- // Finally copy the elements.
693
- if (x.size_) {
694
- create_buckets(bucket_count_);
695
- copy_nodes<node_allocator> node_creator(node_alloc());
696
- table_impl::fill_buckets(x.begin(), *this, node_creator);
697
- }
698
- }
699
- }
700
-
701
- void move_assign(table& x)
702
- {
703
- if (this != boost::addressof(x))
704
- {
705
- move_assign(x,
706
- boost::unordered::detail::integral_constant<bool,
707
- allocator_traits<node_allocator>::
708
- propagate_on_container_move_assignment::value>());
709
- }
710
- }
711
-
712
- void move_assign(table& x, true_type)
713
- {
714
- delete_buckets();
715
- set_hash_functions new_func_this(*this, x);
716
- allocators_.move_assign(x.allocators_);
717
- // No throw from here.
718
- mlf_ = x.mlf_;
719
- max_load_ = x.max_load_;
720
- move_buckets_from(x);
721
- new_func_this.commit();
722
- }
723
-
724
- void move_assign(table& x, false_type)
725
- {
726
- if (node_alloc() == x.node_alloc()) {
727
- delete_buckets();
728
- set_hash_functions new_func_this(*this, x);
729
- // No throw from here.
730
- mlf_ = x.mlf_;
731
- max_load_ = x.max_load_;
732
- move_buckets_from(x);
733
- new_func_this.commit();
734
- }
735
- else {
736
- set_hash_functions new_func_this(*this, x);
737
- new_func_this.commit();
738
- mlf_ = x.mlf_;
739
- recalculate_max_load();
740
-
741
- if (!size_ && !x.size_) return;
742
-
743
- if (x.size_ >= max_load_) {
744
- create_buckets(min_buckets_for_size(x.size_));
745
- }
746
- else {
747
- clear_buckets();
748
- }
749
-
750
- // move_assign_nodes takes ownership of the container's
751
- // elements, assigning to them if possible, and deleting
752
- // any that are left over.
753
- move_assign_nodes<table> node_creator(*this);
754
- node_holder<node_allocator> nodes(x);
755
- table_impl::fill_buckets(nodes.begin(), *this, node_creator);
756
- }
757
- }
758
-
759
- // Accessors
760
-
761
- key_type const& get_key(value_type const& x) const
762
- {
763
- return extractor::extract(x);
764
- }
765
-
766
- std::size_t hash(key_type const& k) const
767
- {
768
- return policy::apply_hash(this->hash_function(), k);
769
- }
770
-
771
- // Find Node
772
-
773
- template <typename Key, typename Hash, typename Pred>
774
- iterator generic_find_node(
775
- Key const& k,
776
- Hash const& hf,
777
- Pred const& eq) const
778
- {
779
- return static_cast<table_impl const*>(this)->
780
- find_node_impl(policy::apply_hash(hf, k), k, eq);
781
- }
782
-
783
- iterator find_node(
784
- std::size_t key_hash,
785
- key_type const& k) const
786
- {
787
- return static_cast<table_impl const*>(this)->
788
- find_node_impl(key_hash, k, this->key_eq());
789
- }
790
-
791
- iterator find_node(key_type const& k) const
792
- {
793
- return static_cast<table_impl const*>(this)->
794
- find_node_impl(hash(k), k, this->key_eq());
795
- }
796
-
797
- iterator find_matching_node(iterator n) const
798
- {
799
- // TODO: Does this apply to C++11?
800
- //
801
- // For some stupid reason, I decided to support equality comparison
802
- // when different hash functions are used. So I can't use the hash
803
- // value from the node here.
804
-
805
- return find_node(get_key(*n));
806
- }
807
-
808
- // Reserve and rehash
809
-
810
- void reserve_for_insert(std::size_t);
811
- void rehash(std::size_t);
812
- void reserve(std::size_t);
813
- };
814
-
815
- ////////////////////////////////////////////////////////////////////////////
816
- // Reserve & Rehash
817
-
818
- // basic exception safety
819
- template <typename Types>
820
- inline void table<Types>::reserve_for_insert(std::size_t size)
821
- {
822
- if (!buckets_) {
823
- create_buckets((std::max)(bucket_count_,
824
- min_buckets_for_size(size)));
825
- }
826
- // According to the standard this should be 'size >= max_load_',
827
- // but I think this is better, defect report filed.
828
- else if(size > max_load_) {
829
- std::size_t num_buckets
830
- = min_buckets_for_size((std::max)(size,
831
- size_ + (size_ >> 1)));
832
-
833
- if (num_buckets != bucket_count_)
834
- static_cast<table_impl*>(this)->rehash_impl(num_buckets);
835
- }
836
- }
837
-
838
- // if hash function throws, basic exception safety
839
- // strong otherwise.
840
-
841
- template <typename Types>
842
- inline void table<Types>::rehash(std::size_t min_buckets)
843
- {
844
- using namespace std;
845
-
846
- if(!size_) {
847
- delete_buckets();
848
- bucket_count_ = policy::new_bucket_count(min_buckets);
849
- }
850
- else {
851
- min_buckets = policy::new_bucket_count((std::max)(min_buckets,
852
- boost::unordered::detail::double_to_size(floor(
853
- static_cast<double>(size_) /
854
- static_cast<double>(mlf_))) + 1));
855
-
856
- if(min_buckets != bucket_count_)
857
- static_cast<table_impl*>(this)->rehash_impl(min_buckets);
858
- }
859
- }
860
-
861
- template <typename Types>
862
- inline void table<Types>::reserve(std::size_t num_elements)
863
- {
864
- rehash(static_cast<std::size_t>(
865
- std::ceil(static_cast<double>(num_elements) / mlf_)));
866
- }
867
- }}}
868
-
869
- #if defined(BOOST_MSVC)
870
- #pragma warning(pop)
871
- #endif
872
-
873
- #endif