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 2007 Anthony Williams
|
Chris@16
|
5 #ifndef THREAD_HEAP_ALLOC_HPP
|
Chris@16
|
6 #define THREAD_HEAP_ALLOC_HPP
|
Chris@16
|
7 #include <new>
|
Chris@16
|
8 #include <boost/thread/detail/config.hpp>
|
Chris@16
|
9 #include <boost/thread/win32/thread_primitives.hpp>
|
Chris@16
|
10 #include <stdexcept>
|
Chris@16
|
11 #include <boost/assert.hpp>
|
Chris@16
|
12 #include <boost/throw_exception.hpp>
|
Chris@101
|
13 #include <boost/core/no_exceptions_support.hpp>
|
Chris@16
|
14
|
Chris@16
|
15 #if defined( BOOST_USE_WINDOWS_H )
|
Chris@16
|
16 # include <windows.h>
|
Chris@16
|
17
|
Chris@16
|
18 namespace boost
|
Chris@16
|
19 {
|
Chris@16
|
20 namespace detail
|
Chris@16
|
21 {
|
Chris@16
|
22 namespace win32
|
Chris@16
|
23 {
|
Chris@16
|
24 using ::GetProcessHeap;
|
Chris@16
|
25 using ::HeapAlloc;
|
Chris@16
|
26 using ::HeapFree;
|
Chris@16
|
27 }
|
Chris@16
|
28 }
|
Chris@16
|
29 }
|
Chris@16
|
30
|
Chris@16
|
31 #else
|
Chris@16
|
32
|
Chris@16
|
33 # ifdef HeapAlloc
|
Chris@16
|
34 # undef HeapAlloc
|
Chris@16
|
35 # endif
|
Chris@16
|
36
|
Chris@16
|
37 namespace boost
|
Chris@16
|
38 {
|
Chris@16
|
39 namespace detail
|
Chris@16
|
40 {
|
Chris@16
|
41 namespace win32
|
Chris@16
|
42 {
|
Chris@16
|
43 extern "C"
|
Chris@16
|
44 {
|
Chris@16
|
45 __declspec(dllimport) handle __stdcall GetProcessHeap();
|
Chris@16
|
46 __declspec(dllimport) void* __stdcall HeapAlloc(handle,unsigned long,ulong_ptr);
|
Chris@16
|
47 __declspec(dllimport) int __stdcall HeapFree(handle,unsigned long,void*);
|
Chris@16
|
48 }
|
Chris@16
|
49 }
|
Chris@16
|
50 }
|
Chris@16
|
51 }
|
Chris@16
|
52
|
Chris@16
|
53 #endif
|
Chris@16
|
54
|
Chris@16
|
55 #include <boost/config/abi_prefix.hpp>
|
Chris@16
|
56
|
Chris@16
|
57 namespace boost
|
Chris@16
|
58 {
|
Chris@16
|
59 namespace detail
|
Chris@16
|
60 {
|
Chris@16
|
61 inline void* allocate_raw_heap_memory(unsigned size)
|
Chris@16
|
62 {
|
Chris@16
|
63 void* const heap_memory=detail::win32::HeapAlloc(detail::win32::GetProcessHeap(),0,size);
|
Chris@16
|
64 if(!heap_memory)
|
Chris@16
|
65 {
|
Chris@16
|
66 boost::throw_exception(std::bad_alloc());
|
Chris@16
|
67 }
|
Chris@16
|
68 return heap_memory;
|
Chris@16
|
69 }
|
Chris@16
|
70
|
Chris@16
|
71 inline void free_raw_heap_memory(void* heap_memory)
|
Chris@16
|
72 {
|
Chris@16
|
73 BOOST_VERIFY(detail::win32::HeapFree(detail::win32::GetProcessHeap(),0,heap_memory)!=0);
|
Chris@16
|
74 }
|
Chris@16
|
75
|
Chris@16
|
76 template<typename T>
|
Chris@16
|
77 inline T* heap_new()
|
Chris@16
|
78 {
|
Chris@16
|
79 void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
|
Chris@16
|
80 BOOST_TRY
|
Chris@16
|
81 {
|
Chris@16
|
82 T* const data=new (heap_memory) T();
|
Chris@16
|
83 return data;
|
Chris@16
|
84 }
|
Chris@16
|
85 BOOST_CATCH(...)
|
Chris@16
|
86 {
|
Chris@16
|
87 free_raw_heap_memory(heap_memory);
|
Chris@16
|
88 BOOST_RETHROW
|
Chris@16
|
89 }
|
Chris@16
|
90 BOOST_CATCH_END
|
Chris@16
|
91 }
|
Chris@16
|
92
|
Chris@16
|
93 #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
Chris@16
|
94 template<typename T,typename A1>
|
Chris@16
|
95 inline T* heap_new(A1&& a1)
|
Chris@16
|
96 {
|
Chris@16
|
97 void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
|
Chris@16
|
98 BOOST_TRY
|
Chris@16
|
99 {
|
Chris@16
|
100 T* const data=new (heap_memory) T(static_cast<A1&&>(a1));
|
Chris@16
|
101 return data;
|
Chris@16
|
102 }
|
Chris@16
|
103 BOOST_CATCH(...)
|
Chris@16
|
104 {
|
Chris@16
|
105 free_raw_heap_memory(heap_memory);
|
Chris@16
|
106 BOOST_RETHROW
|
Chris@16
|
107 }
|
Chris@16
|
108 BOOST_CATCH_END
|
Chris@16
|
109 }
|
Chris@16
|
110 template<typename T,typename A1,typename A2>
|
Chris@16
|
111 inline T* heap_new(A1&& a1,A2&& a2)
|
Chris@16
|
112 {
|
Chris@16
|
113 void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
|
Chris@16
|
114 BOOST_TRY
|
Chris@16
|
115 {
|
Chris@16
|
116 T* const data=new (heap_memory) T(static_cast<A1&&>(a1),static_cast<A2&&>(a2));
|
Chris@16
|
117 return data;
|
Chris@16
|
118 }
|
Chris@16
|
119 BOOST_CATCH(...)
|
Chris@16
|
120 {
|
Chris@16
|
121 free_raw_heap_memory(heap_memory);
|
Chris@16
|
122 BOOST_RETHROW
|
Chris@16
|
123 }
|
Chris@16
|
124 BOOST_CATCH_END
|
Chris@16
|
125 }
|
Chris@16
|
126 template<typename T,typename A1,typename A2,typename A3>
|
Chris@16
|
127 inline T* heap_new(A1&& a1,A2&& a2,A3&& a3)
|
Chris@16
|
128 {
|
Chris@16
|
129 void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
|
Chris@16
|
130 BOOST_TRY
|
Chris@16
|
131 {
|
Chris@16
|
132 T* const data=new (heap_memory) T(static_cast<A1&&>(a1),static_cast<A2&&>(a2),
|
Chris@16
|
133 static_cast<A3&&>(a3));
|
Chris@16
|
134 return data;
|
Chris@16
|
135 }
|
Chris@16
|
136 BOOST_CATCH(...)
|
Chris@16
|
137 {
|
Chris@16
|
138 free_raw_heap_memory(heap_memory);
|
Chris@16
|
139 BOOST_RETHROW
|
Chris@16
|
140 }
|
Chris@16
|
141 BOOST_CATCH_END
|
Chris@16
|
142 }
|
Chris@16
|
143 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
144 inline T* heap_new(A1&& a1,A2&& a2,A3&& a3,A4&& a4)
|
Chris@16
|
145 {
|
Chris@16
|
146 void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
|
Chris@16
|
147 BOOST_TRY
|
Chris@16
|
148 {
|
Chris@16
|
149 T* const data=new (heap_memory) T(static_cast<A1&&>(a1),static_cast<A2&&>(a2),
|
Chris@16
|
150 static_cast<A3&&>(a3),static_cast<A4&&>(a4));
|
Chris@16
|
151 return data;
|
Chris@16
|
152 }
|
Chris@16
|
153 BOOST_CATCH(...)
|
Chris@16
|
154 {
|
Chris@16
|
155 free_raw_heap_memory(heap_memory);
|
Chris@16
|
156 BOOST_RETHROW
|
Chris@16
|
157 }
|
Chris@16
|
158 BOOST_CATCH_END
|
Chris@16
|
159 }
|
Chris@16
|
160 #else
|
Chris@16
|
161 template<typename T,typename A1>
|
Chris@16
|
162 inline T* heap_new_impl(A1 a1)
|
Chris@16
|
163 {
|
Chris@16
|
164 void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
|
Chris@16
|
165 BOOST_TRY
|
Chris@16
|
166 {
|
Chris@16
|
167 T* const data=new (heap_memory) T(a1);
|
Chris@16
|
168 return data;
|
Chris@16
|
169 }
|
Chris@16
|
170 BOOST_CATCH(...)
|
Chris@16
|
171 {
|
Chris@16
|
172 free_raw_heap_memory(heap_memory);
|
Chris@16
|
173 BOOST_RETHROW
|
Chris@16
|
174 }
|
Chris@16
|
175 BOOST_CATCH_END
|
Chris@16
|
176 }
|
Chris@16
|
177
|
Chris@16
|
178 template<typename T,typename A1,typename A2>
|
Chris@16
|
179 inline T* heap_new_impl(A1 a1,A2 a2)
|
Chris@16
|
180 {
|
Chris@16
|
181 void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
|
Chris@16
|
182 BOOST_TRY
|
Chris@16
|
183 {
|
Chris@16
|
184 T* const data=new (heap_memory) T(a1,a2);
|
Chris@16
|
185 return data;
|
Chris@16
|
186 }
|
Chris@16
|
187 BOOST_CATCH(...)
|
Chris@16
|
188 {
|
Chris@16
|
189 free_raw_heap_memory(heap_memory);
|
Chris@16
|
190 BOOST_RETHROW
|
Chris@16
|
191 }
|
Chris@16
|
192 BOOST_CATCH_END
|
Chris@16
|
193 }
|
Chris@16
|
194
|
Chris@16
|
195 template<typename T,typename A1,typename A2,typename A3>
|
Chris@16
|
196 inline T* heap_new_impl(A1 a1,A2 a2,A3 a3)
|
Chris@16
|
197 {
|
Chris@16
|
198 void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
|
Chris@16
|
199 BOOST_TRY
|
Chris@16
|
200 {
|
Chris@16
|
201 T* const data=new (heap_memory) T(a1,a2,a3);
|
Chris@16
|
202 return data;
|
Chris@16
|
203 }
|
Chris@16
|
204 BOOST_CATCH(...)
|
Chris@16
|
205 {
|
Chris@16
|
206 free_raw_heap_memory(heap_memory);
|
Chris@16
|
207 BOOST_RETHROW
|
Chris@16
|
208 }
|
Chris@16
|
209 BOOST_CATCH_END
|
Chris@16
|
210 }
|
Chris@16
|
211
|
Chris@16
|
212 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
213 inline T* heap_new_impl(A1 a1,A2 a2,A3 a3,A4 a4)
|
Chris@16
|
214 {
|
Chris@16
|
215 void* const heap_memory=allocate_raw_heap_memory(sizeof(T));
|
Chris@16
|
216 BOOST_TRY
|
Chris@16
|
217 {
|
Chris@16
|
218 T* const data=new (heap_memory) T(a1,a2,a3,a4);
|
Chris@16
|
219 return data;
|
Chris@16
|
220 }
|
Chris@16
|
221 BOOST_CATCH(...)
|
Chris@16
|
222 {
|
Chris@16
|
223 free_raw_heap_memory(heap_memory);
|
Chris@16
|
224 BOOST_RETHROW
|
Chris@16
|
225 }
|
Chris@16
|
226 BOOST_CATCH_END
|
Chris@16
|
227 }
|
Chris@16
|
228
|
Chris@16
|
229
|
Chris@16
|
230 template<typename T,typename A1>
|
Chris@16
|
231 inline T* heap_new(A1 const& a1)
|
Chris@16
|
232 {
|
Chris@16
|
233 return heap_new_impl<T,A1 const&>(a1);
|
Chris@16
|
234 }
|
Chris@16
|
235 template<typename T,typename A1>
|
Chris@16
|
236 inline T* heap_new(A1& a1)
|
Chris@16
|
237 {
|
Chris@16
|
238 return heap_new_impl<T,A1&>(a1);
|
Chris@16
|
239 }
|
Chris@16
|
240
|
Chris@16
|
241 template<typename T,typename A1,typename A2>
|
Chris@16
|
242 inline T* heap_new(A1 const& a1,A2 const& a2)
|
Chris@16
|
243 {
|
Chris@16
|
244 return heap_new_impl<T,A1 const&,A2 const&>(a1,a2);
|
Chris@16
|
245 }
|
Chris@16
|
246 template<typename T,typename A1,typename A2>
|
Chris@16
|
247 inline T* heap_new(A1& a1,A2 const& a2)
|
Chris@16
|
248 {
|
Chris@16
|
249 return heap_new_impl<T,A1&,A2 const&>(a1,a2);
|
Chris@16
|
250 }
|
Chris@16
|
251 template<typename T,typename A1,typename A2>
|
Chris@16
|
252 inline T* heap_new(A1 const& a1,A2& a2)
|
Chris@16
|
253 {
|
Chris@16
|
254 return heap_new_impl<T,A1 const&,A2&>(a1,a2);
|
Chris@16
|
255 }
|
Chris@16
|
256 template<typename T,typename A1,typename A2>
|
Chris@16
|
257 inline T* heap_new(A1& a1,A2& a2)
|
Chris@16
|
258 {
|
Chris@16
|
259 return heap_new_impl<T,A1&,A2&>(a1,a2);
|
Chris@16
|
260 }
|
Chris@16
|
261
|
Chris@16
|
262 template<typename T,typename A1,typename A2,typename A3>
|
Chris@16
|
263 inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3)
|
Chris@16
|
264 {
|
Chris@16
|
265 return heap_new_impl<T,A1 const&,A2 const&,A3 const&>(a1,a2,a3);
|
Chris@16
|
266 }
|
Chris@16
|
267 template<typename T,typename A1,typename A2,typename A3>
|
Chris@16
|
268 inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3)
|
Chris@16
|
269 {
|
Chris@16
|
270 return heap_new_impl<T,A1&,A2 const&,A3 const&>(a1,a2,a3);
|
Chris@16
|
271 }
|
Chris@16
|
272 template<typename T,typename A1,typename A2,typename A3>
|
Chris@16
|
273 inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3)
|
Chris@16
|
274 {
|
Chris@16
|
275 return heap_new_impl<T,A1 const&,A2&,A3 const&>(a1,a2,a3);
|
Chris@16
|
276 }
|
Chris@16
|
277 template<typename T,typename A1,typename A2,typename A3>
|
Chris@16
|
278 inline T* heap_new(A1& a1,A2& a2,A3 const& a3)
|
Chris@16
|
279 {
|
Chris@16
|
280 return heap_new_impl<T,A1&,A2&,A3 const&>(a1,a2,a3);
|
Chris@16
|
281 }
|
Chris@16
|
282
|
Chris@16
|
283 template<typename T,typename A1,typename A2,typename A3>
|
Chris@16
|
284 inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3)
|
Chris@16
|
285 {
|
Chris@16
|
286 return heap_new_impl<T,A1 const&,A2 const&,A3&>(a1,a2,a3);
|
Chris@16
|
287 }
|
Chris@16
|
288 template<typename T,typename A1,typename A2,typename A3>
|
Chris@16
|
289 inline T* heap_new(A1& a1,A2 const& a2,A3& a3)
|
Chris@16
|
290 {
|
Chris@16
|
291 return heap_new_impl<T,A1&,A2 const&,A3&>(a1,a2,a3);
|
Chris@16
|
292 }
|
Chris@16
|
293 template<typename T,typename A1,typename A2,typename A3>
|
Chris@16
|
294 inline T* heap_new(A1 const& a1,A2& a2,A3& a3)
|
Chris@16
|
295 {
|
Chris@16
|
296 return heap_new_impl<T,A1 const&,A2&,A3&>(a1,a2,a3);
|
Chris@16
|
297 }
|
Chris@16
|
298 template<typename T,typename A1,typename A2,typename A3>
|
Chris@16
|
299 inline T* heap_new(A1& a1,A2& a2,A3& a3)
|
Chris@16
|
300 {
|
Chris@16
|
301 return heap_new_impl<T,A1&,A2&,A3&>(a1,a2,a3);
|
Chris@16
|
302 }
|
Chris@16
|
303
|
Chris@16
|
304 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
305 inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4 const& a4)
|
Chris@16
|
306 {
|
Chris@16
|
307 return heap_new_impl<T,A1 const&,A2 const&,A3 const&,A4 const&>(a1,a2,a3,a4);
|
Chris@16
|
308 }
|
Chris@16
|
309 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
310 inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4 const& a4)
|
Chris@16
|
311 {
|
Chris@16
|
312 return heap_new_impl<T,A1&,A2 const&,A3 const&,A4 const&>(a1,a2,a3,a4);
|
Chris@16
|
313 }
|
Chris@16
|
314 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
315 inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4 const& a4)
|
Chris@16
|
316 {
|
Chris@16
|
317 return heap_new_impl<T,A1 const&,A2&,A3 const&,A4 const&>(a1,a2,a3,a4);
|
Chris@16
|
318 }
|
Chris@16
|
319 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
320 inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4 const& a4)
|
Chris@16
|
321 {
|
Chris@16
|
322 return heap_new_impl<T,A1&,A2&,A3 const&,A4 const&>(a1,a2,a3,a4);
|
Chris@16
|
323 }
|
Chris@16
|
324
|
Chris@16
|
325 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
326 inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4 const& a4)
|
Chris@16
|
327 {
|
Chris@16
|
328 return heap_new_impl<T,A1 const&,A2 const&,A3&,A4 const&>(a1,a2,a3,a4);
|
Chris@16
|
329 }
|
Chris@16
|
330 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
331 inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4 const& a4)
|
Chris@16
|
332 {
|
Chris@16
|
333 return heap_new_impl<T,A1&,A2 const&,A3&,A4 const&>(a1,a2,a3,a4);
|
Chris@16
|
334 }
|
Chris@16
|
335 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
336 inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4 const& a4)
|
Chris@16
|
337 {
|
Chris@16
|
338 return heap_new_impl<T,A1 const&,A2&,A3&,A4 const&>(a1,a2,a3,a4);
|
Chris@16
|
339 }
|
Chris@16
|
340 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
341 inline T* heap_new(A1& a1,A2& a2,A3& a3,A4 const& a4)
|
Chris@16
|
342 {
|
Chris@16
|
343 return heap_new_impl<T,A1&,A2&,A3&,A4 const&>(a1,a2,a3,a4);
|
Chris@16
|
344 }
|
Chris@16
|
345 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
346 inline T* heap_new(A1 const& a1,A2 const& a2,A3 const& a3,A4& a4)
|
Chris@16
|
347 {
|
Chris@16
|
348 return heap_new_impl<T,A1 const&,A2 const&,A3 const&,A4&>(a1,a2,a3,a4);
|
Chris@16
|
349 }
|
Chris@16
|
350 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
351 inline T* heap_new(A1& a1,A2 const& a2,A3 const& a3,A4& a4)
|
Chris@16
|
352 {
|
Chris@16
|
353 return heap_new_impl<T,A1&,A2 const&,A3 const&,A4&>(a1,a2,a3,a4);
|
Chris@16
|
354 }
|
Chris@16
|
355 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
356 inline T* heap_new(A1 const& a1,A2& a2,A3 const& a3,A4& a4)
|
Chris@16
|
357 {
|
Chris@16
|
358 return heap_new_impl<T,A1 const&,A2&,A3 const&,A4&>(a1,a2,a3,a4);
|
Chris@16
|
359 }
|
Chris@16
|
360 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
361 inline T* heap_new(A1& a1,A2& a2,A3 const& a3,A4& a4)
|
Chris@16
|
362 {
|
Chris@16
|
363 return heap_new_impl<T,A1&,A2&,A3 const&,A4&>(a1,a2,a3,a4);
|
Chris@16
|
364 }
|
Chris@16
|
365
|
Chris@16
|
366 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
367 inline T* heap_new(A1 const& a1,A2 const& a2,A3& a3,A4& a4)
|
Chris@16
|
368 {
|
Chris@16
|
369 return heap_new_impl<T,A1 const&,A2 const&,A3&,A4&>(a1,a2,a3,a4);
|
Chris@16
|
370 }
|
Chris@16
|
371 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
372 inline T* heap_new(A1& a1,A2 const& a2,A3& a3,A4& a4)
|
Chris@16
|
373 {
|
Chris@16
|
374 return heap_new_impl<T,A1&,A2 const&,A3&,A4&>(a1,a2,a3,a4);
|
Chris@16
|
375 }
|
Chris@16
|
376 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
377 inline T* heap_new(A1 const& a1,A2& a2,A3& a3,A4& a4)
|
Chris@16
|
378 {
|
Chris@16
|
379 return heap_new_impl<T,A1 const&,A2&,A3&,A4&>(a1,a2,a3,a4);
|
Chris@16
|
380 }
|
Chris@16
|
381 template<typename T,typename A1,typename A2,typename A3,typename A4>
|
Chris@16
|
382 inline T* heap_new(A1& a1,A2& a2,A3& a3,A4& a4)
|
Chris@16
|
383 {
|
Chris@16
|
384 return heap_new_impl<T,A1&,A2&,A3&,A4&>(a1,a2,a3,a4);
|
Chris@16
|
385 }
|
Chris@16
|
386
|
Chris@16
|
387 #endif
|
Chris@16
|
388 template<typename T>
|
Chris@16
|
389 inline void heap_delete(T* data)
|
Chris@16
|
390 {
|
Chris@16
|
391 data->~T();
|
Chris@16
|
392 free_raw_heap_memory(data);
|
Chris@16
|
393 }
|
Chris@16
|
394
|
Chris@16
|
395 template<typename T>
|
Chris@16
|
396 struct do_heap_delete
|
Chris@16
|
397 {
|
Chris@16
|
398 void operator()(T* data) const
|
Chris@16
|
399 {
|
Chris@16
|
400 detail::heap_delete(data);
|
Chris@16
|
401 }
|
Chris@16
|
402 };
|
Chris@16
|
403 }
|
Chris@16
|
404 }
|
Chris@16
|
405
|
Chris@16
|
406 #include <boost/config/abi_suffix.hpp>
|
Chris@16
|
407
|
Chris@16
|
408
|
Chris@16
|
409 #endif
|