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