passenger 4.0.20 → 4.0.21

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 (496) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.gitignore +1 -0
  5. data/.travis.yml +1 -1
  6. data/NEWS +15 -0
  7. data/README.md +5 -3
  8. data/Rakefile +1 -0
  9. data/bin/passenger-config +1 -5
  10. data/bin/passenger-install-apache2-module +53 -5
  11. data/bin/passenger-install-nginx-module +19 -6
  12. data/bin/passenger-memory-stats +3 -3
  13. data/build/agents.rb +11 -8
  14. data/build/apache2.rb +9 -5
  15. data/build/basics.rb +15 -21
  16. data/build/common_library.rb +16 -6
  17. data/build/cplusplus_support.rb +5 -5
  18. data/build/cxx_tests.rb +3 -3
  19. data/build/documentation.rb +1 -1
  20. data/build/misc.rb +4 -37
  21. data/build/node_tests.rb +29 -0
  22. data/build/oxt_tests.rb +1 -1
  23. data/build/packaging.rb +29 -10
  24. data/build/preprocessor.rb +2 -1
  25. data/build/test_basics.rb +15 -6
  26. data/debian.template/locations.ini.template +1 -0
  27. data/debian.template/passenger.install.template +1 -0
  28. data/dev/copy_boost_headers.rb +7 -3
  29. data/dev/run_travis.sh +32 -16
  30. data/doc/Users guide Apache.idmap.txt +22 -34
  31. data/doc/Users guide Apache.txt +20 -234
  32. data/doc/Users guide Nginx.idmap.txt +84 -66
  33. data/doc/Users guide Nginx.txt +50 -1
  34. data/doc/Users guide Standalone.idmap.txt +74 -0
  35. data/doc/Users guide Standalone.txt +22 -9
  36. data/doc/Users guide.txt +51 -0
  37. data/doc/users_guide_snippets/environment_variables.txt +0 -3
  38. data/doc/users_guide_snippets/installation.txt +337 -380
  39. data/doc/users_guide_snippets/installation/run_installer.txt +58 -0
  40. data/doc/users_guide_snippets/installation/verify_running_epilogue.txt +6 -0
  41. data/doc/users_guide_snippets/support_information.txt +2 -9
  42. data/doc/users_guide_snippets/troubleshooting/default.txt +112 -0
  43. data/doc/users_guide_snippets/troubleshooting/rails.txt +56 -0
  44. data/doc/users_guide_snippets/where_to_get_support.txt +9 -0
  45. data/ext/apache2/Bucket.h +1 -1
  46. data/ext/apache2/Configuration.hpp +0 -44
  47. data/ext/apache2/CreateDirConfig.cpp +1 -1
  48. data/ext/apache2/CreateDirConfig.cpp.erb +1 -1
  49. data/ext/apache2/Hooks.cpp +28 -21
  50. data/ext/apache2/MergeDirConfig.cpp +1 -0
  51. data/ext/apache2/MergeDirConfig.cpp.erb +1 -1
  52. data/ext/apache2/SetHeaders.cpp +73 -0
  53. data/ext/apache2/SetHeaders.cpp.erb +88 -0
  54. data/ext/boost/algorithm/string/detail/find_format.hpp +5 -5
  55. data/ext/boost/algorithm/string/detail/find_format_all.hpp +5 -5
  56. data/ext/boost/algorithm/string/detail/finder.hpp +1 -1
  57. data/ext/boost/algorithm/string/formatter.hpp +2 -2
  58. data/ext/boost/assert.hpp +6 -1
  59. data/ext/boost/atomic.hpp +18 -0
  60. data/ext/boost/atomic/atomic.hpp +241 -0
  61. data/ext/boost/atomic/detail/base.hpp +585 -0
  62. data/ext/boost/atomic/detail/cas32strong.hpp +885 -0
  63. data/ext/boost/atomic/detail/cas32weak.hpp +947 -0
  64. data/ext/boost/atomic/detail/cas64strong.hpp +443 -0
  65. data/ext/boost/atomic/detail/config.hpp +54 -0
  66. data/ext/boost/atomic/detail/gcc-alpha.hpp +368 -0
  67. data/ext/boost/atomic/detail/gcc-armv6plus.hpp +252 -0
  68. data/ext/boost/atomic/detail/gcc-cas.hpp +157 -0
  69. data/ext/boost/atomic/detail/gcc-ppc.hpp +2850 -0
  70. data/ext/boost/atomic/detail/gcc-sparcv9.hpp +1259 -0
  71. data/ext/boost/atomic/detail/gcc-x86.hpp +1766 -0
  72. data/ext/boost/atomic/detail/generic-cas.hpp +206 -0
  73. data/ext/boost/atomic/detail/interlocked.hpp +200 -0
  74. data/ext/boost/atomic/detail/linux-arm.hpp +189 -0
  75. data/ext/boost/atomic/detail/lockpool.hpp +97 -0
  76. data/ext/boost/atomic/detail/platform.hpp +62 -0
  77. data/ext/boost/atomic/detail/type-classification.hpp +45 -0
  78. data/ext/boost/chrono/config.hpp +8 -3
  79. data/ext/boost/chrono/duration.hpp +9 -10
  80. data/ext/boost/chrono/system_clocks.hpp +1 -1
  81. data/ext/boost/chrono/time_point.hpp +4 -3
  82. data/ext/boost/config/auto_link.hpp +53 -52
  83. data/ext/boost/config/compiler/borland.hpp +1 -0
  84. data/ext/boost/config/compiler/clang.hpp +24 -1
  85. data/ext/boost/config/compiler/codegear.hpp +1 -0
  86. data/ext/boost/config/compiler/common_edg.hpp +1 -0
  87. data/ext/boost/config/compiler/cray.hpp +1 -0
  88. data/ext/boost/config/compiler/digitalmars.hpp +1 -0
  89. data/ext/boost/config/compiler/gcc.hpp +29 -3
  90. data/ext/boost/config/compiler/gcc_xml.hpp +2 -1
  91. data/ext/boost/config/compiler/hp_acc.hpp +1 -0
  92. data/ext/boost/config/compiler/intel.hpp +1 -1
  93. data/ext/boost/config/compiler/metrowerks.hpp +1 -0
  94. data/ext/boost/config/compiler/mpw.hpp +1 -0
  95. data/ext/boost/config/compiler/pathscale.hpp +1 -0
  96. data/ext/boost/config/compiler/pgi.hpp +1 -0
  97. data/ext/boost/config/compiler/sunpro_cc.hpp +1 -0
  98. data/ext/boost/config/compiler/vacpp.hpp +3 -2
  99. data/ext/boost/config/compiler/visualc.hpp +25 -11
  100. data/ext/boost/config/platform/vxworks.hpp +353 -15
  101. data/ext/boost/config/select_compiler_config.hpp +4 -4
  102. data/ext/boost/config/stdlib/dinkumware.hpp +10 -3
  103. data/ext/boost/config/stdlib/libstdcpp3.hpp +2 -1
  104. data/ext/boost/config/suffix.hpp +45 -19
  105. data/ext/boost/date_time/format_date_parser.hpp +1 -11
  106. data/ext/boost/date_time/strings_from_facet.hpp +5 -3
  107. data/ext/boost/detail/atomic_redef_macros.hpp +19 -0
  108. data/ext/boost/detail/atomic_undef_macros.hpp +39 -0
  109. data/ext/boost/detail/endian.hpp +52 -4
  110. data/ext/boost/detail/scoped_enum_emulation.hpp +10 -10
  111. data/ext/boost/detail/select_type.hpp +36 -0
  112. data/ext/boost/exception/current_exception_cast.hpp +1 -1
  113. data/ext/boost/exception/detail/error_info_impl.hpp +3 -5
  114. data/ext/boost/exception/detail/exception_ptr.hpp +3 -3
  115. data/ext/boost/exception/detail/is_output_streamable.hpp +1 -1
  116. data/ext/boost/exception/detail/object_hex_dump.hpp +1 -1
  117. data/ext/boost/exception/detail/type_info.hpp +1 -1
  118. data/ext/boost/exception/diagnostic_information.hpp +15 -14
  119. data/ext/boost/exception/exception.hpp +1 -1
  120. data/ext/boost/exception/get_error_info.hpp +1 -1
  121. data/ext/boost/exception/info.hpp +12 -13
  122. data/ext/boost/exception/to_string.hpp +6 -1
  123. data/ext/boost/exception/to_string_stub.hpp +9 -1
  124. data/ext/boost/foreach.hpp +5 -5
  125. data/ext/boost/function/function_template.hpp +6 -6
  126. data/ext/boost/functional/hash/detail/float_functions.hpp +90 -0
  127. data/ext/boost/functional/hash/detail/hash_float.hpp +11 -2
  128. data/ext/boost/functional/hash/extensions.hpp +14 -2
  129. data/ext/boost/functional/hash/hash.hpp +26 -5
  130. data/ext/boost/get_pointer.hpp +17 -2
  131. data/ext/boost/integer_traits.hpp +1 -1
  132. data/ext/boost/lexical_cast.hpp +615 -395
  133. data/ext/boost/libs/atomic/lockpool.cpp +24 -0
  134. data/ext/boost/libs/system/src/error_code.cpp +25 -18
  135. data/ext/boost/libs/thread/src/future.cpp +7 -5
  136. data/ext/boost/libs/thread/src/pthread/once.cpp +9 -3
  137. data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +90 -0
  138. data/ext/boost/libs/thread/src/pthread/thread.cpp +129 -95
  139. data/ext/boost/libs/thread/src/pthread/timeconv.inl +20 -1
  140. data/ext/boost/limits.hpp +1 -1
  141. data/ext/boost/math/policies/policy.hpp +10 -0
  142. data/ext/boost/math/special_functions/detail/round_fwd.hpp +17 -4
  143. data/ext/boost/math/special_functions/fpclassify.hpp +114 -45
  144. data/ext/boost/math/special_functions/math_fwd.hpp +195 -83
  145. data/ext/boost/math/special_functions/sign.hpp +13 -8
  146. data/ext/boost/math/tools/config.hpp +38 -16
  147. data/ext/boost/move/algorithm.hpp +275 -0
  148. data/ext/boost/move/core.hpp +332 -0
  149. data/ext/boost/move/detail/config_begin.hpp +23 -0
  150. data/ext/boost/move/detail/config_end.hpp +20 -0
  151. data/ext/boost/move/detail/meta_utils.hpp +158 -0
  152. data/ext/boost/move/iterator.hpp +298 -0
  153. data/ext/boost/move/move.hpp +10 -1256
  154. data/ext/boost/move/traits.hpp +142 -0
  155. data/ext/boost/move/utility.hpp +194 -0
  156. data/ext/boost/mpl/assert.hpp +72 -4
  157. data/ext/boost/noncopyable.hpp +15 -3
  158. data/ext/boost/pointer_to_other.hpp +55 -0
  159. data/ext/boost/range/concepts.hpp +4 -4
  160. data/ext/boost/range/detail/extract_optional_type.hpp +1 -1
  161. data/ext/boost/range/empty.hpp +1 -1
  162. data/ext/boost/range/iterator_range_core.hpp +4 -1
  163. data/ext/boost/range/iterator_range_io.hpp +2 -2
  164. data/ext/boost/ratio/config.hpp +6 -0
  165. data/ext/boost/ratio/detail/overflow_helpers.hpp +2 -2
  166. data/ext/boost/smart_ptr/allocate_shared_array.hpp +250 -0
  167. data/ext/boost/smart_ptr/detail/allocate_array_helper.hpp +169 -0
  168. data/ext/boost/smart_ptr/detail/array_deleter.hpp +124 -0
  169. data/ext/boost/smart_ptr/detail/array_traits.hpp +53 -0
  170. data/ext/boost/smart_ptr/detail/array_utility.hpp +178 -0
  171. data/ext/boost/smart_ptr/detail/make_array_helper.hpp +157 -0
  172. data/ext/boost/smart_ptr/detail/operator_bool.hpp +16 -9
  173. data/ext/boost/smart_ptr/detail/shared_count.hpp +78 -7
  174. data/ext/boost/smart_ptr/detail/sp_convertible.hpp +15 -0
  175. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +12 -6
  176. data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
  177. data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
  178. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
  179. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
  180. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
  181. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +1 -0
  182. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
  183. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
  184. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
  185. data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
  186. data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
  187. data/ext/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +162 -0
  188. data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
  189. data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
  190. data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
  191. data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
  192. data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +15 -0
  193. data/ext/boost/smart_ptr/detail/sp_forward.hpp +39 -0
  194. data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +19 -3
  195. data/ext/boost/smart_ptr/detail/sp_if_array.hpp +31 -0
  196. data/ext/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
  197. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +5 -12
  198. data/ext/boost/smart_ptr/enable_shared_from_this.hpp +4 -4
  199. data/ext/boost/smart_ptr/make_shared.hpp +5 -1060
  200. data/ext/boost/smart_ptr/make_shared_array.hpp +247 -0
  201. data/ext/boost/smart_ptr/make_shared_object.hpp +1128 -0
  202. data/ext/boost/smart_ptr/scoped_array.hpp +32 -7
  203. data/ext/boost/smart_ptr/scoped_ptr.hpp +31 -5
  204. data/ext/boost/smart_ptr/shared_array.hpp +135 -20
  205. data/ext/boost/smart_ptr/shared_ptr.hpp +444 -126
  206. data/ext/boost/smart_ptr/weak_ptr.hpp +39 -28
  207. data/ext/boost/static_assert.hpp +74 -17
  208. data/ext/boost/system/error_code.hpp +76 -68
  209. data/ext/boost/system/system_error.hpp +5 -1
  210. data/ext/boost/thread/barrier.hpp +6 -2
  211. data/ext/boost/thread/completion_latch.hpp +233 -0
  212. data/ext/boost/thread/condition.hpp +6 -1
  213. data/ext/boost/thread/detail/async_func.hpp +571 -0
  214. data/ext/boost/thread/detail/config.hpp +248 -40
  215. data/ext/boost/thread/detail/counter.hpp +93 -0
  216. data/ext/boost/thread/detail/delete.hpp +12 -0
  217. data/ext/boost/thread/detail/invoke.hpp +1351 -0
  218. data/ext/boost/thread/detail/is_convertible.hpp +48 -0
  219. data/ext/boost/thread/detail/lockable_wrapper.hpp +45 -0
  220. data/ext/boost/thread/detail/log.hpp +83 -0
  221. data/ext/boost/thread/detail/make_tuple_indices.hpp +224 -0
  222. data/ext/boost/thread/detail/move.hpp +32 -16
  223. data/ext/boost/thread/detail/thread.hpp +236 -41
  224. data/ext/boost/thread/detail/thread_group.hpp +55 -9
  225. data/ext/boost/thread/detail/thread_interruption.hpp +4 -1
  226. data/ext/boost/thread/exceptions.hpp +2 -0
  227. data/ext/boost/thread/externally_locked.hpp +351 -0
  228. data/ext/boost/thread/externally_locked_stream.hpp +170 -0
  229. data/ext/boost/thread/future.hpp +2517 -455
  230. data/ext/boost/thread/future_error_code.hpp +61 -0
  231. data/ext/boost/thread/is_locked_by_this_thread.hpp +39 -0
  232. data/ext/boost/thread/latch.hpp +142 -0
  233. data/ext/boost/thread/lock_algorithms.hpp +468 -0
  234. data/ext/boost/thread/lock_concepts.hpp +197 -0
  235. data/ext/boost/thread/lock_factories.hpp +78 -0
  236. data/ext/boost/thread/lock_guard.hpp +88 -0
  237. data/ext/boost/thread/lock_options.hpp +31 -0
  238. data/ext/boost/thread/lock_traits.hpp +45 -0
  239. data/ext/boost/thread/lock_types.hpp +1226 -0
  240. data/ext/boost/thread/lockable_adapter.hpp +226 -0
  241. data/ext/boost/thread/lockable_concepts.hpp +157 -0
  242. data/ext/boost/thread/lockable_traits.hpp +207 -0
  243. data/ext/boost/thread/locks.hpp +5 -1816
  244. data/ext/boost/thread/mutex.hpp +33 -1
  245. data/ext/boost/thread/null_mutex.hpp +243 -0
  246. data/ext/boost/thread/once.hpp +10 -1
  247. data/ext/boost/thread/poly_lockable.hpp +68 -0
  248. data/ext/boost/thread/poly_lockable_adapter.hpp +89 -0
  249. data/ext/boost/thread/poly_shared_lockable.hpp +135 -0
  250. data/ext/boost/thread/poly_shared_lockable_adapter.hpp +170 -0
  251. data/ext/boost/thread/pthread/condition_variable.hpp +74 -26
  252. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +54 -27
  253. data/ext/boost/thread/pthread/mutex.hpp +101 -38
  254. data/ext/boost/thread/pthread/once.hpp +459 -44
  255. data/ext/boost/thread/pthread/once_atomic.hpp +313 -0
  256. data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -10
  257. data/ext/boost/thread/pthread/shared_mutex.hpp +226 -61
  258. data/ext/boost/thread/pthread/shared_mutex_assert.hpp +724 -0
  259. data/ext/boost/thread/pthread/thread_data.hpp +53 -50
  260. data/ext/boost/thread/pthread/timespec.hpp +96 -12
  261. data/ext/boost/thread/recursive_mutex.hpp +44 -1
  262. data/ext/boost/thread/reverse_lock.hpp +3 -2
  263. data/ext/boost/thread/scoped_thread.hpp +285 -0
  264. data/ext/boost/thread/shared_lock_guard.hpp +2 -1
  265. data/ext/boost/thread/shared_mutex.hpp +23 -0
  266. data/ext/boost/thread/strict_lock.hpp +235 -0
  267. data/ext/boost/thread/sync_bounded_queue.hpp +594 -0
  268. data/ext/boost/thread/sync_queue.hpp +516 -0
  269. data/ext/boost/thread/synchronized_value.hpp +1001 -0
  270. data/ext/boost/thread/testable_mutex.hpp +148 -0
  271. data/ext/boost/thread/thread.hpp +1 -13
  272. data/ext/boost/thread/thread_functors.hpp +57 -0
  273. data/ext/boost/thread/thread_guard.hpp +46 -0
  274. data/ext/boost/thread/thread_only.hpp +29 -0
  275. data/ext/boost/thread/v2/shared_mutex.hpp +1062 -0
  276. data/ext/boost/thread/v2/thread.hpp +37 -10
  277. data/ext/boost/thread/xtime.hpp +2 -1
  278. data/ext/boost/token_functions.hpp +16 -16
  279. data/ext/boost/type_traits/add_lvalue_reference.hpp +26 -0
  280. data/ext/boost/type_traits/add_reference.hpp +1 -1
  281. data/ext/boost/type_traits/add_rvalue_reference.hpp +4 -4
  282. data/ext/boost/type_traits/aligned_storage.hpp +13 -0
  283. data/ext/boost/type_traits/common_type.hpp +11 -12
  284. data/ext/boost/type_traits/config.hpp +1 -1
  285. data/ext/boost/type_traits/detail/common_type_imp.hpp +1 -1
  286. data/ext/boost/type_traits/detail/has_binary_operator.hpp +1 -1
  287. data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +1 -1
  288. data/ext/boost/type_traits/has_left_shift.hpp +49 -0
  289. data/ext/boost/type_traits/has_right_shift.hpp +49 -0
  290. data/ext/boost/type_traits/has_trivial_move_assign.hpp +57 -0
  291. data/ext/boost/type_traits/has_trivial_move_constructor.hpp +57 -0
  292. data/ext/boost/type_traits/intrinsics.hpp +18 -2
  293. data/ext/boost/type_traits/is_abstract.hpp +1 -1
  294. data/ext/boost/type_traits/is_array.hpp +1 -1
  295. data/ext/boost/type_traits/is_const.hpp +1 -1
  296. data/ext/boost/type_traits/is_convertible.hpp +78 -17
  297. data/ext/boost/type_traits/is_function.hpp +6 -1
  298. data/ext/boost/type_traits/is_integral.hpp +6 -1
  299. data/ext/boost/type_traits/is_nothrow_move_assignable.hpp +84 -0
  300. data/ext/boost/type_traits/is_nothrow_move_constructible.hpp +84 -0
  301. data/ext/boost/type_traits/is_pod.hpp +3 -1
  302. data/ext/boost/type_traits/is_rvalue_reference.hpp +1 -1
  303. data/ext/boost/type_traits/is_volatile.hpp +1 -1
  304. data/ext/boost/type_traits/make_signed.hpp +153 -0
  305. data/ext/boost/type_traits/make_unsigned.hpp +16 -0
  306. data/ext/boost/type_traits/remove_const.hpp +1 -1
  307. data/ext/boost/type_traits/remove_cv.hpp +1 -1
  308. data/ext/boost/type_traits/remove_reference.hpp +1 -1
  309. data/ext/boost/type_traits/remove_volatile.hpp +1 -1
  310. data/ext/boost/unordered/detail/allocate.hpp +1120 -0
  311. data/ext/boost/unordered/detail/buckets.hpp +876 -0
  312. data/ext/boost/unordered/detail/equivalent.hpp +680 -0
  313. data/ext/boost/unordered/detail/extract_key.hpp +183 -0
  314. data/ext/boost/unordered/detail/fwd.hpp +23 -0
  315. data/ext/boost/unordered/detail/table.hpp +861 -0
  316. data/ext/boost/unordered/detail/unique.hpp +622 -0
  317. data/ext/boost/unordered/detail/util.hpp +260 -0
  318. data/ext/boost/unordered/unordered_map.hpp +1652 -0
  319. data/ext/boost/unordered/unordered_map_fwd.hpp +65 -0
  320. data/ext/boost/unordered/unordered_set.hpp +1549 -0
  321. data/ext/boost/unordered/unordered_set_fwd.hpp +63 -0
  322. data/ext/boost/unordered_map.hpp +18 -0
  323. data/ext/boost/unordered_set.hpp +18 -0
  324. data/ext/boost/utility/addressof.hpp +2 -2
  325. data/ext/boost/utility/result_of.hpp +8 -1
  326. data/ext/boost/version.hpp +2 -2
  327. data/ext/common/Account.h +1 -1
  328. data/ext/common/AccountsDatabase.h +1 -1
  329. data/ext/common/AgentsStarter.cpp +3 -1
  330. data/ext/common/AgentsStarter.h +2 -2
  331. data/ext/common/ApplicationPool2/AppTypes.cpp +24 -6
  332. data/ext/common/ApplicationPool2/AppTypes.h +17 -8
  333. data/ext/common/ApplicationPool2/Common.h +12 -12
  334. data/ext/common/ApplicationPool2/DirectSpawner.h +2 -2
  335. data/ext/common/ApplicationPool2/DummySpawner.h +3 -3
  336. data/ext/common/ApplicationPool2/Group.h +6 -6
  337. data/ext/common/ApplicationPool2/Implementation.cpp +19 -19
  338. data/ext/common/ApplicationPool2/PipeWatcher.h +5 -5
  339. data/ext/common/ApplicationPool2/Pool.h +21 -21
  340. data/ext/common/ApplicationPool2/Process.h +6 -6
  341. data/ext/common/ApplicationPool2/Session.h +1 -1
  342. data/ext/common/ApplicationPool2/SmartSpawner.h +24 -12
  343. data/ext/common/ApplicationPool2/Socket.h +2 -2
  344. data/ext/common/ApplicationPool2/Spawner.h +64 -14
  345. data/ext/common/ApplicationPool2/SpawnerFactory.h +7 -7
  346. data/ext/common/ApplicationPool2/SuperGroup.h +5 -5
  347. data/ext/common/BackgroundEventLoop.cpp +4 -4
  348. data/ext/common/BackgroundEventLoop.h +1 -1
  349. data/ext/common/Constants.h +13 -1
  350. data/ext/common/EventedBufferedInput.h +8 -8
  351. data/ext/common/Exceptions.cpp +71 -0
  352. data/ext/common/Exceptions.h +60 -7
  353. data/ext/common/FileDescriptor.h +4 -4
  354. data/ext/common/MessageClient.h +1 -1
  355. data/ext/common/MessageServer.h +5 -5
  356. data/ext/common/MultiLibeio.cpp +3 -3
  357. data/ext/common/MultiLibeio.h +2 -2
  358. data/ext/common/RandomGenerator.h +11 -11
  359. data/ext/common/ResourceLocator.h +8 -1
  360. data/ext/common/SafeLibev.h +12 -12
  361. data/ext/common/ServerInstanceDir.h +11 -3
  362. data/ext/common/UnionStation.h +10 -10
  363. data/ext/common/Utils.cpp +11 -13
  364. data/ext/common/Utils.h +9 -9
  365. data/ext/common/Utils/BlockingQueue.h +10 -10
  366. data/ext/common/Utils/BufferedIO.h +1 -1
  367. data/ext/common/Utils/CachedFileStat.hpp +2 -2
  368. data/ext/common/Utils/FileChangeChecker.h +1 -1
  369. data/ext/common/Utils/HashMap.h +13 -4
  370. data/ext/common/Utils/IOUtils.cpp +33 -10
  371. data/ext/common/Utils/IniFile.h +3 -3
  372. data/ext/common/Utils/Lock.h +2 -2
  373. data/ext/common/Utils/MessagePassing.h +10 -10
  374. data/ext/common/Utils/ProcessMetricsCollector.h +24 -6
  375. data/ext/common/Utils/ScopeGuard.h +5 -5
  376. data/ext/common/Utils/jsoncpp.cpp +2 -0
  377. data/ext/common/agents/HelperAgent/FileBackedPipe.h +26 -26
  378. data/ext/common/agents/HelperAgent/Main.cpp +18 -18
  379. data/ext/common/agents/HelperAgent/RequestHandler.cpp +4 -4
  380. data/ext/common/agents/HelperAgent/RequestHandler.h +30 -21
  381. data/ext/common/agents/LoggingAgent/AdminController.h +1 -1
  382. data/ext/common/agents/LoggingAgent/FilterSupport.h +13 -11
  383. data/ext/common/agents/LoggingAgent/LoggingServer.h +11 -11
  384. data/ext/common/agents/LoggingAgent/Main.cpp +9 -9
  385. data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
  386. data/ext/common/agents/SpawnPreparer.cpp +1 -0
  387. data/ext/common/agents/Watchdog/AgentWatcher.cpp +8 -7
  388. data/ext/common/agents/Watchdog/Main.cpp +81 -73
  389. data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +1 -1
  390. data/ext/libev/Changes +57 -0
  391. data/ext/libev/LICENSE +2 -1
  392. data/ext/libev/Makefile.in +110 -50
  393. data/ext/libev/README +8 -8
  394. data/ext/libev/aclocal.m4 +1503 -861
  395. data/ext/libev/config.guess +290 -304
  396. data/ext/libev/config.sub +77 -198
  397. data/ext/libev/configure +1735 -890
  398. data/ext/libev/configure.ac +3 -2
  399. data/ext/libev/ev++.h +6 -6
  400. data/ext/libev/ev.c +541 -214
  401. data/ext/libev/ev.h +106 -100
  402. data/ext/libev/ev_epoll.c +1 -1
  403. data/ext/libev/ev_kqueue.c +20 -4
  404. data/ext/libev/ev_vars.h +15 -16
  405. data/ext/libev/ev_win32.c +12 -2
  406. data/ext/libev/ev_wrap.h +162 -160
  407. data/ext/libev/event.c +29 -6
  408. data/ext/libev/event.h +9 -2
  409. data/ext/libev/ltmain.sh +2632 -1384
  410. data/ext/nginx/ConfigurationCommands.c +1 -1
  411. data/ext/nginx/ConfigurationCommands.c.erb +3 -1
  412. data/ext/nginx/ContentHandler.c +25 -2
  413. data/ext/nginx/CreateLocationConfig.c +1 -0
  414. data/ext/nginx/CreateLocationConfig.c.erb +1 -1
  415. data/ext/nginx/MergeLocationConfig.c +1 -0
  416. data/ext/nginx/MergeLocationConfig.c.erb +1 -1
  417. data/ext/nginx/config +12 -0
  418. data/ext/oxt/dynamic_thread_group.hpp +7 -4
  419. data/ext/oxt/system_calls.cpp +5 -1
  420. data/ext/oxt/system_calls.hpp +3 -0
  421. data/helper-scripts/node-loader.js +117 -249
  422. data/lib/phusion_passenger.rb +27 -5
  423. data/lib/phusion_passenger/abstract_installer.rb +104 -9
  424. data/lib/phusion_passenger/admin_tools/memory_stats.rb +10 -9
  425. data/lib/phusion_passenger/apache2/config_options.rb +6 -3
  426. data/lib/phusion_passenger/common_library.rb +7 -1
  427. data/lib/phusion_passenger/constants.rb +6 -0
  428. data/lib/phusion_passenger/loader_shared_helpers.rb +7 -4
  429. data/lib/phusion_passenger/nginx/config_options.rb +2 -1
  430. data/lib/phusion_passenger/packaging.rb +3 -0
  431. data/lib/phusion_passenger/platform_info/apache.rb +43 -6
  432. data/lib/phusion_passenger/platform_info/apache_detector.rb +15 -5
  433. data/lib/phusion_passenger/platform_info/compiler.rb +167 -32
  434. data/lib/phusion_passenger/platform_info/cxx_portability.rb +133 -77
  435. data/lib/phusion_passenger/platform_info/depcheck.rb +17 -7
  436. data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +3 -3
  437. data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
  438. data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -6
  439. data/lib/phusion_passenger/platform_info/linux.rb +2 -1
  440. data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
  441. data/lib/phusion_passenger/platform_info/ruby.rb +18 -3
  442. data/lib/phusion_passenger/standalone/runtime_installer.rb +6 -2
  443. data/lib/phusion_passenger/standalone/start_command.rb +8 -2
  444. data/lib/phusion_passenger/utils/ansi_colors.rb +9 -0
  445. data/lib/phusion_passenger/utils/hosts_file_parser.rb +4 -2
  446. data/node_lib/phusion_passenger/httplib_emulation.js +141 -0
  447. data/node_lib/phusion_passenger/line_reader.js +154 -0
  448. data/node_lib/phusion_passenger/request_handler.js +65 -0
  449. data/node_lib/phusion_passenger/session_protocol_parser.js +113 -0
  450. data/resources/templates/apache2/deployment_example.txt.erb +2 -1
  451. data/resources/templates/apache2/installing_against_a_different_apache.txt.erb +14 -0
  452. data/resources/templates/apache2/multiple_apache_installations_detected.txt.erb +15 -0
  453. data/resources/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
  454. data/resources/templates/general_error_with_html.html.template +1 -1
  455. data/resources/templates/installer_common/gem_install_permission_problems.txt.erb +17 -0
  456. data/resources/templates/installer_common/low_amount_of_memory_warning.txt.erb +6 -4
  457. data/resources/templates/installer_common/world_inaccessible_directories.txt.erb +16 -0
  458. data/resources/templates/nginx/deployment_example.txt.erb +2 -1
  459. data/resources/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
  460. data/resources/templates/standalone/config.erb +1 -0
  461. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -3
  462. data/test/cxx/ApplicationPool2/PoolTest.cpp +4 -4
  463. data/test/cxx/ApplicationPool2/ProcessTest.cpp +5 -5
  464. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -5
  465. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +1 -1
  466. data/test/cxx/EventedBufferedInputTest.cpp +6 -6
  467. data/test/cxx/FileBackedPipeTest.cpp +1 -1
  468. data/test/cxx/MessagePassingTest.cpp +1 -1
  469. data/test/cxx/MessageServerTest.cpp +4 -4
  470. data/test/cxx/RequestHandlerTest.cpp +7 -7
  471. data/test/cxx/UnionStationTest.cpp +2 -2
  472. data/test/node/line_reader_spec.js +338 -0
  473. data/test/node/spec_helper.js +27 -0
  474. data/test/ruby/standalone/runtime_installer_spec.rb +2 -1
  475. metadata +131 -22
  476. metadata.gz.asc +7 -7
  477. data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +0 -29
  478. data/ext/boost/lambda/core.hpp +0 -79
  479. data/ext/boost/lambda/detail/actions.hpp +0 -174
  480. data/ext/boost/lambda/detail/arity_code.hpp +0 -110
  481. data/ext/boost/lambda/detail/function_adaptors.hpp +0 -789
  482. data/ext/boost/lambda/detail/is_instance_of.hpp +0 -104
  483. data/ext/boost/lambda/detail/lambda_config.hpp +0 -48
  484. data/ext/boost/lambda/detail/lambda_functor_base.hpp +0 -615
  485. data/ext/boost/lambda/detail/lambda_functors.hpp +0 -324
  486. data/ext/boost/lambda/detail/lambda_fwd.hpp +0 -74
  487. data/ext/boost/lambda/detail/lambda_traits.hpp +0 -578
  488. data/ext/boost/lambda/detail/member_ptr.hpp +0 -737
  489. data/ext/boost/lambda/detail/operator_actions.hpp +0 -139
  490. data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +0 -271
  491. data/ext/boost/lambda/detail/operator_return_type_traits.hpp +0 -917
  492. data/ext/boost/lambda/detail/operators.hpp +0 -370
  493. data/ext/boost/lambda/detail/ret.hpp +0 -325
  494. data/ext/boost/lambda/detail/return_type_traits.hpp +0 -282
  495. data/ext/boost/lambda/detail/select_functions.hpp +0 -74
  496. data/ext/boost/lambda/lambda.hpp +0 -34
@@ -0,0 +1,247 @@
1
+ /*
2
+ * Copyright (c) 2012 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_MAKE_SHARED_ARRAY_HPP
10
+ #define BOOST_SMART_PTR_MAKE_SHARED_ARRAY_HPP
11
+
12
+ #include <boost/smart_ptr/shared_ptr.hpp>
13
+ #include <boost/smart_ptr/detail/array_deleter.hpp>
14
+ #include <boost/smart_ptr/detail/array_traits.hpp>
15
+ #include <boost/smart_ptr/detail/make_array_helper.hpp>
16
+ #include <boost/smart_ptr/detail/sp_if_array.hpp>
17
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
18
+ #include <initializer_list>
19
+ #endif
20
+
21
+ namespace boost {
22
+ template<typename T>
23
+ inline typename boost::detail::sp_if_array<T>::type
24
+ make_shared(std::size_t size) {
25
+ typedef typename boost::detail::array_inner<T>::type T1;
26
+ typedef typename boost::detail::array_base<T1>::type T2;
27
+ T1* p1 = 0;
28
+ T2* p2 = 0;
29
+ std::size_t n1 = size * boost::detail::array_total<T1>::size;
30
+ boost::detail::make_array_helper<T2[]> a1(n1, &p2);
31
+ boost::detail::array_deleter<T2[]> d1(n1);
32
+ boost::shared_ptr<T> s1(p1, d1, a1);
33
+ typedef boost::detail::array_deleter<T2[]>* D2;
34
+ p1 = reinterpret_cast<T1*>(p2);
35
+ D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
36
+ d2->init(p2);
37
+ return boost::shared_ptr<T>(s1, p1);
38
+ }
39
+ #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
40
+ template<typename T, typename... Args>
41
+ inline typename boost::detail::sp_if_array<T>::type
42
+ make_shared(std::size_t size, Args&&... args) {
43
+ typedef typename boost::detail::array_inner<T>::type T1;
44
+ typedef typename boost::detail::array_base<T1>::type T2;
45
+ T1* p1 = 0;
46
+ T2* p2 = 0;
47
+ std::size_t n1 = size * boost::detail::array_total<T1>::size;
48
+ boost::detail::make_array_helper<T2[]> a1(n1, &p2);
49
+ boost::detail::array_deleter<T2[]> d1(n1);
50
+ boost::shared_ptr<T> s1(p1, d1, a1);
51
+ typedef boost::detail::array_deleter<T2[]>* D2;
52
+ p1 = reinterpret_cast<T1*>(p2);
53
+ D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
54
+ d2->init(p2, boost::detail::sp_forward<Args>(args)...);
55
+ return boost::shared_ptr<T>(s1, p1);
56
+ }
57
+ template<typename T, typename... Args>
58
+ inline typename boost::detail::sp_if_size_array<T>::type
59
+ make_shared(Args&&... args) {
60
+ typedef typename boost::detail::array_inner<T>::type T1;
61
+ typedef typename boost::detail::array_base<T1>::type T2;
62
+ enum {
63
+ N = boost::detail::array_total<T>::size
64
+ };
65
+ T1* p1 = 0;
66
+ T2* p2 = 0;
67
+ boost::detail::make_array_helper<T2[N]> a1(&p2);
68
+ boost::detail::array_deleter<T2[N]> d1;
69
+ boost::shared_ptr<T> s1(p1, d1, a1);
70
+ typedef boost::detail::array_deleter<T2[N]>* D2;
71
+ p1 = reinterpret_cast<T1*>(p2);
72
+ D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
73
+ d2->init(p2, boost::detail::sp_forward<Args>(args)...);
74
+ return boost::shared_ptr<T>(s1, p1);
75
+ }
76
+ #endif
77
+ #if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
78
+ template<typename T>
79
+ inline typename boost::detail::sp_if_size_array<T>::type
80
+ make_shared(const T& list) {
81
+ typedef typename boost::detail::array_inner<T>::type T1;
82
+ typedef typename boost::detail::array_base<T1>::type T2;
83
+ typedef const T2 T3;
84
+ enum {
85
+ N = boost::detail::array_total<T>::size
86
+ };
87
+ T1* p1 = 0;
88
+ T2* p2 = 0;
89
+ T3* p3 = 0;
90
+ boost::detail::make_array_helper<T2[N]> a1(&p2);
91
+ boost::detail::array_deleter<T2[N]> d1;
92
+ boost::shared_ptr<T> s1(p1, d1, a1);
93
+ typedef boost::detail::array_deleter<T2[N]>* D2;
94
+ p3 = reinterpret_cast<T3*>(list);
95
+ p1 = reinterpret_cast<T1*>(p2);
96
+ D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
97
+ d2->init_list(p2, p3);
98
+ return boost::shared_ptr<T>(s1, p1);
99
+ }
100
+ template<typename T>
101
+ inline typename boost::detail::sp_if_array<T>::type
102
+ make_shared(std::size_t size,
103
+ const typename boost::detail::array_inner<T>::type& list) {
104
+ typedef typename boost::detail::array_inner<T>::type T1;
105
+ typedef typename boost::detail::array_base<T1>::type T2;
106
+ typedef const T2 T3;
107
+ enum {
108
+ M = boost::detail::array_total<T1>::size
109
+ };
110
+ T1* p1 = 0;
111
+ T2* p2 = 0;
112
+ T3* p3 = 0;
113
+ std::size_t n1 = M * size;
114
+ boost::detail::make_array_helper<T2[]> a1(n1, &p2);
115
+ boost::detail::array_deleter<T2[]> d1(n1);
116
+ boost::shared_ptr<T> s1(p1, d1, a1);
117
+ typedef boost::detail::array_deleter<T2[]>* D2;
118
+ p3 = reinterpret_cast<T3*>(list);
119
+ p1 = reinterpret_cast<T1*>(p2);
120
+ D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
121
+ d2->template init_list<M>(p2, p3);
122
+ return boost::shared_ptr<T>(s1, p1);
123
+ }
124
+ template<typename T>
125
+ inline typename boost::detail::sp_if_size_array<T>::type
126
+ make_shared(const typename boost::detail::array_inner<T>::type& list) {
127
+ typedef typename boost::detail::array_inner<T>::type T1;
128
+ typedef typename boost::detail::array_base<T1>::type T2;
129
+ typedef const T2 T3;
130
+ enum {
131
+ M = boost::detail::array_total<T1>::size,
132
+ N = boost::detail::array_total<T>::size
133
+ };
134
+ T1* p1 = 0;
135
+ T2* p2 = 0;
136
+ T3* p3 = 0;
137
+ boost::detail::make_array_helper<T2[N]> a1(&p2);
138
+ boost::detail::array_deleter<T2[N]> d1;
139
+ boost::shared_ptr<T> s1(p1, d1, a1);
140
+ typedef boost::detail::array_deleter<T2[N]>* D2;
141
+ p3 = reinterpret_cast<T3*>(list);
142
+ p1 = reinterpret_cast<T1*>(p2);
143
+ D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
144
+ d2->template init_list<M>(p2, p3);
145
+ return boost::shared_ptr<T>(s1, p1);
146
+ }
147
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
148
+ template<typename T>
149
+ inline typename boost::detail::sp_if_array<T>::type
150
+ make_shared(std::initializer_list<typename boost::detail::array_inner<T>::type> list) {
151
+ typedef typename boost::detail::array_inner<T>::type T1;
152
+ typedef typename boost::detail::array_base<T1>::type T2;
153
+ typedef const T2 T3;
154
+ T1* p1 = 0;
155
+ T2* p2 = 0;
156
+ T3* p3 = 0;
157
+ std::size_t n1 = list.size() * boost::detail::array_total<T1>::size;
158
+ boost::detail::make_array_helper<T2[]> a1(n1, &p2);
159
+ boost::detail::array_deleter<T2[]> d1(n1);
160
+ boost::shared_ptr<T> s1(p1, d1, a1);
161
+ typedef boost::detail::array_deleter<T2[]>* D2;
162
+ p3 = reinterpret_cast<T3*>(list.begin());
163
+ p1 = reinterpret_cast<T1*>(p2);
164
+ D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
165
+ d2->init_list(p2, p3);
166
+ return boost::shared_ptr<T>(s1, p1);
167
+ }
168
+ #endif
169
+ #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
170
+ template<typename T>
171
+ inline typename boost::detail::sp_if_array<T>::type
172
+ make_shared(std::size_t size,
173
+ typename boost::detail::array_base<T>::type&& value) {
174
+ typedef typename boost::detail::array_inner<T>::type T1;
175
+ typedef typename boost::detail::array_base<T1>::type T2;
176
+ T1* p1 = 0;
177
+ T2* p2 = 0;
178
+ std::size_t n1 = size * boost::detail::array_total<T1>::size;
179
+ boost::detail::make_array_helper<T2[]> a1(n1, &p2);
180
+ boost::detail::array_deleter<T2[]> d1(n1);
181
+ boost::shared_ptr<T> s1(p1, d1, a1);
182
+ typedef boost::detail::array_deleter<T2[]>* D2;
183
+ p1 = reinterpret_cast<T1*>(p2);
184
+ D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
185
+ d2->init(p2, boost::detail::sp_forward<T2>(value));
186
+ return boost::shared_ptr<T>(s1, p1);
187
+ }
188
+ template<typename T>
189
+ inline typename boost::detail::sp_if_size_array<T>::type
190
+ make_shared(typename boost::detail::array_base<T>::type&& value) {
191
+ typedef typename boost::detail::array_inner<T>::type T1;
192
+ typedef typename boost::detail::array_base<T1>::type T2;
193
+ enum {
194
+ N = boost::detail::array_total<T>::size
195
+ };
196
+ T1* p1 = 0;
197
+ T2* p2 = 0;
198
+ boost::detail::make_array_helper<T2[N]> a1(&p2);
199
+ boost::detail::array_deleter<T2[N]> d1;
200
+ boost::shared_ptr<T> s1(p1, d1, a1);
201
+ typedef boost::detail::array_deleter<T2[N]>* D2;
202
+ p1 = reinterpret_cast<T1*>(p2);
203
+ D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
204
+ d2->init(p2, boost::detail::sp_forward<T2>(value));
205
+ return boost::shared_ptr<T>(s1, p1);
206
+ }
207
+ #endif
208
+ #endif
209
+ template<typename T>
210
+ inline typename boost::detail::sp_if_array<T>::type
211
+ make_shared_noinit(std::size_t size) {
212
+ typedef typename boost::detail::array_inner<T>::type T1;
213
+ typedef typename boost::detail::array_base<T1>::type T2;
214
+ T1* p1 = 0;
215
+ T2* p2 = 0;
216
+ std::size_t n1 = size * boost::detail::array_total<T1>::size;
217
+ boost::detail::make_array_helper<T2[]> a1(n1, &p2);
218
+ boost::detail::array_deleter<T2[]> d1(n1);
219
+ boost::shared_ptr<T> s1(p1, d1, a1);
220
+ typedef boost::detail::array_deleter<T2[]>* D2;
221
+ p1 = reinterpret_cast<T1*>(p2);
222
+ D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
223
+ d2->noinit(p2);
224
+ return boost::shared_ptr<T>(s1, p1);
225
+ }
226
+ template<typename T>
227
+ inline typename boost::detail::sp_if_size_array<T>::type
228
+ make_shared_noinit() {
229
+ typedef typename boost::detail::array_inner<T>::type T1;
230
+ typedef typename boost::detail::array_base<T1>::type T2;
231
+ enum {
232
+ N = boost::detail::array_total<T>::size
233
+ };
234
+ T1* p1 = 0;
235
+ T2* p2 = 0;
236
+ boost::detail::make_array_helper<T2[N]> a1(&p2);
237
+ boost::detail::array_deleter<T2[N]> d1;
238
+ boost::shared_ptr<T> s1(p1, d1, a1);
239
+ typedef boost::detail::array_deleter<T2[N]>* D2;
240
+ p1 = reinterpret_cast<T1*>(p2);
241
+ D2 d2 = static_cast<D2>(s1._internal_get_untyped_deleter());
242
+ d2->noinit(p2);
243
+ return boost::shared_ptr<T>(s1, p1);
244
+ }
245
+ }
246
+
247
+ #endif
@@ -0,0 +1,1128 @@
1
+ #ifndef BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED
2
+ #define BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED
3
+
4
+ // make_shared_object.hpp
5
+ //
6
+ // Copyright (c) 2007, 2008, 2012 Peter Dimov
7
+ //
8
+ // Distributed under the Boost Software License, Version 1.0.
9
+ // See accompanying file LICENSE_1_0.txt or copy at
10
+ // http://www.boost.org/LICENSE_1_0.txt
11
+ //
12
+ // See http://www.boost.org/libs/smart_ptr/make_shared.html
13
+ // for documentation.
14
+
15
+ #include <boost/config.hpp>
16
+ #include <boost/smart_ptr/shared_ptr.hpp>
17
+ #include <boost/smart_ptr/detail/sp_forward.hpp>
18
+ #include <boost/type_traits/type_with_alignment.hpp>
19
+ #include <boost/type_traits/alignment_of.hpp>
20
+ #include <cstddef>
21
+ #include <new>
22
+
23
+ namespace boost
24
+ {
25
+
26
+ namespace detail
27
+ {
28
+
29
+ template< std::size_t N, std::size_t A > struct sp_aligned_storage
30
+ {
31
+ union type
32
+ {
33
+ char data_[ N ];
34
+ typename boost::type_with_alignment< A >::type align_;
35
+ };
36
+ };
37
+
38
+ template< class T > class sp_ms_deleter
39
+ {
40
+ private:
41
+
42
+ typedef typename sp_aligned_storage< sizeof( T ), ::boost::alignment_of< T >::value >::type storage_type;
43
+
44
+ bool initialized_;
45
+ storage_type storage_;
46
+
47
+ private:
48
+
49
+ void destroy()
50
+ {
51
+ if( initialized_ )
52
+ {
53
+ #if defined( __GNUC__ )
54
+
55
+ // fixes incorrect aliasing warning
56
+ T * p = reinterpret_cast< T* >( storage_.data_ );
57
+ p->~T();
58
+
59
+ #else
60
+
61
+ reinterpret_cast< T* >( storage_.data_ )->~T();
62
+
63
+ #endif
64
+
65
+ initialized_ = false;
66
+ }
67
+ }
68
+
69
+ public:
70
+
71
+ sp_ms_deleter() BOOST_NOEXCEPT : initialized_( false )
72
+ {
73
+ }
74
+
75
+ // optimization: do not copy storage_
76
+ sp_ms_deleter( sp_ms_deleter const & ) BOOST_NOEXCEPT : initialized_( false )
77
+ {
78
+ }
79
+
80
+ ~sp_ms_deleter()
81
+ {
82
+ destroy();
83
+ }
84
+
85
+ void operator()( T * )
86
+ {
87
+ destroy();
88
+ }
89
+
90
+ static void operator_fn( T* ) // operator() can't be static
91
+ {
92
+ }
93
+
94
+ void * address() BOOST_NOEXCEPT
95
+ {
96
+ return storage_.data_;
97
+ }
98
+
99
+ void set_initialized() BOOST_NOEXCEPT
100
+ {
101
+ initialized_ = true;
102
+ }
103
+ };
104
+
105
+ template< class T > struct sp_if_not_array
106
+ {
107
+ typedef boost::shared_ptr< T > type;
108
+ };
109
+
110
+ #if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
111
+
112
+ template< class T > struct sp_if_not_array< T[] >
113
+ {
114
+ };
115
+
116
+ #if !defined( __BORLANDC__ ) || !BOOST_WORKAROUND( __BORLANDC__, < 0x600 )
117
+
118
+ template< class T, std::size_t N > struct sp_if_not_array< T[N] >
119
+ {
120
+ };
121
+
122
+ #endif
123
+
124
+ #endif
125
+
126
+ } // namespace detail
127
+
128
+ #if !defined( BOOST_NO_FUNCTION_TEMPLATE_ORDERING )
129
+ # define BOOST_SP_MSD( T ) boost::detail::sp_inplace_tag< boost::detail::sp_ms_deleter< T > >()
130
+ #else
131
+ # define BOOST_SP_MSD( T ) boost::detail::sp_ms_deleter< T >()
132
+ #endif
133
+
134
+ // Zero-argument versions
135
+ //
136
+ // Used even when variadic templates are available because of the new T() vs new T issue
137
+
138
+ template< class T > typename boost::detail::sp_if_not_array< T >::type make_shared()
139
+ {
140
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
141
+
142
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
143
+
144
+ void * pv = pd->address();
145
+
146
+ ::new( pv ) T();
147
+ pd->set_initialized();
148
+
149
+ T * pt2 = static_cast< T* >( pv );
150
+
151
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
152
+ return boost::shared_ptr< T >( pt, pt2 );
153
+ }
154
+
155
+ template< class T > typename boost::detail::sp_if_not_array< T >::type make_shared_noinit()
156
+ {
157
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
158
+
159
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
160
+
161
+ void * pv = pd->address();
162
+
163
+ ::new( pv ) T;
164
+ pd->set_initialized();
165
+
166
+ T * pt2 = static_cast< T* >( pv );
167
+
168
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
169
+ return boost::shared_ptr< T >( pt, pt2 );
170
+ }
171
+
172
+ template< class T, class A > typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a )
173
+ {
174
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
175
+
176
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
177
+
178
+ void * pv = pd->address();
179
+
180
+ ::new( pv ) T();
181
+ pd->set_initialized();
182
+
183
+ T * pt2 = static_cast< T* >( pv );
184
+
185
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
186
+ return boost::shared_ptr< T >( pt, pt2 );
187
+ }
188
+
189
+ template< class T, class A > typename boost::detail::sp_if_not_array< T >::type allocate_shared_noinit( A const & a )
190
+ {
191
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
192
+
193
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
194
+
195
+ void * pv = pd->address();
196
+
197
+ ::new( pv ) T;
198
+ pd->set_initialized();
199
+
200
+ T * pt2 = static_cast< T* >( pv );
201
+
202
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
203
+ return boost::shared_ptr< T >( pt, pt2 );
204
+ }
205
+
206
+ #if !defined( BOOST_NO_CXX11_VARIADIC_TEMPLATES ) && !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
207
+
208
+ // Variadic templates, rvalue reference
209
+
210
+ template< class T, class Arg1, class... Args > typename boost::detail::sp_if_not_array< T >::type make_shared( Arg1 && arg1, Args && ... args )
211
+ {
212
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
213
+
214
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
215
+
216
+ void * pv = pd->address();
217
+
218
+ ::new( pv ) T( boost::detail::sp_forward<Arg1>( arg1 ), boost::detail::sp_forward<Args>( args )... );
219
+ pd->set_initialized();
220
+
221
+ T * pt2 = static_cast< T* >( pv );
222
+
223
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
224
+ return boost::shared_ptr< T >( pt, pt2 );
225
+ }
226
+
227
+ template< class T, class A, class Arg1, class... Args > typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, Arg1 && arg1, Args && ... args )
228
+ {
229
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
230
+
231
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
232
+
233
+ void * pv = pd->address();
234
+
235
+ ::new( pv ) T( boost::detail::sp_forward<Arg1>( arg1 ), boost::detail::sp_forward<Args>( args )... );
236
+ pd->set_initialized();
237
+
238
+ T * pt2 = static_cast< T* >( pv );
239
+
240
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
241
+ return boost::shared_ptr< T >( pt, pt2 );
242
+ }
243
+
244
+ #elif !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
245
+
246
+ // For example MSVC 10.0
247
+
248
+ template< class T, class A1 >
249
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1 )
250
+ {
251
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
252
+
253
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
254
+
255
+ void * pv = pd->address();
256
+
257
+ ::new( pv ) T(
258
+ boost::detail::sp_forward<A1>( a1 )
259
+ );
260
+
261
+ pd->set_initialized();
262
+
263
+ T * pt2 = static_cast< T* >( pv );
264
+
265
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
266
+ return boost::shared_ptr< T >( pt, pt2 );
267
+ }
268
+
269
+ template< class T, class A, class A1 >
270
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1 )
271
+ {
272
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
273
+
274
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
275
+
276
+ void * pv = pd->address();
277
+
278
+ ::new( pv ) T(
279
+ boost::detail::sp_forward<A1>( a1 )
280
+ );
281
+
282
+ pd->set_initialized();
283
+
284
+ T * pt2 = static_cast< T* >( pv );
285
+
286
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
287
+ return boost::shared_ptr< T >( pt, pt2 );
288
+ }
289
+
290
+ template< class T, class A1, class A2 >
291
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2 )
292
+ {
293
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
294
+
295
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
296
+
297
+ void * pv = pd->address();
298
+
299
+ ::new( pv ) T(
300
+ boost::detail::sp_forward<A1>( a1 ),
301
+ boost::detail::sp_forward<A2>( a2 )
302
+ );
303
+
304
+ pd->set_initialized();
305
+
306
+ T * pt2 = static_cast< T* >( pv );
307
+
308
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
309
+ return boost::shared_ptr< T >( pt, pt2 );
310
+ }
311
+
312
+ template< class T, class A, class A1, class A2 >
313
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2 )
314
+ {
315
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
316
+
317
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
318
+
319
+ void * pv = pd->address();
320
+
321
+ ::new( pv ) T(
322
+ boost::detail::sp_forward<A1>( a1 ),
323
+ boost::detail::sp_forward<A2>( a2 )
324
+ );
325
+
326
+ pd->set_initialized();
327
+
328
+ T * pt2 = static_cast< T* >( pv );
329
+
330
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
331
+ return boost::shared_ptr< T >( pt, pt2 );
332
+ }
333
+
334
+ template< class T, class A1, class A2, class A3 >
335
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3 )
336
+ {
337
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
338
+
339
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
340
+
341
+ void * pv = pd->address();
342
+
343
+ ::new( pv ) T(
344
+ boost::detail::sp_forward<A1>( a1 ),
345
+ boost::detail::sp_forward<A2>( a2 ),
346
+ boost::detail::sp_forward<A3>( a3 )
347
+ );
348
+
349
+ pd->set_initialized();
350
+
351
+ T * pt2 = static_cast< T* >( pv );
352
+
353
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
354
+ return boost::shared_ptr< T >( pt, pt2 );
355
+ }
356
+
357
+ template< class T, class A, class A1, class A2, class A3 >
358
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3 )
359
+ {
360
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
361
+
362
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
363
+
364
+ void * pv = pd->address();
365
+
366
+ ::new( pv ) T(
367
+ boost::detail::sp_forward<A1>( a1 ),
368
+ boost::detail::sp_forward<A2>( a2 ),
369
+ boost::detail::sp_forward<A3>( a3 )
370
+ );
371
+
372
+ pd->set_initialized();
373
+
374
+ T * pt2 = static_cast< T* >( pv );
375
+
376
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
377
+ return boost::shared_ptr< T >( pt, pt2 );
378
+ }
379
+
380
+ template< class T, class A1, class A2, class A3, class A4 >
381
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4 )
382
+ {
383
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
384
+
385
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
386
+
387
+ void * pv = pd->address();
388
+
389
+ ::new( pv ) T(
390
+ boost::detail::sp_forward<A1>( a1 ),
391
+ boost::detail::sp_forward<A2>( a2 ),
392
+ boost::detail::sp_forward<A3>( a3 ),
393
+ boost::detail::sp_forward<A4>( a4 )
394
+ );
395
+
396
+ pd->set_initialized();
397
+
398
+ T * pt2 = static_cast< T* >( pv );
399
+
400
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
401
+ return boost::shared_ptr< T >( pt, pt2 );
402
+ }
403
+
404
+ template< class T, class A, class A1, class A2, class A3, class A4 >
405
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4 )
406
+ {
407
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
408
+
409
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
410
+
411
+ void * pv = pd->address();
412
+
413
+ ::new( pv ) T(
414
+ boost::detail::sp_forward<A1>( a1 ),
415
+ boost::detail::sp_forward<A2>( a2 ),
416
+ boost::detail::sp_forward<A3>( a3 ),
417
+ boost::detail::sp_forward<A4>( a4 )
418
+ );
419
+
420
+ pd->set_initialized();
421
+
422
+ T * pt2 = static_cast< T* >( pv );
423
+
424
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
425
+ return boost::shared_ptr< T >( pt, pt2 );
426
+ }
427
+
428
+ template< class T, class A1, class A2, class A3, class A4, class A5 >
429
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )
430
+ {
431
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
432
+
433
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
434
+
435
+ void * pv = pd->address();
436
+
437
+ ::new( pv ) T(
438
+ boost::detail::sp_forward<A1>( a1 ),
439
+ boost::detail::sp_forward<A2>( a2 ),
440
+ boost::detail::sp_forward<A3>( a3 ),
441
+ boost::detail::sp_forward<A4>( a4 ),
442
+ boost::detail::sp_forward<A5>( a5 )
443
+ );
444
+
445
+ pd->set_initialized();
446
+
447
+ T * pt2 = static_cast< T* >( pv );
448
+
449
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
450
+ return boost::shared_ptr< T >( pt, pt2 );
451
+ }
452
+
453
+ template< class T, class A, class A1, class A2, class A3, class A4, class A5 >
454
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 )
455
+ {
456
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
457
+
458
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
459
+
460
+ void * pv = pd->address();
461
+
462
+ ::new( pv ) T(
463
+ boost::detail::sp_forward<A1>( a1 ),
464
+ boost::detail::sp_forward<A2>( a2 ),
465
+ boost::detail::sp_forward<A3>( a3 ),
466
+ boost::detail::sp_forward<A4>( a4 ),
467
+ boost::detail::sp_forward<A5>( a5 )
468
+ );
469
+
470
+ pd->set_initialized();
471
+
472
+ T * pt2 = static_cast< T* >( pv );
473
+
474
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
475
+ return boost::shared_ptr< T >( pt, pt2 );
476
+ }
477
+
478
+ template< class T, class A1, class A2, class A3, class A4, class A5, class A6 >
479
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )
480
+ {
481
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
482
+
483
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
484
+
485
+ void * pv = pd->address();
486
+
487
+ ::new( pv ) T(
488
+ boost::detail::sp_forward<A1>( a1 ),
489
+ boost::detail::sp_forward<A2>( a2 ),
490
+ boost::detail::sp_forward<A3>( a3 ),
491
+ boost::detail::sp_forward<A4>( a4 ),
492
+ boost::detail::sp_forward<A5>( a5 ),
493
+ boost::detail::sp_forward<A6>( a6 )
494
+ );
495
+
496
+ pd->set_initialized();
497
+
498
+ T * pt2 = static_cast< T* >( pv );
499
+
500
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
501
+ return boost::shared_ptr< T >( pt, pt2 );
502
+ }
503
+
504
+ template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 >
505
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 )
506
+ {
507
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
508
+
509
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
510
+
511
+ void * pv = pd->address();
512
+
513
+ ::new( pv ) T(
514
+ boost::detail::sp_forward<A1>( a1 ),
515
+ boost::detail::sp_forward<A2>( a2 ),
516
+ boost::detail::sp_forward<A3>( a3 ),
517
+ boost::detail::sp_forward<A4>( a4 ),
518
+ boost::detail::sp_forward<A5>( a5 ),
519
+ boost::detail::sp_forward<A6>( a6 )
520
+ );
521
+
522
+ pd->set_initialized();
523
+
524
+ T * pt2 = static_cast< T* >( pv );
525
+
526
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
527
+ return boost::shared_ptr< T >( pt, pt2 );
528
+ }
529
+
530
+ template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
531
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )
532
+ {
533
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
534
+
535
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
536
+
537
+ void * pv = pd->address();
538
+
539
+ ::new( pv ) T(
540
+ boost::detail::sp_forward<A1>( a1 ),
541
+ boost::detail::sp_forward<A2>( a2 ),
542
+ boost::detail::sp_forward<A3>( a3 ),
543
+ boost::detail::sp_forward<A4>( a4 ),
544
+ boost::detail::sp_forward<A5>( a5 ),
545
+ boost::detail::sp_forward<A6>( a6 ),
546
+ boost::detail::sp_forward<A7>( a7 )
547
+ );
548
+
549
+ pd->set_initialized();
550
+
551
+ T * pt2 = static_cast< T* >( pv );
552
+
553
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
554
+ return boost::shared_ptr< T >( pt, pt2 );
555
+ }
556
+
557
+ template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
558
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 )
559
+ {
560
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
561
+
562
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
563
+
564
+ void * pv = pd->address();
565
+
566
+ ::new( pv ) T(
567
+ boost::detail::sp_forward<A1>( a1 ),
568
+ boost::detail::sp_forward<A2>( a2 ),
569
+ boost::detail::sp_forward<A3>( a3 ),
570
+ boost::detail::sp_forward<A4>( a4 ),
571
+ boost::detail::sp_forward<A5>( a5 ),
572
+ boost::detail::sp_forward<A6>( a6 ),
573
+ boost::detail::sp_forward<A7>( a7 )
574
+ );
575
+
576
+ pd->set_initialized();
577
+
578
+ T * pt2 = static_cast< T* >( pv );
579
+
580
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
581
+ return boost::shared_ptr< T >( pt, pt2 );
582
+ }
583
+
584
+ template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
585
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )
586
+ {
587
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
588
+
589
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
590
+
591
+ void * pv = pd->address();
592
+
593
+ ::new( pv ) T(
594
+ boost::detail::sp_forward<A1>( a1 ),
595
+ boost::detail::sp_forward<A2>( a2 ),
596
+ boost::detail::sp_forward<A3>( a3 ),
597
+ boost::detail::sp_forward<A4>( a4 ),
598
+ boost::detail::sp_forward<A5>( a5 ),
599
+ boost::detail::sp_forward<A6>( a6 ),
600
+ boost::detail::sp_forward<A7>( a7 ),
601
+ boost::detail::sp_forward<A8>( a8 )
602
+ );
603
+
604
+ pd->set_initialized();
605
+
606
+ T * pt2 = static_cast< T* >( pv );
607
+
608
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
609
+ return boost::shared_ptr< T >( pt, pt2 );
610
+ }
611
+
612
+ template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
613
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 )
614
+ {
615
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
616
+
617
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
618
+
619
+ void * pv = pd->address();
620
+
621
+ ::new( pv ) T(
622
+ boost::detail::sp_forward<A1>( a1 ),
623
+ boost::detail::sp_forward<A2>( a2 ),
624
+ boost::detail::sp_forward<A3>( a3 ),
625
+ boost::detail::sp_forward<A4>( a4 ),
626
+ boost::detail::sp_forward<A5>( a5 ),
627
+ boost::detail::sp_forward<A6>( a6 ),
628
+ boost::detail::sp_forward<A7>( a7 ),
629
+ boost::detail::sp_forward<A8>( a8 )
630
+ );
631
+
632
+ pd->set_initialized();
633
+
634
+ T * pt2 = static_cast< T* >( pv );
635
+
636
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
637
+ return boost::shared_ptr< T >( pt, pt2 );
638
+ }
639
+
640
+ template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
641
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )
642
+ {
643
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
644
+
645
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
646
+
647
+ void * pv = pd->address();
648
+
649
+ ::new( pv ) T(
650
+ boost::detail::sp_forward<A1>( a1 ),
651
+ boost::detail::sp_forward<A2>( a2 ),
652
+ boost::detail::sp_forward<A3>( a3 ),
653
+ boost::detail::sp_forward<A4>( a4 ),
654
+ boost::detail::sp_forward<A5>( a5 ),
655
+ boost::detail::sp_forward<A6>( a6 ),
656
+ boost::detail::sp_forward<A7>( a7 ),
657
+ boost::detail::sp_forward<A8>( a8 ),
658
+ boost::detail::sp_forward<A9>( a9 )
659
+ );
660
+
661
+ pd->set_initialized();
662
+
663
+ T * pt2 = static_cast< T* >( pv );
664
+
665
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
666
+ return boost::shared_ptr< T >( pt, pt2 );
667
+ }
668
+
669
+ template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
670
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 )
671
+ {
672
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
673
+
674
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
675
+
676
+ void * pv = pd->address();
677
+
678
+ ::new( pv ) T(
679
+ boost::detail::sp_forward<A1>( a1 ),
680
+ boost::detail::sp_forward<A2>( a2 ),
681
+ boost::detail::sp_forward<A3>( a3 ),
682
+ boost::detail::sp_forward<A4>( a4 ),
683
+ boost::detail::sp_forward<A5>( a5 ),
684
+ boost::detail::sp_forward<A6>( a6 ),
685
+ boost::detail::sp_forward<A7>( a7 ),
686
+ boost::detail::sp_forward<A8>( a8 ),
687
+ boost::detail::sp_forward<A9>( a9 )
688
+ );
689
+
690
+ pd->set_initialized();
691
+
692
+ T * pt2 = static_cast< T* >( pv );
693
+
694
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
695
+ return boost::shared_ptr< T >( pt, pt2 );
696
+ }
697
+
698
+ template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10 >
699
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9, A10 && a10 )
700
+ {
701
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
702
+
703
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
704
+
705
+ void * pv = pd->address();
706
+
707
+ ::new( pv ) T(
708
+ boost::detail::sp_forward<A1>( a1 ),
709
+ boost::detail::sp_forward<A2>( a2 ),
710
+ boost::detail::sp_forward<A3>( a3 ),
711
+ boost::detail::sp_forward<A4>( a4 ),
712
+ boost::detail::sp_forward<A5>( a5 ),
713
+ boost::detail::sp_forward<A6>( a6 ),
714
+ boost::detail::sp_forward<A7>( a7 ),
715
+ boost::detail::sp_forward<A8>( a8 ),
716
+ boost::detail::sp_forward<A9>( a9 ),
717
+ boost::detail::sp_forward<A10>( a10 )
718
+ );
719
+
720
+ pd->set_initialized();
721
+
722
+ T * pt2 = static_cast< T* >( pv );
723
+
724
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
725
+ return boost::shared_ptr< T >( pt, pt2 );
726
+ }
727
+
728
+ template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10 >
729
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9, A10 && a10 )
730
+ {
731
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
732
+
733
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
734
+
735
+ void * pv = pd->address();
736
+
737
+ ::new( pv ) T(
738
+ boost::detail::sp_forward<A1>( a1 ),
739
+ boost::detail::sp_forward<A2>( a2 ),
740
+ boost::detail::sp_forward<A3>( a3 ),
741
+ boost::detail::sp_forward<A4>( a4 ),
742
+ boost::detail::sp_forward<A5>( a5 ),
743
+ boost::detail::sp_forward<A6>( a6 ),
744
+ boost::detail::sp_forward<A7>( a7 ),
745
+ boost::detail::sp_forward<A8>( a8 ),
746
+ boost::detail::sp_forward<A9>( a9 ),
747
+ boost::detail::sp_forward<A9>( a10 )
748
+ );
749
+
750
+ pd->set_initialized();
751
+
752
+ T * pt2 = static_cast< T* >( pv );
753
+
754
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
755
+ return boost::shared_ptr< T >( pt, pt2 );
756
+ }
757
+
758
+ #else
759
+
760
+ // C++03 version
761
+
762
+ template< class T, class A1 >
763
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1 )
764
+ {
765
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
766
+
767
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
768
+
769
+ void * pv = pd->address();
770
+
771
+ ::new( pv ) T( a1 );
772
+ pd->set_initialized();
773
+
774
+ T * pt2 = static_cast< T* >( pv );
775
+
776
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
777
+ return boost::shared_ptr< T >( pt, pt2 );
778
+ }
779
+
780
+ template< class T, class A, class A1 >
781
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1 )
782
+ {
783
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
784
+
785
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
786
+
787
+ void * pv = pd->address();
788
+
789
+ ::new( pv ) T( a1 );
790
+ pd->set_initialized();
791
+
792
+ T * pt2 = static_cast< T* >( pv );
793
+
794
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
795
+ return boost::shared_ptr< T >( pt, pt2 );
796
+ }
797
+
798
+ template< class T, class A1, class A2 >
799
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2 )
800
+ {
801
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
802
+
803
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
804
+
805
+ void * pv = pd->address();
806
+
807
+ ::new( pv ) T( a1, a2 );
808
+ pd->set_initialized();
809
+
810
+ T * pt2 = static_cast< T* >( pv );
811
+
812
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
813
+ return boost::shared_ptr< T >( pt, pt2 );
814
+ }
815
+
816
+ template< class T, class A, class A1, class A2 >
817
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2 )
818
+ {
819
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
820
+
821
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
822
+
823
+ void * pv = pd->address();
824
+
825
+ ::new( pv ) T( a1, a2 );
826
+ pd->set_initialized();
827
+
828
+ T * pt2 = static_cast< T* >( pv );
829
+
830
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
831
+ return boost::shared_ptr< T >( pt, pt2 );
832
+ }
833
+
834
+ template< class T, class A1, class A2, class A3 >
835
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3 )
836
+ {
837
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
838
+
839
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
840
+
841
+ void * pv = pd->address();
842
+
843
+ ::new( pv ) T( a1, a2, a3 );
844
+ pd->set_initialized();
845
+
846
+ T * pt2 = static_cast< T* >( pv );
847
+
848
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
849
+ return boost::shared_ptr< T >( pt, pt2 );
850
+ }
851
+
852
+ template< class T, class A, class A1, class A2, class A3 >
853
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3 )
854
+ {
855
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
856
+
857
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
858
+
859
+ void * pv = pd->address();
860
+
861
+ ::new( pv ) T( a1, a2, a3 );
862
+ pd->set_initialized();
863
+
864
+ T * pt2 = static_cast< T* >( pv );
865
+
866
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
867
+ return boost::shared_ptr< T >( pt, pt2 );
868
+ }
869
+
870
+ template< class T, class A1, class A2, class A3, class A4 >
871
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 )
872
+ {
873
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
874
+
875
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
876
+
877
+ void * pv = pd->address();
878
+
879
+ ::new( pv ) T( a1, a2, a3, a4 );
880
+ pd->set_initialized();
881
+
882
+ T * pt2 = static_cast< T* >( pv );
883
+
884
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
885
+ return boost::shared_ptr< T >( pt, pt2 );
886
+ }
887
+
888
+ template< class T, class A, class A1, class A2, class A3, class A4 >
889
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4 )
890
+ {
891
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
892
+
893
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
894
+
895
+ void * pv = pd->address();
896
+
897
+ ::new( pv ) T( a1, a2, a3, a4 );
898
+ pd->set_initialized();
899
+
900
+ T * pt2 = static_cast< T* >( pv );
901
+
902
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
903
+ return boost::shared_ptr< T >( pt, pt2 );
904
+ }
905
+
906
+ template< class T, class A1, class A2, class A3, class A4, class A5 >
907
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 )
908
+ {
909
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
910
+
911
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
912
+
913
+ void * pv = pd->address();
914
+
915
+ ::new( pv ) T( a1, a2, a3, a4, a5 );
916
+ pd->set_initialized();
917
+
918
+ T * pt2 = static_cast< T* >( pv );
919
+
920
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
921
+ return boost::shared_ptr< T >( pt, pt2 );
922
+ }
923
+
924
+ template< class T, class A, class A1, class A2, class A3, class A4, class A5 >
925
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5 )
926
+ {
927
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
928
+
929
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
930
+
931
+ void * pv = pd->address();
932
+
933
+ ::new( pv ) T( a1, a2, a3, a4, a5 );
934
+ pd->set_initialized();
935
+
936
+ T * pt2 = static_cast< T* >( pv );
937
+
938
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
939
+ return boost::shared_ptr< T >( pt, pt2 );
940
+ }
941
+
942
+ template< class T, class A1, class A2, class A3, class A4, class A5, class A6 >
943
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 )
944
+ {
945
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
946
+
947
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
948
+
949
+ void * pv = pd->address();
950
+
951
+ ::new( pv ) T( a1, a2, a3, a4, a5, a6 );
952
+ pd->set_initialized();
953
+
954
+ T * pt2 = static_cast< T* >( pv );
955
+
956
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
957
+ return boost::shared_ptr< T >( pt, pt2 );
958
+ }
959
+
960
+ template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 >
961
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6 )
962
+ {
963
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
964
+
965
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
966
+
967
+ void * pv = pd->address();
968
+
969
+ ::new( pv ) T( a1, a2, a3, a4, a5, a6 );
970
+ pd->set_initialized();
971
+
972
+ T * pt2 = static_cast< T* >( pv );
973
+
974
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
975
+ return boost::shared_ptr< T >( pt, pt2 );
976
+ }
977
+
978
+ template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
979
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 )
980
+ {
981
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
982
+
983
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
984
+
985
+ void * pv = pd->address();
986
+
987
+ ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 );
988
+ pd->set_initialized();
989
+
990
+ T * pt2 = static_cast< T* >( pv );
991
+
992
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
993
+ return boost::shared_ptr< T >( pt, pt2 );
994
+ }
995
+
996
+ template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 >
997
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7 )
998
+ {
999
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
1000
+
1001
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1002
+
1003
+ void * pv = pd->address();
1004
+
1005
+ ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7 );
1006
+ pd->set_initialized();
1007
+
1008
+ T * pt2 = static_cast< T* >( pv );
1009
+
1010
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
1011
+ return boost::shared_ptr< T >( pt, pt2 );
1012
+ }
1013
+
1014
+ template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
1015
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 )
1016
+ {
1017
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
1018
+
1019
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1020
+
1021
+ void * pv = pd->address();
1022
+
1023
+ ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 );
1024
+ pd->set_initialized();
1025
+
1026
+ T * pt2 = static_cast< T* >( pv );
1027
+
1028
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
1029
+ return boost::shared_ptr< T >( pt, pt2 );
1030
+ }
1031
+
1032
+ template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 >
1033
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8 )
1034
+ {
1035
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
1036
+
1037
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1038
+
1039
+ void * pv = pd->address();
1040
+
1041
+ ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 );
1042
+ pd->set_initialized();
1043
+
1044
+ T * pt2 = static_cast< T* >( pv );
1045
+
1046
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
1047
+ return boost::shared_ptr< T >( pt, pt2 );
1048
+ }
1049
+
1050
+ template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
1051
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 )
1052
+ {
1053
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
1054
+
1055
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1056
+
1057
+ void * pv = pd->address();
1058
+
1059
+ ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
1060
+ pd->set_initialized();
1061
+
1062
+ T * pt2 = static_cast< T* >( pv );
1063
+
1064
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
1065
+ return boost::shared_ptr< T >( pt, pt2 );
1066
+ }
1067
+
1068
+ template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 >
1069
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9 )
1070
+ {
1071
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
1072
+
1073
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1074
+
1075
+ void * pv = pd->address();
1076
+
1077
+ ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
1078
+ pd->set_initialized();
1079
+
1080
+ T * pt2 = static_cast< T* >( pv );
1081
+
1082
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
1083
+ return boost::shared_ptr< T >( pt, pt2 );
1084
+ }
1085
+
1086
+ template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10 >
1087
+ typename boost::detail::sp_if_not_array< T >::type make_shared( A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9, A10 const & a10 )
1088
+ {
1089
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );
1090
+
1091
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1092
+
1093
+ void * pv = pd->address();
1094
+
1095
+ ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 );
1096
+ pd->set_initialized();
1097
+
1098
+ T * pt2 = static_cast< T* >( pv );
1099
+
1100
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
1101
+ return boost::shared_ptr< T >( pt, pt2 );
1102
+ }
1103
+
1104
+ template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10 >
1105
+ typename boost::detail::sp_if_not_array< T >::type allocate_shared( A const & a, A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9, A10 const & a10 )
1106
+ {
1107
+ boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ), a );
1108
+
1109
+ boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );
1110
+
1111
+ void * pv = pd->address();
1112
+
1113
+ ::new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 );
1114
+ pd->set_initialized();
1115
+
1116
+ T * pt2 = static_cast< T* >( pv );
1117
+
1118
+ boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
1119
+ return boost::shared_ptr< T >( pt, pt2 );
1120
+ }
1121
+
1122
+ #endif
1123
+
1124
+ #undef BOOST_SP_MSD
1125
+
1126
+ } // namespace boost
1127
+
1128
+ #endif // #ifndef BOOST_SMART_PTR_MAKE_SHARED_OBJECT_HPP_INCLUDED