passenger 4.0.20 → 4.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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