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
8 #include <boost/config/abi_prefix.hpp>
20 #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
21 template<typename T,typename A1>
22 inline T* heap_new(A1&& a1)
24 return new T(static_cast<A1&&>(a1));
26 template<typename T,typename A1,typename A2>
27 inline T* heap_new(A1&& a1,A2&& a2)
29 return new T(static_cast<A1&&>(a1),static_cast<A2&&>(a2));
31 template<typename T,typename A1,typename A2,typename A3>
32 inline T* heap_new(A1&& a1,A2&& a2,A3&& a3)
34 return new T(static_cast<A1&&>(a1),static_cast<A2&&>(a2),
35 static_cast<A3&&>(a3));
37 template<typename T,typename A1,typename A2,typename A3,typename A4>
38 inline T* heap_new(A1&& a1,A2&& a2,A3&& a3,A4&& a4)
40 return new T(static_cast<A1&&>(a1),static_cast<A2&&>(a2),
41 static_cast<A3&&>(a3),static_cast<A4&&>(a4));
44 template<typename T,typename A1>
45 inline T* heap_new_impl(A1 a1)
49 template<typename T,typename A1,typename A2>
50 inline T* heap_new_impl(A1 a1,A2 a2)
54 template<typename T,typename A1,typename A2,typename A3>
55 inline T* heap_new_impl(A1 a1,A2 a2,A3 a3)
57 return new T(a1,a2,a3);
59 template<typename T,typename A1,typename A2,typename A3,typename A4>
60 inline T* heap_new_impl(A1 a1,A2 a2,A3 a3,A4 a4)
62 return new T(a1,a2,a3,a4);
65 template<typename T,typename A1>
66 inline T* heap_new(A1 const& a1)
68 return heap_new_impl<T,A1 const&>(a1);
70 template<typename T,typename A1>
71 inline T* heap_new(A1& a1)
73 return heap_new_impl<T,A1&>(a1);
76 template<typename T,typename A1,typename A2>
77 inline T* heap_new(A1 const& a1,A2 const& a2)
79 return heap_new_impl<T,A1 const&,A2 const&>(a1,a2);
81 template<typename T,typename A1,typename A2>
82 inline T* heap_new(A1& a1,A2 const& a2)
84 return heap_new_impl<T,A1&,A2 const&>(a1,a2);
86 template<typename T,typename A1,typename A2>
87 inline T* heap_new(A1 const& a1,A2& a2)
89 return heap_new_impl<T,A1 const&,A2&>(a1,a2);
91 template<typename T,typename A1,typename A2>
92 inline T* heap_new(A1& a1,A2& a2)
94 return heap_new_impl<T,A1&,A2&>(a1,a2);
97 template<typename T,typename A1,typename A2,typename A3>
98 inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3)
100 return heap_new_impl<T,A1 const&,A2 const&,A3 const&>(a1,a2,a3);
102 template<typename T,typename A1,typename A2,typename A3>
103 inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3)
105 return heap_new_impl<T,A1&,A2 const&,A3 const&>(a1,a2,a3);
107 template<typename T,typename A1,typename A2,typename A3>
108 inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3)
110 return heap_new_impl<T,A1 const&,A2&,A3 const&>(a1,a2,a3);
112 template<typename T,typename A1,typename A2,typename A3>
113 inline T* heap_new(A1& a1,A2& a2,A3 const& a3)
115 return heap_new_impl<T,A1&,A2&,A3 const&>(a1,a2,a3);
118 template<typename T,typename A1,typename A2,typename A3>
119 inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3)
121 return heap_new_impl<T,A1 const&,A2 const&,A3&>(a1,a2,a3);
123 template<typename T,typename A1,typename A2,typename A3>
124 inline T* heap_new(A1& a1,A2 const& a2,A3& a3)
126 return heap_new_impl<T,A1&,A2 const&,A3&>(a1,a2,a3);
128 template<typename T,typename A1,typename A2,typename A3>
129 inline T* heap_new(A1 const& a1,A2& a2,A3& a3)
131 return heap_new_impl<T,A1 const&,A2&,A3&>(a1,a2,a3);
133 template<typename T,typename A1,typename A2,typename A3>
134 inline T* heap_new(A1& a1,A2& a2,A3& a3)
136 return heap_new_impl<T,A1&,A2&,A3&>(a1,a2,a3);
139 template<typename T,typename A1,typename A2,typename A3,typename A4>
140 inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4 const& a4)
142 return heap_new_impl<T,A1 const&,A2 const&,A3 const&,A4 const&>(a1,a2,a3,a4);
144 template<typename T,typename A1,typename A2,typename A3,typename A4>
145 inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4 const& a4)
147 return heap_new_impl<T,A1&,A2 const&,A3 const&,A4 const&>(a1,a2,a3,a4);
149 template<typename T,typename A1,typename A2,typename A3,typename A4>
150 inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4 const& a4)
152 return heap_new_impl<T,A1 const&,A2&,A3 const&,A4 const&>(a1,a2,a3,a4);
154 template<typename T,typename A1,typename A2,typename A3,typename A4>
155 inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4 const& a4)
157 return heap_new_impl<T,A1&,A2&,A3 const&,A4 const&>(a1,a2,a3,a4);
160 template<typename T,typename A1,typename A2,typename A3,typename A4>
161 inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4 const& a4)
163 return heap_new_impl<T,A1 const&,A2 const&,A3&,A4 const&>(a1,a2,a3,a4);
165 template<typename T,typename A1,typename A2,typename A3,typename A4>
166 inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4 const& a4)
168 return heap_new_impl<T,A1&,A2 const&,A3&,A4 const&>(a1,a2,a3,a4);
170 template<typename T,typename A1,typename A2,typename A3,typename A4>
171 inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4 const& a4)
173 return heap_new_impl<T,A1 const&,A2&,A3&,A4 const&>(a1,a2,a3,a4);
175 template<typename T,typename A1,typename A2,typename A3,typename A4>
176 inline T* heap_new(A1& a1,A2& a2,A3& a3,A4 const& a4)
178 return heap_new_impl<T,A1&,A2&,A3&,A4 const&>(a1,a2,a3,a4);
180 template<typename T,typename A1,typename A2,typename A3,typename A4>
181 inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4& a4)
183 return heap_new_impl<T,A1 const&,A2 const&,A3 const&,A4&>(a1,a2,a3,a4);
185 template<typename T,typename A1,typename A2,typename A3,typename A4>
186 inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4& a4)
188 return heap_new_impl<T,A1&,A2 const&,A3 const&,A4&>(a1,a2,a3,a4);
190 template<typename T,typename A1,typename A2,typename A3,typename A4>
191 inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4& a4)
193 return heap_new_impl<T,A1 const&,A2&,A3 const&,A4&>(a1,a2,a3,a4);
195 template<typename T,typename A1,typename A2,typename A3,typename A4>
196 inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4& a4)
198 return heap_new_impl<T,A1&,A2&,A3 const&,A4&>(a1,a2,a3,a4);
201 template<typename T,typename A1,typename A2,typename A3,typename A4>
202 inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4& a4)
204 return heap_new_impl<T,A1 const&,A2 const&,A3&,A4&>(a1,a2,a3,a4);
206 template<typename T,typename A1,typename A2,typename A3,typename A4>
207 inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4& a4)
209 return heap_new_impl<T,A1&,A2 const&,A3&,A4&>(a1,a2,a3,a4);
211 template<typename T,typename A1,typename A2,typename A3,typename A4>
212 inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4& a4)
214 return heap_new_impl<T,A1 const&,A2&,A3&,A4&>(a1,a2,a3,a4);
216 template<typename T,typename A1,typename A2,typename A3,typename A4>
217 inline T* heap_new(A1& a1,A2& a2,A3& a3,A4& a4)
219 return heap_new_impl<T,A1&,A2&,A3&,A4&>(a1,a2,a3,a4);
224 inline void heap_delete(T* data)
230 struct do_heap_delete
232 void operator()(T* data) const
234 detail::heap_delete(data);
240 #include <boost/config/abi_suffix.hpp>