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