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,34 +0,0 @@
1
- /*
2
- * Copyright (c) 2012-2014 Glen Joseph Fernandes
3
- * glenfe at live dot com
4
- *
5
- * Distributed under the Boost Software License,
6
- * Version 1.0. (See accompanying file LICENSE_1_0.txt
7
- * or copy at http://boost.org/LICENSE_1_0.txt)
8
- */
9
- #ifndef BOOST_SMART_PTR_DETAIL_SP_IF_ARRAY_HPP
10
- #define BOOST_SMART_PTR_DETAIL_SP_IF_ARRAY_HPP
11
-
12
- #include <boost/smart_ptr/shared_ptr.hpp>
13
-
14
- namespace boost {
15
- namespace detail {
16
- template<class T>
17
- struct sp_if_array;
18
-
19
- template<class T>
20
- struct sp_if_array<T[]> {
21
- typedef boost::shared_ptr<T[]> type;
22
- };
23
-
24
- template<class T>
25
- struct sp_if_size_array;
26
-
27
- template<class T, std::size_t N>
28
- struct sp_if_size_array<T[N]> {
29
- typedef boost::shared_ptr<T[N]> type;
30
- };
31
- }
32
- }
33
-
34
- #endif
@@ -1,1128 +0,0 @@
1
-
2
- // Copyright 2005-2011 Daniel James.
3
- // Copyright 2009 Pablo Halpern.
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
- // See http://www.boost.org/libs/unordered for documentation
8
-
9
- #ifndef BOOST_UNORDERED_ALLOCATE_HPP
10
- #define BOOST_UNORDERED_ALLOCATE_HPP
11
-
12
- #include <boost/config.hpp>
13
- #if defined(BOOST_HAS_PRAGMA_ONCE)
14
- #pragma once
15
- #endif
16
-
17
- #include <boost/unordered/detail/fwd.hpp>
18
- #include <boost/move/move.hpp>
19
- #include <boost/preprocessor/cat.hpp>
20
- #include <boost/preprocessor/inc.hpp>
21
- #include <boost/preprocessor/dec.hpp>
22
- #include <boost/preprocessor/repetition/enum.hpp>
23
- #include <boost/preprocessor/repetition/enum_params.hpp>
24
- #include <boost/preprocessor/repetition/enum_binary_params.hpp>
25
- #include <boost/preprocessor/repetition/repeat_from_to.hpp>
26
- #include <boost/type_traits/is_class.hpp>
27
- #include <boost/type_traits/add_lvalue_reference.hpp>
28
- #include <boost/tuple/tuple.hpp>
29
- #include <boost/utility/enable_if.hpp>
30
- #include <boost/utility/addressof.hpp>
31
- #include <boost/detail/select_type.hpp>
32
- #include <boost/assert.hpp>
33
- #include <utility>
34
-
35
- #if !defined(BOOST_NO_CXX11_HDR_TUPLE)
36
- #include <tuple>
37
- #endif
38
-
39
- #if defined(BOOST_MSVC)
40
- #pragma warning(push)
41
- #pragma warning(disable:4512) // assignment operator could not be generated.
42
- #pragma warning(disable:4345) // behavior change: an object of POD type
43
- // constructed with an initializer of the form ()
44
- // will be default-initialized.
45
- #endif
46
-
47
- #define BOOST_UNORDERED_EMPLACE_LIMIT 10
48
-
49
- namespace boost { namespace unordered { namespace detail {
50
-
51
- ////////////////////////////////////////////////////////////////////////////
52
- // Bits and pieces for implementing traits
53
-
54
- template <typename T> typename boost::add_lvalue_reference<T>::type make();
55
- struct choice9 { typedef char (&type)[9]; };
56
- struct choice8 : choice9 { typedef char (&type)[8]; };
57
- struct choice7 : choice8 { typedef char (&type)[7]; };
58
- struct choice6 : choice7 { typedef char (&type)[6]; };
59
- struct choice5 : choice6 { typedef char (&type)[5]; };
60
- struct choice4 : choice5 { typedef char (&type)[4]; };
61
- struct choice3 : choice4 { typedef char (&type)[3]; };
62
- struct choice2 : choice3 { typedef char (&type)[2]; };
63
- struct choice1 : choice2 { typedef char (&type)[1]; };
64
- choice1 choose();
65
-
66
- typedef choice1::type yes_type;
67
- typedef choice2::type no_type;
68
-
69
- struct private_type
70
- {
71
- private_type const &operator,(int) const;
72
- };
73
-
74
- template <typename T>
75
- no_type is_private_type(T const&);
76
- yes_type is_private_type(private_type const&);
77
-
78
- struct convert_from_anything {
79
- template <typename T>
80
- convert_from_anything(T const&);
81
- };
82
-
83
- ////////////////////////////////////////////////////////////////////////////
84
- // emplace_args
85
- //
86
- // Either forwarding variadic arguments, or storing the arguments in
87
- // emplace_args##n
88
-
89
- #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
90
-
91
- #define BOOST_UNORDERED_EMPLACE_TEMPLATE typename... Args
92
- #define BOOST_UNORDERED_EMPLACE_ARGS BOOST_FWD_REF(Args)... args
93
- #define BOOST_UNORDERED_EMPLACE_FORWARD boost::forward<Args>(args)...
94
-
95
- #define BOOST_UNORDERED_EMPLACE_ARGS1(a0) a0
96
- #define BOOST_UNORDERED_EMPLACE_ARGS2(a0, a1) a0, a1
97
- #define BOOST_UNORDERED_EMPLACE_ARGS3(a0, a1, a2) a0, a1, a2
98
-
99
- #else
100
-
101
- #define BOOST_UNORDERED_EMPLACE_TEMPLATE typename Args
102
- #define BOOST_UNORDERED_EMPLACE_ARGS Args const& args
103
- #define BOOST_UNORDERED_EMPLACE_FORWARD args
104
-
105
- #define BOOST_UNORDERED_FWD_PARAM(z, n, a) \
106
- BOOST_FWD_REF(BOOST_PP_CAT(A, n)) BOOST_PP_CAT(a, n)
107
-
108
- #define BOOST_UNORDERED_CALL_FORWARD(z, i, a) \
109
- boost::forward<BOOST_PP_CAT(A,i)>(BOOST_PP_CAT(a,i))
110
-
111
- #define BOOST_UNORDERED_EARGS(z, n, _) \
112
- template <BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
113
- struct BOOST_PP_CAT(emplace_args, n) \
114
- { \
115
- BOOST_PP_REPEAT_##z(n, BOOST_UNORDERED_EARGS_MEMBER, _) \
116
- BOOST_PP_CAT(emplace_args, n) ( \
117
- BOOST_PP_ENUM_BINARY_PARAMS_Z(z, n, Arg, b) \
118
- ) : BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_EARGS_INIT, _) \
119
- {} \
120
- \
121
- }; \
122
- \
123
- template <BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
124
- inline BOOST_PP_CAT(emplace_args, n) < \
125
- BOOST_PP_ENUM_PARAMS_Z(z, n, A) \
126
- > create_emplace_args( \
127
- BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_FWD_PARAM, b) \
128
- ) \
129
- { \
130
- BOOST_PP_CAT(emplace_args, n) < \
131
- BOOST_PP_ENUM_PARAMS_Z(z, n, A) \
132
- > e(BOOST_PP_ENUM_PARAMS_Z(z, n, b)); \
133
- return e; \
134
- }
135
-
136
- #define BOOST_UNORDERED_EMPLACE_ARGS1 create_emplace_args
137
- #define BOOST_UNORDERED_EMPLACE_ARGS2 create_emplace_args
138
- #define BOOST_UNORDERED_EMPLACE_ARGS3 create_emplace_args
139
-
140
- #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
141
-
142
- #define BOOST_UNORDERED_EARGS_MEMBER(z, n, _) \
143
- typedef BOOST_FWD_REF(BOOST_PP_CAT(A, n)) BOOST_PP_CAT(Arg, n); \
144
- BOOST_PP_CAT(Arg, n) BOOST_PP_CAT(a, n);
145
-
146
- #define BOOST_UNORDERED_EARGS_INIT(z, n, _) \
147
- BOOST_PP_CAT(a, n)( \
148
- boost::forward<BOOST_PP_CAT(A,n)>(BOOST_PP_CAT(b, n)))
149
-
150
- #else
151
-
152
- #define BOOST_UNORDERED_EARGS_MEMBER(z, n, _) \
153
- typedef typename boost::add_lvalue_reference<BOOST_PP_CAT(A, n)>::type \
154
- BOOST_PP_CAT(Arg, n); \
155
- BOOST_PP_CAT(Arg, n) BOOST_PP_CAT(a, n);
156
-
157
- #define BOOST_UNORDERED_EARGS_INIT(z, n, _) \
158
- BOOST_PP_CAT(a, n)(BOOST_PP_CAT(b, n))
159
-
160
- #endif
161
-
162
- BOOST_PP_REPEAT_FROM_TO(1, BOOST_UNORDERED_EMPLACE_LIMIT, BOOST_UNORDERED_EARGS,
163
- _)
164
-
165
- #undef BOOST_UNORDERED_DEFINE_EMPLACE_ARGS
166
- #undef BOOST_UNORDERED_EARGS_MEMBER
167
- #undef BOOST_UNORDERED_EARGS_INIT
168
-
169
- #endif
170
-
171
- }}}
172
-
173
- ////////////////////////////////////////////////////////////////////////////////
174
- //
175
- // Pick which version of allocator_traits to use
176
- //
177
- // 0 = Own partial implementation
178
- // 1 = std::allocator_traits
179
- // 2 = boost::container::allocator_traits
180
-
181
- #if !defined(BOOST_UNORDERED_USE_ALLOCATOR_TRAITS)
182
- # if defined(__GXX_EXPERIMENTAL_CXX0X__) && \
183
- (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7))
184
- # define BOOST_UNORDERED_USE_ALLOCATOR_TRAITS 0
185
- # elif defined(BOOST_MSVC)
186
- # if BOOST_MSVC < 1400
187
- // Use container's allocator_traits for older versions of Visual
188
- // C++ as I don't test with them.
189
- # define BOOST_UNORDERED_USE_ALLOCATOR_TRAITS 2
190
- # endif
191
- # endif
192
- #endif
193
-
194
- #if !defined(BOOST_UNORDERED_USE_ALLOCATOR_TRAITS)
195
- # define BOOST_UNORDERED_USE_ALLOCATOR_TRAITS 0
196
- #endif
197
-
198
- ////////////////////////////////////////////////////////////////////////////////
199
- //
200
- // Some utilities for implementing allocator_traits, but useful elsewhere so
201
- // they're always defined.
202
-
203
- #if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
204
- # include <type_traits>
205
- #endif
206
-
207
- namespace boost { namespace unordered { namespace detail {
208
-
209
- ////////////////////////////////////////////////////////////////////////////
210
- // Integral_constrant, true_type, false_type
211
- //
212
- // Uses the standard versions if available.
213
-
214
- #if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
215
-
216
- using std::integral_constant;
217
- using std::true_type;
218
- using std::false_type;
219
-
220
- #else
221
-
222
- template <typename T, T Value>
223
- struct integral_constant { enum { value = Value }; };
224
-
225
- typedef boost::unordered::detail::integral_constant<bool, true> true_type;
226
- typedef boost::unordered::detail::integral_constant<bool, false> false_type;
227
-
228
- #endif
229
-
230
- ////////////////////////////////////////////////////////////////////////////
231
- // Explicitly call a destructor
232
-
233
- #if defined(BOOST_MSVC)
234
- #pragma warning(push)
235
- #pragma warning(disable:4100) // unreferenced formal parameter
236
- #endif
237
-
238
- namespace func {
239
- template <class T>
240
- inline void destroy(T* x) {
241
- x->~T();
242
- }
243
- }
244
-
245
- #if defined(BOOST_MSVC)
246
- #pragma warning(pop)
247
- #endif
248
-
249
- ////////////////////////////////////////////////////////////////////////////
250
- // Expression test mechanism
251
- //
252
- // When SFINAE expressions are available, define
253
- // BOOST_UNORDERED_HAS_FUNCTION which can check if a function call is
254
- // supported by a class, otherwise define BOOST_UNORDERED_HAS_MEMBER which
255
- // can detect if a class has the specified member, but not that it has the
256
- // correct type, this is good enough for a passable impression of
257
- // allocator_traits.
258
-
259
- #if !defined(BOOST_NO_SFINAE_EXPR)
260
-
261
- template <typename T, unsigned int> struct expr_test;
262
- template <typename T> struct expr_test<T, sizeof(char)> : T {};
263
-
264
- # define BOOST_UNORDERED_CHECK_EXPRESSION(count, result, expression) \
265
- template <typename U> \
266
- static typename boost::unordered::detail::expr_test< \
267
- BOOST_PP_CAT(choice, result), \
268
- sizeof(for_expr_test(( \
269
- (expression), \
270
- 0)))>::type test( \
271
- BOOST_PP_CAT(choice, count))
272
-
273
- # define BOOST_UNORDERED_DEFAULT_EXPRESSION(count, result) \
274
- template <typename U> \
275
- static BOOST_PP_CAT(choice, result)::type test( \
276
- BOOST_PP_CAT(choice, count))
277
-
278
- # define BOOST_UNORDERED_HAS_FUNCTION(name, thing, args, _) \
279
- struct BOOST_PP_CAT(has_, name) \
280
- { \
281
- template <typename U> static char for_expr_test(U const&); \
282
- BOOST_UNORDERED_CHECK_EXPRESSION(1, 1, \
283
- boost::unordered::detail::make< thing >().name args); \
284
- BOOST_UNORDERED_DEFAULT_EXPRESSION(2, 2); \
285
- \
286
- enum { value = sizeof(test<T>(choose())) == sizeof(choice1::type) };\
287
- }
288
-
289
- #else
290
-
291
- template <typename T> struct identity { typedef T type; };
292
-
293
- # define BOOST_UNORDERED_CHECK_MEMBER(count, result, name, member) \
294
- \
295
- typedef typename boost::unordered::detail::identity<member>::type \
296
- BOOST_PP_CAT(check, count); \
297
- \
298
- template <BOOST_PP_CAT(check, count) e> \
299
- struct BOOST_PP_CAT(test, count) { \
300
- typedef BOOST_PP_CAT(choice, result) type; \
301
- }; \
302
- \
303
- template <class U> static typename \
304
- BOOST_PP_CAT(test, count)<&U::name>::type \
305
- test(BOOST_PP_CAT(choice, count))
306
-
307
- # define BOOST_UNORDERED_DEFAULT_MEMBER(count, result) \
308
- template <class U> static BOOST_PP_CAT(choice, result)::type \
309
- test(BOOST_PP_CAT(choice, count))
310
-
311
- # define BOOST_UNORDERED_HAS_MEMBER(name) \
312
- struct BOOST_PP_CAT(has_, name) \
313
- { \
314
- struct impl { \
315
- struct base_mixin { int name; }; \
316
- struct base : public T, public base_mixin {}; \
317
- \
318
- BOOST_UNORDERED_CHECK_MEMBER(1, 1, name, int base_mixin::*); \
319
- BOOST_UNORDERED_DEFAULT_MEMBER(2, 2); \
320
- \
321
- enum { value = sizeof(choice2::type) == \
322
- sizeof(test<base>(choose())) \
323
- }; \
324
- }; \
325
- \
326
- enum { value = impl::value }; \
327
- }
328
-
329
- #endif
330
-
331
- }}}
332
-
333
- ////////////////////////////////////////////////////////////////////////////////
334
- //
335
- // Allocator traits
336
- //
337
- // First our implementation, then later light wrappers around the alternatives
338
-
339
- #if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS == 0
340
-
341
- # include <boost/limits.hpp>
342
- # include <boost/utility/enable_if.hpp>
343
- # include <boost/pointer_to_other.hpp>
344
- # if defined(BOOST_NO_SFINAE_EXPR)
345
- # include <boost/type_traits/is_same.hpp>
346
- # endif
347
-
348
- # if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
349
- !defined(BOOST_NO_SFINAE_EXPR)
350
- # define BOOST_UNORDERED_DETAIL_FULL_CONSTRUCT 1
351
- # else
352
- # define BOOST_UNORDERED_DETAIL_FULL_CONSTRUCT 0
353
- # endif
354
-
355
- namespace boost { namespace unordered { namespace detail {
356
-
357
- // TODO: Does this match std::allocator_traits<Alloc>::rebind_alloc<T>?
358
- template <typename Alloc, typename T>
359
- struct rebind_wrap
360
- {
361
- typedef typename Alloc::BOOST_NESTED_TEMPLATE rebind<T>::other type;
362
- };
363
-
364
- # if defined(BOOST_MSVC) && BOOST_MSVC <= 1400
365
-
366
- # define BOOST_UNORDERED_DEFAULT_TYPE_TMPLT(tname) \
367
- template <typename Tp, typename Default> \
368
- struct default_type_ ## tname { \
369
- \
370
- template <typename X> \
371
- static choice1::type test(choice1, typename X::tname* = 0); \
372
- \
373
- template <typename X> \
374
- static choice2::type test(choice2, void* = 0); \
375
- \
376
- struct DefaultWrap { typedef Default tname; }; \
377
- \
378
- enum { value = (1 == sizeof(test<Tp>(choose()))) }; \
379
- \
380
- typedef typename boost::detail::if_true<value>:: \
381
- BOOST_NESTED_TEMPLATE then<Tp, DefaultWrap> \
382
- ::type::tname type; \
383
- }
384
-
385
- # else
386
-
387
- template <typename T, typename T2>
388
- struct sfinae : T2 {};
389
-
390
- # define BOOST_UNORDERED_DEFAULT_TYPE_TMPLT(tname) \
391
- template <typename Tp, typename Default> \
392
- struct default_type_ ## tname { \
393
- \
394
- template <typename X> \
395
- static typename boost::unordered::detail::sfinae< \
396
- typename X::tname, choice1>::type \
397
- test(choice1); \
398
- \
399
- template <typename X> \
400
- static choice2::type test(choice2); \
401
- \
402
- struct DefaultWrap { typedef Default tname; }; \
403
- \
404
- enum { value = (1 == sizeof(test<Tp>(choose()))) }; \
405
- \
406
- typedef typename boost::detail::if_true<value>:: \
407
- BOOST_NESTED_TEMPLATE then<Tp, DefaultWrap> \
408
- ::type::tname type; \
409
- }
410
-
411
- # endif
412
-
413
- # define BOOST_UNORDERED_DEFAULT_TYPE(T,tname, arg) \
414
- typename default_type_ ## tname<T, arg>::type
415
-
416
- BOOST_UNORDERED_DEFAULT_TYPE_TMPLT(pointer);
417
- BOOST_UNORDERED_DEFAULT_TYPE_TMPLT(const_pointer);
418
- BOOST_UNORDERED_DEFAULT_TYPE_TMPLT(void_pointer);
419
- BOOST_UNORDERED_DEFAULT_TYPE_TMPLT(const_void_pointer);
420
- BOOST_UNORDERED_DEFAULT_TYPE_TMPLT(difference_type);
421
- BOOST_UNORDERED_DEFAULT_TYPE_TMPLT(size_type);
422
- BOOST_UNORDERED_DEFAULT_TYPE_TMPLT(propagate_on_container_copy_assignment);
423
- BOOST_UNORDERED_DEFAULT_TYPE_TMPLT(propagate_on_container_move_assignment);
424
- BOOST_UNORDERED_DEFAULT_TYPE_TMPLT(propagate_on_container_swap);
425
-
426
- # if !defined(BOOST_NO_SFINAE_EXPR)
427
-
428
- template <typename T>
429
- BOOST_UNORDERED_HAS_FUNCTION(
430
- select_on_container_copy_construction, U const, (), 0
431
- );
432
-
433
- template <typename T>
434
- BOOST_UNORDERED_HAS_FUNCTION(
435
- max_size, U const, (), 0
436
- );
437
-
438
- # if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
439
-
440
- template <typename T, typename ValueType, typename... Args>
441
- BOOST_UNORDERED_HAS_FUNCTION(
442
- construct, U, (
443
- boost::unordered::detail::make<ValueType*>(),
444
- boost::unordered::detail::make<Args const>()...), 2
445
- );
446
-
447
- # else
448
-
449
- template <typename T, typename ValueType>
450
- BOOST_UNORDERED_HAS_FUNCTION(
451
- construct, U, (
452
- boost::unordered::detail::make<ValueType*>(),
453
- boost::unordered::detail::make<ValueType const>()), 2
454
- );
455
-
456
- # endif
457
-
458
- template <typename T, typename ValueType>
459
- BOOST_UNORDERED_HAS_FUNCTION(
460
- destroy, U, (boost::unordered::detail::make<ValueType*>()), 1
461
- );
462
-
463
- # else
464
-
465
- template <typename T>
466
- BOOST_UNORDERED_HAS_MEMBER(select_on_container_copy_construction);
467
-
468
- template <typename T>
469
- BOOST_UNORDERED_HAS_MEMBER(max_size);
470
-
471
- template <typename T, typename ValueType>
472
- BOOST_UNORDERED_HAS_MEMBER(construct);
473
-
474
- template <typename T, typename ValueType>
475
- BOOST_UNORDERED_HAS_MEMBER(destroy);
476
-
477
- # endif
478
-
479
- namespace func
480
- {
481
-
482
- template <typename Alloc>
483
- inline Alloc call_select_on_container_copy_construction(const Alloc& rhs,
484
- typename boost::enable_if_c<
485
- boost::unordered::detail::
486
- has_select_on_container_copy_construction<Alloc>::value, void*
487
- >::type = 0)
488
- {
489
- return rhs.select_on_container_copy_construction();
490
- }
491
-
492
- template <typename Alloc>
493
- inline Alloc call_select_on_container_copy_construction(const Alloc& rhs,
494
- typename boost::disable_if_c<
495
- boost::unordered::detail::
496
- has_select_on_container_copy_construction<Alloc>::value, void*
497
- >::type = 0)
498
- {
499
- return rhs;
500
- }
501
-
502
- template <typename SizeType, typename Alloc>
503
- inline SizeType call_max_size(const Alloc& a,
504
- typename boost::enable_if_c<
505
- boost::unordered::detail::has_max_size<Alloc>::value, void*
506
- >::type = 0)
507
- {
508
- return a.max_size();
509
- }
510
-
511
- template <typename SizeType, typename Alloc>
512
- inline SizeType call_max_size(const Alloc&, typename boost::disable_if_c<
513
- boost::unordered::detail::has_max_size<Alloc>::value, void*
514
- >::type = 0)
515
- {
516
- return (std::numeric_limits<SizeType>::max)();
517
- }
518
-
519
- } // namespace func.
520
-
521
- template <typename Alloc>
522
- struct allocator_traits
523
- {
524
- typedef Alloc allocator_type;
525
- typedef typename Alloc::value_type value_type;
526
-
527
- typedef BOOST_UNORDERED_DEFAULT_TYPE(Alloc, pointer, value_type*)
528
- pointer;
529
-
530
- template <typename T>
531
- struct pointer_to_other : boost::pointer_to_other<pointer, T> {};
532
-
533
- typedef BOOST_UNORDERED_DEFAULT_TYPE(Alloc, const_pointer,
534
- typename pointer_to_other<const value_type>::type)
535
- const_pointer;
536
-
537
- //typedef BOOST_UNORDERED_DEFAULT_TYPE(Alloc, void_pointer,
538
- // typename pointer_to_other<void>::type)
539
- // void_pointer;
540
- //
541
- //typedef BOOST_UNORDERED_DEFAULT_TYPE(Alloc, const_void_pointer,
542
- // typename pointer_to_other<const void>::type)
543
- // const_void_pointer;
544
-
545
- typedef BOOST_UNORDERED_DEFAULT_TYPE(Alloc, difference_type,
546
- std::ptrdiff_t) difference_type;
547
-
548
- typedef BOOST_UNORDERED_DEFAULT_TYPE(Alloc, size_type, std::size_t)
549
- size_type;
550
-
551
- // TODO: rebind_alloc and rebind_traits
552
-
553
- static pointer allocate(Alloc& a, size_type n)
554
- { return a.allocate(n); }
555
-
556
- // I never use this, so I'll just comment it out for now.
557
- //
558
- //static pointer allocate(Alloc& a, size_type n,
559
- // const_void_pointer hint)
560
- // { return DEFAULT_FUNC(allocate, pointer)(a, n, hint); }
561
-
562
- static void deallocate(Alloc& a, pointer p, size_type n)
563
- { a.deallocate(p, n); }
564
-
565
- public:
566
-
567
- # if BOOST_UNORDERED_DETAIL_FULL_CONSTRUCT
568
-
569
- template <typename T, typename... Args>
570
- static typename boost::enable_if_c<
571
- boost::unordered::detail::has_construct<Alloc, T, Args...>
572
- ::value>::type
573
- construct(Alloc& a, T* p, BOOST_FWD_REF(Args)... x)
574
- {
575
- a.construct(p, boost::forward<Args>(x)...);
576
- }
577
-
578
- template <typename T, typename... Args>
579
- static typename boost::disable_if_c<
580
- boost::unordered::detail::has_construct<Alloc, T, Args...>
581
- ::value>::type
582
- construct(Alloc&, T* p, BOOST_FWD_REF(Args)... x)
583
- {
584
- new ((void*) p) T(boost::forward<Args>(x)...);
585
- }
586
-
587
- template <typename T>
588
- static typename boost::enable_if_c<
589
- boost::unordered::detail::has_destroy<Alloc, T>::value>::type
590
- destroy(Alloc& a, T* p)
591
- {
592
- a.destroy(p);
593
- }
594
-
595
- template <typename T>
596
- static typename boost::disable_if_c<
597
- boost::unordered::detail::has_destroy<Alloc, T>::value>::type
598
- destroy(Alloc&, T* p)
599
- {
600
- boost::unordered::detail::func::destroy(p);
601
- }
602
-
603
- # elif !defined(BOOST_NO_SFINAE_EXPR)
604
-
605
- template <typename T>
606
- static typename boost::enable_if_c<
607
- boost::unordered::detail::has_construct<Alloc, T>::value>::type
608
- construct(Alloc& a, T* p, T const& x)
609
- {
610
- a.construct(p, x);
611
- }
612
-
613
- template <typename T>
614
- static typename boost::disable_if_c<
615
- boost::unordered::detail::has_construct<Alloc, T>::value>::type
616
- construct(Alloc&, T* p, T const& x)
617
- {
618
- new ((void*) p) T(x);
619
- }
620
-
621
- template <typename T>
622
- static typename boost::enable_if_c<
623
- boost::unordered::detail::has_destroy<Alloc, T>::value>::type
624
- destroy(Alloc& a, T* p)
625
- {
626
- a.destroy(p);
627
- }
628
-
629
- template <typename T>
630
- static typename boost::disable_if_c<
631
- boost::unordered::detail::has_destroy<Alloc, T>::value>::type
632
- destroy(Alloc&, T* p)
633
- {
634
- boost::unordered::detail::func::destroy(p);
635
- }
636
-
637
- # else
638
-
639
- // If we don't have SFINAE expressions, only call construct for the
640
- // copy constructor for the allocator's value_type - as that's
641
- // the only construct method that old fashioned allocators support.
642
-
643
- template <typename T>
644
- static void construct(Alloc& a, T* p, T const& x,
645
- typename boost::enable_if_c<
646
- boost::unordered::detail::has_construct<Alloc, T>::value &&
647
- boost::is_same<T, value_type>::value,
648
- void*>::type = 0)
649
- {
650
- a.construct(p, x);
651
- }
652
-
653
- template <typename T>
654
- static void construct(Alloc&, T* p, T const& x,
655
- typename boost::disable_if_c<
656
- boost::unordered::detail::has_construct<Alloc, T>::value &&
657
- boost::is_same<T, value_type>::value,
658
- void*>::type = 0)
659
- {
660
- new ((void*) p) T(x);
661
- }
662
-
663
- template <typename T>
664
- static void destroy(Alloc& a, T* p,
665
- typename boost::enable_if_c<
666
- boost::unordered::detail::has_destroy<Alloc, T>::value &&
667
- boost::is_same<T, value_type>::value,
668
- void*>::type = 0)
669
- {
670
- a.destroy(p);
671
- }
672
-
673
- template <typename T>
674
- static void destroy(Alloc&, T* p,
675
- typename boost::disable_if_c<
676
- boost::unordered::detail::has_destroy<Alloc, T>::value &&
677
- boost::is_same<T, value_type>::value,
678
- void*>::type = 0)
679
- {
680
- boost::unordered::detail::func::destroy(p);
681
- }
682
-
683
- # endif
684
-
685
- static size_type max_size(const Alloc& a)
686
- {
687
- return boost::unordered::detail::func::
688
- call_max_size<size_type>(a);
689
- }
690
-
691
- // Allocator propagation on construction
692
-
693
- static Alloc select_on_container_copy_construction(Alloc const& rhs)
694
- {
695
- return boost::unordered::detail::func::
696
- call_select_on_container_copy_construction(rhs);
697
- }
698
-
699
- // Allocator propagation on assignment and swap.
700
- // Return true if lhs is modified.
701
- typedef BOOST_UNORDERED_DEFAULT_TYPE(
702
- Alloc, propagate_on_container_copy_assignment, false_type)
703
- propagate_on_container_copy_assignment;
704
- typedef BOOST_UNORDERED_DEFAULT_TYPE(
705
- Alloc,propagate_on_container_move_assignment, false_type)
706
- propagate_on_container_move_assignment;
707
- typedef BOOST_UNORDERED_DEFAULT_TYPE(
708
- Alloc,propagate_on_container_swap,false_type)
709
- propagate_on_container_swap;
710
- };
711
- }}}
712
-
713
- # undef BOOST_UNORDERED_DEFAULT_TYPE_TMPLT
714
- # undef BOOST_UNORDERED_DEFAULT_TYPE
715
-
716
- ////////////////////////////////////////////////////////////////////////////////
717
- //
718
- // std::allocator_traits
719
-
720
- #elif BOOST_UNORDERED_USE_ALLOCATOR_TRAITS == 1
721
-
722
- # include <memory>
723
-
724
- # define BOOST_UNORDERED_DETAIL_FULL_CONSTRUCT 1
725
-
726
- namespace boost { namespace unordered { namespace detail {
727
-
728
- template <typename Alloc>
729
- struct allocator_traits : std::allocator_traits<Alloc> {};
730
-
731
- template <typename Alloc, typename T>
732
- struct rebind_wrap
733
- {
734
- typedef typename std::allocator_traits<Alloc>::
735
- template rebind_alloc<T> type;
736
- };
737
- }}}
738
-
739
- ////////////////////////////////////////////////////////////////////////////////
740
- //
741
- // boost::container::allocator_traits
742
-
743
- #elif BOOST_UNORDERED_USE_ALLOCATOR_TRAITS == 2
744
-
745
- # include <boost/container/allocator_traits.hpp>
746
-
747
- # define BOOST_UNORDERED_DETAIL_FULL_CONSTRUCT 0
748
-
749
- namespace boost { namespace unordered { namespace detail {
750
-
751
- template <typename Alloc>
752
- struct allocator_traits :
753
- boost::container::allocator_traits<Alloc> {};
754
-
755
- template <typename Alloc, typename T>
756
- struct rebind_wrap :
757
- boost::container::allocator_traits<Alloc>::
758
- template portable_rebind_alloc<T>
759
- {};
760
-
761
- }}}
762
-
763
- #else
764
-
765
- #error "Invalid BOOST_UNORDERED_USE_ALLOCATOR_TRAITS value."
766
-
767
- #endif
768
-
769
-
770
- namespace boost { namespace unordered { namespace detail { namespace func {
771
-
772
- ////////////////////////////////////////////////////////////////////////////
773
- // call_construct
774
-
775
- #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
776
-
777
- # if BOOST_UNORDERED_DETAIL_FULL_CONSTRUCT
778
-
779
- template <typename Alloc, typename T, typename... Args>
780
- inline void call_construct(Alloc& alloc, T* address,
781
- BOOST_FWD_REF(Args)... args)
782
- {
783
- boost::unordered::detail::allocator_traits<Alloc>::construct(alloc,
784
- address, boost::forward<Args>(args)...);
785
- }
786
-
787
- template <typename Alloc, typename T>
788
- inline void destroy_value_impl(Alloc& alloc, T* x) {
789
- boost::unordered::detail::allocator_traits<Alloc>::destroy(alloc, x);
790
- }
791
-
792
-
793
- # else
794
-
795
- template <typename Alloc, typename T, typename... Args>
796
- inline void call_construct(Alloc&, T* address,
797
- BOOST_FWD_REF(Args)... args)
798
- {
799
- new((void*) address) T(boost::forward<Args>(args)...);
800
- }
801
-
802
- template <typename Alloc, typename T>
803
- inline void destroy_value_impl(Alloc&, T* x) {
804
- boost::unordered::detail::func::destroy(x);
805
- }
806
-
807
-
808
- # endif
809
-
810
- #else
811
-
812
- template <typename Alloc, typename T>
813
- inline void destroy_value_impl(Alloc&, T* x) {
814
- boost::unordered::detail::func::destroy(x);
815
- }
816
-
817
- #endif
818
-
819
- ////////////////////////////////////////////////////////////////////////////
820
- // Construct from tuple
821
- //
822
- // Used for piecewise construction.
823
-
824
- #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
825
-
826
- # define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(n, namespace_) \
827
- template<typename Alloc, typename T> \
828
- void construct_from_tuple(Alloc& alloc, T* ptr, namespace_ tuple<>) \
829
- { \
830
- boost::unordered::detail::func::call_construct(alloc, ptr); \
831
- } \
832
- \
833
- BOOST_PP_REPEAT_FROM_TO(1, n, \
834
- BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL, namespace_)
835
-
836
- # define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL(z, n, namespace_) \
837
- template<typename Alloc, typename T, \
838
- BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
839
- void construct_from_tuple(Alloc& alloc, T* ptr, \
840
- namespace_ tuple<BOOST_PP_ENUM_PARAMS_Z(z, n, A)> const& x) \
841
- { \
842
- boost::unordered::detail::func::call_construct(alloc, ptr, \
843
- BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_GET_TUPLE_ARG, namespace_) \
844
- ); \
845
- }
846
-
847
- # define BOOST_UNORDERED_GET_TUPLE_ARG(z, n, namespace_) \
848
- namespace_ get<n>(x)
849
-
850
- #elif !defined(__SUNPRO_CC)
851
-
852
- # define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(n, namespace_) \
853
- template<typename Alloc, typename T> \
854
- void construct_from_tuple(Alloc&, T* ptr, namespace_ tuple<>) \
855
- { \
856
- new ((void*) ptr) T(); \
857
- } \
858
- \
859
- BOOST_PP_REPEAT_FROM_TO(1, n, \
860
- BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL, namespace_)
861
-
862
- # define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL(z, n, namespace_) \
863
- template<typename Alloc, typename T, \
864
- BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
865
- void construct_from_tuple(Alloc&, T* ptr, \
866
- namespace_ tuple<BOOST_PP_ENUM_PARAMS_Z(z, n, A)> const& x) \
867
- { \
868
- new ((void*) ptr) T( \
869
- BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_GET_TUPLE_ARG, namespace_) \
870
- ); \
871
- }
872
-
873
- # define BOOST_UNORDERED_GET_TUPLE_ARG(z, n, namespace_) \
874
- namespace_ get<n>(x)
875
-
876
- #else
877
-
878
- template <int N> struct length {};
879
-
880
- # define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(n, namespace_) \
881
- template<typename Alloc, typename T> \
882
- void construct_from_tuple_impl( \
883
- boost::unordered::detail::func::length<0>, Alloc&, T* ptr, \
884
- namespace_ tuple<>) \
885
- { \
886
- new ((void*) ptr) T(); \
887
- } \
888
- \
889
- BOOST_PP_REPEAT_FROM_TO(1, n, \
890
- BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL, namespace_)
891
-
892
- # define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL(z, n, namespace_) \
893
- template<typename Alloc, typename T, \
894
- BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
895
- void construct_from_tuple_impl( \
896
- boost::unordered::detail::func::length<n>, Alloc&, T* ptr, \
897
- namespace_ tuple<BOOST_PP_ENUM_PARAMS_Z(z, n, A)> const& x) \
898
- { \
899
- new ((void*) ptr) T( \
900
- BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_GET_TUPLE_ARG, namespace_) \
901
- ); \
902
- }
903
-
904
- # define BOOST_UNORDERED_GET_TUPLE_ARG(z, n, namespace_) \
905
- namespace_ get<n>(x)
906
-
907
- #endif
908
-
909
- BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(10, boost::)
910
-
911
- #if !defined(__SUNPRO_CC) && !defined(BOOST_NO_CXX11_HDR_TUPLE)
912
- BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(10, std::)
913
- #endif
914
-
915
- #undef BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE
916
- #undef BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL
917
- #undef BOOST_UNORDERED_GET_TUPLE_ARG
918
-
919
- #if defined(__SUNPRO_CC)
920
-
921
- template <typename Alloc, typename T, typename Tuple>
922
- void construct_from_tuple(Alloc& alloc, T* ptr, Tuple const& x)
923
- {
924
- construct_from_tuple_impl(
925
- boost::unordered::detail::func::length<
926
- boost::tuples::length<Tuple>::value>(),
927
- alloc, ptr, x);
928
- }
929
-
930
- #endif
931
-
932
- ////////////////////////////////////////////////////////////////////////////
933
- // Trait to check for piecewise construction.
934
-
935
- template <typename A0>
936
- struct use_piecewise {
937
- static choice1::type test(choice1,
938
- boost::unordered::piecewise_construct_t);
939
-
940
- static choice2::type test(choice2, ...);
941
-
942
- enum { value = sizeof(choice1::type) ==
943
- sizeof(test(choose(), boost::unordered::detail::make<A0>())) };
944
- };
945
-
946
- #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
947
-
948
- ////////////////////////////////////////////////////////////////////////////
949
- // Construct from variadic parameters
950
-
951
- // For the standard pair constructor.
952
-
953
- template <typename Alloc, typename T, typename... Args>
954
- inline void construct_value_impl(Alloc& alloc, T* address,
955
- BOOST_FWD_REF(Args)... args)
956
- {
957
- boost::unordered::detail::func::call_construct(alloc,
958
- address, boost::forward<Args>(args)...);
959
- }
960
-
961
- // Special case for piece_construct
962
- //
963
- // TODO: When possible, it might be better to use std::pair's
964
- // constructor for std::piece_construct with std::tuple.
965
-
966
- template <typename Alloc, typename A, typename B,
967
- typename A0, typename A1, typename A2>
968
- inline typename enable_if<use_piecewise<A0>, void>::type
969
- construct_value_impl(Alloc& alloc, std::pair<A, B>* address,
970
- BOOST_FWD_REF(A0), BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2)
971
- {
972
- boost::unordered::detail::func::construct_from_tuple(alloc,
973
- boost::addressof(address->first), boost::forward<A1>(a1));
974
- boost::unordered::detail::func::construct_from_tuple(alloc,
975
- boost::addressof(address->second), boost::forward<A2>(a2));
976
- }
977
-
978
- #else // BOOST_NO_CXX11_VARIADIC_TEMPLATES
979
-
980
- ////////////////////////////////////////////////////////////////////////////////
981
- // Construct from emplace_args
982
-
983
- // Explicitly write out first three overloads for the sake of sane
984
- // error messages.
985
-
986
- template <typename Alloc, typename T, typename A0>
987
- inline void construct_value_impl(Alloc&, T* address,
988
- emplace_args1<A0> const& args)
989
- {
990
- new((void*) address) T(boost::forward<A0>(args.a0));
991
- }
992
-
993
- template <typename Alloc, typename T, typename A0, typename A1>
994
- inline void construct_value_impl(Alloc&, T* address,
995
- emplace_args2<A0, A1> const& args)
996
- {
997
- new((void*) address) T(
998
- boost::forward<A0>(args.a0),
999
- boost::forward<A1>(args.a1)
1000
- );
1001
- }
1002
-
1003
- template <typename Alloc, typename T, typename A0, typename A1, typename A2>
1004
- inline void construct_value_impl(Alloc&, T* address,
1005
- emplace_args3<A0, A1, A2> const& args)
1006
- {
1007
- new((void*) address) T(
1008
- boost::forward<A0>(args.a0),
1009
- boost::forward<A1>(args.a1),
1010
- boost::forward<A2>(args.a2)
1011
- );
1012
- }
1013
-
1014
- // Use a macro for the rest.
1015
-
1016
- #define BOOST_UNORDERED_CONSTRUCT_IMPL(z, num_params, _) \
1017
- template < \
1018
- typename Alloc, typename T, \
1019
- BOOST_PP_ENUM_PARAMS_Z(z, num_params, typename A) \
1020
- > \
1021
- inline void construct_value_impl(Alloc&, T* address, \
1022
- boost::unordered::detail::BOOST_PP_CAT(emplace_args,num_params) < \
1023
- BOOST_PP_ENUM_PARAMS_Z(z, num_params, A) \
1024
- > const& args) \
1025
- { \
1026
- new((void*) address) T( \
1027
- BOOST_PP_ENUM_##z(num_params, BOOST_UNORDERED_CALL_FORWARD, \
1028
- args.a)); \
1029
- }
1030
-
1031
- BOOST_PP_REPEAT_FROM_TO(4, BOOST_UNORDERED_EMPLACE_LIMIT,
1032
- BOOST_UNORDERED_CONSTRUCT_IMPL, _)
1033
-
1034
- #undef BOOST_UNORDERED_CONSTRUCT_IMPL
1035
-
1036
- // Construct with piece_construct
1037
-
1038
- template <typename Alloc, typename A, typename B,
1039
- typename A0, typename A1, typename A2>
1040
- inline void construct_value_impl(Alloc& alloc, std::pair<A, B>* address,
1041
- boost::unordered::detail::emplace_args3<A0, A1, A2> const& args,
1042
- typename enable_if<use_piecewise<A0>, void*>::type = 0)
1043
- {
1044
- boost::unordered::detail::func::construct_from_tuple(alloc,
1045
- boost::addressof(address->first), args.a1);
1046
- boost::unordered::detail::func::construct_from_tuple(alloc,
1047
- boost::addressof(address->second), args.a2);
1048
- }
1049
-
1050
- #endif // BOOST_NO_CXX11_VARIADIC_TEMPLATES
1051
-
1052
- }}}}
1053
-
1054
- namespace boost { namespace unordered { namespace detail {
1055
-
1056
- ////////////////////////////////////////////////////////////////////////////
1057
- //
1058
- // array_constructor
1059
- //
1060
- // Allocate and construct an array in an exception safe manner, and
1061
- // clean up if an exception is thrown before the container takes charge
1062
- // of it.
1063
-
1064
- template <typename Allocator>
1065
- struct array_constructor
1066
- {
1067
- typedef boost::unordered::detail::allocator_traits<Allocator> traits;
1068
- typedef typename traits::pointer pointer;
1069
-
1070
- Allocator& alloc_;
1071
- pointer ptr_;
1072
- pointer constructed_;
1073
- std::size_t length_;
1074
-
1075
- array_constructor(Allocator& a)
1076
- : alloc_(a), ptr_(), constructed_(), length_(0)
1077
- {
1078
- constructed_ = pointer();
1079
- ptr_ = pointer();
1080
- }
1081
-
1082
- ~array_constructor() {
1083
- if (ptr_) {
1084
- for(pointer p = ptr_; p != constructed_; ++p) {
1085
- boost::unordered::detail::func::destroy(
1086
- boost::addressof(*p));
1087
- }
1088
-
1089
- traits::deallocate(alloc_, ptr_, length_);
1090
- }
1091
- }
1092
-
1093
- template <typename V>
1094
- void construct(V const& v, std::size_t l)
1095
- {
1096
- BOOST_ASSERT(!ptr_);
1097
- length_ = l;
1098
- ptr_ = traits::allocate(alloc_, length_);
1099
- pointer end = ptr_ + static_cast<std::ptrdiff_t>(length_);
1100
- for(constructed_ = ptr_; constructed_ != end; ++constructed_) {
1101
- new ((void*) boost::addressof(*constructed_)) V(v);
1102
- }
1103
- }
1104
-
1105
- pointer get() const
1106
- {
1107
- return ptr_;
1108
- }
1109
-
1110
- pointer release()
1111
- {
1112
- pointer p(ptr_);
1113
- ptr_ = pointer();
1114
- return p;
1115
- }
1116
-
1117
- private:
1118
-
1119
- array_constructor(array_constructor const&);
1120
- array_constructor& operator=(array_constructor const&);
1121
- };
1122
- }}}
1123
-
1124
- #if defined(BOOST_MSVC)
1125
- #pragma warning(pop)
1126
- #endif
1127
-
1128
- #endif