/Src/Dependencies/Boost/boost/thread/pthread/thread_heap_alloc.hpp

http://hadesmem.googlecode.com/ · C++ Header · 242 lines · 224 code · 14 blank · 4 comment · 0 complexity · c5ba279438ce2600787875a7ff8f3eef MD5 · raw file

  1. // Distributed under the Boost Software License, Version 1.0. (See
  2. // accompanying file LICENSE_1_0.txt or copy at
  3. // http://www.boost.org/LICENSE_1_0.txt)
  4. // (C) Copyright 2008 Anthony Williams
  5. #ifndef THREAD_HEAP_ALLOC_PTHREAD_HPP
  6. #define THREAD_HEAP_ALLOC_PTHREAD_HPP
  7. #include <boost/config/abi_prefix.hpp>
  8. namespace boost
  9. {
  10. namespace detail
  11. {
  12. template<typename T>
  13. inline T* heap_new()
  14. {
  15. return new T();
  16. }
  17. #ifndef BOOST_NO_RVALUE_REFERENCES
  18. template<typename T,typename A1>
  19. inline T* heap_new(A1&& a1)
  20. {
  21. return new T(static_cast<A1&&>(a1));
  22. }
  23. template<typename T,typename A1,typename A2>
  24. inline T* heap_new(A1&& a1,A2&& a2)
  25. {
  26. return new T(static_cast<A1&&>(a1),static_cast<A2&&>(a2));
  27. }
  28. template<typename T,typename A1,typename A2,typename A3>
  29. inline T* heap_new(A1&& a1,A2&& a2,A3&& a3)
  30. {
  31. return new T(static_cast<A1&&>(a1),static_cast<A2&&>(a2),
  32. static_cast<A3&&>(a3));
  33. }
  34. template<typename T,typename A1,typename A2,typename A3,typename A4>
  35. inline T* heap_new(A1&& a1,A2&& a2,A3&& a3,A4&& a4)
  36. {
  37. return new T(static_cast<A1&&>(a1),static_cast<A2&&>(a2),
  38. static_cast<A3&&>(a3),static_cast<A4&&>(a4));
  39. }
  40. #else
  41. template<typename T,typename A1>
  42. inline T* heap_new_impl(A1 a1)
  43. {
  44. return new T(a1);
  45. }
  46. template<typename T,typename A1,typename A2>
  47. inline T* heap_new_impl(A1 a1,A2 a2)
  48. {
  49. return new T(a1,a2);
  50. }
  51. template<typename T,typename A1,typename A2,typename A3>
  52. inline T* heap_new_impl(A1 a1,A2 a2,A3 a3)
  53. {
  54. return new T(a1,a2,a3);
  55. }
  56. template<typename T,typename A1,typename A2,typename A3,typename A4>
  57. inline T* heap_new_impl(A1 a1,A2 a2,A3 a3,A4 a4)
  58. {
  59. return new T(a1,a2,a3,a4);
  60. }
  61. template<typename T,typename A1>
  62. inline T* heap_new(A1 const& a1)
  63. {
  64. return heap_new_impl<T,A1 const&>(a1);
  65. }
  66. template<typename T,typename A1>
  67. inline T* heap_new(A1& a1)
  68. {
  69. return heap_new_impl<T,A1&>(a1);
  70. }
  71. template<typename T,typename A1,typename A2>
  72. inline T* heap_new(A1 const& a1,A2 const& a2)
  73. {
  74. return heap_new_impl<T,A1 const&,A2 const&>(a1,a2);
  75. }
  76. template<typename T,typename A1,typename A2>
  77. inline T* heap_new(A1& a1,A2 const& a2)
  78. {
  79. return heap_new_impl<T,A1&,A2 const&>(a1,a2);
  80. }
  81. template<typename T,typename A1,typename A2>
  82. inline T* heap_new(A1 const& a1,A2& a2)
  83. {
  84. return heap_new_impl<T,A1 const&,A2&>(a1,a2);
  85. }
  86. template<typename T,typename A1,typename A2>
  87. inline T* heap_new(A1& a1,A2& a2)
  88. {
  89. return heap_new_impl<T,A1&,A2&>(a1,a2);
  90. }
  91. template<typename T,typename A1,typename A2,typename A3>
  92. inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3)
  93. {
  94. return heap_new_impl<T,A1 const&,A2 const&,A3 const&>(a1,a2,a3);
  95. }
  96. template<typename T,typename A1,typename A2,typename A3>
  97. inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3)
  98. {
  99. return heap_new_impl<T,A1&,A2 const&,A3 const&>(a1,a2,a3);
  100. }
  101. template<typename T,typename A1,typename A2,typename A3>
  102. inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3)
  103. {
  104. return heap_new_impl<T,A1 const&,A2&,A3 const&>(a1,a2,a3);
  105. }
  106. template<typename T,typename A1,typename A2,typename A3>
  107. inline T* heap_new(A1& a1,A2& a2,A3 const& a3)
  108. {
  109. return heap_new_impl<T,A1&,A2&,A3 const&>(a1,a2,a3);
  110. }
  111. template<typename T,typename A1,typename A2,typename A3>
  112. inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3)
  113. {
  114. return heap_new_impl<T,A1 const&,A2 const&,A3&>(a1,a2,a3);
  115. }
  116. template<typename T,typename A1,typename A2,typename A3>
  117. inline T* heap_new(A1& a1,A2 const& a2,A3& a3)
  118. {
  119. return heap_new_impl<T,A1&,A2 const&,A3&>(a1,a2,a3);
  120. }
  121. template<typename T,typename A1,typename A2,typename A3>
  122. inline T* heap_new(A1 const& a1,A2& a2,A3& a3)
  123. {
  124. return heap_new_impl<T,A1 const&,A2&,A3&>(a1,a2,a3);
  125. }
  126. template<typename T,typename A1,typename A2,typename A3>
  127. inline T* heap_new(A1& a1,A2& a2,A3& a3)
  128. {
  129. return heap_new_impl<T,A1&,A2&,A3&>(a1,a2,a3);
  130. }
  131. template<typename T,typename A1,typename A2,typename A3,typename A4>
  132. inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4 const& a4)
  133. {
  134. return heap_new_impl<T,A1 const&,A2 const&,A3 const&,A4 const&>(a1,a2,a3,a4);
  135. }
  136. template<typename T,typename A1,typename A2,typename A3,typename A4>
  137. inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4 const& a4)
  138. {
  139. return heap_new_impl<T,A1&,A2 const&,A3 const&,A4 const&>(a1,a2,a3,a4);
  140. }
  141. template<typename T,typename A1,typename A2,typename A3,typename A4>
  142. inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4 const& a4)
  143. {
  144. return heap_new_impl<T,A1 const&,A2&,A3 const&,A4 const&>(a1,a2,a3,a4);
  145. }
  146. template<typename T,typename A1,typename A2,typename A3,typename A4>
  147. inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4 const& a4)
  148. {
  149. return heap_new_impl<T,A1&,A2&,A3 const&,A4 const&>(a1,a2,a3,a4);
  150. }
  151. template<typename T,typename A1,typename A2,typename A3,typename A4>
  152. inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4 const& a4)
  153. {
  154. return heap_new_impl<T,A1 const&,A2 const&,A3&,A4 const&>(a1,a2,a3,a4);
  155. }
  156. template<typename T,typename A1,typename A2,typename A3,typename A4>
  157. inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4 const& a4)
  158. {
  159. return heap_new_impl<T,A1&,A2 const&,A3&,A4 const&>(a1,a2,a3,a4);
  160. }
  161. template<typename T,typename A1,typename A2,typename A3,typename A4>
  162. inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4 const& a4)
  163. {
  164. return heap_new_impl<T,A1 const&,A2&,A3&,A4 const&>(a1,a2,a3,a4);
  165. }
  166. template<typename T,typename A1,typename A2,typename A3,typename A4>
  167. inline T* heap_new(A1& a1,A2& a2,A3& a3,A4 const& a4)
  168. {
  169. return heap_new_impl<T,A1&,A2&,A3&,A4 const&>(a1,a2,a3,a4);
  170. }
  171. template<typename T,typename A1,typename A2,typename A3,typename A4>
  172. inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4& a4)
  173. {
  174. return heap_new_impl<T,A1 const&,A2 const&,A3 const&,A4&>(a1,a2,a3,a4);
  175. }
  176. template<typename T,typename A1,typename A2,typename A3,typename A4>
  177. inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4& a4)
  178. {
  179. return heap_new_impl<T,A1&,A2 const&,A3 const&,A4&>(a1,a2,a3,a4);
  180. }
  181. template<typename T,typename A1,typename A2,typename A3,typename A4>
  182. inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4& a4)
  183. {
  184. return heap_new_impl<T,A1 const&,A2&,A3 const&,A4&>(a1,a2,a3,a4);
  185. }
  186. template<typename T,typename A1,typename A2,typename A3,typename A4>
  187. inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4& a4)
  188. {
  189. return heap_new_impl<T,A1&,A2&,A3 const&,A4&>(a1,a2,a3,a4);
  190. }
  191. template<typename T,typename A1,typename A2,typename A3,typename A4>
  192. inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4& a4)
  193. {
  194. return heap_new_impl<T,A1 const&,A2 const&,A3&,A4&>(a1,a2,a3,a4);
  195. }
  196. template<typename T,typename A1,typename A2,typename A3,typename A4>
  197. inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4& a4)
  198. {
  199. return heap_new_impl<T,A1&,A2 const&,A3&,A4&>(a1,a2,a3,a4);
  200. }
  201. template<typename T,typename A1,typename A2,typename A3,typename A4>
  202. inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4& a4)
  203. {
  204. return heap_new_impl<T,A1 const&,A2&,A3&,A4&>(a1,a2,a3,a4);
  205. }
  206. template<typename T,typename A1,typename A2,typename A3,typename A4>
  207. inline T* heap_new(A1& a1,A2& a2,A3& a3,A4& a4)
  208. {
  209. return heap_new_impl<T,A1&,A2&,A3&,A4&>(a1,a2,a3,a4);
  210. }
  211. #endif
  212. template<typename T>
  213. inline void heap_delete(T* data)
  214. {
  215. delete data;
  216. }
  217. template<typename T>
  218. struct do_heap_delete
  219. {
  220. void operator()(T* data) const
  221. {
  222. detail::heap_delete(data);
  223. }
  224. };
  225. }
  226. }
  227. #include <boost/config/abi_suffix.hpp>
  228. #endif